握手后的 TCP : seq ack homework

标签 tcp handshake

好的,所以我有这个作业问题,我知道“主机 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/

相关文章:

python - 让 python tcp 服务器在发送后发送和接收消息?

TCP/RTMP 握手

java - 什么时候抛出 "java.io.IOException:Connection reset by peer"?

SSL 握手异常 : jetty server does not pick any of cipher to initiate SSL handshake

python - Python 中的 SSL : Why it doesn't send certificate to server?

c - 为什么服务器在关闭客户端连接时进入无限循环

tcp - TCP 监听器能否从同一 IP/端口组合接收多个连接?

go - 如何更改 Golang 中客户端和代理之间的 MQTT keepAlive(handshake) 间隔?

kotlin - Ratchet PHP 服务器建立连接,但 Kotlin 从未收到确认

java - 获取请求handshake_failure :javax.net.ssl.SSLHandshakeException