2022. 12. 28. 20:48ㆍCS/컴퓨터네트워크
주 교재 : Computer Networking : A Top-Down Approach
5주차 Transport layer 02
- Principles of reliable data transfer
- Connection-oriented transport: TCP
- Principles of congestion control
- TCP congestion control
1. Principles of reliable data transfer
reliable한 channel로 데이터가 전송되면 좋겠지만, 여러 가지 환경에 따라 channel의 상태가 바뀌기 때문에
unreliable한 channel에서 reliable 하게 데이터 통신이 일어나야 한다.
- Stop-and-wait
- Pipelined protocols
- 1. Go-back-N
- 2. Seletive Repeat
#Stop-and-wait
pkt(packet)을 보내고, 그에 대한 응답으로 ack(acknowledgement code)을 받는다.
- Ack : 보낸 packet을 잘 받았는지 알려주는 것. sequence number를 달아서 판단하는 것이 가장 단순한 방법.
ack가 도착하지 않으면, timeout 했다가 다시 해당 pkt를 전송한다.
- Timeout
- 너무 짧으면 ack를 수신 중에 다시 pkt를 전송
- 너무 길면 리소스 낭비
- 적당한 게 좋음 => RTT를 고려해서 Tiemout 시간을 설정함
- 단점
- pkt 하나를 보내고 그에 대한 ack를 기다려야 하기 때문에 병렬 처리가 안된다.
=> 속도가 느리다.
#Pipelined protocols: overview
- Pipelined : ack 수신과 상관없이 계속해서 pkt을 전송함
- Go-back-N
- 계속해서 pkt을 보내다가, 도착하지 않은 pkt으로 돌아가서 N개만큼 다시 전송
- N : Window Size, 안 온 데이터에 대한 크기, 숫자, 개수
- receiver는 오직 누적 ACK를 전송한다.
- sender는 가장 오래된 unACKed packet에 대한 timer를 가지고 있다.
- Timer가 만료되면, unACKed packet을 기준으로 뒤의 packet을 다 재전송한다.
- Best Case : 5번 pkt이 안 왔는데 그 뒤로 N개만큼의 데이터가 싹 다 안 온 경우
- Worst Case : 5번 pkt만 안오고 그 뒤로 N개만큼의 데이터가 다 도착한 경우
=> 뒤로 도착한 N개를 버리고 5번부터 N개 만큼 재전송 - Selective Repeat
- unACKed packet만 전송
- receiver는 각각의 packet에 대한 개별적인 ack를 전송함
- sender는 각각의 unACKed packet에 대한 타이머를 유지함
- Timer가 만료되면 unACKed packet만 재전송
- 관리가 어려움 => 복잡도가 증가
#Go-Back-N: sender
- k-bit sequence Number가 pkt header에 들어있다.
- ACK(n) : Cumulative ACK = 순서대로 하나씩 쌓는다.
- Timeout : 가장 높은 순서의 packet으로 돌아가서 n개의 packet을 재전송
#Go-Back-N: receiver
- ACK-only : 항상 높은 seq #로 순서대로 올바르게 수신한 packet에 대한 ACK를 전송한다.
- out-of-order packet
- 못 받은 데이터 뒤에 ACK는 다 폐기한다.
- 가장 높은 seq #로 re-ACK pkt를 보낸다.
#Selective Repeat
- receiver는 올바르게 수신된 모든 packet을 개별적으로 승인
- sender는 ACK가 도착하지 않은 packet만 재전송
- sender window
- N개의 연속된 seq #들
- 전송되고 unACKed packet한 seq #를 제한함
Sender
- data from above : 가용한 seq #가 window안에 있으면, packet을 보낸다.
- timeout(n) : packet n을 다시 보내고, timer를 다시 시작한다.
- ACK(n) in [sendbase, sendbase+N] : 받은 packet n을 표시한다.
Receiver
- packet n in [rcvbase, rcvbase+N-1]
- ACK(n)을 보낸다
- out-of-order : buffer
- in-order : 전달, 아직 수신되지 않은 packet으로 window 이동 - packet n in [rcvbase-N, rcvbase-1]
- ACK(n)
#Selective repeat : dilemma
seq #의 범위를 잘 판단해야 한다.
2. Connection-oriented transport: TCP
#TCP : Overview
- point-to-point
- reliable, in-order
- pipelined
- connection-oriented
- handshaking - flow controlled
#TCP segment structure
#TCP sequence numbers, ACKs
#TCP reliable data transfer
- TCP는 프로세스 간에 reliable한 segment의 전송을 만든다.
• pipelining of segments
• cumulative ACKs
• single retransmission timer - 재전송은
• timeout events
• duplicate acks
가 trigger 한다.
#TCP: retransmission scenarios
#TCP Fast Retransmit
Timeout이 남았는데, 같은 packet에 대한 3개의 ACK를 받으면 timeout을 무시하고 해당 packet을 보냄
#TCP Flow Control
receiver가 sender를 조정해서, sender가 receiver의 buffer가 overflow하지 않게 데이터를 안보내는 것.
- sender는 unACKed data의 수를 receiver의 rwnd 값으로 제한한다.
- 받는 쪽의 buffer가 넘치지 않는 것을 보장한다.
#TCP Connection Management
데이터를 교환하기 전에, sender/receiver 사이에 handshake가 있다.
#TCP 3-way handshake
#Closing a TCP Connection
3. Principles of congestion control
Congestion : network가 처리하기에 너무 많고 너무 빠른 데이터가 전송되는 것.
Buffer overflow가 해소되지 않아서 TCP 전송이 안되면 계속해서 데이터 전송을 시도함
=> overflow가 해소되기 전까지 데이터를 보내지 않는다.
4. TCP congestion control
#TCP congestion control: AIMD
- Additive Increase : loss를 만나기 전까지 cwnd를 1씩 증가시키는 것.
- Multiplicative Decrease : loss 이후에 cwnd를 반으로 줄이는 것
#TCP Slow Start
처음부터 많이 보내지말고 천천히 보내는 방법.
#TCP: From slow start to Congestion Avoidance
- 1개를 보낸다.
- Loss가 발생하지 않으면 2배씩 올린다.
- thresh hold를 만나면 1씩 증가시킨다.
- loss가 발생하면 1로 내린다.
- 1~4번 반복
TCP Reno
- 1개를 보낸다.
- Loss가 발생하지 않으면 2배씩 올린다.
- thresh hold를 만나면 1씩 증가시킨다.
- loss가 발생하면 thresh hold까지 내린다.
- 3, 4번 반복
#TCP Fairness
TCP는 공정하다.
#Explicit Congestion Notification (ECN)
network-assisted congestion control : network가 congestion control을 도와준다.
'CS > 컴퓨터네트워크' 카테고리의 다른 글
컴퓨터네트워크 07주차 Network Layer 02 (0) | 2023.01.04 |
---|---|
컴퓨터네트워크 06주차 Network Layer 01 (0) | 2022.12.29 |
컴퓨터네트워크 04주차 Application Layer_03/Transport Layer_01 (0) | 2022.12.27 |
컴퓨터네트워크 03주차 Application Layer_02 (0) | 2022.12.26 |
컴퓨터 네트워크 02주차 Introduction/Application layer (0) | 2022.12.23 |