我正在UBoot上实现自己的TCP协议栈和一个非常简单的HTTP服务器,并且遇到了这样的问题,即在我发送FIN / ACK / PSH之后,客户端不发送FIN / ACK。关于TCP序列,Ack和内容长度,HTTP和TCP内容似乎都是正确的,但是客户端在第一次尝试访问任何URL时仅响应FIN。后续对访问的URL的任何尝试均不会以FIN响应。有人可以告诉我我的TCP或HTTP内容中缺少什么,导致客户端无法关闭连接吗?
我提供了一个捕获记录,以防有人对此问题感兴趣 Link to packet capture
预期结果应该是客户端显示未找到HTTP 404的内容。但是,我只看到浏览器是否一直不停地加载,直到客户端发送TCP RST,并且找不到浏览器显示的Page。
答案 0 :(得分:0)
在发出问题的流中(例如pcap中的tcp.stream eq 1
),客户端不会确认来自服务器的404,这可能意味着它已被丢弃。在没有问题(tcp.stream eq 0
)的流中,404被确认。仔细查看这两个404可以发现,好的404具有有效的TCP校验和,而丢弃的则没有。因此,很可能您的TCP校验和计算错误,并且客户端系统正在丢弃这些错误的数据包,因此它们永远不会到达客户端应用程序。