注意:IP数据包首部各个域的内容都是网络字节顺序。
接收数据包
内核遵循以下规则接收数据包:1.UDP和TCP数据包从不传送给一个原始套接字。如果要查看这两类数据包,只能通过直接访问数据链路层来实现。
2.大多数ICMP数据包的一个拷贝传送给匹配的原始套接字。
3.内核处理的所有其它类型的数据包的一个拷贝都传给匹配的原始套接字。
4.所有内核不能识别的协议类型的IP数据包都传送给匹配的原始套接字。对于这些IP数据包,内核只做必要的检验工作。
在将一个IP数据包传送给原始套接字之前,内核需要选择匹配的原始套接字1.数据包的协议域必须与接收原始套接字的协议类型匹配。
2.如果原始套接字调用了bind函数绑定了本地IP地址,那么到达的IP数据包的源IP地址必须和对方的IP相匹配。
3.如果原始套接字调用connect函数指定了对方的IP地址,则到达的IP数据包的源IP地址秘须与这它相同。