📘 [Computer Network] TCP Timeout & Retransmission

고민정·2023년 11월 8일
0

Computer Network

목록 보기
10/12
post-thumbnail

03-2


📌 How does TCP provide end-to-end reliability?

실제 인터넷이 reliable하지 않기 때문에 (link error, packet loss ...) reliable TCP를 이용한다.

💡 Challenges of Reliable Data Transfer

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는 알 수 없다.


💡 TCP Reliable Delivery

Timeout은 누가 재는거야? sender? receiver?

  • Detect bit errors : checksum
    Used to detect corrupt data at the receiver
    checksum 후에 error가 있으면 drop하고 sender가 timeout와서 retransmission을 기다린다.
  • Detect missing data : seqeunce number
    Used to detect a gap in the stream of bytes
    sequence number가 비는 곳을 확인해 loss난 곳이 어디인지 확인한다.
  • Recover from lost data : retransmission
    Sender retransmits lost or corrupted data

💡 TCP ARQ

ARQ (Automatic Repeat reQuest)

  • ACK and Timeout

    • Receiver sends ACK when it receives packet
    • Sender waits for ACK and times out
      sender는 ACK이 정확이 언제오는지 모른다.
  • Stop and wait ARQ

    • Simplest ARQ protocol
    • Send one packet, stop and wait until ACK arrives
      UDP 처럼 data를 보내고 다음 데이터를 바로 보내는 것이 아닌,
      데이터를 보내고 ACK을 기다린다.

💡 TCP sender events

data received from application layer -> transport layer

  • create segment with seqeunce number
  • start timer if not alreadt running
  • timeout
    • retransmit segment that caused timeout
    • restart the timer
  • ACK received
    if ack previously unacked segments
    • update what is known to be ACKed
      기존의 timer를 지워버린다.
    • start timer if there are still unacked segments

💡TCP : retransmission scenarios

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의 재전송이다.

0개의 댓글