对于socket(AF_INET, SOCK_RAW, IPPROTO_IP),其原型为
int socket (int domain, int type, int protocol);
1 参数protocol用来指明所要接收的协议包,若是是象IPPROTO_TCP(6)这种非0、非255的协议,当操做系统内核碰到ip头中protocol域和建立socket所使用参数protocol相同的IP包,就会交给这个raw socket来处理,所以,通常来讲,要想接收什么样的数据包,就应该在参数protocol里来指定相应的协议。当内核向此raw socket交付数据包的时候,是包括整个IP头的,而且已是重组好的IP包。
2 若是protocol是IPPROTO_RAW(255),这时候,这个socket只能用来发送IP包,而不能接收任何的数据。发送的数据须要本身填充IP包头,而且本身计算校验和。
3 对于protocol为0(IPPROTO_IP)的raw socket。用于接收任何的IP数据包。其中的校验和和协议分析由程序本身完成。dom