我正致力于将linux内核的流量控制层集成到自定义用户级别的网络堆栈中。我使用原始套接字来做同样的事情。我的问题是,如果我们在AF_PACKET、RAW_SOCK和IPPROTO_RAW中使用原始套接字,是否会调用dev_queue_xmit (据我所知,dev_queue_xmit是排队层的起点)?还是套接字接口直接调用网卡驱动程序?
发布于 2020-02-25 07:16:52
SOCK_RAW表示用户空间程序应该接收message.IPPROTO_RAW中的L2 (链路层)报头,对于L3 (IP)报头应用相同。。
用户空间程序将SOCK_RAW, IPPROTO_RAW设置为手动解析或/和组合数据包的协议报头。它保证内核在访问/离开用户空间的过程中不会修改相应的层头。原始套接字不会改变数据包接收或传输的方式--这些套接字会像往常一样排队。从网络驱动程序的角度来看,设置头(用户空间(原始套接字)或内核(例如,SOCK_DGRAM)并不重要。
请记住,获取原始数据包需要CAP_NET_RAW功能-通常,程序需要以超级用户权限运行。
https://stackoverflow.com/questions/60388148
复制相似问题