Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

网桥学习笔记 #11

Open
leon0625 opened this issue May 3, 2018 · 0 comments
Open

网桥学习笔记 #11

leon0625 opened this issue May 3, 2018 · 0 comments

Comments

@leon0625
Copy link
Owner

leon0625 commented May 3, 2018

一、集线器(HUB)、网桥(又称交换机,switch)和路由器区别

  • hub: 不关心协议,只是单纯的把一个端口收到的数据复制到所有端口
  • bridge:理解L2链路层协议,在没有MAC地址学习成果的情况下和hub一样也是把数据帧复制到所有端口,再有MAC学习成果的情况下,数据帧会复制到对应端口。
  • router:理解L3网络层协议,会根据路由表来转发封包。

二、网桥的地址学习

image

地址学习

  一个简单的拓扑如上所示,在网桥刚上电(还没有进行地址学习)时,PC1给PC2发数据的时候,网桥会把PORT1上收到的数据同时复制给PORT2和PORT3上的主机。PC3收到这个包发现不是自己的会直接丢弃, PC2则会进行回复。这数据包一来一回的过程中,网桥就知道了PC1处在PORT1端口侧,PC2处在PORT2侧。下次他俩的通信就不需要再把数据转给PORT3端口了。
  如果PC1给PC3发数据,由于没有PC3的MAC学习缓存,所以这个数据会同时复制到PORT2和PORT3端口,接下来就和上面一样的过程了。

广播和多播地址

  当网桥接收到一个目的地址是链路层广播地址或L2多播地址的数据帧时,会将该帧复制给每个端口。多播和广播地址不能作为数据帧的源地址,所以不会被网桥学习而分配给特定的端口。

老化

  还是上图的拓扑,假如在完成地址学习后,PC2和PC3的位置交换,而且PC2在位置交换后没有发出任何数据帧,那么网桥还是认为PC2处在PORT2。当PC1给PC2发数据的时候,网桥会把数据发往PORT2,这时处在PORT3的PC2就无法收到数据了。所以为了让网桥有适应拓扑变化的能力,会为每一个学习到的地址设置老化时间,一般为5分钟。
  

三、生成树协议STP

网桥环路

  当网络中存在多个网桥的情况下,可能会引起网桥环路,环路会导致一个数据在两个网桥之间无限循环的来回传输,从而影响整个网络的性能。

STP

  STP(spanning tree protocol),就是为了解决拓扑网络中的环路问题而产生的协议。生成树协议不断发展又得到RSTP, MSTP。桥接协议和STP的细节很多,需要一整本书才讲得完,所以这里我也是简单跳过。记录下一下感觉有用的部分。

STP的作用

  首先生成树是为了得到一个无环路拓扑,那么为什么在网络设备布线时就要构建有环的网络呢?因为这有助于分散流量,容易管理大量的主机,布线简单,其中一个网桥失效的情况下不影响网络的畅通性。STP通过临时的阻塞某些端口不转发数据从而实现接触拓扑中的环路问题。

STP实现

  相当复杂。主要是通过网桥协议数据单元(BPDU, bridge protocol data unit)来实现。BPDU数据封装在STP协议数据(目的地址为01:80:c2:00:00:00)里面,然后各个网桥把BPDU数据传来传去就协商好了。

STP端口状态

  • 关闭(Disabled)
    该端口已关闭(通过管理型操作),它不在接受或传输任何流量
  • 阻塞(Blocking)
    该端口已开启,但STP将其阻塞了。该端口不能转发任何数据流量
  • 监听(Listening)
    该端口已开启,但是不能用于转发任何数据流量
  • 学习(Learning)
    该端口已开启,但是不能用于转发数据流量,然而,该网桥的地址学习功能是激活的
  • 转发(Forwarding)
    该端口开启,地址学习是激活的,并且可以转发数据流量
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant