我认为这个问题可以完全说明问题。
另一种说法:通过原始套接字读取的数据包是否已从通信通道中完全删除,以至于它们甚至都没有被传送到最初打算使用的TCP套接字。例如,如果主机上运行着一个Web服务器,监听端口80,而我打开一个原始套接字监听所有TCP协议数据包,那么Web服务器将永远不会收到那些发送到端口80的数据包吗?
谢谢。
答案 0 :(得分:1)
根据我的经验,在原始套接字上读取的数据包不会从通信中删除。您甚至可以同时具有多个原始套接字,并且所有套接字都获得相同的软件包。但要引用Linux: man raw:
原始套接字可以使用Linux中的所有IP协议,甚至包括在内核中具有协议模块的ICMP或TCP之类的协议。在这种情况下,数据包会被传递到内核模块和原始套接字。 这在便携式程序中不应该依赖,许多其他BSD套接字实现在此都有局限性。