if large window + data packet 2 is lost, then sender will see
ACK 0, ACK 1, ACK 1, ACK 1, ACK 1, ACK 1
duplicate ACKs indicate missing packet 2
shouldn’t wait for timeout
\(\rightarrow\) TCP heuristic: retransmit immediately after $$3 duplicate ACKs
| last ACK recv’d (LAR) | 10 |
| last frame sent (LFS) | 15 |
| send window size (SWS) | 5 |
what probably happened if we receive an ACK for…
| A. if network reorders frames |
| B. lost ACK for frame \(\le\) 10 |
| C. lost ACK for frame \(>\) 10 |
| D. lost frame 11 |
| E. resent frame from timeout |
| last ACK recv’d (LAR) | 10 |
| last frame sent (LFS) | 15 |
| send window size (SWS) | 5 |
| A. receiving ACK 12 | B. receiving ACK 13 |
| C. receiving ACK 14 | D. sending frame 16 |
| last ACK recv’d (LAR) | 4 |
| last frame sent (LFS) | 6 |
| send window size (SWS) | 5 |
| A. send it now, advancing LFS |
| B. wait until we get an ACK for 5 or 6 to send it |
| C. wait until we get an ACK for 6 to send it |
| D. wait until the frame with sequence number 6 is resent to send it |
| D. something else |
| last ACK recv’d (LAR) | 4 |
| last frame sent (LFS) | 8 |
| send window size (SWS) | 4 |
| A. send it now, advancing LFS |
| B. wait until we get an ACK for 5 or 6 or 7 or 8 to send it |
| C. wait until we get an ACK for 6 or 7 or 8 to send it |
| D. decline to accept the data because we will never be able to send it |
| E. something else |
track variables:
when receiving ACK \(LAR < X \le LFS\):
whenever SWS [send window size] > LFS - LAR and
data for frame LFS + 1 is available:
track variables:
when receiving frame \(LFR < X \le LAF\):
LFR \(\leftarrow\) (first missing frame after LFR) - 1
LAS \(\leftarrow\) LFR + RWS
simulator from upcoming assignment
–delay 1 –bandwidth-forward 10 –bandwidth-backward 100 –buffer 30| A. 1 time unit | B. 1.1 time unit | C. 1.2 time unit |
| C. 1.4 time unit | D. 1.9 time unit | E. 2.0 time unit |
| F. 2.1 time unit | G. something else | |
round-trip time of 2 time units
can send 10 data frames per time unit
= can send 20 data frames while waiting for ACK
‘‘bandwidth-delay product’’
max possible queuing delay suggests window size of 30
problem: ‘‘bursts’’ temporarily exceed queue size
achievable average queue size not that high
sender could moderate by ‘‘pacing’’ packets
flow control
congestion control
protocol so far requires arbitrarily large sequence numbers
would like to use smaller sequence numbers
question: what goes wrong when we reuse sequeunce numbers?
TCP tries to assume 120 second ‘‘maximum segment lifetime’’
original TCP used 32-bit sequence number identifying byte number (not segment number)
problem: means wraparound happens on modern (Gigibit+) links in seconds!
workaround: add additional 32-bit timestamp field
if large window + data packet 2 is lost, then sender will see
ACK 0, ACK 1, ACK 1, ACK 1, ACK 1, ACK 1
duplicate ACKs indicate missing packet 2
shouldn’t wait for timeout
\(\rightarrow\) TCP heuristic: retransmit immediately after $$3 duplicate ACKs
| last ACK recv’d (LAR) | 10 |
| last frame sent (LFS) | 15 |
| send window size (SWS) | 5 |
what probably happened if we receive an ACK for…
| A. if network reorders frames |
| B. lost ACK for frame \(\le\) 10 |
| C. lost ACK for frame \(>\) 10 |
| D. lost frame 11 |
| E. resent frame from timeout |
| last ACK recv’d (LAR) | 10 |
| last frame sent (LFS) | 15 |
| send window size (SWS) | 5 |
| A. receiving ACK 12 | B. receiving ACK 13 |
| C. receiving ACK 14 | D. sending frame 16 |
| last ACK recv’d (LAR) | 4 |
| last frame sent (LFS) | 6 |
| send window size (SWS) | 5 |
| A. send it now, advancing LFS |
| B. wait until we get an ACK for 5 or 6 to send it |
| C. wait until we get an ACK for 6 to send it |
| D. wait until the frame with sequence number 6 is resent to send it |
| D. something else |
| last ACK recv’d (LAR) | 4 |
| last frame sent (LFS) | 8 |
| send window size (SWS) | 4 |
| A. send it now, advancing LFS |
| B. wait until we get an ACK for 5 or 6 or 7 or 8 to send it |
| C. wait until we get an ACK for 6 or 7 or 8 to send it |
| D. decline to accept the data because we will never be able to send it |
| E. something else |
track variables:
when receiving ACK \(LAR < X \le LFS\):
whenever SWS [send window size] > LFS - LAR and
data for frame LFS + 1 is available:
track variables:
when receiving frame \(LFR < X \le LAF\):
LFR \(\leftarrow\) (first missing frame after LFR) - 1
LAS \(\leftarrow\) LFR + RWS
simulator from upcoming assignment
–delay 1 –bandwidth-forward 10 –bandwidth-backward 100 –buffer 30| A. 1 time unit | B. 1.1 time unit | C. 1.2 time unit |
| C. 1.4 time unit | D. 1.9 time unit | E. 2.0 time unit |
| F. 2.1 time unit | G. something else | |
round-trip time of 2 time units
can send 10 data frames per time unit
= can send 20 data frames while waiting for ACK
‘‘bandwidth-delay product’’
max possible queuing delay suggests window size of 30
problem: ‘‘bursts’’ temporarily exceed queue size
achievable average queue size not that high
sender could moderate by ‘‘pacing’’ packets
flow control
congestion control
protocol so far requires arbitrarily large sequence numbers
would like to use smaller sequence numbers
question: what goes wrong when we reuse sequeunce numbers?
TCP tries to assume 120 second ‘‘maximum segment lifetime’’
original TCP used 32-bit sequence number identifying byte number (not segment number)
problem: means wraparound happens on modern (Gigibit+) links in seconds!
workaround: add additional 32-bit timestamp field