본문 바로가기
Computer Science/네트워크

TCP와 UDP

by eunnnn 2023. 3. 12.

전송 계층은 끝단의 사용자들이 신뢰성 있는 데이터를 주고 받을 수 있게 해 주어, 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 한다. 

전송 계층의 대표적인 프로토콜에는 TCP와 UDP가 있다. 이 두 가지에 대해 알아보도록 하겠다.

 

연결형 vs 비연결형

  • 연결형 : 송신자와 수신자 사이의 논리적인 연결을 확립하고 데이터를 전송하는 방법으로 패킷들의 순서가 맞지 않을 위험이 적고 오류 발생 시 재전송을 하여 신뢰성 있는 전송이라고 할 수 있다.
  • 비연결형 : 송신자와 수신자 사이에 연결을 확립하지 않고 데이터를 전송하는 방법이다따라서 오류 확인을 하지 못하므로 신뢰성 없는 전송이라고 할 수 있다하지만 연결확립에 걸리는 시간이 없어 전송 속도가 빠르다.

TCP

TCP는 네트워크 계층 중 전송 계층에서 사용하는 프로토콜 로서, 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 연결을 설정하여 신뢰성을 보장하는 연결형 서비스이다.

TCP의 특징은 다음과 같다.

  • 인터넷 상에서 데이터를 메세지의 형태(세그먼트 라는 블록 단위)로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
    TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리한다.
  • 3-way handshaking과정을 통해 연결을 설정하고, 4-way handshaking을 통해 연결을 해제한다.
  • 혼잡 제어(네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것), 흐름 제어(데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것)를 제공한다.
  • 전이중(Full-Duplex), 점대점(Point to Point) 방식이다.
    전이중 : 전송이 양방향으로 동시에 일어날 수 있다.
    점대점 : 각 연결이 정확히 2개의 종단점을 가지고 있다.
  • 가상회선 패킷 교환 방식을 사용한다.

 

가상회선 패킷 교환 방식

각 패킷에 가상회선 식별자가 포함되며, 모든 패킷을 전송하면 가상회선이 해제 되고 패킷들은 전송된 순서대로 도착하는 방식을 말한다.

 

3-way handshake

TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정으로, 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한 쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 한다.

A 프로세스(Client)가 B 프로세스(Server)에 연결을 요청하는 상황에서,

  1. SYN 단계 : A 프로세스는 서버에 클라이언트의 ISN(임의의 시퀀스 번호)를 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다.
  2. SYN+ACK 단계 : B 프로세스가 요청을 수락했으며, A 프로세도 포트를 열어 달라는 메시지를 전송하는 과정이다.
    받은 메시지에 대한 수락에 대해서는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하여 표현한다. 그리고 SYN과 ACK 플래그 비트를 1로 설정한 segment를 전송한다.
  3. ACK 단계 : 마지막으로 접속 요청 프로세스가 수락 확인(ACK)을 보내 연결을 맺는다.
    이 때 전송할 데이터가 있으면 이 단계에서 데이터를 전송할 수 있다.

4-way handshake

TCP의 연결을 해제(Connection Termination) 하는 과정이다.

A 프로세스(Client)가 B 프로세스(Server)에 연결해제를 요청하는 상황에서,

  1. A(ESTABLISHED) → B(ESTABLISHED) : FIN
    프로세스 A가 연결을 종료하겠다는 FIN 플래그를 전송하고, 프로세스 B가 FIN 플래그로 응답하기 전까지 연결을 계속 유지
  2. B(CLOSE_WAIT) → A(FIN_WAIT_1) : ACK
    프로세스 B는 일단 확인 메시지(ACK)를 보내고 자신의 통신이 끝날 때까지 기다린다.
    Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, ACK 플래그 비트를 1로 설정한 segment를 전송한다.
    그리고 자신이 전송할 데이터가 남아있다면 이어서 계속 전송한다. 클라이언트 쪽에서도 아직 서버로부터 받지 못한 데이터가 있을 것을 대비해 일정 시간동안 세션을 남겨놓고 패킷을 기다린다. 이를 TIME_WAIT 상태라고 한다.
  3. B(CLOSE_WAIT) → A(FIN_WAIT_2) : FIN
    프로세스 B의 통신이 끝나면 이제 연결 종료해도 괜찮다는 의미로 프로세스 A에게 FIN 플래그를 전송한다.
  4. A(TIME_WAIT) → B(LAST_ACK) : ACK
    프로세스 A는 FIN 메시지를 확인했다는 메시지를 전송 (ACK)
    프로세스 A로부터 ACK 메시지를 받은 프로세스 B는 소켓 연결을 해제한다.

UDP

  • 비연결형 서비스로 데이터그램 방식을 제공한다. 
    연결을 설정하고 해제하는 과정이 존재하지 않는다.
  • 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
  • UDP 헤더에 CheckSum 필드를 통해 최소한의 오류만 검출한다.
  • 신뢰성이 낮다.
    흐름 제어(flow control)가 없어서 제대로 전송되었는지, 오류가 없는지 확인할 수 없다.
  • 1:1 & 1:N & N:N 통신이 가능하다.

데이터그램 패킷 교환 방식

데이터그램 패킷 교환 방식이란 패킷이 독립적으로 이동하며 최적의 경로를 선택하여 가는데, 하나의 메시지에서 분할 된 여러 패킷은 서로 다른 경로로 전송될 수 있으며 도착한 '순서가 다를 수' 있는 방식을 뜻합니다.


TCP VS UDP

TCP는 연결 지향형 프로토콜이며, 패킷 사이의 순서를 보장하고 신뢰성을 구축해 수신여부를 확인한다.

그러나 UDP는 순서를 보장하지 않고, 수신 여부를 확인하지 않으며 단순히 데이터만 데이터그램 단위로 전송하는 프로토콜이다.

TCP는 가상 회선을 만들어 신뢰성을 보장하도록(흐름 제어, 혼잡 제어, 오류 제어) 하는 프로토콜이기 때문에, 따로 신뢰성을 보장하기 위한 절차가 없는 UDP에 비해 속도가 느린편입니다.

그래서 TCP는 파일전송과 같은 신뢰성이 중요한 서비스에 사용되고, UDP는 실시간 스트리밍과 같이 연속성이 더 중요한 서비스에 사용한다. (UDP가 빠른 속도와 적은 부하를 갖기 때문에)

 

+) 하지만 UDP도 신뢰성을 UDP자체에서 보장하지 않는 것 뿐이지, 개발자가 직접 신뢰성을 보장하도록 할 수 있다.

 

 

출처

더보기

 

 

'Computer Science > 네트워크' 카테고리의 다른 글

Cookie vs Session vs JWT  (0) 2023.06.18
웹 통신의 흐름  (0) 2023.03.13
네트워크 계층 구조  (0) 2023.03.12
REST의 정의와 HTTP 메소드  (0) 2023.03.10
CORS 에러 해결하기  (0) 2023.03.09