Raw(SOCK_RAW):用于直接对IP、ICMP等较低层面的数据包进行访问和操作,用于实现一些IP层数据包访问及处理时会使用,比如ping、traceroute等程序,或是实现一个TCP、UDP之外的传输层协议等等 Netlink:用于用户空间和内核空间进行通信,比如获取路由、网络配置信息等等内核中保存的信息 Packet(PF_PACKET):用于直接对数据链路...
SOCK_RAW:原始套接字,可以处理 IPv4、ICMP、IGMP 等报文,常用于网络监听、检验新的协议或者访问新的...
在内核中,sys_socket()是处理socket系统调用的函数。 它定义在net/socket.c文件中(具体路径可能因内核版本不同而异)。 这个函数会根据传入的参数(协议族、socket类型、协议编号)来创建一个新的socket。 套接字类型和协议族处理: 内核会根据协议族(如AF_INET)找到对应的协议族处理结构体(pf_inet对于IPv4)。 然后...
所以第三个参数填什么都不影响udp_socket= socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);//PF_INET 和 SOCK_DGRAM 表明使用 IPPROTO_UDP 或 IPPROTO_UDPLITE 其中一种协议,第三个参数填的不是 IPPROTO_UDPLITE 都是IPPROTO_UDP
AF_NETLINK 或 PF_NETLINK,在 Linux 中,它们俩实际为一个东西,它表示要使用netlink,第二个参数必须是SOCK_RAW或SOCK_DGRAM, 第三个参数指定netlink协议类型,可以是自己在netlink.h中定义的,也可以是内核中已经定义好的。上面的例子使用主要是路由的Netlink协议。也可以是上面21中协议类型的其中之一。
PF_INET(AF_INET)是IPv4 PF_INET6是 IPv6. type,是下面中的一个: SOCK_STREAM(Stream Socket) SOCK_DGRAM(Datagram Socket) SOCK_RAW(Raw Socket)。 protocol,规定套接字发送和接送哪类型协议数据。最常见的是IPPROTO_TCP,IPPROTO_UDP,IPPROTO_UDPLITE、IPPROTO_ICMP。如果domain和type已经确定唯一的协议,“0(...
.family = PF_NETLINK, .create = netlink_create, //netlink socket创建函数 .owner = THIS_MODULE,/* for consistency 8) */ }; 在AF_INET协议族中再根据不同的socket类型进行赋值,如下inet_create函数中实现所示 staticintinet_create(struct net *net, struct socket *sock,intprotocol, ...
SOCK_RAW(网络层的原始协议)。 protocol 确定实际使用的运输层。最常见的是IPPROTO_TCP,IPPROTO_SCTP,IPPROTO_UDP,IPPROTO_DCCP。这些协议是在<netinet/in.h>中定义的。如果domain和type已经确定,“0” 可以用来选择一个默认的协议。 如果出错返回-1,否则返回一个代表文件描述符的整数。
二、Netlink套接字的创建 1、用户态创建普通socket #include<sys/socket.h>intmain{intsk = socket(AF_INET, SOCK_STREAM,0);return0;} 创建一个socket套接字,传入参数为AF_INETIPV4网络协议、SOCK_STREAM字节流用于TCP传输,当socket函数调用执行完成之后,用户空间将返回一个整数型的句柄,但其实内核在内部创建...
详细内容可以参考如下博客:Linux 的 netlink 机制 1.2 实现背景 用户空间有一个应用 scpd 通过自定义协议 NETLINK_SCPD 创建 netlink socket,相关代码如下: ...#defineNETLINK_SCPD 28/* scpd communition*/...nlfd=socket(AF_NETLINK,SOCK_RAW,NETLINK_SCPD);... ...