0%

Trasport layer

Automatic Repeat Request (ARQ)

packet loss

当数据包丢失的时候,过了一段时间没有接收到 ack,sender 就会重新发送包

ack loss

当 ack 没有接收,sender 再次发送包 0,但是对于rsv已经存在,查看序号之后就会丢弃这个包,但是发送回 ack。

只需要 1 和 0 作为序号,来判断上一个包是否成功接收,所以 ARQ 又是 Alternating bit protocol

Draw back

Round Trip Time (RTT)

需要等待很长,在等待 ack 时间之内,link 没有被使用

远远小于 1

如果不等待? R* RTT bits more send

Length of pipeline 𝐿 + 𝑅×𝑅𝑇𝑇 bits

𝑅×𝑅𝑇𝑇 is called the delay-bandwidth product of the communicating pair and indicates the length of the pipeline

代表?最大的 un ACK 包数量在 pipeline 里面

How many bits in the pipeline?

这也关于 rsv 方的 buffer,比如有 B bits

所以最多的 un ACK 是 min(𝐵, 𝐿 + 𝑅×𝑅𝑇𝑇)

Pipelined

可以允许多于 1 的 un ACK 包同时存在

Go-Back-N(GBN)

这个实际理解起来比较复杂……大概 rsv 只会接收比现在 ack 多 1 的 pkt, 而 sender 只会根据最大的 ack 来调整自己的窗口 size,如果较小的 ack 丢失,会直接忽略并且继续 extend 窗口 size

Selective Repeat (SR)

rsv 不关注顺序,只是给每一个包单独发送 ACK

sender 负责给每个 time out 的包计时,如果超时没有获得 ACK,重新发送

rsv 可以接收 out of window 的数据包,如果它发送的 ACK 没有被接收

当 sender 最小是 n,rsv 最小是 m,窗口是 M,那么

m-n <= N

window size 最多可以有 2N 个不同的包存在,所以 windows size 应该是 half of the seq number

TCP number

TCP number, 每一块第一个 bit 的编号

TCP 为了节省,把 ACK 加入了数据包中

A segment can carry data and serve as an ACK

几种丢包:rsv 的 ACK 丢包

因为 ACK 是连续的,所以中途丢了一个 ACK 包不要紧

如果 ACK delay,会重传但是 rsv 会忽略

TCP fast retransmit

如果中途 sender 丢了一个包,rsv 会重复发送最后一个正确接收的包,重复三次之后 sender 就会重新发送

ACK 带着的 seq 就是希望下一个 sender 发送的第一个 seq

Upon receiving 3 duplicate ACKs for a segment, TCP sender retransmits that segment without waiting for timeout

TCP 包里重要的三个

seq num: 这个包第一个 byte 的 seq num

ACK num:希望下一个接收的包的 seq

rsv window: flow control 使用

flow control

data in the pipeline should not exceed the receive buffer size

  • Flow control

LastByteSent - LastByteAcked <= rwnd