TCP와 UDP의 특징과 차이

웅평·2023년 3월 29일
0

네트워크

목록 보기
4/21

TCP 전송 제어 프로토콜(Transmission Control Protocol)란?

TCP는 신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜입니다. 일반적으로 TCP와 IP가 함께 사용되는데, IP가 데이터의 전송을 처리한다면 TCP는 패킷 추적 및 관리를 하게 됩니다. 연결 지향형인 TCP는 3-way handshaking이라는 과정을 통해 연결 후 통신을 시작하는데, 흐름 제어와 혼잡 제어를 지원하며 데이터를 안정적으로, 순서대로, 에러없이 보장합니다.

흐름 제어: 보내는 측과 받는 측의 데이터 처리속도 차이를 조절해주는 것
혼잡 제어: 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것

TCP의 특징

  • 연결형 서비스로 가상 회선 방식을 제공
    • 3-way handshaking 과정을 통해 연결을 설정
    • 4-way handshaking 과정을 통해 연결을 해제
  • 데이터의 전송 순서 보장
  • 데이터의 경계를 구분하지 않음(바이트 스트림 서비스)
  • 신뢰성 있는 데이터 전송(Sequence Number, Ack Number를 통한 신뢰성 보장)
  • UDP보다 전송속도가 느림
  • 흐름제어, 혼잡제어
  • 전이중(Full-Duplex), 점대점(Point to Point) 방식
    • 전이중(Full-Duplex) : 전송이 양방향으로 동시에 일어날 수 있다.
    • 점대점(Point to Point) : 각 연결이 정확히 2개의 종단점을 가지고 있다.

TCP의 연결 및 연결 해제 과정

TCP의 연결(3-way handshaking)

3-way handshake를 간단히 표현하면 다음과 같다.
1. Client -> Server : 내 말 들려?
2. Server -> Client : 어 잘 들려! 내 말은 들려?
3. Client -> Server : 잘 들려!

SYN(synchronize sequence numbers) - 연결 확인을 보내는 무작위의 숫자 값 (내 말 들려?)
ACK(acknowledgements) - Client 혹은 Server로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK (잘 들려!)

  1. 먼저 Open 한 클라이언트가 SYN(내 말 들려?)를 보내고 SYN_SENT 상태로 대기한다.
  2. 서버는 SYN-RECEIVED 상태로 바꾸고 SYN과 응답 ACK(어 잘 들려! 내 말은 들려?)를 보낸다
  3. SYN과 응답 ACK를 받은 클라이언트는 ESTABLISHED 상태로 변경하고 서버에게 응답 ACK(잘 들려!)를 보낸다.
  4. 응답 ACK를 받은 서버는 ESTABLISHED 상태로 변경한다.

seq 번호는 순서 번호로서 패킷의 전달 순서를 식별하는데 사용되는 값이다.
운영체제의 의해서 랜덤하게 생성되서 SYN 패킷에 담겨 보내진다. 그리고 이를 받은 서버에는 동기화에 대한 답신으로 seq 번호를 +1 증가시키고 ack에 담아 응답한다.
SYN(n) -> ACK(n + 1), SYN(m) -> ACK(m + 1) 순

TCP의 연결 해제(4-way handshaking)

4-way handshake를 간단히 표현하면 다음과 같다.
1. Client -> Server : 나는 다 보냈어! 이제 끊자!
2. Server -> Client : 알겠어! 잠시만~
3. Server -> Client : 나도 끊을게!
4. Client -> Server : 알겠어!

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

    반드시 서버만 CLOSE_WAIT 상태를 갖는 것은 아니다.
    서버가 먼저 종료하겠다고 FIN을 보낼 수 있고, 이런 경우 서버가 FIN_WAIT1 상태가 됩니다.
    누가 먼저 close를 요청하느냐에 따라 상태가 달라질 수 있다.

    TIME-WAIT : 먼저 연결을 끊는 쪽에서 생성되는 소켓으로, 혹시 모를 전송 실패에 대비하기 위해 존재하는 소켓이며,
    TIME-WAIT이 없다면, 패킷의 손실이 발생하거나 통신자 간 연결 해제가 제대로 되지 않을 수 있다.

TCP의 전송 제어 기법

흐름제어(Flow control)

  • 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지
    • 송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막는다.
    • 수신자가 윈도우크기(Window Size) 값을 통해 수신량을 정할 수 있다.

혼잡제어(Congestion control)

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

오류제어(Error Control)

  • 통신 도중에 데이터가 유실되거나 잘못된 데이터가 수신되었을 경우 대처
  • Go Bank N 기법과 Selective Repeat(선택적인 재전송) 기법을 사용

    Go Bank N 기법 : 어느 데이터로부터 오류가 발생했는지 파악하여, 그 부분만 다시 순서대로 보내 제어한다.
    Selective Repeat 기법 : 에러난 데이터만 재전송하고 그전에 받았던 순서가 잘못된 데이터 버퍼를 재정렬하여 제어한다.

TCP 서버의 특징

  • 서버소켓은 연결만을 담당한다.
  • 연결과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용된다
  • 서버와 클라이언트는 1대1로 연결된다.
  • 스트림 전송으로 전송 데이터의 크기가 무제한이다.
  • 패킷에 대한 응답을 해야하기 때문에(시간 지연, CPU 소모) 성능이 낮다.
  • Streaming 서비스에 불리하다.(손실된 경우 재전송 요청을 하므로)

UDP 사용자 데이터그램 프로토콜(User Datagram Protocol)란?

UDP는 비연결형 프로토콜로써, 인터넷상에서 서로 정보를 주고받을 때 정보를 보낸다는 신호나 받는다는 신호 절차를 거치지 않고 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜입니다. TCP와는 다르게 연결 설정이 없으며, 혼잡 제어를 하지 않기 때문에 TCP보다 전송 속도가 빠릅니다. 그러나 데이터 전송에 대한 보장을 하지 않기 때문에 패킷 손실이 발생할 수 있습니다.

UDP 특징

  • 비연결형 서비스로 데이터그램 방식을 제공
    • TCP의 3 way handshaking 같은 연결 설정이 없음
  • 비신뢰성(데이터 전달 보증X, 순서 보장X)
  • 데이터의 경계를 구분
  • 패킷 오버해드가 적어 네트워크 부하 감소
  • 혼잡 제어를 하지 않기 때문에 TCP보다 빠름

UDP 서버의 특징

  • UDP에는 연결 자체가 없어서(connect 함수 불필요) 서버 소켓과 클라이언트 소켓의 구분이 없다.
  • 소켓 대신 IP를 기반으로 데이터를 전송한다.
  • 서버와 클라이언트는 1대1, 1대N, N대M 등으로 연결될 수 있다.
  • 데이터그램(메세지) 단위로 전송되며 그 크기는 65535바이트로, 크기가 초과하면 잘라서 보낸다.
  • 흐름제어(flow control)가 없어서 패킷이 제대로 전송되었는지, 오류가 없는지 확인할 수 없다.
  • 파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우에 사용된다.

TCP와 UDP의 차이점

TCP는 연결 지향형 프로토콜이고 UDP는 데이터를 데이터그램단위로 전송하는 프로토콜입니다.

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

TCP는 그래서 파일전송과 같은 신뢰성이 중요한 서비스에 사용되고, UDP는 스트리밍, RTP와 같이 연속성이 더 중요한 서비스에 사용됩니다.

그림으로 비교하는 TCP vs UDP

참고
https://dev-coco.tistory.com/144
https://mangkyu.tistory.com/15
https://velog.io/@hidaehyunlee/TCP-%EC%99%80-UDP-%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://inpa.tistory.com/entry/NW-%F0%9F%8C%90-%EC%95%84%EC%A7%81%EB%8F%84-%EB%AA%A8%ED%98%B8%ED%95%9C-TCP-UDP-%EA%B0%9C%EB%85%90-%E2%9D%93-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EC%9E%90
https://cocoon1787.tistory.com/757

0개의 댓글