全部博文(685)
分类: LINUX
2014-09-05 10:45:14
二层转发:在链路层,根据报文的目的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会创建一个三层口,用来和三层进行通信。