【问题标题】:TCP after the handshake: seq ack homework握手后的 TCP:seq ack 作业
【发布时间】: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 个字节。

标签: tcp handshake


【解决方案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!'

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2017-10-09
    • 2014-04-27
    • 1970-01-01
    • 2023-03-25
    • 2021-12-12
    相关资源
    最近更新 更多