如果我打开一个原始套接字并开始读取数据包,那么已读取的数据包是否不会传送到指定的TCP套接字?

时间:2018-10-10 19:26:43

标签: tcp raw-sockets

我认为这个问题可以完全说明问题。

另一种说法:通过原始套接字读取的数据包是否已从通信通道中完全删除,以至于它们甚至都没有被传送到最初打算使用的TCP套接字。例如,如果主机上运行着一个Web服务器,监听端口80,而我打开一个原始套接字监听所有TCP协议数据包,那么Web服务器将永远不会收到那些发送到端口80的数据包吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

根据我的经验,在原始套接字上读取的数据包不会从通信中删除。您甚至可以同时具有多个原始套接字,并且所有套接字都获得相同的软件包。但要引用Linux: man raw

  

原始套接字可以使用Linux中的所有IP协议,甚至包括在内核中具有协议模块的ICMP或TCP之类的协议。在这种情况下,数据包会被传递到内核模块和原始套接字这在便携式程序中不应该依赖,许多其他BSD套接字实现在此都有局限性。