网桥用来连接不同的网段。使不同的网段能够相互通信,看起来很像三层的路由。它能够有多个port,从而能够将数据帧从一个port复制到另一个port。
这里要注意一点,linux下的网桥只能用于以太网。
来看下示意图:
其中一个是bridge,一个是route。
网桥的主要工作是从输入帧学习主机的位置,建立一个地址的表(也就是表明这个主机(mac地址)属于那个网络),然后基于这个表来复制输入帧到正确的位置。
这里虽然bridge只是起一个引导的作用,可是在下面两个情况下,网桥也有可能处理输入帧:
1 将输入帧up到上层协议栈。
比如说这个网桥刚好还是一个router。
2 将帧传递给协议处理handler.
这里主要是在STP(spanning tree protocol)中会用到
接下来来看网桥如何工作:
lan1和lan2中的任意主机发送帧,都会被这两个lan中的所有主机(包括)接收到,当网桥接收到后,将此帧拷贝到它的port上,这里也就是拷贝到另一个lan上。
这里可以看到这里有个问题,那就是假设host a发送一个帧到host b,而此时,这两个lan中的所有host都会接受到这个帧,这引起了极大地资源浪费。
可是网桥还是很聪明的,它有地址学习的功能:
当a第一次传递给b帧之后,网桥将会学习到a是在lan 1上,然后再当b传递数据给a时,网桥就不会传递多余数据给lan 2的主机了。
当网桥收到的地址是链路层广播(FF:FF:FF:FF:FF:FF)时,他就会将这个帧拷贝到其他所有的port.因此多播将不会被学习。
现在还有个问题,那就是局域网的主机是很容易变动的,举个例子,还是上面的情况,可是我把host a搬到lan 2上去了,而此时网桥还认为a在lan 1上,这个时侯数据传递就会出错了。
这里解决方法就是使用定时器来定时更新这个表,当地址第一次被学习到时,定时器开始运行,然后当这个地址(mac地址)被重新学习到时,重启这个定时器。这样,我们通过设置定时器,就可以定时更新学习表了。这里的定时器如果设的太短的话,会有个问题,那就是很容易使网桥不知道如何到达另外一个lan(原因是超时后会删掉这条记录,而此时又回到第一次发包的情况了)。网桥就会赋值帧到所有的port.
看下面的示意图:
网桥回路的产生.
先看下面的网络图:
这里有两个网桥,此时就有可能会产生回路。当主机a发送一个帧之后,网桥 1 和 2 ,我们假设同时收到这个帧(此时学习到a处于 lan 1),并同时发到lan2,此时他们还会给对方发送一个帧,而这个帧刚好是刚才帧的赋值,这个时侯就会使这两个网桥认为a 处于lan 2上。这个时侯更新查找表,然后把包又发给lan 1.这时就形成了回路。
我们用图来表示上面的网桥和lan的关系:
可以看到如果我们要打破这个回路只需要关闭掉网桥1 或网桥2 的一个端口就行了。
打破回路的算法基本所有算法书都有实现,在网络中寻找最佳无环路拓扑结构的算法是Spanning Tree Protocol,也就是如何在多个网桥和lan中实现无回路的网络。
这里要注意一点,linux下的网桥只能用于以太网。
来看下示意图:
其中一个是bridge,一个是route。
网桥的主要工作是从输入帧学习主机的位置,建立一个地址的表(也就是表明这个主机(mac地址)属于那个网络),然后基于这个表来复制输入帧到正确的位置。
这里虽然bridge只是起一个引导的作用,可是在下面两个情况下,网桥也有可能处理输入帧:
1 将输入帧up到上层协议栈。
比如说这个网桥刚好还是一个router。
2 将帧传递给协议处理handler.
这里主要是在STP(spanning tree protocol)中会用到
接下来来看网桥如何工作:
lan1和lan2中的任意主机发送帧,都会被这两个lan中的所有主机(包括)接收到,当网桥接收到后,将此帧拷贝到它的port上,这里也就是拷贝到另一个lan上。
这里可以看到这里有个问题,那就是假设host a发送一个帧到host b,而此时,这两个lan中的所有host都会接受到这个帧,这引起了极大地资源浪费。
可是网桥还是很聪明的,它有地址学习的功能:
当a第一次传递给b帧之后,网桥将会学习到a是在lan 1上,然后再当b传递数据给a时,网桥就不会传递多余数据给lan 2的主机了。
当网桥收到的地址是链路层广播(FF:FF:FF:FF:FF:FF)时,他就会将这个帧拷贝到其他所有的port.因此多播将不会被学习。
现在还有个问题,那就是局域网的主机是很容易变动的,举个例子,还是上面的情况,可是我把host a搬到lan 2上去了,而此时网桥还认为a在lan 1上,这个时侯数据传递就会出错了。
这里解决方法就是使用定时器来定时更新这个表,当地址第一次被学习到时,定时器开始运行,然后当这个地址(mac地址)被重新学习到时,重启这个定时器。这样,我们通过设置定时器,就可以定时更新学习表了。这里的定时器如果设的太短的话,会有个问题,那就是很容易使网桥不知道如何到达另外一个lan(原因是超时后会删掉这条记录,而此时又回到第一次发包的情况了)。网桥就会赋值帧到所有的port.
看下面的示意图:
网桥回路的产生.
先看下面的网络图:
这里有两个网桥,此时就有可能会产生回路。当主机a发送一个帧之后,网桥 1 和 2 ,我们假设同时收到这个帧(此时学习到a处于 lan 1),并同时发到lan2,此时他们还会给对方发送一个帧,而这个帧刚好是刚才帧的赋值,这个时侯就会使这两个网桥认为a 处于lan 2上。这个时侯更新查找表,然后把包又发给lan 1.这时就形成了回路。
我们用图来表示上面的网桥和lan的关系:
可以看到如果我们要打破这个回路只需要关闭掉网桥1 或网桥2 的一个端口就行了。
打破回路的算法基本所有算法书都有实现,在网络中寻找最佳无环路拓扑结构的算法是Spanning Tree Protocol,也就是如何在多个网桥和lan中实现无回路的网络。