在ICMP套接字上接收数据

2 icmp

当在ICMP套接字上接收时(带有IPPROTO_ICMP的SOCK_RAW),由于ICMP协议中没有"端口"的概念,应用程序如何确定接收的数据包不是某些其他TCP/UDP /任何套接字传输的一部分也在同一时间发生?

例如,假设您有一个包含2个线程的应用程序.线程1设置TCP服务器套接字,并持续从连接的客户端接收数据.线程2使用ICMP套接字连续向同一客户端发送echo请求包(ping),然后接收echo reply.什么是阻止线程2接收其中一个TCP数据包?

Ada*_*iss 7

ICMP是与TCP和UDP不同的协议,由IP报头中的协议字段确定.当您打开套接字时IPPROTO_ICMP,您告诉套接字仅发送和接收具有其协议字段设置为ICMP的IP头的数据包.

类似地,套接字打开IPPROTO_TCPIPPROTO_UDP仅响应其IP头包含分别设置为TCP或UDP的协议字段的数据包.