免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4264 | 回复: 10
打印 上一主题 下一主题

[网络子系统] linux上做vlan,access trunk的理解??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-12-17 10:12 |只看该作者 |倒序浏览
本帖最后由 linuxlearning4RMB 于 2015-12-17 11:27 编辑

在linux机器上,通过brctl和vconfig来模拟vlan实验

在linux上要做vlan,那么如创建一个access口,一个trunk口?

假设有网卡eth0 eth1 eth2 eth3
vconfig add eth0 100
vconfig add eth1 100
那么现在eth0 eth1都是access口了
然后通过brctl把eth0.100 eth1.100加到br0里面,那么这样就有一vlan了

那么现在要把eth2做成trunk口,trunk口应该是同时属于多个vlan的
vconfig add eth2 300
vconfig add eth2 400

那么能不能这样理解,在linux上如果某个网卡只属于一个vlan,那么这个网卡就是access口;
如果一个网口同时属于多个vlan,那么它就是trunk口。

会存在这么一种情况吗,就是在linux上把某个网卡设置为trunk口,但是这个网卡 只 属于一个vlan?

感觉在linux上创建的vlan和思科 h3c他们的有些不太一样。
思科 h3c上的native vid对应linux上的什么呢
思科 h3c上可以把某个口设置为trunk口,但是只有给一个vid的吗,没有使用过思科 华三的设备。

论坛徽章:
1
平安夜徽章
日期:2015-12-26 00:06:30
2 [报告]
发表于 2015-12-17 10:57 |只看该作者
1. 不能这么理解:“那么能不能这样理解,在linux上如果某个网卡只属于一个vlan,那么这个网卡就是access口;
如果一个网口同时属于多个vlan,那么它就是trunk口“
2. 会存在这么一种情况吗,就是在linux上把某个网卡设置为trunk口,但是这个网卡 只 属于一个vlan?
   这种情况是存在的,你可有找台交换机配置一下看看

论坛徽章:
0
3 [报告]
发表于 2015-12-17 11:26 |只看该作者
本帖最后由 linuxlearning4RMB 于 2015-12-17 11:47 编辑
woshipanlaoda 发表于 2015-12-17 10:57
1. 不能这么理解:“那么能不能这样理解,在linux上如果某个网卡只属于一个vlan,那么这个网卡就是access口;
如果一个网口同时属于多个vlan,那么它就是trunk口“
2. 会存在这么一种情况吗,就是在linux上把某个网卡设置为trunk口,但是这个网卡 只 属于一个vlan?
   这种情况是存在的,你可有找台交换机配置一下看看

在交换机上,某一个网口是可以设置为trunk口,但是却只属于一个vlan。
但是在linux机器上,通过brctl和vconfig来模拟vlan实验,那么你根本没有办法把某一个网口置为trunk口,因为内核里面没有这么一个对应的字段;同理也没有办法把一个网口置为access。


现在讨论的是在是linux机器上通过brctl和vconfig来模拟vlan。

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
4 [报告]
发表于 2015-12-17 13:16 |只看该作者
本帖最后由 nswcfd 于 2015-12-17 15:57 编辑

===删除跟5楼重复的内容===

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
5 [报告]
发表于 2015-12-17 14:08 |只看该作者
内核里没有acess/trunk的概念。

基于brctl和vconfig,可以模拟交换机的vlan行为。

通常意义上,可以认为bridge的每个port是access口(因为它没有任何tag操作),vconfig创建的虚口除外(虚口的核心功能是tag操作)。

不严格的说,如果哪个port用vconfig创建了多个虚口,并且每个虚口都加入了一个bridge,就可以称这个port是trunk口。

linux在这方面的一个很大不足就是,需要多少个vlan,就得创建多少个bridge(trunk口需要创建同样数量的虚口)。

根本上是由于bridge的转发表没有vlan tag的维度,要想实现不同vlan独立转发,只能使用多个bridge实例来实现转发表的隔离。

由于一个port只能加入一个bridge,所以楼主的“在linux上如果某个网卡只属于一个vlan,那么这个网卡就是access口”这个话是成立的。

这句话的另外一半,“如果一个网口同时属于多个vlan,那么它就是trunk口”,不太严格,建议改成“一个网口有多个虚口属于多个vlan,那么它就是trunk口”。
注意这个trunk口本身是不属于任何bridge的。

论坛徽章:
0
6 [报告]
发表于 2015-12-17 14:47 |只看该作者
回复 5# nswcfd

非常感谢你的指点,非常详尽!!!明白了很多,我这里举一个例子,看看我是不是理解到位了:
  1. 假设有网卡eth0 eth1 eth2
  2. 建一个vid为100的vlan
  3. vconfig add eth0 100
  4. vconfig add eth1 100
  5. brctl addbr brvlan100
  6. brctl addif brvlan100 eth1.100 eth0.100 #那么现在eth0 eth1都是access口了

  7. 再建一个vid为200的vlan
  8. vconfig add eth1 200
  9. vconfig add eth2 200
  10. brctl addbr brvlan200 #这个时候eth1严格来说,还不是trunk口,对吗?
  11. brctl addif brvlan200 eth1.200 eth2.200 #这个时候eth1才是trunk口
复制代码

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
7 [报告]
发表于 2015-12-17 15:54 |只看该作者
有点问题。

任何加入bridge的port,如果是vconfig生成的虚拟port,那么它只能收取带tag的报文,发送的报文也必定带着tag,这是8021q这个模块决定的。

对于vlan100,eth0和eth1都只能收取tag=100的报文,不能收取不带tag或者是带其它tag的报文。
从这个意义上来说,它不是access口(如果把access定义为只接受不带tag的报文的话)。

不考虑硬件的vlan加速(由硬件剥离tag),报文在vlan100的处理流程为:
1)eth0接收报文(假设目的mac不是本机);
2)eth0口不是bridge的port,所以进入正常的本地layer 2分发;
3)如果报文不带tag,则是普通IP报文,进入本地IP协议栈处理,已经跟vlan无关了;
4)带tag的报文是8021q报文,所以进入8021q的处理函数;
5)剥离tag,检查入口(eth0)上有没有对应的虚接口;
6)如果tag不是100或200,则不存在虚接口,报文被丢弃;
7)找到eth0.100或者eth0.200,以此为新的接收口,重新执行接收逻辑(模拟虚接口的rx);
8)在虚口eth0.100上收到了剥离tag后的IP报文;
9)eth0.100是bridge的port,所以进入vlan100的处理流程,不再进行layer 2的分发。

只要是把虚接口加入到bridge里面,就只能接受带特定tag的报文了。

如果只创建了vlan100而没有创建vlan200,eth0,eth1还是trunk口,只是这个trunk只能允许一个tag而已。

楼主的“在linux上如果某个网卡只属于一个vlan,那么这个网卡就是access口”这句话,我理解成把port本身加入vlan,于是说是正确的;
但楼主想表达的是把port的一个虚口加入vlan(相对于多个虚口而言),不好意思,没真正理解楼主的意图。

评分

参与人数 1信誉积分 +5 收起 理由
linuxlearning4R + 5 很给力!

查看全部评分

论坛徽章:
0
8 [报告]
发表于 2015-12-17 17:21 |只看该作者
回复 7# nswcfd


刚才创建vlan的方式不对。更改一下:
  1. 假设有网卡eth0 eth1 eth2
  2. 建一个vid为100的vlan
  3. vconfig add eth1 100
  4. brctl addbr brvlan100
  5. brctl addif brvlan100 eth1.100 eth0 #那么现在eth0 eth1都是access口了

  6. 再建一个vid为200的vlan
  7. vconfig add eth1 200
  8. brctl addbr brvlan200 #这个时候eth1严格来说,还不是trunk口,对吗?
  9. brctl addif brvlan200 eth1.200 eth2 #这个时候eth1才是trunk口
复制代码
这样创建,eth0 eth2 才是access口,eth1是trunk口对吧???eth1是为了和别的“交换机”(使用linux的brctl来模拟的)连接

论坛徽章:
0
9 [报告]
发表于 2015-12-17 21:04 |只看该作者
回复 7# nswcfd


   
  1. vconfig add eth1 100
  2. vconfig add eth2 100
  3. brctl addbr vlan100
  4. brctl addif vlan100 eth1.100 eth2.100

  5. vconfig add eth3 200
  6. vconfig add eth4 200
  7. brctl addbr vlan200
  8. brctl addif vlan200 eth3.200 eth4.200
复制代码
在这种情况下,网卡1 网卡2 网卡3 网卡4都是 trunk口





左边的配置:
  1. vconfig add eth5 100
  2. brctl addbr vlan100
  3. brctl addif vlan100 eth5.100 eth2 eth1

  4. vconfig add eth5 200
  5. brctl addbr vlan200
  6. brctl addif vlan200 eth5.200 eth3 eth4
复制代码
网卡1 网卡2 网卡3 网卡4都是access口,网卡5才是trunk口

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
10 [报告]
发表于 2015-12-21 11:33 |只看该作者
嗯,是这个意思。

PS,第一张图,如果需求只是1/2,3/4独立交互的话,没有必要引入trunk。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP