下面的快照捕获包含对 Web 服务器的单个 HTTP 请求,其中客户端 Web 浏览器向服务器请求一些文件,服务器返回包含请求的文件的 HTTP/1.1 200(OK)响应:
这就是我的理解!!
数据包#4 连接建立后,客户端启动推送功能并发送包含客户端对服务器文件请求的有效负载(HTTP 请求)!!!
在服务器端,接收有效载荷时,它会增加 ACK(有效载荷大小为 207),从而变为 208。
之后,在数据包#7上,服务器向客户端响应请求。它发送了 1368 字节的有效负载。这种情况发生了两次,因为我们可以看到序列号为 2737。
如果到目前为止我错了,请纠正我。
来自数据包#9
为什么第 9 个数据包上的序列号变为 208 且 ACK=3680。客户端是否有任何传输?
在数据包#11上,序列号如何再次变为3680并且ack = 343。
有人能帮我解释一下数据包#9
答案1
我认为你只需要记住这两个关键思想:
- 序列号是数据包的第一个字节,而不是长度。
- 确认号基本上是说,“我期望从另一端看到的下一个序列号是 X”
因此,回答你的问题:
为什么第 9 个数据包上的序列号变为 208 且 ACK=3680。客户端是否有任何传输?
数据包 9 的序列号为 208,因为在数据包 4 中,客户端向 Web 服务器发送了 HTTP GET 请求。数据包 4 的序列号为 1,因此当您添加 207 的有效负载时,客户端应使用的下一个序列号是 208。您可以看到在数据包 5 中,来自服务器的 ACK 是 208。换句话说,服务器确认所有数据(包括 207),并期望来自客户端的下一个序列号为 208。
数据包 9 的确认号为 3680,因为服务器已发送了 3 个带有有效载荷的数据包。数据包 6 的有效载荷为 1368,数据包 7 的有效载荷为 1368,数据包 8 的有效载荷为 943。同样,当您考虑到序列号是数据包中的第一个字节时,这是有道理的。例如,如果您查看数据包 6,序列号为 1,但是您可以从数据包 7 中看到序列号已跳转到 1369,因此您可以确定数据包 6 的有效载荷一定是 1368。
在数据包#11上,序列号如何再次变为3680并且ack = 343。
同样的原则也适用于此。对于数据包 11,序列号为 3680,因为服务器发送的最后一个数据包(数据包 8)的序列号为 2737,加上有效载荷为 943,因此它应该使用的下一个序列号是 3680。
确认号为 342,因为客户端在数据包 10 中发送了有效载荷。数据包 10 的序列号为 208,因此我们可以计算出 PSH/ACK 中的有效载荷一定是 134。同样,服务器表示“我确认了您的所有数据,包括字节 341。我希望从您那里看到的下一个序列号是 342。”
希望这对您有所帮助,如果您需要澄清任何内容,请告诉我。
友情建议:不要使用截图工具然后用手机拍照,只需发布屏幕截图即可。:)