Post

TCP vs UDP

TCP (Transmission Control Protocol)

  • 연결 지향적: TCP는 데이터를 전송하기 전에 송신자와 수신자 간에 연결을 설정한다. 이를 “3-way handshake”라고 부르며, 이를 통해 연결이 성립된 후에만 데이터 전송이 이루어진다.
  • 신뢰성: TCP는 데이터 전송의 신뢰성을 보장한다. 전송된 데이터가 올바르게 도착했는지 확인하고, 손실된 데이터가 있을 경우 이를 재전송한다. 이러한 기능은 오류 검출, 패킷 재전송, 패킷 순서 제어 등을 포함한다.
  • 흐름 제어 및 혼잡 제어: TCP는 네트워크의 상태에 따라 데이터 전송 속도를 조절하는 메커니즘을 제공한다. 이는 네트워크 혼잡을 줄이고, 수신자가 처리할 수 있는 속도에 맞춰 데이터를 보내도록 한다.
  • 패킷 순서 보장: TCP는 데이터를 패킷으로 쪼개어 전송한 후, 수신자가 이를 원래의 순서대로 재조립할 수 있도록 한다.
  • 사용 사례: 웹 브라우징(HTTP, HTTPS),이메일(SMTP, IMAP, POP3),파일 전송(FTP)

TCP Connection (3-way handshake)

  1. 먼저 open()을 실행한 클라이언트가 SYN을 보내고 SYN_SENT 상태로 대기한다.
  2. 서버는 SYN_RCVD 상태로 바꾸고 SYN과 응답 ACK를 보낸다.
  3. SYN과 응답 ACK을 받은 클라이언트는 ESTABLISHED 상태로 변경하고 서버에게 응답 ACK를 보낸다.
  4. 응답 ACK를 받은 서버는 ESTABLISHED 상태로 변경한다.

TCP Disconnection (4-way handshake)

  1. 먼저 close()를 실행한 클라이언트가 FIN을 보내고 FIN_WAIT1 상태로 대기한다.
  2. 서버는 CLOSE_WAIT으로 바꾸고 응답 ACK를 전달한다. 동시에 해당 포트에 연결되어 있는 어플리케이션에게 close()를 요청한다.
  3. ACK를 받은 클라이언트는 상태를 FIN_WAIT2로 변경한다.
  4. close() 요청을 받은 서버 어플리케이션은 종료 프로세스를 진행하고 FIN을 클라이언트에 보내 LAST_ACK 상태로 바꾼다.
  5. FIN을 받은 클라이언트는 ACK를 서버에 다시 전송하고 TIME_WAIT으로 상태를 바꾼다. TIME_WAIT에서 일정 시간이 지나면 CLOSED된다. ACK를 받은 서버도 포트를 CLOSED로 닫는다.

Desktop

UDP (User Datagram Protocol)

  • 비연결 지향적: UDP는 데이터 전송 전에 연결을 설정하지 않으며, 데이터를 보내는 즉시 전송된다. 이를 통해 TCP보다 더 빠른 전송 속도를 제공한다.
  • 신뢰성 부족: UDP는 데이터 전송의 신뢰성을 보장하지 않는다. 데이터가 손실되거나 순서가 뒤바뀌더라도 이를 복구하거나 재전송하지 않는다. 따라서 UDP는 오류에 덜 민감한 애플리케이션에 적합하다.
  • 낮은 오버헤드: UDP는 TCP보다 헤더 정보가 간단하므로, 오버헤드가 적고 더 빠른 데이터 전송이 가능하다.
  • 순서 보장 없음: UDP는 데이터를 보내는 순서와 관계없이 수신자가 데이터를 받는다. 순서를 보장하는 기능이 없으므로, 애플리케이션이 이를 별도로 처리해야 한다.
  • 사용 사례: 실시간 스트리밍(비디오, 오디오), 온라인 게임, DNS(Domain Name System) 쿼리, VoIP(Voice over IP)

참고 자료

https://velog.io/@hidaehyunlee/TCP-%EC%99%80-UDP-%EC%9D%98-%EC%B0%A8%EC%9D%B4

This post is licensed under CC BY 4.0 by the author.