2

好的,所以我有这个家庭作业的问题,我得到'Host X'发送'Host Z'一个数据包并且Seq = 46和Ack = 87并且有效负载/数据='你好?

从那里我得到:从主机 Z 发送到主机 X 的数据包,有效载荷 =“离开”,最后一个数据包从主机 X 发送到主机 Z,数据 =“否!”

作业是找出最后两个数据包的 Seq 和 Ack 的值是多少。我知道握手已经结束,所以它不仅仅是将 1 添加到 Seq 并将其放入下一个数据包的 Ack 中那么简单。我在某处读到,当接收到有效负载时,接收者会发出一个等于 1 + 有效负载长度(以字节为单位)的 Ack。如果这是正确的,我将如何将这些字符串转换为字节?Seq 会发生什么?那仍然是从先前的数据包 Ack 中直接抓取的吗?

非常感谢大家。

假设每个字符等于一个字节,我会继续回答我的问题,如果我错了,希望有人能纠正我。

我假设我得到的 Seq 和 Ack 是握手的第一个传输,所以:

X->Z Seq=45 Ack=NULL
X<-Z Seq=86 Ack=46
X->Z Seq=46 Ack=87

X->Z Seq=46 Ack=87 data='Hello?'  (6 bytes)
X<-Z Seq=87 Ack=52 data='Go away' (7 bytes)
X->Z Seq=52 Ack=94 data='No!'     (3 bytes)

我相信这就是全部,我上面的内容是正确的,但是如果我做错了什么,请告诉我。再次感谢大家。

4

1 回答 1

1

我建议安装wireshark,然后玩。您可以查看各个 TCP 段、标志和数据。一段时间后你会感觉到它是如何工作的。

我认为您的答案是正确的,您也可以像这样添加标志和 len 以帮助理解。

X->Z [SYN]      Seq=45
X<-Z [SYN, ACK] Seq=86 Ack=46
X->Z [ACK]      Seq=46 Ack=87

X->Z [ACK]      Seq=46 Ack=87 Len=6 data='Hello?'  
X<-Z [ACK]      Seq=87 Ack=52 Len=7 data='Go away'
X->Z [ACK]      Seq=52 Ack=94 Len=3 data='No!'

请注意,至少还有一个序列,即使应用程序层没有其他任何操作。

于 2012-07-03T22:24:51.533 回答