Linux Bridge 网桥实现分析
网桥 作者: kendo(http://www.skynet.org.cn/) 第一部份 源码框架 一、网桥原理 传统的中继器,如HUB,是一个单纯的物理层设备,它将每一个收到的数据包,在其所有的端口上广播,由接收主机来判断这个数据包是否是给自己的。这样,网络资源被极大的浪费掉了。 网桥之所以不同于中继器,主要在于其除了有中继的作用外,还有一个更重要的作用,就是学习MAC地址,然后根据每个数据包的目的MAC与自身端口的对应,从关联端口发送数据,而不完全地在整个网段中进行广播。所以,网桥的实现中,有两个关键点: 学习MAC地址,起初,网桥是没有任何地址与端口的对应关系的,它发送数据,还是得想HUB一样,但是每发送一个数据,它都会关心数据包的来源MAC是从自己的哪个端口来的,由于学习,建立地址-端口的对照表 (CAM表) 。 每发送一个数据包,网桥都会提取其目的MAC地址,从自己的地址-端口对照表(CAM表)中查找由哪个端口把数据包发送出去。 网桥的功能在延长网络跨度上类似于中继器,然而它能提供智能化连接服务,即根据帧的终点地址处于哪一网段来进行转发和滤除。网桥对站点所处网段的了解是靠"自学习"实现的。 当使用网桥连接如图2所示的两段LAN时,网桥对来自网段1的MAC帧,首先要检查其终点地址。如果该帧是发往网段1上某一站的,网桥则不将帧转发到网段2,而将其滤除;如果该帧是发往网段2上某一站的,网桥则将它转发到网段2。这表明,如果LAN1和LAN2上各有一对用户在本网段上同时进行通信,显然是可以实现的。因为网桥起到了隔离作用。可以看出,网桥在一定条件下具有增加网络带宽的作用。 网桥的存储和转发功能与中继器相比有优点也有缺点,其优点是: .使用网桥进行互连克服了物理限制,这意味着构成LAN的数据站总数和网段数很容易扩充。 .网桥纳入存储和转发功能可使其适应于连接使用不同MAC协议的两个LAN。 因而构成一个不同LAN混连在一起的混合网络环境。 .网桥的中继功能仅仅依赖于MAC帧的地址,因而对高层协议完全透明。 .网桥将一个较大的LAN分成段,有利于改善可靠性、可用性和安全性。 网桥的主要缺点是: .由于网桥在执行转发前先接收帧并进行缓冲, 与中继器相比会引入理多时延。 .由于网桥不提供流控功能,因此在流量较大时有可能使其过载, 从而造成帧的丢失。 网桥的优点多于缺点正是其广泛使用的原因。 网桥将两个相似的网络连接起来,并对网络数据的流通进行管理。它工作于数据链路层,不但能扩展网络的距离或范围,而且可提高网络的性能、可靠性和安全性。网络1 和网络2 通过网桥连接后,网桥接收网络1 发送的数据包,检查数据包中的地址,如果地址属于网络1 ,它就将其放弃,相反,如果是网络2 的地址,它就继续发送给网络2.这样可利用网桥隔离信息,将同一个网络号划分成多个网段 (属于同一个网络号) ,隔离出安全网段,防止其他网段内的用户非法访问。由于网络的分段,各网段相对独立 (属于同一个网络号) ,一个网段的故障不会影响到另一个网段的运行。 网桥可以是专门硬件设备,也可以由计算机加装的网桥软件来实现,这时计算机上会安装多个网络适配器 (网卡) 。 网桥的功能在延长网络跨度上类似于中继器,然而它能提供智能化连接服务,即根据帧的终点地址处于哪一网段来进行转发和滤除。网桥对站点所处网段的了解是靠"自学习"实现的,有透明网桥、转换网桥、封装网桥、源路由选择网桥。 当使用网桥连接两段LAN 时,网桥对来自网段1 的MAC 帧,首先要检查其终点地址。如果该帧是发往网段1 上某一站的,网桥则不将帧转发到网段2 ,而将其滤除;如果该帧是发往网段2 上某一站的,网桥则将它转发到网段2,这表明,如果LAN1和LAN2上各有一对用户在本网段上同时进行通信,显然是可以实现的。 因为网桥起到了隔离作用。可以看出,网桥在一定条件下具有增加网络带宽的作用。 网桥的存储和转发功能与中继器相比有优点也有缺点,其优点是: 使用网桥进行互连克服了物理限制,这意味着构成LAN 的数据站总数和网段数很容易扩充。 网桥纳入存储和转发功能可使其适应于连接使用不同MAC 协议的两个LAN,因而构成一个不同LAN 混连在一起的混合网络环境。 网桥的中继功能仅仅依赖于MAC 帧的地址,因而对高层协议完全透明。 网桥将一个较大的LAN 分成段,有利于改善可靠性、可用性和安全性。 网桥的主要缺点是: 由于网桥在执行转发前先接收帧并进行缓冲,与中继器相比会引入更多时延。由于网桥不提供流控功能,因此在流量较大时有可能使其过载,从而造成帧的丢失。 网桥的优点多于缺点正是其广泛使用的原因。 网桥工作在数据链路层,将两个LAN连起来,根据MAC地址来转发帧,可以看作一个"低层的路由器" (路由器工作在网络层,根据网络地址如IP地址进行转发) 。 远程网桥通过一个通常较慢的链路 (如电话线) 连接两个远程LAN,对本地网桥而言,性能比较重要,而对远程网桥而言,在长距离上可正常运行是更重要的。 网桥与路由器的比较 网桥并不了解其转发帧中高层协议的信息,这使它可以同时以同种方式处理IP、IPX等协议,它还提供了将无路由协议的网络 (如NetBEUI) 分段的功能。 由于路由器处理网络层的数据,因此它们更容易互连不同的数据链路层,如令牌环网段和以太网段。网桥通常比路由器难控制。像IP等协议有复杂的路由协议,使网管易于管理路由;IP等协议还提供了较多的网络如何分段的信息 (即使其地址也提供了此类信息) 。而网桥则只用MAC地址和物理拓扑进行工作。因此网桥一般适于小型较简单的网络。 ...