TCP错误恢复

网络工程 通讯协议 协议理论 UDP 传输协议
2021-07-09 10:55:32

考虑两台机器 A 和 B,机器 A 在传输过程中向 B 发送了 3 个数据包,序列号为 1、2、3,只有数据包 1 和 3 被 B 接收。现在 B 请求数据包 2,机器 A 发送请求的数据包。

我在这里有一个疑问,机器是将所有数据包存储在某个内存中作为缓冲区还是再次制作数据包并仅发送请求的数据包?如果是基于有缓冲存储器来存储所有数据包,那么这个缓冲区在服务机器中存储在哪里?当这个缓冲区被清除时?

数据包恢复的整个过程是如何进行的?

1个回答

这本书很好地回答了你的问题:

正在传输的节点还使用确认号、序列号和窗口值来衡量先前传输的数据保留多长时间。已传输并正在等待确认的每个段都被放置在 重传队列中,并被接收方应用进程认为是未确认的。当一个段被放入重传队列时,一个计时器开始指示发送方将等待确认的时间。

接着,

这个重传队列的目的有两个:

它允许传输节点分配内存容量以保留先前已传输的段。如果一个段丢失(拥塞、丢包),它可以从重传队列中传输,并保持在那里直到被接收方应用进程确认(窗口更新)。它允许原始段一旦被放入重传队列,就可以从原始传输队列中删除。这实际上允许 TCP 不断地从本地传输应用进程中提取数据,同时不损害传输节点在分段丢失或以其他方式未确认时重新传输的能力。