Linux VLAN知识总结

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux vlan知识总结(beta 1)

——by moonflow

qq:171932120

(总结自互联网)

目录

前言 (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_set [ /net/socket.c] (25)

第四章总结 (26)

参考资料 (27)

前言

此文档是本人这段时间内学习Linux网络协议栈vlan功能相关知识,总结并且整理出来的文档。本文中的参考内核代码为2.6.24(相关的资料较多,便于开展),当然也是对互联网资源的整合。

参考了锐捷的一份文档,并且参考了网上很多资源。可以说基本上总结自互联网。参考中附上我学习时参考的资料,很多,而且他们写的都非常好,导致我都不知道写啥了。不过仅仅只是为了借这次总结的机会,让个人对Linux vlan部分更加深入。

因为本人初学Linux协议栈,对很多部分都还很迷茫,所以很多地方会出现失误或者不够清楚。我接触Linux时间很短,但是非常喜爱Linux,同时对网络部分非常喜爱,希望大家喜欢并且与我交流,共同进步。

第一章vlan的基本概念

1.1 vlan的作用

虚拟局域网VLAN是一组逻辑上的设备和用户,这些设备和用户并不受物理网段的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的通信就好像它们在同一个网段中一样,由此得名虚拟局域网。VLAN是一种比较新的技术,工作在OSI参考模型的第2层和第3层,一个VLAN就是一个广播域,VLAN之间的通信是通过第3层的路由器来完成的。

1.2 vlan的实现原理

当VLAN交换机从工作站接收到数据后,会对数据的部分内容进行检查,并与一个VLAN 配置数据库(该数据库含有静态配置的或者动态学习而得到的MAC地址等信息)中的内容进行比较后,确定数据去向,如果数据要发往一个VLAN设备(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协议的主机,在发送数据包时,都在原来的以太网桢头中的源地址后增加了一个4字节的802.1Q桢头,之后接原来以太网的长度或类型域,关于以太网桢头的封装格式,参见以太网方面的培训教材。

图1 带有802.1Q标签头的以太网桢

这4个字节的802.1Q标签头包含了2个字节的标签协议标(TPID--Tag Protocol Identifier,它的值是8100),和两个字节的标签控制信息(TCI--Tag Control Information),TPID是IEEE定义的新的类型,表明这是一个加了802.1Q标签的本文,图2显示了802.1Q标签头的详细内容。

图2 802.1Q标签头

该标签头中的信息解释如下:

LAN Identified( VLAN ID ): 这是一个12位的域,指明VLAN的ID,一共4096个,每个支持802.1Q协议的主机发送出来的数据包都会包含这个域,以指明自己属于哪一个VLAN,目前TNETX 3270只支持32个VLAN。

Canonical Format Indicator( cfi ):这一位主要用于总线型的以太网与FDDI、令牌环网交换数据时的桢格式,TNETX 3270忽略此位。

Priority:这3 位指明桢的优先级。一共有8种优先级,主要用于当交换机阻塞时,优先发送哪个数据包。TNETX 3270和TNETX 4090只支持一种优先级,所以这一位也没有用,

第二章重要结构

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 */

相关文档
最新文档