UnixSocketChap25RowSocket

25章 原始套接字

1、区别于TCP和UDP套接字

1>原始套接字读取ICMP和IGMP分组

2>原始套接字读取IP协议字段为1(ICMP)、2(IGMP)、6(TCP)和17(UDP)的特殊协议字段的数据包

3>原始套接字可以通过IP_HDRINCL选项来构造自己的IP头部,利用这个特性可以用来构造自己的TCP或UDP分组。也就是原始套接字包含了TCP和UDP套接字。

 UnixSocketChap25RowSocket_第1张图片

2、输出

1>如果IP_HDRINCL未设置,则内核写的数据起始地址指IP头部之后的第一个字节,内核将构造IP头部,并将它安在来自进程的数据之前,其中协议字段将会设置成用户在调用socket函数时所传的第三个参数。

2>如果IP_HDRINCL已经设置,则内核写的数据起始地址指向IP头部的第一个字节,用户所提供的数据大小值必须包括头部的字节数。进程构造除了以下两项以外的整个IP头部:(a)IP标示字段设为0,由内核生成;(b)IP头部的校验和由内核来计算和存储。

 

3、输入

1>接收到的TCP和UDP分组决不会传递给任何原始套接字,如果进程希望读取包含TCP或UDP分组的IP数据包,则必须在数据链路层读入。

2>内核处理完ICMP消息之后,会将分组传递给原始套接字

3>内核处理完IGMP消息之后,会将分组传递给原始套接字

3>内核收到不能识别的协议字段的IP数据包将会传递给原始套接字

你可能感兴趣的:(tcp,socket,存储)