벤티의 개발 로그

[Network #6] TCP vs UDP 본문

카테고리 없음

[Network #6] TCP vs UDP

sonsh75 2025. 1. 18. 14:35

이번 포스트는 네트워크에서 가장 기본적인 프로토콜인 TCP와 UDP에 대해 정리해보았다!

 

TCP와 UDP, 어떻게 다를까?

 

TCP

  • 패킷 사이의 순서를 보장
  • 연결지향 프로토콜(가상 회선)을 사용해서 연결
  • 경로를 따라 대역폭과 기타 자원을 예약할 수 있음
  • 연결하고 해제하는데 비용 발생
  • 신뢰성을 구축해서 수신 여부를 확인
  • 오류 검사: 시간 초과, Checksum

 

UDP

  • 패킷 사이의 순서를 보장하지 않음
  • 비연결지향 프로토콜(데이터그램)을 사용
  • 경로를 따라 대역폭과 기타 자원을 예약할 수 없음
  • 연결하고 해제하는 과정이 필요하지 않음
  • 수신 여부를 확인하지 않고 단순히 데이터만 제공
  • 오류 검사: Checksum만!

 

UDP: 장점과 단점

장점

  • 비연결형 서비스이므로 TCP에 비해 속도가 빠르며 네트워크 부하가 적다.
  • 1:1, 1:N, N:N 통신이 가능하다.

단점

  • 데이터의 신뢰성이 없다.

 

UDP: Checksum

  • UDP 세그먼트의 오류 검출을 위해 사용된다.
  • 체크섬은 송신할 세그먼트를 16비트 단위로 나누고, 모두 더한 다음 1의 보수를 취해서 만들어진다.
  • 이제 이 체크섬을 세그먼트와 같이 전송한다.
  • 수신자는 수신된 세그먼트에 대해 동일한 방식으로 체크섬을 만들고, 헤더의 체크섬과 일치 하는지 비교함으로써, 수신된 세그먼트의 오류를 검출할 수 있다.

 

TCP: 연결 과정과 종료 과정

TCP는 아래 과정들이 있으므로 UDP에 비해 신뢰성이 있다고 할 수 있다.

전체 과정

 

  • 왼쪽이 클라이언트고, 오른쪽이 서버이다!
  • SYN(Synchronization): 연결 요청 플래그
  • ACK(Acknowledgement): 응답 플래그
  • ISN(Initial Sequence Number): 초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호

 

연결 (3-way Handshaking)

 

  1. SYN 단계: 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보냄
  2. SYN + ACK 단계: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보냄
  3. ACK 단계: 클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보냄

 

종료 (4-way Handshaking)

  1. 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보내고, 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다림
  2. 서버는 클라이언트로 ACK라는 승인 세그먼트를 보내고 CLOSE_WAIT 상태에 들어감 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어감
  3. 서버는 LAST_ACK상태가 되며 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보냄
  4. 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 되며 이후 클라이언트는 어느 정도의 시간(TIME_WAIT으로 설정된 시간)을 대기한 후 연결이 닫힘

 

빠른 재전송 (Fast Retransmit)

  • 타임아웃의 주기가 때때로 긴 타임아웃에 의한 재전송의 문제점을 보완하기 위한 방법으로, 타임아웃에 상관없이 재전송을 하는 방법이다.
  • 수신자는 순서가 올바르지 않은 세그먼트를 수신하면, 마지막으로 올바르게 수신된 세그먼트에 대한 ACK를 송신 측에 전송한다.
  • 송신자는 중복 ACK 수신을 통해 타임아웃이 일어나기 전에 송신된 패킷이 손실되었음을 인지할 수 있어, 재전송을 할 수 있다.

 

신뢰적 데이터 전송의 원리

전송 후 대기 프로토콜

  • 패킷을 전송하고 그 패킷에 대한 수신 확인 응답을 받고 나서, 다음 패킷을 전송하는 방식이다.
  • 이러한 방식은 네트워크 링크 이용률이 낮아 속도가 느리다는 단점이 있습니다.

파이프라인 프로토콜

  • 전송한 패킷에 대한 수신 확인 응답을 받지 않고도, 여러 개의 패킷을 연속으로 전송하여 링크 이용률과 전송 속도를 높이는 프로토콜이다.