Linux VLAN知识总结

更新时间:2023-05-20 15:11:36 阅读: 评论:0

Linux vlan知识总结(beta 1)
          ——by moonflow
                    qq:171932120
                    (总结自互联网)
xinxin
                 
目录
cor是什么意思前言    3
第一章 vlan的基本概念    4
1.1 vlan的作用    4
1.2 vlan的实现原理    4
1.3 vlan的分类    4
1.4 vlan帧结构    4
第二章 重要结构    6
2.1 /include/linux/if_vlan.h    6
第三章 主要函数    20
3.1 vlan_proto_init [net\8021q\vlan.c]    20
3.2 register_pernet_subsys [net\8021q\vlan.c]    21
3.3 register_netdevice_notifier [/net/core/dev.c]    21
3.4 dev_add_pack [/net/core/dev.c]    21
3.5 vlan_skb_recv [/net/core/dev.c]    22
3.5 vlan_ioctl_t [ /net/socket.c]    25
第四章 总结    26
参考资料    27
前言
此文档是本人这段时间内学习Linux网络协议栈vlan嫩芽是什么意思功能相关知识,总结并且整理出来的文档。本文中的参考内核代码为2.6.24(相关的资料较多,便于开展),当然也是对互联网资源的整合。
参考了锐捷的一份文档,并且参考了网上很多资源。可以说基本上总结自互联网。参考中附上我学习时参考的资料,很多,而且他们写的都非常好,导致我都不知道写啥了。不过仅仅只是为了借这次总结的机会,让个人对Linux vlan部分更加深入。
因为本人初学Linux协议栈,对很多部分都还很迷茫,所以很多地方会出现失误或者不够清楚。我接触Linux时间很短,但是非常喜爱Linux,同时对网络部分非常喜爱,希望大家喜欢并且与我交流,共同进步。
第一章 vlan的基本概念
1.1 vlan的作用
虚拟局域网VLAN是一组逻辑上的设备和用户,这些设备和用户并不受物理网段的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的通信就好像它们在同一个网段中一样,由此得名虚拟局域网。VLANcruelty是一种比较新的技术,工作在OSI参考模型的第2层和第3层,一个VLAN就是一个广播域,VLAN之间的通信是通过第3层的路由器来完成的。
1.2 vlan的实现原理
VLAN交换机从工作站接收到数据后,会对数据的部分内容进行检查,并与一个VLAN配置数据库(该数据库含有静态配置的或者动态学习而得到的MAC地址等信息)中的内容进行比较后,确定数据去向,如果数据要发往一个VLANmariner设备(VLAN-aware),一个标记(Tag)或者VLAN标识就被加到这个数据上,根据VLAN标识和目的地址,VLAN交换机就可以将该数据转发到同一VLAN上适当的目的地;如果数据发往非VLAN设备(VLAN-unaware),则VLAN交换机发送不带VLAN标识的数据。
1.3 vlan的分类
a.基于端口的VLAN
b.基于MAC地址的VLAN
c.基于路由的VLAN 
d.基于策略的VLAN
1.4 vlan帧结构
每一个支持802.1Q协议的主机,在发送数据包时,都在原来的以太网桢头中的源地址后增加了一个4descriptions字节的802.1Q桢头,之后接原来以太网的长度或类型域,关于以太网桢头的封装格式,参见以太网方面的培训教材。
1 带有802.1Q标签头的以太网桢
  这4个字节的802.1Q标签头包含了2个字节的标签协议标(TPID--Tag Protocol Identifier,它的值是8100),和两个字节的标签控制信息(TCI--Tag Control Information),TPIDIEEE定义的新的类型,表明这是一个加了802.1Q标签的本文,图2显示了802.1Q标签头的详细内容。


  图2 802.1Q标签头
该标签头中的信息解释如下:
  LAN Identified( VLAN ID ): 这是一个12位的域,指明VLANID,一共4096个,每个支持802.1Q协议的主机发送出来的数据包都会包含这个域,以指明自己属于哪一个VLAN,目前TNETX 3270neck只支持32VLAN
  Canonical Format Indicator( cfi ):这一位主要用于总线型的以太网与FDDI、令牌环网交换数据时的桢格式,TNETX 3270忽略此位。
  Priority:这3 school是什么意思英语位指明桢的优先级。一共有8种优先级,主要用于当交换机阻塞时,优先发
送哪个数据包。TNETX 3270TNETX 4090只支持一种优先级,所以这一位也没有用,
第2章 重要结构
2.1 /include/linux/if_vlan.h
/include/linux/if_vlan.h中定义vlan相关的基本数据结构
//每一个支持802.1q协议的主机,在发送数据包时,都在原来的以太网帧头中的源地址后增加了一个4字节的802.1q帧头
#define VLAN_HLEN    4        /* The additional bytes (on top of the Ethernet header)
                    * that VLAN requires.
                    */
//VLAN以太网头部的地址长度字节
#define VLAN_ETH_ALEN    6        /* Octets in one ethernet addr    */
//VLAN以太网头部的长度字节
#define VLAN_ETH_HLEN    18        /* Total octets in header.    */
//VLAN以太网不含CRC校验的数据最小长度
#define VLAN_ETH_ZLEN    64        /* Min. octets in frame sans FCS */
/*备注以太网的情况
#define ETH_ALEN    6              /*以太网地址,即MAC地址,6字节*/
#define ETH_HLEN    14              /*以太网头部的总长度*/
#define ETH_ZLEN    60              /*不含CRC校验的数据最小长度*/
英语音素#define ETH_DATA_LEN    1500        /*帧内数据的最大长度*/
#define ETH_FRAME_LEN  1514        /*不含CRC校验和的最大以太网数据长度*/
*/
/*
* According to 802.3ac, the packet can be 4 bytes longer. --Klika Jan
*/
//VLAN帧内数据的最大长度
#define VLAN_ETH_DATA_LEN    1500    /* Max. octets in payload    */
//VLAN中不含CRC校验和的最大以太网数据长度
#define VLAN_ETH_FRAME_LEN    1518    /* Max. octets in frame sans FCS */
/*
*    struct vlan_hdr - vlan headerpiss off
*    @h_vlan_TCI: priority and VLAN ID
*    @h_vlan_encapsulated_proto: packet type ID or len
*/
struct vlan_hdr {
    __be16    h_vlan_TCI;    //TCI:802.1q标签头部分的priority and vlan id,标签控制信息
    __be16    h_vlan_encapsulated_proto;  //包类型ID或者长度
};

本文发布于:2023-05-20 15:11:36,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/115938.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   长度   总结   标签   参考   字节
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图