【问题标题】:Working of Raw Sockets in the Linux kernelLinux内核中原始套接字的工作
【发布时间】:2020-02-25 05:40:34
【问题描述】:

我正在努力将 linux 内核的流量控制层集成到自定义用户级网络堆栈。我正在使用原始套接字来做同样的事情。我的问题是,如果我们使用带有AF_PACKETRAW_SOCKIPPROTO_RAW 的原始套接字,是否会调用 dev_queue_xmit(据我所知,该函数是队列层的起点)?还是sockets接口直接调用网卡驱动?

【问题讨论】:

    标签: c linux-kernel network-programming linux-device-driver raw-sockets


    【解决方案1】:
    • SOCK_RAW 表示用户空间程序应该接收消息中的 L2(链路层)标头。
    • IPPROTO_RAW 对 L3 (IP) 标头应用相同。

    用户空间程序将SOCK_RAW, IPPROTO_RAW 设置为手动解析或/和组合数据包的协议头。它保证内核不会在往返用户空间的途中修改相应的层标头。原始套接字不会改变数据包被接收或传输的方式——它们像往常一样排队。从网络驱动程序的角度来看,谁设置标头并不重要——用户空间(原始套接字)或内核(例如 SOCK_DGRAM)。

    请记住,获取原始数据包需要CAP_NET_RAW 功能 - 通常,程序需要以超级用户权限运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 2012-11-26
      • 2013-11-25
      • 1970-01-01
      相关资源
      最近更新 更多