一个报文的路由器之旅_【NE探秘】一个报文的路由器之旅
什么是二层桥接转发?
二层所指的是数据链路层。二层桥接转发,是指数据帧在数据链路层是怎样被转发的。
数据链路层有很多不同的网络类型,Token ring(令牌环网)、Ethernet、FDDI(光纤网络)等等,其中用得最广泛的就是以太网Ethernet,本帖要介绍的是以太网的转发原理。
以太网是根据二层帧头信息,切确的说是根据MAC地址,进行转发的。MAC地址对于二层转发而言,是相当的重要。
?
MAC地址简介MAC地址是48bit二进制的地址,如:00-e0-fc-00-00-06,MAC地址是全球唯一的,由IEEE统一管理和分配。MAC地址可以分为单播地址、多播地址和广播地址:
-? 单播地址:第一字节最低位为0,如:00-e0-fc-00-00-06。
-? 多播地址:第一字节最低位为1,如:01-e0-fc-00-00-06。
-? 广播地址:48位全1,如:ff-ff-ff-ff-ff-ff。
?
二层桥接单播转发过程
下图是个最简单的二层桥接转发场景,某局域网的主机PC-A发送报文给主机PC-B,中间经过一台二层交换机的交换。由主机PC-A向主机PC-B发送以太帧,那么该以太帧的目的MAC地址就是MAC2,源MAC就是MAC1。
???????二层交换机转发过程:交换机收到这个以太帧,解析发现其目的MAC为MAC2,查MAC表,发现对应的出端口为Port2,于是将这个以太帧从Port2发送出去。这样,PC-B就收到了这个以太帧。
?
二层桥接广播帧转发过程如果上图中,PC-A初始的时候并不知道PC-B的MAC,怎么办呢?这时,PC-A会发ARP请求,这个ARP请求的目的MAC为广播地址,源MAC为自己的MAC,交换机收到这个广播帧,会发给除了Port1以外的所有端口。这样,局域网内所有主机都能收到这个广播帧。
PC-B发现请求的是咨询自己MAC,于是返回ARP响应报文,交换机对ARP响应报文进行单播转发给PC-A。
?
MAC地址学习机制
上图中,二层交换机上的MAC地址表是MAC地址和端口的映射表,那么这个映射表是怎么得到的呢?上一贴“一个报文的路由器之旅-(8)“中介绍过,路由器通过ARP机制学习到IP和MAC的映射关系,那么,MAC表是怎么得到的呢?
下面举个例子说明MAC地址的学习过程:
仍然以上图为例,当二层交换机刚上电启动时,其MAC地址表是空的。假设此时PC-A要发数据给PC-B,当交换机收到PC-A发给PC-B的数据帧时:
1、交换机首先是读取该数据帧的源MAC地址,并且映射该地址和收到数据帧的端口,加入到MAC地址表。
2、接着,交换机读取数据帧中的目的MAC地址,并且在MAC地址表中查询该MAC地址对应的端口,因为此时交换机的MAC表还没有PC-B的MAC,所以交换机会向所有的端口“洪泛”该数据帧,这样PC-B就能收到这个数据帧了。
上面是交换机学习PC-A的MAC地址的过程。按此方法,当PC-B、PC-C、PC-D都向交换机发送了数据帧后,交换机就学到了所有端口所连接的设备的MAC地址。
MAC地址表的老化机制假设上图的PC-D被搬走,或者交换机连接PC-D和链接PC-C的端口互换了如果不及时更正过来,交换机可能会把数据帧发错地方怎么办呢?交换机的处理方式是:对每条MAC地址都设置一个计时器,如果一台主机在指定的老化时间之内没有发送数据帧到交换机,交换机就会认为它超时,把它的MAC地址从MAC地址表中清除,下次它要发数据帧,交换机再重新学习MAC。
?
VLAN基础上面过程中可知,交换机对广播帧、未知单播都进行广播泛洪,这样,局域网内就存在很多广播帧,消耗很多链路资源,还会占用主机处理广播帧的时间。实际上,广播帧是经常出现的,比如上面的未知单播的泛洪、还有ARP请求;此外,还有DHCP、RIP协议也会频繁发送广播帧。
为了减少广播帧,VLAN(Virtual Area Network,虚拟局域网)诞生了。VLAN将一个局域网在逻辑上划分成多个广播域,所有同一个VLAN的主机可以互相通信。那么VLAN是如何实现广播隔离的呢?
首先,交换机每个端口都指定了所属VLAN。交换机和交换机之间的接口可以属于多个VLAN。如下图,交换机收到VLAN10的PC-A发的广播帧,只转发给含有VLAN10的接口,这样,同一个VLAN的广播帧只有VLAN的成员才能收到,不会传输到其他VLAN中去。
VLAN内如何实现互通?
由于交换机端口配了所属VLAN,交换机的每条转发表项指示了所属VLAN。
交换机收到报文时,根据入接口给报文加上对应VLAN,并根据VLAN和目的MAC转发。打上VLAN的以太帧格式如下:
对端交换机收到报文后,剥除其携带的VLAN,并根据VLAN和目的MAC转发。
注意:VLAN间是无法直接互通的,除非通过路由器中转。
上述例子中,有的交换机端口只允许一个VLAN通过,有的允许多个VLAN通过。它们的处理有什么区别吗?
实际上,VLAN端口可分为三类型:
-? Access端口:只属于一个VLAN,用于连接不支持802.1Q封装的设备,如用户计算机。
-? Trunk端口:可以属于多个VLAN,允许接收和发送多个VLAN的报文。用于网络设备之间互联。
-? Hybrid端口:可以属于多个VLAN,允许接收和发送多个VLAN的报文。可以用于网络设备之间互联,也可以用于连接不支持802.1Q封装的设备。
报文处理机制
为了快速高效的处理,交换机内部,报文都是带VLAN转发的,而且,交换机在处理VLAN报文时,在报文入方向和出方向是分别处理的,不同类型的接口处理方式各不相同,而且不同设备处理方式也会不同。在华为高端路由器上的处理方式如下表所示:
入方向
出方向
?端口类型
收到不带VLAN的报文
收到带VLAN的报文
发送报文的方式
Access端口
接收并打上缺省VLAN后转发
报文带的VLAN与端口缺省VLAN相等,则转发,否则丢弃。
剥离VLAN后发送。
Trunk端口
丢弃该报文
报文带的VLAN在允许的VLAN列表中则转发;否则丢弃。
直接发送报文。
Hybrid端口
接收并打上缺省VLAN,如果缺省VLAN在允许的VLAN列表中则转发;否则丢弃。
报文带的VLAN在允许的VLAN列表中则转发;否则丢弃。
报文带的VLAN与端口缺省VLAN相等,则剥离VLAN后转发,否则直接转发。
?
?
?
二层破环技术――生成树协议以太网络环形组网是一种常见的组网方式,如下图所示。然而这样组网有环路,容易造成广播风暴。
广播风暴如何产生的?举个例子,假设A要与D通讯,但A不知道D的MAC地址,于是发ARP请求。由于ARP请求是MAC广播帧,SW1收到该广播帧,进行泛洪;接着,SW3和SW2也都收到了该广播帧,也进行泛洪,于是SW1和SW2收到了SW3泛洪的广播帧,同时SW1和SW3收到了SW2泛洪的广播帧;如此无限循环,造成广播风暴。
为了检测和消除二层环路,诞生了STP(Spanning-Tree Protocol,生成树协议)及其改进的技术RSTP(Rapid Spanning-Tree Protocol,快速生成树协议)和MSTP(Multiple Spanning-Tree Protocol,多生成树协议)。这些生成树协议都是用于探知链路层拓扑,并对交换机的链路层转发行为进行控制。如果发现网络中存在环路,会在环路上选择一个恰当的位置阻塞链路上的端口――阻止端口转发或接收以太网帧,通过这种方式消除二层网络中可能产生的广播风暴。
本帖关注的是数据帧的转发,因此不讨论这三种生成树协议的细节,需要关注的是生成树协议设置的端口状态及其定义的转发行为。
STP定义了5种端口状态:
- Forwarding:端口既转发用户流量也转发BPDU报文(生成树协议报文被称为BPDU报文)。
- Learning:设备会根据收到的用户流量构建MAC地址表,但不转发用户流量。
- Listening:确定端口角色,将选举出根桥、根端口和指定端口,不转发用户流量。
- Blocking:端口仅仅接收并处理BPDU报文,不转发用户流量。
- Disabled:端口不仅不转发BPDU报文,也不转发用户流量,接口状态为Down。
MSTP和RSTP中,将STP的5种端口状态精简为3种:
- Forwarding:端口既转发用户流量也转发BPDU报文。
- Listening:仅接收并处理BPDU报文,不转发用户流量。
- Discarding:不转发BPDU报文,也不转发用户流量。
综上可知,只有Forwarding状态的端口才转发用户流量。下面介绍用户以太帧的转发流程。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
