握手后的TCP:seq ack作业

时间:2012-07-02 11:31:35

标签: tcp handshake

好的,所以我有这个问题要做作业,我给'主机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)

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

1 个答案:

答案 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!'

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