有人能解释一下接收方是如何知道两个不连续的TCP段是否属于同一个数据包的吗?

有人能解释一下接收方是如何知道两个不连续的TCP段是否属于同一个数据包的吗?,tcp,Tcp,有人能解释一下,接收方是如何知道两个不连续的TCP段属于相同或不同的数据包的?它如何知道下一段是否是数据包中的最后一段 TCP不处理碎片。这是一个IP问题。数据包只有在完成时才到达TCP级别。IP在报头中使用特殊字段,指示数据包是否分段,如果是,则指示接收到的片段是否是最后一个 您可以看一看: 接收器不会将TCP段组装成数据包,而是将它们组装成流。接收机通过其序列号知道其接收段在流中的位置 您是否希望接收应用程序的read()系统调用的计数结果与发送应用程序的write()系统调用一致?如果是

有人能解释一下,接收方是如何知道两个不连续的TCP段属于相同或不同的数据包的?它如何知道下一段是否是数据包中的最后一段

TCP不处理碎片。这是一个IP问题。数据包只有在完成时才到达TCP级别。IP在报头中使用特殊字段,指示数据包是否分段,如果是,则指示接收到的片段是否是最后一个

您可以看一看:


接收器不会将TCP段组装成数据包,而是将它们组装成流。接收机通过其序列号知道其接收段在流中的位置


您是否希望接收应用程序的
read()
系统调用的计数结果与发送应用程序的
write()
系统调用一致?如果是这样,你会失望的。TCP流是字节流,而不是数据包流。它们既不保留也不尊重发送系统调用的边界。

感谢您的回答,但从您添加的链接中可以看出,“TCP负责跟踪数据传输的各个单元(称为段),消息被划分为多个单元,以便通过网络进行有效路由。”是的,但这是另一个问题(如果这是你的要求,那么我误解了你的问题)。这意味着消息不是按原样发送的,而是分成数据包。数据包的大小取决于MSS/MTU。TCP使用头中的一个特殊字段(“序列号”)对接收到的数据包进行排序,并管理不连续的数据包。