03-2
📌 How does TCP provide end-to-end reliability?
실제 인터넷이 reliable하지 않기 때문에 (link error, packet loss ...) reliable TCP를 이용한다.
TCP가 해결해야 하는 문제점
reliable channel
channel with but errors
checksum을 이용한다.
lossy channel with bit errors
congestion이 일어나면 packet loss가 일어날 수 있다.
reorder packets
receiver cannot distinguish loss from out-of-order
sender 쪽에서는 order하게 보냈는데 receiver가 out-of-order로 받은 경우
만약 receiver가 packet을 1 (empty) 3 4 5 6 ...
식으로 받았다고 할 때,
저 empty가 늦게 오는 것인지 loss가 난 것인지 receiver는 알 수 없다.
ARQ (Automatic Repeat reQuest)
ACK and Timeout
Stop and wait ARQ
data received from application layer -> transport layer
Duplicate data
중복된 데이터
ACK을 잃어버린 경우 (if no cumulative ACK)
host B는 ACK = 100을 보냈는데 ACK이 loss가 나서 A에게 전해지지 않았다.
A는 ACK이 오지 않았기 때문에 seq=92를 retransmit 해준다.
이렇게되면 hostB (receiver)는 seq=92를 두 번 받은 것이 된다.
이렇게 중복된 데이터를 받는 것을 Duplicate data 라고 한다.
receiver는 duplicate data를 받으면 drop한다.
그리고 duplicate data 가 왔기 때문에 ACK loss인 상황을 안다.
그래서 ACK = 100 을 다시 보내준다.
Data packet 이 loss난 경우
packet이 loss나면 ACK이 전송되지 않는다.
그렇기 때문에 timeout이 발생하여 sender는 retransmission을 해준다.
이렇게 retransmission data를 receiver가 받게 되면 그 때 ACK을 보낸다.
Cumulative ACK
ACK=100 을 전송하다가 loss가 났지만
seq=1--에 대한 ACK=120은 잘 전송이 됐기 때문에 retransmission은 없다.
Premature timeout (조급한 타임아웃)
seq=92, seq=100에 대한 ACK=100, ACK=120이 hostA의 timeout 내에 도착하지 못했다.
따라서 sender는 receiver가 데이터를 받지 못한것으로 간주하여 retransmit 해줬다.
retransmit 후에 아까 보낸 receiver의 ACK이 sender에게 전달되었다.
하지만 receiver는 중복된 seq=92 데이터를 두 번 받은 것이다.
이를 Duplicate data 라고 한다.
receiver B는 ACK의 timeout인지 ACK loss 인지 알 수 없다.
따라서 중복된 데이터는 drop하고 다음 받을 데이터인 ACK=120을 보낸다.
📌 불필요한 data와 ACK의 재전송이다.