【发布时间】:2012-07-02 19:35:39
【问题描述】:
好的,所以我有这个家庭作业问题,我知道“主机 X”向“主机 Z”发送了一个数据包,并且 Seq=46 和 Ack=87 并且有效负载/数据 = 'Hello?'
从那里我得到:从主机 Z 发送到主机 X 的数据包,有效负载='Go away',最后一个数据包从主机 X 发送到主机 Z,数据='No!'
作业是找出最后两个数据包的 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)
我相信这就是全部,我上面的内容是正确的,但如果我做错了什么,请告诉我。再次感谢大家。
【问题讨论】:
-
我猜“正确”的答案是假设一个字符 = 一个字节,但是随着 unicode 的普遍使用,旧规则不再被信任。要求数据的字符编码绝对是一个相关的问题,可以发回给老师。
-
谢谢安德斯,我原以为每个字符一个字节,但我在网上看到不同的东西,我不确定在处理 tcp 时测量字符时 ASCII 是否是正确的方法。 ..
-
我认为就家庭作业而言,您所写的内容几乎可以肯定是正确的。如果它让你感觉更好,你可以写下你假设 1 个字节/字符。如果您的教科书有示例,您可以查看这些示例,看看它们是否做出了相同的假设。
-
什么是SYN=X?我认为 SYN 没有价值。有一些标志,其中 2 个是 SYN 和 ACK。有一些值 Seq Ack Win Len ...。你是说 Seq=x 吗?
-
它可以是任何字符编码,它不是 TCP 的工作来关心它是在网络堆栈中很远的地方去关心。但是你可以说你假设它是 utf-8。对于 7 位 ASCII 中的字符集(问题中的字符),utf-8 每个字符有 1 个字节。