SW 전공

SW 전공 이론 학습

이론 목록으로 돌아가기

TCP와 UDP의 전송 원리

포트와 소켓, TCP 연결·신뢰성·흐름·혼잡제어와 UDP의 특성을 비교한다.

예상 읽기 6

1. 포트와 소켓

IP 주소가 호스트를 식별한다면 포트 번호는 호스트 안의 응용 프로세스를 구분한다. 하나의 TCP 연결은 일반적으로 다음 4개 값으로 식별할 수 있다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
출발 IP, 출발 Port, 목적 IP, 목적 Port

소켓은 응용 프로그램이 전송계층 통신을 사용하기 위한 인터페이스 또는 통신 끝점을 뜻한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
Browser 192.0.2.10:51000
          │ TCP connection
          ▼
Web Server 198.51.100.20:443

2. TCP의 특징

TCP는 연결 지향적이며 신뢰성 있는 바이트 스트림을 제공한다.

  • 연결 설정과 종료 절차가 있다.
  • 순서번호와 확인응답으로 순서를 보장한다.
  • 손실을 감지해 재전송한다.
  • 체크섬으로 전송 오류를 검출한다.
  • 수신 윈도를 이용해 흐름을 제어한다.
  • 혼잡 윈도와 알고리즘으로 네트워크 혼잡을 제어한다.
  • 바이트 스트림이므로 송신 측의 메시지 경계가 그대로 보존된다고 가정하면 안 된다.

3. 3-way handshake

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
Client                                      Server
  │── SYN, Seq=x ───────────────────────────►│
  │◄─ SYN+ACK, Seq=y, Ack=x+1 ──────────────│
  │── ACK, Ack=y+1 ─────────────────────────►│
  │              연결 설정 완료              │
  • 첫 SYN은 클라이언트의 초기 순서번호를 알린다.
  • 서버는 자신의 SYN과 클라이언트 SYN에 대한 ACK를 함께 보낸다.
  • 마지막 ACK로 양쪽의 송수신 가능성을 확인한다.

연결 종료는 보통 각 방향을 독립적으로 닫기 때문에 FIN과 ACK가 오가는 4단계 형태로 설명한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
A ── FIN ──► B
A ◄─ ACK ─── B
A ◄─ FIN ─── B
A ── ACK ──► B

실제로 FIN과 ACK가 한 세그먼트에 결합되는 등 패킷 수는 달라질 수 있다.

4. 순서번호, ACK와 재전송

TCP 순서번호는 세그먼트 번호가 아니라 바이트 위치를 나타낸다. ACK 번호는 다음에 받고 싶은 바이트 번호를 뜻하는 누적 확인응답이다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
Sender                                  Receiver
  │── Seq=1000, 500 bytes ─────────────►│
  │◄─ Ack=1500 ─────────────────────────│

손실은 재전송 타이머 만료나 중복 ACK 등으로 감지할 수 있다. 수신 측은 순서가 바뀐 세그먼트를 버퍼링할 수 있으며 최종적으로 응용에는 순서대로 전달한다.

5. 흐름제어와 슬라이딩 윈도

흐름제어는 빠른 송신자가 느린 수신자의 버퍼를 넘치게 하지 않도록 한다. 수신자는 자신이 더 받을 수 있는 양을 수신 윈도에 광고한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
송신 가능 범위
[이미 ACK][전송 후 ACK 대기][지금 전송 가능][아직 전송 불가]
                   ◄──── window ────►

ACK가 도착하면 윈도가 앞으로 이동해 다음 데이터를 보낼 수 있다. 윈도 크기가 0이면 송신자는 일반 데이터를 멈추고 수신 버퍼가 비기를 기다린다.

6. 혼잡제어

흐름제어가 수신자 보호라면 혼잡제어는 네트워크 내부의 과부하를 줄이는 기능이다.

  • Slow Start: 혼잡 윈도를 작은 값에서 빠르게 증가시킨다.
  • Congestion Avoidance: 임계값 이후 더 완만하게 증가시킨다.
  • Fast Retransmit: 여러 중복 ACK를 손실 신호로 보고 타이머 전에 재전송한다.
  • Fast Recovery: 손실 후 전송률을 조정하면서 완전히 처음부터 시작하지 않도록 한다.

수신 윈도는 흐름제어에, 혼잡 윈도는 네트워크 혼잡제어에 사용된다.

7. UDP의 특징

UDP는 연결을 설정하지 않고 데이터그램 단위로 전송한다.

  • 연결 설정 지연이 없다.
  • 헤더가 단순하다.
  • 전달·순서·중복 제거를 보장하지 않는다.
  • 메시지 경계를 보존한다.
  • 오류 검출용 체크섬을 사용하지만 손실 시 자동 재전송하지 않는다.
  • 필요한 신뢰성·재전송은 응용 계층에서 구현할 수 있다.

DNS 질의, 실시간 음성·영상, 일부 게임, DHCP 등에 사용될 수 있다. HTTP/3의 QUIC도 UDP 위에서 자체 신뢰성과 암호화를 구현한다.

8. TCP와 UDP 비교

항목TCPUDP
연결연결 지향비연결
데이터 형태바이트 스트림데이터그램
신뢰성·순서제공기본 제공하지 않음
흐름·혼잡제어제공응용에서 필요 시 구현
헤더·처리 비용상대적으로 큼상대적으로 작음
대표 용도웹, 파일전송, 원격접속, 메일DNS, 실시간 미디어, DHCP 등

UDP가 항상 TCP보다 빠르다고 단정하면 안 된다. 응용이 신뢰성을 직접 구현하거나 네트워크 조건이 나쁘면 전체 성능은 달라질 수 있다.

9. 순서번호와 ACK 추적

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
Client ISN=100                Server ISN=500
SYN seq=100        ───────►
                   ◄───────  SYN-ACK seq=500 ack=101
ACK seq=101 ack=501 ───────►

SYN과 FIN은 데이터가 없어도 순서번호 공간 1을 소비한다. seq=1000, 데이터 500B를 연속 수신하면 ACK는 1500이다.

순서 밖 세그먼트가 먼저 와도 누적 ACK는 빈 구간의 시작, 즉 다음 기대 바이트를 반복한다.

10. 윈도·MSS·재전송

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
유효 송신 윈도 = min(rwnd,cwnd)
rwnd=64KB, cwnd=32KB → 32KB
Ethernet MTU1500 - IPv4 20 - TCP 20 → MSS1460

같은 ACK 번호가 반복되는 것은 앞 구간 손실의 단서다. 전통적으로 중복 ACK 3개는 fast retransmit을 유발하고, RTO 만료는 더 강한 혼잡 신호로 취급된다.

11. 바이트 스트림과 QUIC

TCP에서 두 번의 write(100B)가 수신자에게 정확히 두 번의 100B read로 대응한다는 보장은 없다. 응용이 길이 필드나 구분자로 메시지를 프레이밍해야 한다.

TCP는 앞선 바이트 손실이 뒤 데이터 전달을 막는 HOL이 있다. QUIC은 UDP 위에 스트림별 순서·신뢰성, 연결 수준 혼잡제어, TLS를 구현해 한 스트림 손실이 다른 스트림을 직접 막는 현상을 줄인다.

12. 순서번호 순환

TCP 순서번호는 32비트 모듈로 계산한다. 2^32-100부터 200B를 보내면 다음 ACK는 100이다. 큰 윈도에서는 오래된 세그먼트와 새 세그먼트를 구별할 수 있도록 시간·윈도 조건이 필요하다.

확인 문제

  1. ISN 100과 500의 마지막 handshake ACK는?
  2. seq1000으로 500B를 받으면 ACK는?
  3. 유효 송신 윈도는 어떻게 정하는가?
  4. TCP write 경계가 read에 보존되는가?
  5. QUIC의 독립 스트림 이점은?