Linux 二层协议添加,Linux 二层协议架构组织

本文主要讲解了Linux 二层协议架构组织,使用的内核的版本是2.6.32.27

为了方便理解,本文采用整体流程图加伪代码的方式从内核高层面上梳理了Linux 二层协议架构组织,希望可以对大家有所帮助。阅读本文章假设大家对C语言有了一定的了解

Linux中1层2层标准化及在Linux系统中的实现位置如下所示

0ba9fa755b9f7294b77adafeddfffd9d.png

1层和2a层(MAC)层体现了不同网络介质的区别,在Linux的设备驱动中实现;2b层(LLC)则对上提供了统一的接口,在Linux的内核中实现该部分

Linux在网络架构中的活动形式如下

bbae7b9c57be1c5381c5851b3889c509.png

1-4层是在内核中进行的,交付应用程序处理的数据报文是在用户空间进行的,具体的情参考我的前两篇博客

对于LLC层的协议控制信息及扩展信息如下

15b3d9fd2652050ca24515b8b4c65d36.png

所有的协议报文,都通过链路层的协议指示标明三层需要哪个协议实例处理,通过eth_type_trans() 就可以知道了,我们分析一下源代码

/*某一MAC协议类型的全部网络设备都是使用相同的---XX_type_trans,

* 如 tr_type_trans() --- 令牌环王

* fddi_type_trans() --- FDDI网络

*/

__be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev)

{

struct ethhdr *eth;

unsigned char *rawp;

skb->dev = dev;

skb_reset_mac_header(skb);

/*获取第二层数据包的报头*/

skb_pull(skb, ETH_HLEN);

eth = eth_hdr(skb);

/*在skb->pkt_type中得到识别和注册

* PACKET_BROADCAST:广播包

* PACKET_MULTICAST:2层组播地址

* PACKET_HOST:发送给本机的报文

* PACKET_OTHERHOST: 发送给其他主机的报文,这里主机应该处于混杂模式中

*/

if (unlikely(is_multicast_ether_addr(eth->h_dest))) {

if (!compare_ether_addr_64bits(eth->h_dest, dev->broadcast))

skb->pkt_type = PACKET_BROADCAST;

else

skb->pkt_type = PACKET_MULTICAST;

}

else if (1 /*dev->flags&IFF_PROMISC */ ) {

if (unlikely(compare_ether_addr_64bits(eth->h_dest, dev->dev_addr)))

skb->pkt_type = PACKET_OTHERHOST;

}

;

/*如果长度大于1536(最大帧长度),那么他是802.3兼容以太网卡,协议字段在eth->h_proto中标识*/

if (ntohs(eth->h_proto) >= 1536)

return eth->h_proto;

rawp = skb->data;

if (*(unsigned short *)rawp == 0xFFFF)

return htons(ETH_P_802_3);

/*

* Real 802.2 LLC,

* 802.2的协议头返回后,被当做三层报文处理,

* 协议处理被散列在ptype_base中,协议处理函数为p8022_rcv()

* 对应的三层协议可以通过 register_8022_client() 将自己的处理函数注册到p8022_rcv()中

* 如果 register_8022_client(0xAA, snap_rcv)就将SNAP的三层处理函数注册进去了

*/

return htons(ETH_P_802_2);

}

通过上面的文章描述,我们清楚了LInux是如何组织二层协议处理的,希望大家批评指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值