Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3167534
  • 博文数量: 685
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5303
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-19 14:17
个人简介

文章分类

全部博文(685)

文章存档

2015年(116)

2014年(569)

分类: LINUX

2014-09-05 10:45:14

原文地址:http://blog.chinaunix.net/uid-26517122-id-4369034.html

二层转发:在链路层,根据报文的目的MAC地址来对报文进行转发,因为是在链路层,我们称为二层转发。二层转发过程中不用对报文的头部做任何的修改。而三层转发则是根据报文的IP地址来进行转发,并且要对报文的二层头部进行相应的修改。


桥接:既把两台在同一网段的设备通过网桥连接在一起,因为网桥就是一台二层转发的设备,通俗的讲就是根据目的MAC地址把一台设备上的报文原封不动的送给对应的另一台设备,所以说网桥设备在整个链路上是透明的。


FDB表:每个桥内都会维护一张转发信息表(FDB),转发表项包含如下信息:

MAC:设备的MAC地址

port:该设备连接在交换机的哪个端口。


网桥收到报文后根据目的MAC查到表项就知道报文的出端口,直接转发出去即可。


MAC地址学习

交换机一起动时,桥内部维护的转发信息表(FDB表)是空的。网桥设备每接收到一个报文后,就会根据报文的源MAC地址及报文接收端口,来更新FDB表。


FDB表项的老化

每个bridge里维护着一份FDB表,里面存着很多表项。为了防止长时间不用的表项及无效的表项占着内存,需要定时的清理这些表项。我们称之为FDB表项的老化。


未知单播:报文进入桥里,在FDB表中没有查到该报文的目的MAC,这时桥就不知道把该报文从哪个具体的端口转发出去。这样的报文就称作未知单播。


泛洪(flood):网桥处理广播报文及未知单播的方法,即把报文从桥里的每个端口发送一份出去,但不往该报文的源端口发送。


混杂模式:端口的一种状态,端口可以接收目的MAC不是该端口MAC的报文。一般端口默认是只接收目的MAC是该端口MAC的报文,但要进行二层转发,端口是要求接收目的MAC不是该端口的MAC,这时就要把端口模式设置为混杂模式。


二层口:二层口是指只具有二层转发功能的端口。从开发者角度来说,二层口和三层口在内核中都对应了一个net_device,但二层口是没有配置ip地址并且端口设置为混杂模式,并且加入网桥的端口。


如上所述,桥会自己进行MAC学习,来维护一张转发信息表。收到报文后用报文的目的MAC来进行查找,找到相应出端口直接把报文从出端口转发出去。如果是广播报文,就会在整个桥内进行广播,从桥中每个端口发送一份出去(报文源端口除外)。如果查找转发信息表后没找到相应的表项,就在桥内进行泛洪,即从桥中每个端口发送一份出去(报文源端口除外)。这样使连接在每个端口的设备都能收到一份报文,如果相应设备发现是到本节设备的报文,就进行处理。其他设备发现不是到本机的报文,就直接丢弃了。


报文流向图:

                  二层转发报文
                  和本机通信的报文


                   三层转发报文

如上图所示,一台设备创建了两个虚拟bridge。每个bridge里加入了两个二层口。每个bridge会创建一个三层口,用来和三层进行通信。

阅读(1479) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~