10:原始套接字

- 原始套接字创建
创建原始套接字需要超级用户权限
int sockfd = socket(AF_INET, SOCK_RAW, protocol);
1.原始套接字不存在端口号概念
对其调bind,会设置从其发出数据报源地址设为设置值
对其调connect,会设置目的IP
- 原始套接字输出
1.
未connect的,sendto,sendmsg
已经connect的,write,writev,send
2.
IP_HDRINCL选项开启下,应用负责IP首部+数据构造
IP_HDRINCL选项未开启下,应用负责数据构造,IP首部由内核构造
IPV4首部校验和字段总是由内核计算并存储
3.
IPV6不存在IP_HDRINCL选项,
如需控制IPV6头部及其扩展头部一般通过套接字选项来交互.
- 原始套接字输入
1.多数ICMP分组在内核处理完其中的ICMP消息后传递到原始套接字
2.所有IGMP分组在内核完成处理其中的IGMP消息后传到原始套接字
3.协议字段不明的IP数据报

数据报的协议字段需与原始套接字协议参数匹配
对已经bind的原始套接字,数据报的目的IP需与其绑定的IP一致
对已经connect的原始套接字,数据报的源IP需与其绑定的IP一致

递送的原始IPV4数据报含IP首部
递送的原始IPV6数据报仅含数据部分

猜你喜欢

转载自blog.csdn.net/x13262608581/article/details/112725395