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을 줘.
에러 발생 시나리오
- 중간에 ACK 가 사라지는 시나리오.
타임아웃이 되면 이전에 보냈던 패킷을 한번 더 보낸다.
- 이건 2개를 받았는데 ACK를 잘 보냈지만. time out이 걸려서 다시 같은 패킷을 보내는 시나리오이다.
- 이 상황은 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