CN102780627A - 一种Linux内核协议栈网桥数据转发方法 - Google Patents
一种Linux内核协议栈网桥数据转发方法 Download PDFInfo
- Publication number
- CN102780627A CN102780627A CN2012102669656A CN201210266965A CN102780627A CN 102780627 A CN102780627 A CN 102780627A CN 2012102669656 A CN2012102669656 A CN 2012102669656A CN 201210266965 A CN201210266965 A CN 201210266965A CN 102780627 A CN102780627 A CN 102780627A
- Authority
- CN
- China
- Prior art keywords
- forwarding
- item
- table item
- vlan
- protocol stack
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Small-Scale Networks (AREA)
Abstract
本发明提供了一种Linux内核协议栈网桥数据转发方法,在LINUX内核协议栈起来时,初始化一个存储转发表项的双向链表,当有数据报文进入内核协议栈网桥时,通过VLAN和MAC共同计算HASH值,以HASH为索引建立转发表项,插入到存储转发表项的双向链表中,对于同一源的MAC地址,能学习到对应多个不同出设备的转发表项。本发明的有益效果是整个过程实现起来简单,容易实施,对LINUX内核的稳定性,扩展性有保证,非常适合于基于LINUX系统的嵌入式设备网桥数据转发的需求。
Description
技术领域
本发明涉及嵌入式操作系统领域,特别涉及Linux内核协议栈网桥数据转发方法。
背景技术
目前LINUX内核协议栈网桥的实现方式中当在一个桥里面添加两个或两个以出设备时,对于同一目的MAC需要走不同出设备的数据报文将只有一个数据流能通。原因在于LINUX内核协议栈网桥转发表项的学习和转发原理是根据MAC计算HASH值,以计算出的HASH值为索引建立和查找转发表项进行数据报文的转发,一个转发表项至少包括端口号、转发标记、老化时间、出设备。这里出设备就是对应的硬件的端口,通常在表象中一个mac地址只能对应一个出设备,每一个mac地址对应一个出设备。在学习阶段,计算数据报文源MAC地址的HASH值建立转发表项;在转发阶段,计算目的MAC地址的HASH值,通过HASH查找转发表项进行转发。因此,对于同一个MAC地址计算出的HASH值在网桥中只能建立一个转发表项、对应一个出设备,对于去往其它出设备的数据报文因走错出设备而到达不了目的地,不能满足数据转发的需求。
发明内容
本发明针对目前目前LINUX内核协议栈网桥的实现方式中对于同一个MAC地址计算出的HASH值在网桥中只能建立一个转发表项、对应一个出设备,对于去往其它出设备的数据报文因走错出设备而到达不了目的地,不能满足数据转发的需求的不足,提供一种利用VLAN ID+MAC实现Linux内核协议栈网桥数据转发方法。
本发明为了完成其技术目的所采用的技术方案是:一种Linux内核协议栈网桥数据转发方法,包括以下步骤:
A、系统启动时初始化存储转发表项的双向链表;
B、根据待转发数据报文所带源设备与VLAN的绑定关系找该待转发数据报文用于建立转发表项的VLAN ID;从数据包中提取出用于建立转发表项的源MAC地址;
C、计算步骤K的所述的VLAN ID和源MAC地址的HASH值;
D、根据步骤C计算的HASH值轮询转发表项:
a) 未找到转发表项,建立以HASH值为索引的转发表项插入到转发表中;
b) 找到转发表项,更新找到转发表项的老化时间;
E、根据待转发数据报文所带源设备与VLAN的绑定关系找该待转发数据报文用于查找转发表项的VLAN ID;从数据包中提取出用于查找转发表项的目的MAC地址;
F、计算步骤E中的所述的VLAN ID和目的MAC地址的HASH值;
G、根据步骤F中计算的HASH值轮询转发表项:
1)找到转发表项,根据转发表项进行转发;
2) 未找到转发表项,在桥中广播该数据报文。
进一步的,上述的Linux内核协议栈网桥数据转发方法中:所述的步骤A中,初始化存储转发表项的双向链表是在LINUX内核启动的时初始化的。
进一步的,上述的Linux内核协议栈网桥数据转发方法中:在步骤B和E中,通过应用层的设置将VALN ID和端口设备进行绑定,在系统启动时我们将VLAN和端口设备的绑定关系传入内核协议栈,在内核中根据数据报文所带的源端口设备可以快速查找VLAN对应的VLAN ID。
进一步的,上述的Linux内核协议栈网桥数据转发方法中:在步骤D中,插入转发表项时需要给表项分配内存,然后插入到存储转发表项的双向链表中;在表项超时后,需要将对应的转发表项从存储转发表项的双向链表中删除,同时将分配改该表项的内存释放掉。
本发明的有益效果是整个过程实现起来简单,容易实施,对LINUX内核的稳定性,扩展性有保证,非常适合于基于LINUX系统的嵌入式设备网桥数据转发的需求。
LINUX内核协议栈网桥的学习和转发方法原理是根据MAC计算HASH值,以计算的HASH值为索引建立和查找转发表象进行数据报文的转发,对应同一个MAC地址只能建立一个转发表象,而一个转发表象对应同一个出设备,这样就导致了同一个MAC去往不同出设备的数据流只有一个能通;本发明通过VLAN ID和MAC共同计算HASH值,对于同一个MAC可以学习到对应不同出设备的转发表象,保证同一个MAC去往不同出设备的数据流畅通。
下面通过结合具体实施例和附图对本发明进行进一步的说明。
附图说明
附图1是本发明实施例1流程图。
具体实施方式
如图1所示,本实施例是一种以VLAN+MAC实现的LINUX内核协议栈网桥的数据转发方法,该方法借助网络数据报文和设备配套软件指令实现,具体包括启动引导程序、加载LINUX系统内核、启动应用程序、查找MAC和VLAN、学习转发表项、转发数据报文过程。首先在LINUX内核协议栈起来时,初始化一个存储转发表项的双向链表,当有数据报文进入内核协议栈网桥时,通过VLAN和MAC共同计算HASH值,以HASH为索引建立转发表项,插入到存储转发表项的双向链表中,对于同一源的MAC地址,能学习到对应多个不同出设备的转发表项。本方法的步骤包括:
步骤1、系统启动,初始化存储转发表项的双向链表;
步骤2、根据数据报文所带源设备与VLAN ID
的绑定关系找该数据报文用于建立转发表项的VLAN ID;从数据包中提取出用于建立转发表项的源MAC地址;
步骤3、计算步骤2中VLAN ID和MAC地址的HASH值;
步骤4、根据步骤3计算的HASH值轮询转发表项:
1) 未找到转发表项,建立以HASH值为索引的转发表项插入到转发表中;
2) 找到转发表项,更新找到转发表项的老化时间;
步骤5、根据数据报文所带源设备与VLAN ID的绑定关系找该数据报文用于查找转发表项的VLAN ID;从数据包中提取出用于查找转发表项的目的MAC地址;
这里步骤2和5中的vlan id都是应用层设定的与端口设备绑定的vlan id,不同的vlan id与不同的端口设备绑定,因此根据数据包所带源设备与vlan id的绑定关系可以查找vlan id。
步骤6、计算步骤5中VLAN ID和MAC地址的HASH值;
步骤7、根据步骤F中计算的HASH值轮询转发表项:
3) 找到转发表项,根据转发表项进行转发;
4) 未找到转发表项,在桥中广播该数据报文;
本实施例在建立转发表项前,先要初始化存储转发表项的双向链表,在步骤A中,初始化存储转发表项的双向链表是在LINUX内核启动的时初始化的。
在步骤B和E中,通过应用层的设置将VALN和端口设备进行绑定(对于没有绑定VLAN的端口设备默认其VLAN为0),在系统启动时我们将VLAN和端口设备的绑定关系传入内核协议栈,在内核中根据数据报文所带的入端口设备可以快速查找VLAN其对应的VLAN值。
在步骤D中,插入转发表项时需要给表项分配内存,然后插入到存储转发表项的双向链表中;在表项超时后,需要将对应的转发表项从存储转发表项的双向链表中删除,同时将分配改该表项的内存释放掉,以节省内存空间,防止内存泄露。
在整个LINUX内核协议栈网桥的转发过程中,有两次查找转发表项的动作,第一次查找是在学习阶段,根据数据报文源MAC和VLAN计算的HASH值查找的,以确定对应该源MAC和VLAN组合的转发表项有没有建立。
这里学习阶段就是指转发表项建立阶段,转发表项都是通过学习建立的, 在学习阶段根据源mac和vlan id计算的 hash值查找转发表项,没有找到就建立转发表项, 找到了就更新老化时间。转发阶段就是指转发数据的时候查找转发表项进行数据转发的过程,根据目的mac和vlan id计算 hash值如果找到表象就转发数据报文,没有找到就广播数据报文;VLAN ID 用来区分不同的业务数据流(业务如:上网、语音、IPTV业务等),值在1到4096之间。
第二次是在转发阶段,根据数据报文的目的MAC和VLAN计算的HASH值进行查找的,用于确定数据报文往那个接口转发,对于没有找到表项的数据报文则在网桥中广播该数据报文。
Claims (4)
1.一种Linux内核协议栈网桥数据转发方法,其特征在于,包括以下步骤:
A、系统启动时初始化存储转发表项的双向链表;
B、根据待转发数据报文所带源设备与VLAN的绑定关系找该待转发数据报文用于建立转发表项的VLAN ID;从数据包中提取出用于建立转发表项的源MAC地址;
C、计算步骤K的所述的VLAN ID和源MAC地址的HASH值;
D、根据步骤C计算的HASH值轮询转发表项:
未找到转发表项,建立以HASH值为索引的转发表项插入到转发表中;
找到转发表项,更新找到转发表项的老化时间;
E、根据待转发数据报文所带源设备与VLAN的绑定关系找该待转发数据报文用于查找转发表项的VLAN ID;从数据包中提取出用于查找转发表项的目的MAC地址;
F、计算步骤E中的所述的VLAN ID和目的MAC地址的HASH值;
G、根据步骤F中计算的HASH值轮询转发表项:
1)找到转发表项,根据转发表项进行转发;
2) 未找到转发表项,在桥中广播该数据报文。
2. 根据权利要求1所述的Linux内核协议栈网桥数据转发方法,其特征在于:所述的步骤A中,初始化存储转发表项的双向链表是在LINUX内核启动的时初始化的。
3. 根据权利要求1所述的Linux内核协议栈网桥数据转发方法,其特征在于:在步骤B和E中,通过应用层的设置将VALN ID和端口设备进行绑定,在系统启动时我们将VLAN和端口设备的绑定关系传入内核协议栈,在内核中根据数据报文所带的源端口设备可以快速查找VLAN对应的VLAN ID。
4. 根据权利要求1所述的Linux内核协议栈网桥数据转发方法,其特征在于:在步骤D中,插入转发表项时需要给表项分配内存,然后插入到存储转发表项的双向链表中;在表项超时后,需要将对应的转发表项从存储转发表项的双向链表中删除,同时将分配改该表项的内存释放掉。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210266965.6A CN102780627B (zh) | 2012-07-31 | 2012-07-31 | 一种Linux内核协议栈网桥数据转发方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210266965.6A CN102780627B (zh) | 2012-07-31 | 2012-07-31 | 一种Linux内核协议栈网桥数据转发方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102780627A true CN102780627A (zh) | 2012-11-14 |
CN102780627B CN102780627B (zh) | 2015-11-18 |
Family
ID=47125388
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210266965.6A Active CN102780627B (zh) | 2012-07-31 | 2012-07-31 | 一种Linux内核协议栈网桥数据转发方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102780627B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104125128A (zh) * | 2014-08-12 | 2014-10-29 | 烽火通信科技股份有限公司 | Linux软桥支持VLAN的方法 |
CN104135435A (zh) * | 2013-04-30 | 2014-11-05 | 日立金属株式会社 | 网络中继装置 |
CN104778089A (zh) * | 2015-04-23 | 2015-07-15 | 河北远东通信系统工程有限公司 | 一种基于Linux内核的多点到多点数据发布和订阅方法 |
CN105245431A (zh) * | 2015-11-10 | 2016-01-13 | 上海斐讯数据通信技术有限公司 | 基于Lunix系统的VLAN实现方法及VLAN系统 |
CN106027419A (zh) * | 2016-05-20 | 2016-10-12 | 曙光云计算技术有限公司 | 一种数据结构的管理方法和装置 |
CN107566238A (zh) * | 2017-08-30 | 2018-01-09 | 成都安恒信息技术有限公司 | 一种用户态配置物理接口自动识别vlan帧和非vlan帧的方法 |
CN107635025A (zh) * | 2017-09-22 | 2018-01-26 | 郑州云海信息技术有限公司 | 一种下刷mac地址转发表项的方法及系统 |
CN114363253A (zh) * | 2021-12-23 | 2022-04-15 | 南京中新赛克科技有限责任公司 | 一种基于混合链路的双向ip资源的筛选方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1767495A (zh) * | 2004-10-28 | 2006-05-03 | 华为技术有限公司 | 保证城域传输设备中二层以太网交换机数据安全的方法 |
CN101018182A (zh) * | 2007-02-16 | 2007-08-15 | 华为技术有限公司 | 一种桥接的方法及装置 |
CN102457439A (zh) * | 2011-12-07 | 2012-05-16 | 中标软件有限公司 | 一种云计算系统的虚拟交换系统及其虚拟交换方法 |
-
2012
- 2012-07-31 CN CN201210266965.6A patent/CN102780627B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1767495A (zh) * | 2004-10-28 | 2006-05-03 | 华为技术有限公司 | 保证城域传输设备中二层以太网交换机数据安全的方法 |
CN101018182A (zh) * | 2007-02-16 | 2007-08-15 | 华为技术有限公司 | 一种桥接的方法及装置 |
CN102457439A (zh) * | 2011-12-07 | 2012-05-16 | 中标软件有限公司 | 一种云计算系统的虚拟交换系统及其虚拟交换方法 |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104135435B (zh) * | 2013-04-30 | 2018-05-18 | 日立金属株式会社 | 网络中继装置 |
CN104135435A (zh) * | 2013-04-30 | 2014-11-05 | 日立金属株式会社 | 网络中继装置 |
CN104125128A (zh) * | 2014-08-12 | 2014-10-29 | 烽火通信科技股份有限公司 | Linux软桥支持VLAN的方法 |
WO2016023443A1 (zh) * | 2014-08-12 | 2016-02-18 | 烽火通信科技股份有限公司 | Linux软桥支持VLAN的方法 |
RU2669684C2 (ru) * | 2014-08-12 | 2018-10-12 | Файберхоум Телекоммьюникейшн Текнолоджиз Ко., Лтд | Способ поддержки vlan программным мостом linux |
CN104125128B (zh) * | 2014-08-12 | 2017-04-12 | 烽火通信科技股份有限公司 | Linux软桥支持VLAN的方法 |
CN104778089A (zh) * | 2015-04-23 | 2015-07-15 | 河北远东通信系统工程有限公司 | 一种基于Linux内核的多点到多点数据发布和订阅方法 |
CN104778089B (zh) * | 2015-04-23 | 2017-12-26 | 河北远东通信系统工程有限公司 | 一种基于Linux内核的多点到多点数据发布和订阅方法 |
CN105245431A (zh) * | 2015-11-10 | 2016-01-13 | 上海斐讯数据通信技术有限公司 | 基于Lunix系统的VLAN实现方法及VLAN系统 |
CN106027419A (zh) * | 2016-05-20 | 2016-10-12 | 曙光云计算技术有限公司 | 一种数据结构的管理方法和装置 |
CN106027419B (zh) * | 2016-05-20 | 2019-06-04 | 曙光云计算技术(日照)有限公司 | 一种数据结构的管理方法和装置 |
CN107566238A (zh) * | 2017-08-30 | 2018-01-09 | 成都安恒信息技术有限公司 | 一种用户态配置物理接口自动识别vlan帧和非vlan帧的方法 |
CN107635025A (zh) * | 2017-09-22 | 2018-01-26 | 郑州云海信息技术有限公司 | 一种下刷mac地址转发表项的方法及系统 |
CN114363253A (zh) * | 2021-12-23 | 2022-04-15 | 南京中新赛克科技有限责任公司 | 一种基于混合链路的双向ip资源的筛选方法及系统 |
CN114363253B (zh) * | 2021-12-23 | 2024-04-02 | 南京中新赛克科技有限责任公司 | 一种基于混合链路的双向ip资源的筛选方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102780627B (zh) | 2015-11-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102780627A (zh) | 一种Linux内核协议栈网桥数据转发方法 | |
CN102821022B (zh) | 在分布式以太网桥中利用链路聚合转发帧的方法和系统 | |
CN102111318B (zh) | 分配虚拟局域网资源的方法和交换机 | |
CN103152361B (zh) | 访问控制方法及设备、系统 | |
US10268435B2 (en) | Display device, multi-display system, and ID determination method for display device | |
US9270590B2 (en) | Method, apparatus and system for transmitting packets in virtual network with respect to a virtual machine (VM) migration | |
US9363207B2 (en) | Private virtual local area network isolation | |
GB2514323A (en) | Multiple virtual machines sharing a single IP address | |
JP6722816B2 (ja) | パケット転送 | |
CN105577548A (zh) | 一种软件定义网络中报文处理方法和装置 | |
CN105391568A (zh) | 一种软件定义网络sdn的实现方法、装置和系统 | |
WO2013113264A1 (en) | Interconnecting data centers for migration of virtual machines | |
CN108965092B (zh) | 一种数据报文传输方法和装置 | |
CN105430110A (zh) | 一种虚拟网络系统的容器配置方法及网络传输装置 | |
CN103825976A (zh) | 分布式系统架构中的nat处理方法及装置 | |
US10841274B2 (en) | Federated virtual datacenter apparatus | |
EP3624429A3 (en) | Reducing arp/nd flooding in cloud environment | |
KR20150036597A (ko) | 가상 머신 마이그레이션을 판정하는 방법 및 장치 | |
CN104125128A (zh) | Linux软桥支持VLAN的方法 | |
US20140226652A1 (en) | Network Interconnection Over A Core Network | |
US9197598B2 (en) | MAC address distribution | |
CN103346970A (zh) | 一种SpaceWire动态路由实现方法 | |
CN105323229A (zh) | 一种基于cpe的数据传输方法、网元、平台及系统 | |
CN104378299A (zh) | 流表项处理方法以及装置 | |
CN106886429A (zh) | 一种加载驱动程序的方法和服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |