【发布时间】:2019-06-09 02:19:50
【问题描述】:
我在 UBoot 上实现了自己的 TCP 协议栈和一个非常简单的 HTTP 服务器,我遇到了客户端在发送 FIN/ACK/PSH 后不发送 FIN/ACK 的问题。关于 TCP 序列和 Ack 以及内容长度,HTTP 和 TCP 内容似乎都是正确的,但客户端仅在第一次尝试任何 URL 时以 FIN 响应。对访问 URL 的任何后续尝试都不会以 FIN 响应。谁能告诉我我的 TCP 或 HTTP 内容中缺少什么导致客户端无法关闭连接?
我提供了一个截图,以防有人对此问题感兴趣 Link to packet capture
预期的结果应该是客户端显示 HTTP 404 Not found 的内容。但是,我所看到的只是浏览器是否一直在不停地加载,直到客户端发送 TCP RST,并且无法找到浏览器显示页面。
【问题讨论】:
-
您的 pcap 充满了不相关的数据包,并且不清楚 pcap 的哪个部分与您的问题相关。请将您的 pcap 减少到基本部分,并在您的问题中清楚地描述 pcap 的哪些部分(即基于
tcp.stream的数量或所涉及的端口号的 TCP 流)与您看到的行为的哪一部分相关。跨度> -
对不起,我的错。对于过滤器,只需过滤 IP 地址 192.168.99.9 和 TCP。主要是对 /ncsi.txt 的请求。请让我再上传一张,很抱歉造成混乱。
-
请让我评论另一件事。我使用 chrome 的 Developer Analyzer,发现浏览器本身实际上并没有收到响应。所以很可能问题仍然在于 TCP 会话。 tcp.stream 0 是第一个也是唯一一个从客户端成功接收 FIN/ACK 的。后面的就不行了。此行为也可以应用于其他 URI。