我正在阅读一本关于 TCP 协议“选择性重复”的教科书:
我们假设数据包不能在发送方和接收方之间的通道内重新排序。当发送者和接收者通过单根物理线路连接时,这通常是一个合理的假设。但是,当连接两者的“通道”是网络时,可能会发生数据包重新排序。实践中采用的方法是确保在发送方“确定”任何先前发送的序列号为 x 的数据包不再在网络中之前,不会重复使用序列号。这是通过假设一个数据包不能在网络中“存在”超过某个固定的最大时间量来完成的。
我很困惑,下面是我的两个问题。
Q1-什么是“通道可以被认为本质上是缓冲数据包并在未来任何时候自发地发出这些数据包。” 意思是?为什么我们需要缓冲一个旧数据包?接收者忽略它不是更好吗?
Q2-假设窗口大小为 2,可用序列号为 0,1,2,3。发送方首先发送数据包 0、数据包 1,而数据包 0 不知何故被击中,需要很长时间才能到达,因此发生超时,发送方必须再次发送数据包 0,但这一次数据包 0(新)按时到达。然后发送方发送数据包2,数据包3,都被接收方接收。然后发送方即将发送数据包0(新)和数据包1(新),但旧数据包0现在到达接收方,因此接收方无法知道这个数据包是旧数据包还是新数据包。那么“假设一个数据包不能在网络中“存活”超过某个固定的最长时间”如何解决这个问题呢?这是否意味着数据包标头包含发送时间?