PF_PACKET笔记

PF_PACKET

从设备驱动层接收或发送原始数据包, 可用于用户在物理层以上构建自己的通信协议.

socket_type 可为:SOCK_RAW或SOCK_DGRAM.

其中SOCK_RAW可用于发送原始数据包, 此时可自定义数据链路层头部; SOCK_DGRAM可用于在数据链路层以上构建包.

结构sockaddr_ll中会用到链路层头部信息. 协议为IEEE 802. 3 协议号的网络序列.

所有到达的属于已定义物理层协议的包先通过packet socket到达已在内核实现的链路层协议处理层.

仅有特权进程或有CAP_NET_RAW属性的进程才能打开packet套接口.

如果用SOCK_RAW, 则数据包将直接通过设备驱动程序不加任何改变地发送出去. 这就要求用户程序必须了解物理层头部结构, 并适当地构建包,

此时地址解析将用到标准sockaddr_ll结构. SOCK_RAW很象用于2. 0版核心老的SOCK_PACKET, 但他们并不完全一致.

SOCK_DGRAM建立在更高层. 在接受包时, 物理头将在到达用户前被去掉; 而在发包时, 物理头部将在发送前被自动添加.

默认地所有的包都从packet socket层接收. 当仅接收从特定界面来的包时将使用bind来绑定由sockaddr_ll地址结构指定的接口.

为发送SOCK_RAW包, 用户必须提供空间并构建包括物理头部在内的完整的数据包. 此包将不加任何改变地加入网卡驱动程序发送队列,

而网卡将由目的地址确认. 对于SOCK_DGRAM包, 其头部将在包被加入发送队列前由系统根据地址结构(sockaddr_ll)信息自动填写.



待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值