Wireshark与tcpdump/libpcap中数据包的顺序不同



我注意到,在Linux上将一个数据包文件从远程FTP站点传输到localhost时,Wireshark总是可以按正确的顺序捕获数据包,但不能在RAW_packet上以tcpdump/libpcap或简单的recvfrom捕获数据包

在前者中,"传输完成"响应总是在单个数据包之前(在不同的连接中,因此没有TCP重新排序),但在后者中,数据包总是首先到达-根据协议和FTP服务器的实现,这显然是错误的,因为"传输完成"是在发送数据后发送的。如果客户端在数据之前收到了它,它将停止等待数据连接,这并没有发生,因为我可以清楚地看到数据。所以libpcap/tcpdump实际上以错误的顺序捕获数据包,但在Wireshark中没有这样的问题?

这怎么可能??Wireshark还使用libpcap。。。

由于FTP协议的有效负载是在单独的TCP连接中传输的,因此在并行TCP连接中没有关于数据包顺序的承诺(实际上,即使在同一TCP连接中,也没有数据包顺序承诺,您的主机应该订购它们)。

  1. 服务器有两个打开的套接字
  2. 它将文件写入数据套接字
  3. 之后,它立即将"传输完成"写入控制套接字。2&3是几微秒
  4. 数据包在互联网上运行,它们甚至可以选择不同的路径
  5. 他们按随机顺序来到你的机器前

另外,tcpdump文件还有数据包的编号和时间戳。数据包不一定是按时间戳排序的。Wireshark可以在显示时订购,请查看订单栏。

最新更新