note / 2026-08-09
네트워크 접속이 이루어지는 방법(상세)
안녕하세요 장정재 입니다.
이번에는 네트워크 접속이 이루어지는 방법에 대해 추가로 상세하게 설명을 해보려고 합니다.
우선 기본적인 네트워크의 프로세스는 애플리케이션이 System call로 Kernel에게 네트워크 작업을 요청하고, Kernel 내부에 Socket이라는 통신을 관리하는 객체가 있으며, kernel이 데이터를 Packet 형태로 만들어 네트워크로 보내는게 가장 기본적인 네트워크 동작 방식 입니다.
User가 Windows를 통해 nginx를 실행해서 서버를 만들었다면, 이때 nginx는 User Space, 일반 프로그램 영역에서 시작 됩니다. 중요한 것은 일반 프로그램인 nginx는 랜카드를 마음대로 조종하지 못합니다.
nginx가 직접적으로 조종을 하지 못하기 때문에, 이것을 운영체제에 요청을 해야합니다. 그때 사용하는게 System call 입니다.
Nginx -> System call -> Kernel 이 순서대로 요청을 하게 됩니다.
굳이 이런과정을 거치는 이유는 운영체제가 CPU, 메모리, 디스크, 랜카드 같은 중요한 자원을 보호해야하기 때문입니다.
일반 프로그램이 랜카드에 직접 전달을 할 수 있게 된다면 프로그램끼리 충돌하거나 악성 프로그램으로 인해 망가질 수 있기 때문입니다.
그래서 User Program -> System call -> Kernel -> Hardware 이라는 경계를 둡니다.
Nginx가 Kernel에게 소켓을 만들어달라고 요청을 했다라고 가정했을 때 Kernel은 내부에 Socket을 만듭니다.
Socket은 네트워크 연결 하나를 운영체제가 관리하기 위한 통신 창구 라고 보시면 됩니다.
Nginx가 bind(80)을 요청하면 Kernel은 이 Socket에 (Protocol: TCP, Local IP: 0.0.0.0, Locale Port: 80, State: Listen)이라는 정보를 만들어 놓습니다.
그렇게되면 구조가 Nginx -> socket handle -> windows kernel{Socket(TCP, Port 80, LISTEN)} 흔히 Nginx를 통해 80번 포트를 열었다 라고 하지만 실제로는 Nginx가 System Call을 통해 Kernel에게 Socket을 생성하고 그 Socket을 TCP 80번 포트에 bind했다. 라고 합니다.
Kernel은 중간관리자 역할을 합니다. 네트워크에선 다음의 역할을 담당합니다. TCP 처리, IP 처리, Socket 관리, Port 관리, 라우팅 테이블, 방화벽, NIC 제어, Packet 송수신
이제 사용자가 Nginx를 통해 오픈한 서버에 접속을 하기 위해 브라우저에서 공인 IP:포트를 입력하였을 때, 브라우저도 Kernel에 우선 요청을 진행합니다.
Chrome -> "너의 공인IP:포트로 TCP 연결 만들어줘" -> System call -> 사용자 PC Kernel
사용자의 PC에선 Socket을 생성합니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ Socket
Source 192.168.0.50:13245 -> 사용자의 포트는 클라이언트에서 임시로 사용하는 포트입니다.
Destination 공인IP:포트
Protocol TCP ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Kernel이 TCP 연결을 만들기 위해 실제 네트워크로 데이터를 내보내야 하는데, 그때 Packet이라는 형태가 등장합니다.
예를 들어 TCP 연결을 시작하려면 SYN을 보내야 하고, Kernel이 데이터를 계층별로 포장한다.
Application Data ↓ TCP Segment ↓ IP Packet ↓ Ethernet Frame
계층마다 이름은 다르지만 일반적으로 통틀어서 패킷 이라고 많이 부릅니다.
내부적으로 이런 정보가 담깁니다. Ethernet ───────────────── Source MAC Destination MAC IP ───────────────── Source IP Destination IP TCP ───────────────── Source Port : 53124 Destination Port : 80 Flags : SYN
개념들을 발생 위치, 역할로 묶어보면 아래와 같습니다. Kernel 운영체제 내부 하드웨어, TCP/IP, 포트, Socket 등을 관리
Socket 주로 Kernel 내부에서 관리되는 통신 객체 애플리케이션과 TCP 연결을 연결
System Call User Space ↔ Kernel 경계 프로그램이 Kernel 기능을 요청하는 방법
Packet Kernel의 네트워크 스택에서 생성/처리되어 NIC와 네트워크를 이동 실제 데이터를 네트워크로 운반
그리고 해당 4개의 개념을 한번에 묶어서 설명하면 브라우저와 Nginx 같은 User Space 프로그램이 System Call을 사용해 Kernel에 요청하고, Kernel이 Socket으로 연결 상태를 관리하면서 데이터를 Packet으로 만들어 네트워크를 통해 주고받는다 라고 설명할 수 있습니다.