这是关于三种不同协议(GBN、SR、TCP)处理传输时序和丢包的行为比较。我们可以分别填充并解释它们的处理机制:
GBN(Go-Back-N)协议:
类型 | 发送方的计时器保存的是啥 | 接收方收到失序的分组怎么办 | 超时的时候发送的超时的那个分组还是已经发送但是没有收到确认的分组 |
---|---|---|---|
GBN | 发送窗口中最早未被确认的分组 | 丢弃失序的分组,继续等待期望的分组 | 重发所有从超时分组开始的分组(包括超时的分组) |
解释:
- 计时器保存的内容:在GBN中,发送方使用单个计时器来监控发送窗口中最早的未被确认的分组。如果该计时器超时,发送方将重发从该分组开始的所有分组。
- 接收方处理失序分组:GBN的接收方只会接受按顺序到达的分组,对于失序到达的分组将直接丢弃,不会缓存。
- 超时处理:当发送方的计时器超时时,发送方会重发从超时的那个分组开始的所有分组,即便有些分组已经成功到达接收方但未确认。
SR(Selective Repeat)协议:
类型 | 发送方的计时器保存的是啥 | 接收方收到失序的分组怎么办 | 超时的时候发送的超时的那个分组还是已经发送但是没有收到确认的分组 |
---|---|---|---|
SR | 每个未确认的分组都有一个独立的计时器 | 缓存失序的分组,等待缺失分组到达后进行处理 | 只重发超时的那个分组 |
解释:
- 计时器保存的内容:在SR中,每个未被确认的分组都有一个独立的计时器,因此每个分组可以独立超时和重传。
- 接收方处理失序分组:SR的接收方会缓存失序到达的分组,不会丢弃。当接收方收到期望的分组后,它会按照顺序交付缓存的分组。
- 超时处理:如果某个分组超时,发送方只会重发这个超时的分组,而不会重发其他已经发送的分组。
TCP(Transmission Control Protocol):
类型 | 发送方的计时器保存的是啥 | 接收方收到失序的分组怎么办 | 超时的时候发送的超时的那个分组还是已经发送但是没有收到确认的分组 |
---|---|---|---|
TCP | 发送窗口中最早未被确认的字节(而非分组) | 丢弃 或者 缓存失序的分组,等待期望的分组后再按序交付 | 重发从超时的字节开始的段,具体根据不同的拥塞控制算法决定重发策略 |
解释:
- 计时器保存的内容:TCP使用字节流控制而不是基于分组,计时器通常用于监控发送窗口中最早未被确认的字节。
- 接收方处理失序分组:TCP接收方会缓存失序到达的分组,等待期望的字节块到达后再按顺序交付数据。
- 超时处理:TCP的超时重传机制依赖于拥塞控制算法。如果一个分组(段)超时,TCP将重传从超时的字节开始的段,根据算法(如快速重传、慢启动等)决定具体的重传范围。
这样填充和解释的表格有助于理解不同协议在数据传输中的错误处理和重传机制。
不同协议对发送窗口和接收窗口的大小有不同的规定,下面我们详细讨论 GBN、SR(Selective Repeat) 和 TCP 协议中窗口的管理。
1. GBN(Go-Back-N)协议:
- 发送窗口:大小为 ( 2 n − 1 ) (2^n - 1) (2n−1),即最多可以有 ( 2 n − 1 ) (2^n - 1) (2n−1)个未被确认的分组在网络中传输。这里 (n) 是用于序列号的比特数。例如,如果 (n = 3),那么发送窗口的大小最大为 7。
- 接收窗口:固定为1。也就是说,接收方只能按顺序接收分组,无法接受和缓存失序的分组。如果接收到一个失序的分组,接收方会丢弃该分组并发回最后正确接收的分组的ACK。
2. SR(Selective Repeat)协议:
- 发送窗口:大小为 (W \leq 2^{n-1})。SR协议的发送窗口的最大值为 (2^{n-1}),与GBN相比略小一半。原因是SR需要在接收方缓存失序的分组,因此为了确保序列号不会出现混淆,发送窗口最大为 (2^{n-1})。如果窗口太大,接收方可能无法区分一个分组是重传的旧分组还是新的分组。
- 接收窗口:接收窗口的大小等于发送窗口的大小,也就是 (W \leq 2^{n-1})。在SR协议中,接收方可以缓存失序的分组,因此它可以同时处理多个未按顺序到达的分组。接收方在收到某个丢失的分组后,会根据顺序依次交付缓存的分组。
3. TCP(Transmission Control Protocol):
-
发送窗口:TCP中的发送窗口大小是动态调整的,取决于接收方的接收能力和网络的拥塞状况。TCP使用两个机制来调整发送窗口:
- 接收方的接收窗口(Receive Window, rwnd):这是接收方通告给发送方的可用缓冲区大小,限制了发送方最多可以发送多少未被确认的数据。
- 拥塞窗口(Congestion Window, cwnd):这是根据网络拥塞状况动态调整的一个窗口,发送方基于这个窗口控制发送速率,避免网络过载。
TCP的发送窗口为接收窗口和拥塞窗口中的较小值:
发送窗口 = min(rwnd, cwnd)
。因此,TCP的发送窗口可以根据网络状况和接收方的反馈实时变化。 -
接收窗口:TCP的接收窗口同样是动态的,由接收方根据自身的缓冲区容量来通告。接收窗口的大小(rwnd)决定了接收方能够同时处理的未确认数据量,确保发送方不会发送超过接收方缓冲区容量的数据。
4. 总结对比:
协议类型 | 发送窗口大小 | 接收窗口大小 |
---|---|---|
GBN | 2 n − 1 2^n - 1 2n−1 | 固定为 1 |
SR | 2 n − 1 2^{n-1} 2n−1 | 2 n − 1 2^{n-1} 2n−1,与发送窗口相同 |
TCP | 动态调整: m i n ( r w n d , c w n d ) min(rwnd, cwnd) min(rwnd,cwnd) | 动态调整,取决于接收方缓冲区容量(rwnd) |
补充:
- GBN 和 SR 都基于序列号的位数 (n) 来确定窗口大小,GBN最大窗口是 2 n − 1 2^n - 1 2n−1,而SR由于需要处理失序分组,窗口大小限制为 2 n − 1 2^{n-1} 2n−1。
- TCP 不使用固定的窗口大小,窗口根据网络拥塞状况和接收方的能力动态变化,因此更加灵活,适合互联网等复杂的网络环境。