반응형

개요

 

백엔드 개발자든 프론트엔드 개발자든 앱이든 웹이든 상관없이 TCP, UDP는 개발자로 살아감에 있어서 기본적으로 알고 있어야 되는 소양이라고 생각합니다.

그러나 요즘엔 그렇지 못 한 사람들이 많이 있는것 같아 블로그에 정리를 해보도록 하겠습니다.

 


TCP/UDP의 차이

 

우선 각각의 차이점을 그림을 통해 확인해 볼 수 있습니다.

TCP vs UDP

 


Transport servicesprotocols

 

  • 양 종단 호스트 사이에서 응용 메시지의 전달을 담당하게 됩니다.
  • transport protocol은 종단 호스트에서 동작하며,
  • 응용 프로세스들은 transport protocol을 통해서 메시지를 전달하고
  • 메시지를 쪼개서 segments로 전송합니다.
  • Segment에는 전달하는 응용 프로세스의 주소를 표시하고
  • 수신 transport protocol은 수신한 세그먼트를 목적지 프로세스에 전달합니다.

 


포트 번호(port number)

 

Transport layer에서 응용 프로세스를 구별하기 위해 사용하는 프로세스 주소를 포트 번호라고 합니다.

포트번호

포트 번호의 영역

  • Well known 포트 번호: 특정 프로세스에 이미 정해진 번호입니다.
  • 임시 포트 번호: 그때그때 프로세스에 할당되는 번호입니다.

 

 

 

IP 주소와 포트 번호

 


Transport layer(TL) protcols

 

TL은 응용 프로세스에 패킷을 전달할 때 프로세스가 신뢰할 수 있는 패킷을 전달할 수도 있고 혹은 Network layer(NL)로부터 받은 패킷을 그대로 전달할 수도 있습니다.

 

TCP

  • 응용 프로세스가 신뢰할 수 있는 서비스를 제공합니다.
  • 따라서 에러 제어, 흐름 제어, 순서 제어 등의 작업을 수행해야 합니다.

 

UDP

  • NL로부터 받은 패킷을 그대로 전달합니다.

 


UDP의 주요 특징!

 

  • UDP에서는 전달하는 정보 단위를 보통 datagram이라고 합니다.
  • NL로부터 받은 datagram를 응용 해당 프로세스로 전달하는 일 만을 수행합니다.
  • 따라서 신뢰성 있는 전달을 요구하지 않는 서비스가 UDP를 이용합니다.

 


TCP의 주요 특징!

 

  • 연결형 방식(connection-oriented)
  • 스트림(stream)으로 전달
  • 수신한 패킷에 대해서 반드시 ACK 전송

 

TCP는 신뢰성 있는 전송을 위해서 다음의 작업을 수행합니다.

  • 에러 제어
  • 흐름 제어
  • 순서 보장
  • 체증 제어(congestion control)

 

각각의 제어방식은 데이터 통신과 네트워크를 배움에 있어서 중요한 요소 이기 때문에 이와 관련해서는 나중에 다시 다루어 보겠습니다.

 


스트림 전달 방식!

 

  • TCP에서는 전달하는 정보 단위를 세그먼트(segment)라고 합니다.
    • (비교, IP에서는 패킷 혹은 데이터그램, Ethernet의 frame) 
  • 하지만 TCP는 세그먼트를 전송할 때 이것을 스트림의 전송으로 봅니다.

 

TCP 스트림 전달 방식!

 

 

TCP에서의 세그먼트 전달

 

 

TCP 세그먼트의 헤더

 


Sequence number(SN)와 ACK number

 

SN은 세그먼트의 번호가 아니라 세그먼트가 데이터 스트림에서 위치하는 시작 바이트로 나타냅니다.

 


TCP 연결 : three-way handshake

 

 


ACK 전송

 

  • TCP는 반드시 받은 세그먼트에 대해서 ACK을 전송한다.

 

ACK 전송 

 


TCP 에러 제어

 

TCP 프로토콜로 전송함에 있어서 에러 제어를 할때 에러를 검출하는 방법과 에러를 정정하는 방법이 있습니다.

  • 에러 검출 : CRC , Checksum
  • 에러 정정 : Forward error correction , 재전송(retransmission, ARQ) 

 


재전송 방식

 

  • Stop-and-Wait ARQ
  • Go-Back-N ARQ
  • Selective Repeat ARQ

 

Selective Repeat ARQ

 

현재의 Window 크기의 범위 내에서 프레임을 계속 전송해주는 것은 Go-Back-N-ARQ 와 같지만 에러가 발생해서 재전송을 해야 할 때 차이가 있다.

 

Selective Repeat ARQ 

 

Go-Back-N ARQ

 

Go-Back-N ARQwindow가 허락하는 범위에서 프레임을 연속해서 전송한다.

그런데 프레임 전송에 에러가 발생하면 재전송을 해야 하는데

Go-Back-N ARQ

 

 


TCP 에러 제어

 

TCP의 에러 제어는 Selective Repeat와 거의 비슷합니다.

 

TCP 에러 제어 구조

 

 

TCP 에러 제어 구조2

 


TCP 흐름 제어

 

  • 양 종단의 TCP는 흐름 제어를 수행합니다.
  • 수신 TCP의 버퍼가 넘치지 않도록 합니다.
  • 수신 TCP는 현재의 남아있는 버퍼 크기를 ACK을 전송할 때 window size 필드를 통해서 알려주게 됩니다.
  • ACK은 세그먼트가 잘 도착했다는 것을 알려주는 것이고 window size는 현재의 버퍼 크기를 알려주는 것입니다.

 


Congestion Control

 

망에 입력되는 트래픽 양이 망이 처리할 수 있는 한도를 초과할 경우 체증이 발생하게 됩니다.

다음 그림은 단위 시간 당 입력되는 패킷의 수(input load)와 단위 시간당 처리되는 패킷의 수(throughput), 그리고 패킷이 처리될 때 까지의 지연 시간(delay) 관계를 보여 주고있습니다.

 


TCP congestion control

 

 

Congestion의 발견(detection)

  • TCP는 송신한 패킷에 대해서 ACK을 수신합니다.
  • 만약 정해진 시간이 지날 때까지ACK이 도착하지 않으면 congestion이 발생한 것으로 판단합니다.(timeout)

 

Rate control

  • TCP 호스트는 처음에는 적은 양의 패킷 전송을 하고 점차 양을 늘려나갑니다.(slow start)
  • Congestion이 발생한 것으로 판단되면 전송되는 패킷의 양을 초기 상태로 줄여서 다시 시작합니다.(congestion avoidance)

 

Congestion control 파라메터

  • Awnd (advertised window by receiver)

 

초기 연결 설정 단계에서, TCP는 상대방 TCP에게 자신의 최대 버퍼 크기(초기 Awnd)를 알려줍니다.

세그먼트를 수신할 때마다TCP는 현재 자신의 버퍼 중 비어있는 공간의 크기(Awnd)를 알려줍니다.

Cwnd (congestion window)

 

TCP가 세그먼트를 전송할 때 ACK을 받지 않고 연속해서 보낼 수 있는 세그먼트의 양을 결정합니다.

, TCP 흐름 제어에 의하면 TCPAwnd 만큼 연속해서 세그먼트를 전송할 수 있다. 하지만 congestion control에 의해서 Awnd 만큼 전송할 수 없고 Cwnd 만큼 전송하게 됩니다.

 


Slow Start

 

initialize:  cwnd = 1 (one maximum segment size);

For each segment that is acknowleged

    cwnd = cwnd + 1 until min(cwnd, awnd)

 

Slow Start

 


Congestion Avoidance

 

TCP는 timeouttimeout 될 때까지 ACK을 받지 못하면 congestion avoidance를 수행합니다.

Congestion Avoidance

If (segment timeout)

  1. Set threshold = cwnd/2

  2. Set cwnd = 1 and

               restart “slow-start” until (cwnd = threshold)

  3. If  (cwnd ³ threshold)

      cwnd = cwnd + 1 every roundtrip time

 

Slow Start 와  Congestion Avoidance

 


Fast RetransmitFast Recovery

 

동일한 ACK3개 받을 경우

Fast Retransmit

Timeout 되기.

Fast Recovery

Cwnd를 현재의 Cwnd의 반으로 줄입니다.

그리고 줄인 Cwnd에서부터 linearlinear 하게 증가시킵니다.

 

Cwnd의 변화 예

Cwnd의 변화

 


이렇게 이번에는 TCP에 대해서 알아보았습니다!

 


 

반응형

+ Recent posts