TCP/UDP란?

TCP((Transmission Control Protocol)

web_process

  • 인터넷 상에서 데이터를 패킷 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
  • TCP와 IP를 함께 사용하는데, TCP는 발신지에서 수신지로 패킷을 전송하기 위한 논리적 경로를 배정한다.
  • 연결형 서비스로 가상 회선 방식을 제공한다.
    • 연결 시 3-way Handshaking 사용, 해체 시 4-way Handshaking 사용
  • 흐름제어(송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막는다)
  • 혼잡제어(네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것)
  • 높은 신뢰성을 보장하지만 UDP보다 느린 속도를 가진다. ( 신뢰성 > 속도 )

< TCP 작동 방식 >

  • TCP 헤더에 6 비트의 컨트롤 플래그(Control Flag)를 활용한다. 상대에게 전하고 싶은 항목은 ‘1’로 만든다.

< 3-Way HandShake >

  • TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정(Connection Establish) 하는 과정
  • TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.

3-way Handshake

  1. A -> B: SYN
    • 접속 요청 프로세스 A가 연결 요청 메시지 전송 (SYN)
    • 송신자가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다.
    • PORT 상태 - B: LISTEN, A: CLOSED
  2. B -> A: SYN + ACK
    • 접속 요청을 받은 프로세스 B가 요청을 수락했으며, 접속 요청 프로세스인 A도 포트를 열어 달라는 메시지 전송 (SYN + ACK)
    • 수신자는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, SYN과 ACK 플래그 비트를 1로 설정한 세그먼트를 전송한다.
    • PORT 상태 - B: SYN_RCV, A: CLOSED
  3. A -> B: ACK
    • PORT 상태 - B: SYN_RCV, A: ESTABLISHED
    • 마지막으로 접속 요청 프로세스 A가 수락 확인을 보내 연결을 맺음 (ACK)
    • 이때, 전송할 데이터가 있으면 이 단계에서 데이터를 전송할 수 있다.
    • PORT 상태 - B: ESTABLISHED, A: ESTABLISHED

< 4-Way HandShake >

  • TCP의 연결을 해제(Connection Termination) 하는 과정 3-way Handshake
  1. A -> B: FIN
    • 프로세스 A가 연결을 종료하겠다는 FIN 플래그를 전송
    • 프로세스 B가 FIN 플래그로 응답하기 전까지 연결을 계속 유지
  2. B -> A: ACK
    • 프로세스 B는 일단 확인 메시지를 보내고 자신의 통신이 끝날 때까지 기다린다. (이 상태가 TIME_WAIT 상태)
    • 수신자는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, ACK 플래그 비트를 1로 설정한 세그먼트를 전송한다.
    • 자신이 전송할 데이터가 남아있다면 이어서 계속 전송한다.
  3. B -> A: FIN
    • 프로세스 B가 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 프로세스 A에게 FIN 플래그를 전송
  4. A -> B: ACK
    • 프로세스 A는 확인했다는 메시지를 전송

< TCP Heaer >

TCP_Header


UDP(User Datagram Protocol)

web_process

  • 데이터를 데이터그램 단위로 처리하는 프로토콜, 데이터그램이란 독립적인 관계를 지니는 패킷
  • 비연결형 프로토콜로 연결을 위한 논리적인 경로가 없다. 즉, 각각 다른 경로로 패킷을 전송하여 빠른 속도를 보여준다.
  • UDP Header의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
  • 흐름제어를 못하기 때문에 패킷이 재대로 전송 되었는지, 오류가 없는지 확인할 수 없다.
  • 빠른 속도를 보여주지만 신뢰성이 없다. 스트리밍같은 서비스에 주로 사용된다.

Reference