전공/데이터 통신

8-3 [TCP Layer] TCP Slow Start,Multiplexing, UDP

뜨거운 개발자 2024. 5. 3. 13:22

Transport Layer (TCP, UDP)

  • 기본적으로 라우터는 Transport Layer가 없다고 보시면 됩니다.
  • 즉 이것은 logical end to end connection이라고 보면 됩니다.
  • Send side: breaks app messages into segments passes to network layer
  • Receive side: reassembles segments into messages, passes to app layer
  • More than one transport protocol available to apps
  • Internet: TCP and UDP(udp는 transport layer의 기능을 잘 표현하고 있진 않다.)
  • 중요한 역할
  • Reliable, in-order delivery (TCP) → connection origented protocol
  • Unreliable, unordered delivery (UDP) → connectionless protocol
  • Services not available:
  • Delay guarantees
  • Bandwidth guarantees

Transport vs. Network layer

  • Network layer: logical communication between hosts
  • Transport layer: logical communication between processes

Multiplexing/Demultiplexing

  • 포트 번호를 사용해서 매핑 해줍니다.

  • 즉 Transport layer와 application layer 간의 인터페이스가 socket입니다.
  • TCP에는 여러개의 어플리케이션이 연결되어 있어서 섞여서 IP로 내려가며, Multiplexing 과 demultiplexing 기능이 존재합니다.

실제 동작

  • 어플리케이션으로부터 받는 application data 가 payload에 해당한다.
  • IP주소 32bit, port 번호 16 bit 총 48 bit를 사용.

TCP Overview

RFCs 793,1122,1323, 2018, 2581

  • Point-to-point: One sender, one receiver
  • Connection-oriented: Handshaking (exchange of control msgs), inits sender, receiver state before data exchange
  • Reliable, in-order byte stream : 패킷 순서를 맞춰주기 때문.
  • Pipelined: Ack가 오는 동안 시간을 무시할 수 없기 때문에 Ack 없이 보낼 수 있는 패킷의 갯수를 지정해줄 수 있습니다.
  • Full duplex data : 송신과 수신을 다하는 프로토콜.
  • Flow controlled : Sender will not overwhelm receiver

TCP Sequence Numbers, ACKs

  • Sequence numbers : Byte stream “number” of first byte in segment’s data
  • Acknowledgements:

이 그림에서 window size가 ack를 보내기 까지 쭉 받을 데이터의 크기를 말합니다.

이 그림에서 seq번호랑 ACK 번호를 잘 보자.

내가 42까지 받았으니까 다음에 43을 줘. 79까지 받았으니까 80을 줘.

에러 발생 시나리오

  1. 중간에 ACK 가 사라지는 시나리오.

 타임아웃이 되면 이전에 보냈던 패킷을 한번 더 보낸다.

  1. 이건 2개를 받았는데 ACK를 잘 보냈지만. time out이 걸려서 다시 같은 패킷을 보내는 시나리오이다.
  2. 이 상황은 ACK가 깨져도 문제가 없는 상황을 보여줍니다.

TCP Fast Retransmit

  • 이건 congestion control에 해당합니다.
  • 이건 하나만 잘못됐을 때 ACK를 같은 걸 timeout 시간 내에 4개를 보내버려서 timeout 시간중에 소실난 패킷을 다시 보내는 방식을 말합니다.

TCP Congestion Control

유선 랜 같은 경우 transmission protocol 자체가 정의되어있지 않다.

  • 너무 많은 요청이 오는 경우 문제가 생기니 처음에 조금 천천히 보내다가 점점 보내는 속도를 빠르게 하는 방법을 사용합니다.
  • sender increases transmission rate (window size), probing for usable bandwidth, until loss occurs
  • 즉 ack 없이 얼마나 많은 데이터를 보낼지를 결정하는 것을 말합니다.

TCP Slow Start

위에서 설명한 방법을 TCP Slow start 라고 부르는 것 입니다.

  • 다만 너무 빠른 속도로 증가하다 보니 ssthresh 를 따로 변수로 지정해줍니다.

이 그래프에서 로스가 발생하면 반으로 줄어드는게 slow start 방식인데, 아니면,

  • TCP Tahoe 방식은 1로 확 줄어들게 됩니다.
  • slow start ssthresh는 window size가 ssthresh보다 작은 경우 지수적으로 증가하게 되고, 크거나 같은 경우 선형으로 증가합니다.
  • TCP Reno방식은 ssthresh 에서 3을 증가하는 방법을 사용합니다.

TCP: Detecting, Reacting to Loss

  • Loss indicated by timeout: 이건 심각한 상황이기 때문에 1로 낮춰버리는 것이고.
  • Loss indicated by 3 duplicate ACKs: TCP RENO 같은 경우 하나만 에러가 발생한 것이기 때문에 굳이 낮출 필요가 없다.
  • TCP Tahoe always sets cwnd to 1 (timeout or 3 duplicate acks)

UDP: User Datagram Protocol

  • Best effort” service
  • Connectionless:
  • Streaming multimedia apps (loss tolerant, rate sensitive)

728x90