TCP와 UDP란? 왜 사용하는지 알아보자

IP(Internet Protocol)의 한계

복잡한 인터넷 망에서 클라이언트와 서버가 서로 통신하기 위해서 일종의 규칙이 있어야하는데, 이때 IP 주소를 통해 통신할 수 있게 됩니다.

클라이언트가 서버에 데이터를 보낼 때 그냥 보내는 것이 아니라 Packet(패킷)으로 포장해 데이터를 보내게 됩니다.

( Packet : 통신망을 통해 전송하기 쉽게 자른 데이터 전송 단위. 쉽게 말해 택배 포장 박스라고 생각할 수 있습니다. )

 

하지만 이 과정에서 IP는 다음과 같은 한계가 있습니다.

1. 비연결성 - 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷이 전송된다.

2. 비신뢰성 - 중간에 패킷이 사라지거나 패킷이 보낸 순서와 다르게 전송할 수 있다.

3. 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 여러 개라면 구분할 수가 없다.

 

그래서 이러한 문제를 해결하기 위한 방법으로 TCP / UDP, PORT가 있습니다.

** TCP/ UDP에 대한 설명으로 PORT에 대한 설명은 여기를 클릭해주세요. **


TCP(Transport Control Protocol) 란 ?

연결형 서비스를 지원하는 전송 계층 프로토콜로써, 인터넷 환경에서 기본으로 사용합니다.

호스트간 신뢰성 있는 데이터 전달과 흐름제어를 합니다.

즉, 인터넷상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜.

일반적으로 TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리합니다.

TCP의 데이터 송신 과정

 

TCP의 특징

연결지향

3-way handshaking 과정을 통해 연결을 설정

4-way handshaking 을 통해 연결을 해제.

왼쪽 : 3-way handshaking , 오른쪽 : 4-way handshaking

3-way handshaking
상태 설명
Closed 현재 Client는 닫힌 상태, Server는 포트가 열려있는 상태.
SYN 연결 요청을 하기위해 SYN 데이터를 보낸다.
LTSTEN 포트가 열린 상태로 연결 요청 대기중
SYN_RCV SYN 요청을 받고 상대방의 응답을 기다리는 중
SYN, ACK(대답) 정상적으로 받았다는 ACK와 Client 포트를 열어달라는 SYN을 보낸다.
ESTABLISHED 포트 연결 상태
ACK 서버에 요청을 잘 받았다는 ACK(대답) 를 전송한다.
ESTABLISHED ACK(대답)를 받은 서버는 포트 연결 상태가 된다.
4-way handshaking
상태 설명
FIN_WAIT1 Close를 호출한 측의 소켓이 진입하는 상태. FIN을 보낸다.
CLOSE_WAIT Close를 받으면 CLOSE_WAIT 상태로 진입. ACK(대답)를 보낸다.
FIN_WAIT2 ACK 신호를 받은 소켓은 FIN_WAIT1 -> FIN_WAIT2로 상태 변경
LAST_ACK Close를 호출 후 진입하는 상태. FIN을 보낸다.
TIME_WAIT Close를 받으면 진입하는 상태. ACK를 보낸다.
CLOSED 연결 종료

하지만 이 연결 과정을 거치기 때문에 UDP에 비해 느리다는 단점이 있습니다.

3-way handshaking4-way handshaking

 

전송 순서를 보장한다.

패킷을 전송한 순서가 패킷1, 패킷2, 패킷3 순서로 전송했다면

보낸 순서 대로 패킷이 도착하게 됩니다.

 

흐름제어

데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지

송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막는다.

수신자가 윈도우크기(Window Size) 값을 통해 수신량을 정할 수 있다.

 

혼잡제어

네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지

정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.

 

신뢰성이 높은 전송
  • Dupack-based retransmission
    1. 정상적인 상황에서는 ACK 값이 연속적으로 전송되어야 한다.
    2. 그러나 ACK값이 중복으로 올 경우 패킷 이상을 감지하고 재전송을 요청한다.
  • Timeout-based retransmission
    1. 일정시간동안 ACK 값이 신을 못할 경우 재전송을 요청한다.

 

전이중, 점대점 방식
  • 전이중 (Full-Duplex)
    전송이 양방향으로 동시에 일어날 수 있다. 

  • 점대점 (Point to Point)
    각 연결이 정확히 2개의 종단점을 가지고 있다.

( 멀티캐스팅이나 브로드캐스팅을 지원하지 않는다. ) 


UDP(User Datagram Protocol) 란?

비연결형 서비스를 지원하는 전송계층 프로토콜로

인터넷상에서 서로 정보를 주고받을 때 정보를 보낸다는 신호나 받는다는 신호 절차를거치지 않고,보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜입니다.

UDP는 인터넷에서 정보를 주고받을 때, 한쪽에서 일방적으로 보내는 방식의 통신 프로토콜(무관계서비스)입니다.

안정성 면에서는 떨어지지만, 속도는 TCP보다 훨씬 빠르다는 특징을 가지고 있습니다.

 

UDP의 데이터 송신 과정

 

UDP의 특징
  • 비연결형 서비스로 데이터그램 방식을 제공한다.( 데이터그램이란, 독립적인 관계를 지니는 패킷 )
  • 데이터의 경계를 구분한다. 
  • 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
  • 신뢰성 없는 데이터를 전송한다. ( 데이터 전달을 보증하지 않는다. )
  • 데이터 전송 순서가 보장되지 않는다.
  • 패킷관리가 필요하다.
  • 패킷 오버헤드가 적어 네트워크 부하가 감소된다.
  • UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
  • 3-way handshaking과정을 거치지 않기 때문에 TCP보다 속도가 빠르다

TCP와 UDP의 공통점과 차이점

공통점
공통점
포트 번호를 이용하여 주소를 지정한다.
데이터 오류 검사를 위한 체크섬 존재한다.

 

 

 

  TCP UDP
연결 방식 연결형 서비스 비연결형 서비스
패킷 교환 방식 가상 회선 방식 데이터그램 방식
데이터 경계 데이터 경계를 구분하지 않는다. 데이터 경계를 구분한다.
전송 순서 전송 순서를 보장한다. 전송 순서가 바뀔 수 있다.
수신 여부 확인 수신 여부를 확인한다. 수신 여부를 확인하지 않는다.
통신 방식 일 : 일 통신 일 : 일 또는 일 : 다 또는 다 : 다 통신
신뢰성 높다 낮다
속도 느리다 빠르다
사용예시 HTTP통신, Email, 파일전송, 메일전송,
터미널접속(Telnet/SSH)
DNS, Broadcasting( 실시간 동영상 서비스),
온라인 게임, 음성 통화

 

 

즉, 용자간 데이터 교환이 필요하고,신뢰성이 요구되는 애플리케이션에서는 TCP를 사용하고
실시간성이 보장되고 빠른 연결, 빠른 속도로 전송하고자 하는 애플리케이션에서는 UDP를 사용합니다.

 


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

https://coding-factory.tistory.com/614