TCP

TCP(Transport Connection Protocol)란 End Point간 신뢰성 있는 데이터를 순차적으로 전달하기 위한 연결성 프로토콜이다. TCP는 3 way hand-shaking을 통해 세션 연결 후, 데이터를 주고받을 수 있다.

TCP 서버의 특징은
1) 서버소켓은 연결만 담당한다.
2) 서버와 클라이언트는 1대 1로 연결된다.
3) 스트림 전송으로 전송 데이터 크기가 무제한이다.
4) 패킷에 대한 응답이 필요하므로 성능이 낮다.
5) 스트리밍 서비스에 불리하다.(손실된 경우 재전송 요청을 함)

TCP 연결과 해제

TCP는 연결시 3 way hand-shake를 사용하고, 해제시에눈 4-way hand-shake를 사용한다.
연결 과정은 아래와 같다.

  1. 클라이언트가 서버에게 연결 요청 메시지를 전송(SYN 패킷).
  2. 서버는 클라이언트의 메시지를 받아 연결을 수락한다는 SYN + ACK를 전송.
  3. 클라이언트가 다시 ACK를 보내고 연결을 맺는다.

이러한 과정과 혼잡제어, 흐름제어를 통해 신뢰성을 보장한다.

해제 과정은 아래와 같다.

  1. 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송한다.
  2. 서버는 ACK를 보내고, 자신의 데이터를 모두 보낼 때까지 기다린다.
  3. 서버가 통신이 끝나면, 연결이 종료되었다는 FIN 플래그를 전송한다.
  4. 클라이언트는 확인했다는 ACK를 보내고 종료한다.
  5. 서버는 클라이언트의 ACK 메세지를 받은 후 소켓연결을 close 한다.
  6. 클라이언트는 아직 서버로부터 받지 못한 데이터가 있을 것을 대비해 일정기간동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거친다.(TIME_WAIT)

UDP

UDP(User Data Protocol)은 비연결형 프로토콜이다.
데이터 중심 프로토콜로, 주고받는 통신보다 데이터를 일방적으로 보내는 것을 중요시 하는 프로토콜이다. 전송속도가 TCP에 비해 빠른 프로토콜이다. Connectionless Oriented Service로 별도의 연결 설정이나 해제 과정이 존재하지 않다.

UDP서버의 특징은
1) 비연결형 서비스로 데이터그램 방식을 제공한다.
2) 연결을 설정하고 해제하는 과정이 존재하지 않는다.
3) 정보를 주고 받을 때 정보를 보내거나, 받는다는 절차를 거치지 않는다.
4) UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
5) 신뢰성이 낮다.
6) TCP보다 속도가 빠르다.
7) 패킷에 순서를 부여하여 재조립을 하거나 흐름 제어 또는 혼잡 제어와 같은 기능을 처리하지 않는다.

UDP 사용 예시

  • DNS : 어떤 호스트 네임의 IP주소를 찾을 필요가 있는 프로그램은, DNS 서버로 호스트 네임을 포함한 UDP 패킷을 보낸다. 서버는 호스트의 IP주소를 포함한 UDP 패킷으로 응답한다. 사전 설정이 필요하지 않으며 해제가 필요하지 않다.
  • 실시간 멀티미디어 : 빠르게 실시간으로 동영상을 스트리밍 하기 위해 주로 사용된다.

HTTP/3의 QUIC 프로토콜은 UDP를 선택했다

기존 HTTP는 평문으로 데이터를 전송하여 보안이 취약하다, 그래서 TCP + TLS가 적용된 HTTPS를 대중적으로 사용한다. 하지만 이 TCP + TLS는 Handshake에만 많은 시간이 든다.

이런 핸드쉐이크 시간을 절약하기 위해 HTTP/3은 QUIC 프로토콜을 적용했다.

클라이언트가 보낸 요청을 서버가 처리한 후 다시 클라이언트로 응답해주는 사이클을 RTT라고 하는데,
QUIC 프로토콜에서는 중간 과정은 다 생략되어 핸드쉐이킹에는1 RTT만 필요하다!(HTTP 연결 제외).

그 외에도, QUIC는

  • 패킷 손실 감지에 걸리는 시간 단축
  • 멀티플렉싱 지원
  • 클라이언트 IP 변경시에도 연결 유지

라는 장점이 있다.


oksusutea's blog

꾸준히 기록하려고 만든 블로그