好的,所以我有这个作业问题,我知道“主机 X”向“主机 Z”发送了一个数据包,Seq=46 和 Ack=87,有效负载/数据 =“你好?”
从那里我得到:一个从主机 Z 发送到主机 X 的数据包,有效负载='Go away',最后一个数据包从主机 X 发送到主机 Z,数据='No!'
作业是找出最后两个数据包的 Seq 和 Ack 的值。我知道握手已经结束,所以它不仅仅是将 Seq 加 1 并将其放入下一个数据包的 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)
我相信这就是全部,我上面的内容是正确的,但如果我做错了什么,请告诉我。再次感谢大家。
最佳答案
我会推荐安装 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!'
请注意至少还有一个序列,即使应用层没有做任何其他事情也是如此。
关于握手后的 TCP : seq ack homework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11292810/