好的,所以我有这个问题要做作业,我给'主机X'发送'主机Z'一个数据包,Seq = 46和Ack = 87,有效载荷/数据='你好?'
从那里我得到:从主机Z发送到主机X的数据包,有效负载='离开',最后一个数据包从主机X发送到主机Z,数据='不!'
功课是找出最后两个数据包的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)
我相信这就是全部,我上面所说的是正确的,但如果我做错了,请告诉我。再次感谢大家。
答案 0 :(得分: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!'
请注意,至少还有一个序列,即使应用层没有其他任何内容。