AF_PACKET

socket的几种里面常见的2种。

------历史-------

AF_NET最早生出,后来有了AF_PACKET。

----结束历史-------

AF_NET常见。

AF_PACKET=PF_PACKET, 使用在kernel中 net/af_packet.c


http://lxr.free-electrons.com/source/net/packet/af_packet.c


PF_PACKET有3种类型,是SOCK_RAW和SOCK_DGRAM, SOCK_PACKET

SOCK_RAW 带MAC报文头(TCP/IP栈中,14个字节=目的MAC+源MAC+类型(0x0806,IP))

SOCK_DGRAM不带二层头


在上面的连接中,针对SOCK_DGRAM的socket,底层处理就是加上包头再发送

static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)

  if (sock->type == SOCK_DGRAM) {
            offset = dev_hard_header(skb, dev, ntohs(proto), addr, NULL, len);

对于SOCK_DGRAM的socket, 底层处理就是对收到的包剥掉包头再叫上层处理

static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,

if (sk->sk_type == SOCK_DGRAM) {
        macoff = netoff = TPACKET_ALIGN(po->tp_hdrlen) + 16 +


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值