네트워크 기초

전송 계층 역할

meellon 2026. 6. 26. 05:10

학습 목표

전송 계층호스트 간(IP) 이 아니라 프로세스 간 통신을 담당함을 설명할 수 있다.

포트 번호소켓(IP + port) 주소로 앱을 구분하는 방식을 설명할 수 있다.

멀티플렉싱·역다중화(demux) 로 한 호스트의 여러 앱이 동시에 네트워크를 쓰는 원리를 설명할 수 있다.

ss, lsof 출력에서 포트·LISTEN·프로세스 관계를 읽을 수 있다.

문제 상황

  • ping 93.184.216.34는 되는데 curl https://93.184.216.34Connection refused
    • IP까지는 갔지만 어느 프로그램이 받을지 정해지지 않았을 수 있다
  • 한 서버에서 nginx(443)·DNS(53)·SSH(22) 가 동시에 떠 있다
    • 패킷은 같은 IP로 오는데 어떤 프로세스로 넘기는지 모른다
  • 클라이언트는 매 연결마다 49152 같은 큰 포트를 쓴다
    • well-knownephemeral 차이가 불명확하다
  • DNS·HTTP는 애플리케이션 계층인데 UDP/TCP 이야기가 나온다
    • 앱과 전송 계층 경계, 소켓 API 위치가 헷갈린다

DNS로 IP를 얻었다. 이제 같은 IP를 쓰는 여러 프로세스누구와 대화할지 — 전송 계층이 정한다.

1. 호스트 간 vs 프로세스 간

네트워크 계층(IP)호스트(머신) 까지 패킷을 전달한다. 한 서버 안에는 웹·DB·에이전트여러 프로세스가 동시에 떠 있다.

계층 전달 단위 식별자
네트워크 호스트 간 IP 주소
전송 프로세스 간 IP + 포트 (소켓)

  • 소켓(socket)(source IP, source port, dest IP, dest port, protocol)한 통신 종단 식별
  • 애플리케이션은 socket()·bind()·connect()전송 서비스를 요청 — OS 커널이 실제 UDP/TCP 처리
  • IP만 맞고 포트에 LISTEN 중인 프로세스가 없으면 ICMP port unreachable 또는 Connection refused

2. 포트 번호

포트는 16비트(0~65535). 같은 IP 위에서 서비스·프로세스를 구분한다.

범위 이름 용도
0~1023 Well-known HTTP 80, HTTPS 443, SSH 22, DNS 53 등 — 관례·IANA
1024~49151 Registered 특정 앱 등록 (덜 고정적)
49152~65535 Dynamic / ephemeral 클라이언트 임시 출발 포트 — OS가 할당
# well-known 포트에서 LISTEN 중인 프로세스
ss -tlnp | head -20
# Local Address:Port  0.0.0.0:443  users:(("nginx",...))
  • 클라이언트는 보통 ephemeral 포트 → 192.168.1.10:5234193.184.216.34:443
  • 서버는 well-known(또는 고정) 포트에서 listen — 여러 클라이언트 연결 구분은 (클라 IP, 클라 port) 쌍
  • 포트 충돌 — 같은 IP:port에 두 프로세스가 bind 불가 (SO_REUSEADDR 등 옵션은 별도)

3. 멀티플렉싱과 역다중화

한 호스트는 동시에 DNS 질의, HTTPS, gRPC 등 여러 앱 트래픽을 주고받는다. 전송 계층은 헤더의 포트·프로토콜어느 소켓에 넘길지 결정한다.

송신( multiplexing )

  • 여러 소켓(앱) → 전송 계층 → IP 하나로 나가는 패킷들에 각각 포트 부여

수신( demultiplexing )

  • IP에서 올라온 세그먼트/데이터그램목적지 포트(·프로토콜·연결 4-tuple)로 해당 소켓에 전달
프로토콜 demux 키 (개념)
UDP dest IP, dest port (연결 없음)
TCP dest IP, dest port, src IP, src port — 연결별 큐
  • 잘못된 demux → 다른 앱에 데이터 유입(버그)·또는 드롭
  • NAT는 (내부 IP, port) ↔ (공인 IP, port) 매핑 테이블로 demux 확장 — 이후 편

4. 전송 계층이 제공하는 서비스 (개요)

애플리케이션은 로직에 맞는 전송 서비스를 고른다. 구현체는 주로 TCPUDP다.

  TCP UDP
연결 연결 지향 (handshake) 비연결
신뢰성 순서·재전송·오류 검출 Best-effort
오버헤드 헤더·상태·혼잡 제어 가벼움
흔한 사용 HTTP/HTTPS, SSH, DB DNS, VoIP, QUIC 기반
  • 데이터 무손실·순서가 중요하면 TCP — 다음 편들에서 handshake·신뢰성 상세
  • 지연·단순 질의면 UDP — DNS는 짧은 질의·응답
  • TLS는 TCP 위(또는 QUIC) — 전송암호화는 별 층

5. OS·소켓과의 연계

전송 계층은 커널 안에서 동작한다. 애플리케이션은 소켓 API로만 접근한다.

Application          Transport (kernel)        Network
─────────────        ──────────────────        ────────
socket() bind()  →   port · socket table  →   IP routing
send() recv()    →   TCP/UDP segments     →   datagrams
listen() accept()→  connection queue
# 프로세스가 연 연결 (TCP)
ss -tnp | grep ESTAB | head -5

# UDP 53을 연 프로세스
ss -ulnp | grep ':53'
  • LISTEN — 연결 요청 대기 (TCP 서버)
  • ESTABLISHED — TCP 연결 성립 후
  • OS 시리즈의 시스템 콜·파일 디스크립터 관점과 연결 — 소켓도 fd

6. 정리

  • IP는 호스트까지, 전송 계층은 프로세스(포트) 까지 전달한다
  • 소켓 = IP + port (+ protocol) — 멀티플렉싱·demux의 기준
  • Well-known vs ephemeral 포트 — 서비스 고정 vs 클라이언트 임시
  • TCP·UDP는 서비스 특성이 다른 전송 프로토콜 — 다음 편부터 각각 심화

다음에 다룰 것

  • UDP
  • 비연결, 헤더 구조, DNS·QUIC 등 사용 사례

해당 내용은 Computer Networking: A Top-Down Approach, 8/E (James Kurose, Keith Ross) 의 내용을 기반으로 합니다.

'네트워크 기초' 카테고리의 다른 글

TCP 기초  (0) 2026.06.28
UDP  (0) 2026.06.27
DNS  (0) 2026.06.25
HTTPS와 TLS  (0) 2026.06.24
HTTP 심화  (0) 2026.06.23