TCP & UDP

손효재·2021년 12월 14일
0

Network

목록 보기
5/6

TCP와 UDP는 네트워크 OSI 7계층 중 전송 계층에서 사용하는 프로토콜이다.

전송 계층은 송신자와 수신자를 연결하는 통신서비스를 제공하고 IP에 의해 전달되는 패킷의 오류를 검사하며 재전송 요구 제어등을 담당하는 계층이다. 쉽게 말해 데이터의 전달을 담당하는데, TCP, UDP는 이 전송 계층에서 데이터를 보내기 위해 사용하는 프로토콜을 말한다.

TCP(Transmission Control Protocol)

인터넷상에서 데이터를 메세지의 형태(세그먼트 라는 블록 단위)로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
일반적으로 TCP와 IP가 함께 사용되는데, IP가 데이터의 전송을 처리한다면 TCP는 패킷을 추적 및 관리한다.

TCP 특징

  • 연결 지향 방식
  • 3-way handshake 과정을 통해 연결을 설정하고 4-way handshake 으로 해제한다
    3way handshake, 4way handshake
  • 높은 신뢰성을 보장
  • 흐름 제어 및 혼잡 제어
  • UDP보다 속도가 느리다
  • 전이중(Full-Duplex), 점대점 (Point to Point) 방식
  • 1:1 통신

흐름 제어 (Flow control)

수신측이 송신측보다 데이터 처리 속도가 빠르면 문제없지만, 송신측의 속도가 빠를 경우 문제가 생긴다.
데이터의 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지한다.
송신측과 수신측의 TCP 버퍼 크기 차이로 인해 생기는 데이터 처리 속도 차이를 해결하기 위한 기법이다.

  1. Stop and Wait

매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법

  1. Sliding Window

수신측에서 설정한 위도우 크기만큼 송신측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법으로 전송은 되었지만, ACK를 받지 못한 byte의 숫자를 파악하기 위해 사용한다.

먼저 Window에 포함되는 모든 패킷을 전송하고, 그 패킷들이 전달이 확인되는대로 Window를 옆으로 옮겨 다음 패킷들을 전송한다.

Window : TCP/IP를 사용하는 모든 호스트들은 송신하기 위한 것과 수신하기 위한 2개의 Window를 가지고 있다. 호스트들은 실제 데이터를 보내기 전에 '3 way handshaking'을 통해 수신 호스트의 receive window size에 자신의 send window size를 맞추게 된다.

혼잡 제어 (Congestion control)

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

송신측의 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달되는데, 만약 한 라우터에 데이터가 몰릴 경우, 모두 처리할 수 없게 된다. 이로인해 계속 재전송 하게되면서 오버플로우나 데이터 손실이 발생한다.

흐름제어가 송신측과 수신측 사이의 전송속도를 다루는데 반해, 혼잡제어는 호스트와 라우터를 포함한 보다 넓은 관점에서 전송 문제를 다루게 된다.

  1. AIMD (Additive Increase / Multiplicative Decrease)

처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 window 크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가시켜가며 전송하는 방법이다.
패킷 전송에 실패하거나 일정 시간을 넘으면 패킷의 보내는 속도를 절반으로 줄인다.
시간이 흐르면 평형상태로 수렴하게 되는 특징이 있지만, 초기에 네트워크의 높은 대역폭을 사용하지 못하며, 네트워크가 혼잡해지고 나서야 대역폭을 줄인다.

  1. Slow Start (느린 시작)

AIMD와 마찬가지로 패킷을 하나씩 보내면서 시작하고, 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 window size를 1씩 늘려준다.(window size 2배)
혼잡이 발생하면 window size를 1로 떨어뜨리게 된다.

  1. Fast Retransmit (빠른 재전송)

먼저 도착해야할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보내게 된다.
단, 순서대로 잘 도착한 마지막 패킷의 다음 패킷의 순번을 ACK 패킷에 실어서 보내게 되므로, 중간에 하나가 손실되게 되면 송신 측에서는 순번이 중복된 ACK 패킷을 받게 된다.
이것을 감지하는 순간 문제가 되는 순번의 패킷을 재전송 해줄 수 있고, 중복된 순번의 패킷을 3개 받으면 재전송을 하며 window size를 줄이게 된다.

  1. Fast Recovery (빠른 회복)

혼잡한 상태가 되면 window size를 1로 줄이지 않고 반으로 줄이고 선형증가시키는 방법이다.
이 정책까지 적용하면 혼잡 상황을 한번 겪고 나서부터는 순수한 AIMD 방식으로 동작하게 된다.

UDP (User Datagram Protocol)

UDP(User Datagram Protocol)란, 비연결형 통신을 지원하는 전송 계층 프로토콜이다.

  • UDP로 전송할 때 붙이는 헤더인 UDP헤더와 데이터를 합쳐 데이터그램(Datagram)이라고 하며, 데이터그램 방식을 제공한다.
  • UDP는 수신자가 데이터를 받을 준비를 확인하지 않고 단방향으로 정보를 전송하기 때문에,
    신뢰성이 낮지만 전송속도가 빠르다.
  • UDP는 신뢰성이 낮기 때문에, 데이터가 소수 유실되도 상관없거나, 연속성이 중요한 서비스에 사용된다.
    ex) 실시간 방송, 스트리밍 서비스 등

UDP 특징

  • 비연결형 서비스
  • 낮은 신뢰성
  • 정보를 주고 받을때 별도의 신호절차가 없다.
  • UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
  • TCP보다 빠른 속도
  • 1:1, 1:N, N:N 통신

CheckSum

네트워크를 통해 전달된 값이 변경되었는지를 검사하는 값으로 무결성을 제공한다.

계산방법

  1. 수신측에서 IP 헤더를 16비트(2byte = 16진수 4개)씩 나눈다.
  2. 나눈 비트중 checksum은 메시지를 보낸쪽에서 checksum을 구해서 포함시켜 보낸값이므로,
    checksum 값을 제외하고 나머지를 모두 더한다.
  3. 캐리값이 발생하면 더한다.
  4. 1의 보수를 취한다.
  5. 구한 값과 전달받은 checksum을 비교한다.

하지만 이 방법에는 결함이 있다. 전송 도중 checksum값이 바뀔 수도 있고 데이터가 변형되었음에도 불구하고 checksum 값이 동일한 경우도 발생할 수 있다.

0개의 댓글