searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

VLAN知识总结

2025-03-21 09:47:17
1
0

第一章 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桢头,之后接原来以太网的长度或类型域,关于以太网桢头的封装格式,参见以太网方面的培训教材。
 
  这4个字节的802.1Q标签头包含了2个字节的标签协议标(TPID--Tag Protocol Identifier,它的值是8100),和两个字节的标签控制信息(TCI--Tag Control Information),TPID是IEEE定义的新的类型,表明这是一个加了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 */
//VLAN中不含CRC校验和的最大以太网数据长度
#define VLAN_ETH_FRAME_LEN    1518    /* Max. octets in frame sans FCS */
 
/*
 * struct vlan_hdr - vlan header
 * @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或者长度
};
 
/**
 * struct vlan_ethhdr - vlan ethernet header (ethhdr + vlan_hdr)
 * @h_dest: destination ethernet address
 * @h_source: source ethernet address
 * @h_vlan_proto: ethernet protocol (always 0x8100)
 * @h_vlan_TCI: priority and VLAN ID
 * @h_vlan_encapsulated_proto: packet type ID or len
 */
struct vlan_ethhdr {
    unsigned char    h_dest[ETH_ALEN];  
    unsigned char    h_source[ETH_ALEN];  
    __be16        h_vlan_proto;             //以太网协议
    __be16        h_vlan_TCI;               //标签控制信息
    __be16        h_vlan_encapsulated_proto;//包类型ID或者长度
};
 
 
0条评论
作者已关闭评论
c****6
14文章数
3粉丝数
c****6
14 文章 | 3 粉丝
c****6
14文章数
3粉丝数
c****6
14 文章 | 3 粉丝
原创

VLAN知识总结

2025-03-21 09:47:17
1
0

第一章 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桢头,之后接原来以太网的长度或类型域,关于以太网桢头的封装格式,参见以太网方面的培训教材。
 
  这4个字节的802.1Q标签头包含了2个字节的标签协议标(TPID--Tag Protocol Identifier,它的值是8100),和两个字节的标签控制信息(TCI--Tag Control Information),TPID是IEEE定义的新的类型,表明这是一个加了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 */
//VLAN中不含CRC校验和的最大以太网数据长度
#define VLAN_ETH_FRAME_LEN    1518    /* Max. octets in frame sans FCS */
 
/*
 * struct vlan_hdr - vlan header
 * @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或者长度
};
 
/**
 * struct vlan_ethhdr - vlan ethernet header (ethhdr + vlan_hdr)
 * @h_dest: destination ethernet address
 * @h_source: source ethernet address
 * @h_vlan_proto: ethernet protocol (always 0x8100)
 * @h_vlan_TCI: priority and VLAN ID
 * @h_vlan_encapsulated_proto: packet type ID or len
 */
struct vlan_ethhdr {
    unsigned char    h_dest[ETH_ALEN];  
    unsigned char    h_source[ETH_ALEN];  
    __be16        h_vlan_proto;             //以太网协议
    __be16        h_vlan_TCI;               //标签控制信息
    __be16        h_vlan_encapsulated_proto;//包类型ID或者长度
};
 
 
文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0