深度讲解网桥架构和转发工作原理

在网络世界中,网桥转发是最基础的知识,想学习好的网络知识,必须先掌握网桥转发原理。基础先打好,以后学习新的网络知识才不费劲。费话不多说,马上进入正题。
一、网桥基本架构: 
网桥工作在OSI模型中的数据链路层,数据链路层划分为逻辑链路层LLC子层和介质访问控制MAC子层。 LLC负责识别网络层协议,然后对它们进行封装。LLC报头告诉数据链路层一旦帧被接收到时,应当对数据包做何处理。它的工作原理是这样的:主机接收到帧并查看其LLC报头,以找到数据包的目的地,比如说,在网络层的IP协议。LLC子层也可以提供流量控制并控制比特流的排序。  IEEE 802.2 LLC 应用于 IEEE802.3 (以太网)和 IEEE802.5(令牌环) LAN,以实现如下功能:
1.管理数据链路通信
2.链接寻址
3.定义服务接入点 Service Access Points (SAP)
4.排序
LLC 为上层提供了处理任何类型 MAC 层的方法,例如,以太网 IEEE 802.3 CSMA/CD 或者令牌环 IEEE 802.5 令牌传递(Token Passing)方式。LLC 是在高级数据链路控制(HDLC : High-Level Data-Link Control)的基础上发展起来的,并使用了 HDLC 规范的子集。LLC 定义了三种数据通信操作类型:
类型1:无连接。该方式不保证发送的信息一定可以收到。
类型2:面向连接。该方式提供了四种服务:连接的建立、确认和数据到达响应、差错恢复(通过请求重发接收到的错误数据实现)以及滑动窗口(系数:128)。滑动窗口用来提高数据传输速率。
类型3:无连接应答响应服务。
类型1的 LLC 无连接服务中规定了一种静态帧格式,并允许在其上运行网络协议。使用传输层协议的网络协议通常会使用服务类型1方式。
类型2的 LLC 面向连接服务支持可靠数据传输,运用于不需要调用网络层和传输层协议的局域网环境 。
MAC ENTITIES的作用:存储和学习地址,并计算是否写入学习转发表,MAC 转发软件负责转发或过滤所接收到的 MAC 帧 。
LLC ENTITIES的作用:负责传送高层网桥管理协议。
MAC RELAY ENTITIES的作用:过滤数据库其中包含两张表:学习和转发表。
HIGH LAYER ENTITIES:高层的软件来负责产生、接收、及处理。高层的软件有网桥管理系统、网桥通讯协议等等。
网桥最基本结构:
1.桥端口间的MAC中继实体,端口间中继,过滤帧,学习过滤信息。使用每个端口的独立MAC实体提供的interal sublayer service报文被中继到不同VLAN.
2.至少两个端口,每个端口独立的MAC实体。
3.高层实体,至少包括桥协议实体。
二、转发原理:
MAC转发实体负责转发和过滤所有MAC帧。
转发程序:负责转数据到相应的端口和根据过滤数据库的内容和端口的状态来过滤一些数据。
学习程序:检查每个端口接收到的数据,并根据SOURCE IP来更新过滤库的内容。
过滤数据库:这里的内容是过滤信息,这些内容可以由网络管理系统或学习程序自动填入。根据这里的内容可以判断出数据该往哪个端口转发。
网桥彼此之间也有控制信息需要交换(网络管理系统,网络通讯协议)等,因此每一网桥端口应该提供LLC 种类1给网络通讯协议使用。首先接收程序接收到网络帧后,根据目标MAC判断是否属于网桥通讯软件,如果不是交由MAC实体,如果是由LLC交给网桥通讯软件,网桥通讯软件根据目标MAC来判断是否更新过滤数据库,网桥通讯软件也可以产生或转发帧给其他网桥上的通讯软件,此时可经由LLC转给传送程序。
说了这么多理论知识现在举个报文转发的例子,结合三层转发:
拓扑描述:sw1和sw2为二层交换机,R1,R2为路由器
下面就讲解一下报文如何从PC1转发到PC2:
首先PC1向网关发送一个ARP请求,网关R1会给一个回应,并记录下PC1的相关信息,PC1也从回应信息中学习到网关的IP和MAC地址映射关系。这样PC1就会发送一个目标MAC为网关MAC R1,源MAC为自己,源IP为自己,目标IP为PC2的帧到SW1的fa0/1口,这时SWI会检查一下目标MAC地址,看过滤数据库是否存在如果存在则丢弃如果不存在转发到除了这个端口之外的所有端口,也就是fa0/2口,接下来进入学习状态,查看源MAC,看过滤数据库是否是有存在有,查端口是否一样,不一样就更新,如果过滤数据库不存在这样的表项,便写入表内,记录下,MAC,端口,时间。接着便传到R1 FA0/3口,检查目标MAC发现是给自己的,便解开封装,查看目标IP是否自己的路由表中存在这样的出口,如果没有便丢弃,如果存在便转到下一跳出口中,由S0/1出去,转发到R2 S0/1,R2查看目标IP发现是自己的直连路由,出口是F0/1,这时还不知PC2的具体位置,需要发一个广播ARP报文,这样PC2会有一个ARP回应。这样SW2学习到源MAC地址(网关R2)。这是一个单向过程还需要一个回程的过程。反向过程同理。

weinxin
DC Farm小程序二维码
扫一扫添加博客小程序
Jim

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:9   其中:访客  5   博主  4

    • avatar 艾伦网 1

      嘿嘿,。 不错 顶一个

      • avatar motto 0

        比工具书好多了,娓娓道来,引人入胜,好!

          • 激劉勇靖 激劉勇靖 Admin

            @motto 如果大家觉得不错,我就往这个方向做,给大家共享一些总结的网络知识。

          • avatar 站长 5

            我就想问一个一直困扰我的问题,就是TCP的三次握手问题,都说TCP是可靠的连接,需要经过三次握手建立连接,例如当我登入QQ时,我输入我的用户名和密码,然后向腾讯的服务器进行验证,现在的问题是,我在客户端发送的报文时我怎么知道腾讯的服务器在哪?我的第一次连接目的地就是直接奔向腾讯的服务器吗?我是在局域网利用dhcp获得IP地址,本身就要经过nat进行地址转换,那么报文里的源地址是哪个?说的有点乱,可能描述过程中可能错了,希望得到一个详细的答案。

              • 激劉勇靖 激劉勇靖 Admin

                @站长 首先我要纠正一下,qq使用的是UDP协议,是不可靠连接没有三次握手这个概念。
                我举个例子回答你的问题:比如你登录百度,在登录百度之前你的pc上并没有百度的dns信息,你可以在cmd输入C:\Documents and Settings\liujing>ipconfig /displaydns 查看一下这里是没有百度的dns映射表。当你在浏览器上输入www.baidu.com之后,因为你的pc dns表是空的。你就会往DNS服务器发dns请求,DNS服务会回复你的请求,这个回复报文中携带了www.baidu.com的域名和百度IP。当你收到这个报文后就会把百度的dns信息存入刚才查看的dns表中,这时你再输入查看就可以看到相应的dns信息。有了这个nds信息后,你就知道百度域名对应哪个ip。之后通信就用这个IP。
                第二个问题,无论你是用dhcp获取还是用静态ip都是一样的。有点网络基础的都知道内网ip外网是不知道的。所以要通过nat做个内外网地址转换。当你在内网ping外网一个地址时,你本地ping出去的报文使用的源ip,是你本地获取的内网地址,当这个报文转到出口路由器时,路由器会把源IP 通过nat转换成外网ip,同时会在路由器中记录一条流表项(这个表项的作用是当回复报文的对应信息和这个流表一致时就才会转发到对应内网地址。),这个转换过的报文再发送的外网的目的。外网回复的报文到路由器后,路由器会检查流表,如果之前有记录相应流信息,就会转发到内网IP。
                不知道这样回答够不?

              • avatar 站长 5

                整体还是比较了解,但是至于QQ使用的哪种协议,我听过很多老师讲如果你是登入QQ,使用的是TCP,因为服务器要验证你的信息是否正确,至于在与好友进行通信时,用的是UDP,因为不需要判断是否将信息发送到对方。@激劉勇靖

                  • 激劉勇靖 激劉勇靖 Admin

                    @站长 你可以通过wireshark抓个包就知道,他是什么协议了。

                  • avatar 站长 5

                    是的正在研究中@激劉勇靖