数据包捕获是否绕过TCP/IP堆栈的一部分?

数据包捕获是否绕过TCP/IP堆栈的一部分?,tcp,wireshark,packet,packet-sniffers,Tcp,Wireshark,Packet,Packet Sniffers,当我在Linux上使用wireshark或tcpdump捕获网络数据包时,它通常会保存分段的TCP,而wireshark可以重新组合这些数据包(只要编辑->首选项->协议…为协议(例如HTTP)选中此选项) 但是,我认为TCP/IP堆栈会在将数据包交付给用户应用程序(例如WEB浏览器)之前重新组装数据包 所以我的问题是:捕获数据包是否绕过了TCP/IP堆栈的某些部分?简短回答:是 更长的回答:“数据包捕获”不会干扰正常的数据包处理——它只是在数据包通过内核的位置复制数据包。这种情况通常发生在设备

当我在Linux上使用
wireshark
tcpdump
捕获网络数据包时,它通常会保存分段的
TCP
,而
wireshark
可以重新组合这些数据包(只要编辑->首选项->协议…为协议(例如HTTP)选中此选项)

但是,我认为TCP/IP堆栈会在将数据包交付给用户应用程序(例如WEB浏览器)之前重新组装数据包

所以我的问题是:捕获数据包是否绕过了TCP/IP堆栈的某些部分?

简短回答:是


更长的回答:“数据包捕获”不会干扰正常的数据包处理——它只是在数据包通过内核的位置复制数据包。这种情况通常发生在设备驱动程序和网络堆栈之间,但根据过滤设置的不同,也可能发生在其他位置。

请参阅libpcap使用的套接字类型,并参阅
PF_PACKET
的说明。感谢您的反馈。“取决于筛选设置的方式”是指netfilter规则可以在TCP/IP处理数据包并重定向到PF_SOCKET后拾取数据包?这取决于您的操作系统及其启用的功能—但在TCP处理后,只有一个没有“数据包”概念的字节流,因此实际上没有“数据包筛选”方法,但您可以使用ptrace来接收用户级进程从套接字中获得的内容。@标记,如果您使用
netfilter
来发送数据包到用户空间,并使用
libipq
处理数据包,则您将看不到片段<与大多数防火墙一样,code>netfilter,需要对重新组装的数据包进行操作才能有效地进行过滤。