下一个数据包的序列号是否得到ack nr加上长度?
OR
下一个数据包的序列号是否为seq nr加上前一个
的长度和
数据包可以按随机顺序排列吗?如果是这样,为什么以及如何知道数据包丢失了?
答案 0 :(得分:0)
首先,有两组序列和确认号对,一组用于会话的每一侧。序列号是发送者的当前号码,确认号码是接收者对发送者的“下一个预期序列号”的想法。一般来说,他们的工作方式就是这样......
假设: HostA的初始序列号为100,HostB的初始序列号为200(这些数字是随机的,它们的起始值根本不重要,但它们是在TCP 3次握手期间建立的。)
场景:HostA向HostB发送1000字节的TCP有效负载:
Seq # Ack # TCP Payload (bytes) Next Seq #
----- ----- ------------------- ----------
100 200 1000 1100
这里,HostA的初始序列号假定为100,因为我们假设它正在发送1000字节的TCP有效载荷,我们计算下一个预期的序列号为100 + 1000 = 1100.这就是ACK#we从HostB寻找,这将向HostA表明HostB收到了所有1000字节的有效载荷,并期望HostA的下一个TCP段的序列号为1100.
HostB确认从HostA收到上述TCP段:
Seq # Ack # TCP Payload (bytes) Next Seq #
----- ----- ------------------- ----------
200 1100 0 200
这是HostB的序列和确认号码集。请注意,此集完全独立于HostA的集合。这里,HostB通过向HostA发送ACK#1100(初始序列号为100加上额外1000字节的有效载荷),向HostA承认发送方在前一个数据包中发送的所有1000字节数据的接收。 HostB自己的序列号200在这种数据传输中不起作用,除了向HostA指示HostB没有数据反向发送回HostA。
如果HostB确实 NOT 从HostA接收到此段,则ACK HostB最终将发送回HostA将仅携带100的ACK#,因此HostA将知道HostB未收到该段携带1000字节的有效载荷,因此应重新发送。
我希望有帮助吗?
有关详细信息和更多详细信息,请参阅RFC 793。