我正在将linux内核的流量控制层集成到自定义用户级网络堆栈中。我正在使用原始套接字执行相同的操作。我的问题是,如果我们将原始套接字与AF_PACKET
,RAW_SOCK
和一起使用IPPROTO_RAW
,是否会调用dev_queue_xmit(就我所读,该函数是队列层的起点)?还是套接字接口直接调用网卡驱动程序?
SOCK_RAW
指示用户空间程序应在消息中接收L2(链路层)头。IPPROTO_RAW
对L3(IP)标头应用相同的内容。用户空间程序设置SOCK_RAW, IPPROTO_RAW
为手动解析或/和组成数据包的协议标头。它保证了内核在去往/离开用户空间的过程中不会修改相应的层头。原始套接字不会改变数据包的接收或传输方式,它们像往常一样排队。从网络驱动程序的角度来看,谁设置头无关紧要-用户空间(原始套接字)还是内核(例如SOCK_DGRAM)。
请记住,获取原始数据包需要CAP_NET_RAW
功能-通常,程序需要以超级用户特权运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句