没有合理的 TCP 实现会这样做,但有人知道如果 TCP 端点针对特定序列号重新传输不同的数据,实际上会发生什么吗?我在 RFC 793 或 RFC 9293 中找不到任何指定特定行为的内容,Google 搜索也没有找到有关该主题的任何讨论。
例如,在 A 和 B 之间的会话中:
- A->B - 八位字节 0-99
- A->B - 八位字节 100-199 - 丢失(或故意从未发送)
- A->B - 八位字节 200-299
- B->A——确认 100
- 重传超时
- A->B - 不同的八位字节 200-299
- A->B - 八位字节 100-199
是否有人知道关于实际实现如何响应此问题的讨论(例如,始终使用第一个副本)或它们之间是否存在差异?如果发送方更改数据包边界,情况会有所不同吗(例如,重新传输的数据包发送 100-149,然后发送 150-249,其中 200-249 与之前不同)?
答案1
只有当另一端表示未收到数据或未收到数据包确认时,端点才应重新传输。如果您问当数据已收到时重新传输会发生什么,那么另一端很可能会丢弃重复的数据包 - 但实际情况可能因实施而异;在这种情况下的行为是不确定的。