一个报文的路由器之旅-ag凯发k8国际
什么是二层桥接转发?
二层所指的是数据链路层。二层桥接转发,是指数据帧在数据链路层是怎样被转发的。
数据链路层有很多不同的网络类型,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状态的端口才转发用户流量。下面介绍用户以太帧的转发流程。
总结
以上是ag凯发k8国际为你收集整理的一个报文的路由器之旅_【ne探秘】一个报文的路由器之旅的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: