好的,我知道TCP可以使用序列号来处理片段的排序,但我也认为在TCP之上工作的应用程序必须使用序列号来确保处理从应用程序角度来看有意义的数据包按正确的顺序。例如,如果应用程序发送packet1和packet2(p1,p2),TCP将为p1和p2创建片段,并确保以正确的顺序组装这些片段以在另一端创建p1和p2,但它不保证p1和p2在应用层中以正确的顺序到达?
那么,我的理解是否正确?
答案 0 :(得分:1)
不,使用TCP时不需要序列号。正如你所说,TCP已经拥有它们,你收到的流(不是数据包!)与你发送的完全相同。你需要的是以某种方式将它分成数据包。之后,您将拥有所有数据包,并且顺序正确。
TCP流中标记数据包边界的流行方法是作为数据包标头的数据包大小,例如
[packet size: 4 bytes][your packet payload][packet size:...
答案 1 :(得分:1)
TCP按照应用程序层指定的顺序重新排列数据包。你在想什么是UDP。 UDP没有固有的顺序,因为所有数据包都是相互独立的。 使用TCP,您可以将订单留给此(链接)图层。使用UDP,您必须管理应用程序层中的排序。
这会回答你的问题吗?