=== Pipelined protocols ===
1. Pipelined protocols
- pipelining: sender allows multiple, "in-flight", yet-to-be acknowledged packets : 한꺼번에 여러개의 패킷을 보내자는 것이 목적이다.
- range of sequence numbers must be increased : sequence number이 늘어나야 한다.
- buffering at sender and/or receiver : buffering이 필요하다.
- two generic forms of pipelined protocols: go-Back-N, selective repeat
Pipelining: increased utilization
지금은 ACK을 받기 전에 3개의 패킷을 보내버리는 것이다. ACK을 받으면 그다음 패킷을 보낸다.
이렇게 할 경우 utilization이 3배로 늘어난 것을 확인할 수 있다.
Pipelined protocols: overview
- Go-back-N
- sender can have up to N unacked packets in pipeline : Go-back-N은 파이프라인에 ack을 받지 않은 패킷들을 N개까지 보낼 수 있다.
- receiver only sends cumulative ack : receiver가 ACK을 보낼떄는 모든 패킷을 받았을 때에만 ACK을 보낼 수 있다.
- doesn't ack packet if there's a gap : 첫번째 패킷에 대해서 timer가 존재
- sender has timer for oldest unacked packet
- when timer expires, retransmit all unacked packets
- Selective Repeat : 비어있는 패킷만 재전송하겠다.
- sender can have up to N unacked packets in pipeline
- receiver sends individual ack for each packet : individual ack을 보내는 것. 즉 받은 패킷에 대한 segment number 가 담긴 ACK만을 보낸다.
- sender maintains timer for each unacked packet : sender가 각각의 패킷에 대해 timer을 가지고 있다. 그래서 받지 못한 ACK에 대한 패킷을 재전송한다.
- when timer expires, retransmit only that unacked packet