当前位置 博文首页 > 高级网络工程师的博客:二三层转发学习理解

    高级网络工程师的博客:二三层转发学习理解

    作者:[db:作者] 时间:2021-08-21 16:15

    二三层转发学习理解
    VLAN相关
    1.什么是广播域?
    广播域,指的是目标MAC地址全为1的广播帧所能够传递到的范围,也就是说是能够直接进行通信的范围。严格意义上说,不仅是广播帧,多播帧和目标不明的单播帧也能够在这个范围内顺利传递。
    2.什么是分割广播域?为什么要分割广播域?
    分割广播域就是用某种手段将一个广播域分化成几个小的广播域,形象的说就像是在微信里和几个经常互相联系的朋友建了一个讨论组,我们讨论的内容也不会“打扰”到微信大群里其他的朋友。分割广播域的意义也是一样,有时候我们通信的寻址范围不需要扩那么大,既浪费了带宽又增加了非目的计算机的CPU时间负担。
    3.广播信息的发送很频繁吗?
    答案是:是的!实际上广播帧会非常频繁地出现。利用TCP/IP协议栈通信时,除了前面出现的ARP外,还有可能需要发出DHCP、RIP等很多其他类型的广播信息。
    ARP广播,是在需要与其他主机通信时发出的。当客户机请求DHCP服务器分配IP地址时,就必须发出DHCP的广播。而使用RIP作为路由协议时,每隔30秒路由器都会对邻近的其他路由器广播一次路由信息。RIP以外的其他路由协议使用多播传输路由信息,这也会被交换机转发(Flooding)。除了TCP/IP以外,NetBEUI、IPX和Apple Talk等协议也经常需要用到广播。例如在Windows下双击打开“网络计算机”时就会发出广播(多播)信息。(Windows XP除外……)
    总之,广播就在我们身边。
    常见的广播信息:ARP请求:建立IP地址和MAC地址的映射关系。
    RIP:一种路由协议。
    DHCP:用于自动设定IP地址的协议。
    NetBEUI:Windows下使用的网络协议。
    IPX:Novell Netware使用的网络协议。
    Apple Talk:苹果公司的Macintosh计算机使用的网络协议
    4.VLAN是什么?VLAN的作用?
    VLAN(Virtual LAN),翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用交换机分割的网络——也就是广播域。
    1)限制广播域:广播域被限制在一个VLAN内,节省了带宽,提高了网络处理能力。
    2)增强局域网的安全性:不同VLAN内的报文在传输时是相互隔离的,即一个VLAN内的用户不能和其它VLAN内的用户直接通信。
    3)提高网络的健壮性:故障被限制在一个VLAN内,本VLAN内的故障不会影响其他VLAN的正常工作。
    4)灵活构建虚拟工作组:用VLAN可以划分不同的用户到不同的工作组,同一工作组的用户也不必局限于某一固定的物理范围,网络构建和维护更方便灵活
    5.VLAN的划分?
    VLAN的划分可以是事先固定的、也可以是根据所连的计算机而动态改变设定。前者被称为“静态VLAN”、后者是“动态VLAN”。
    6.静态VLAN?
    被称为基于端口的VLAN(Port Based VLAN)。就是明确指定各端口属于哪个VLAN的设定方法,这个是最常用的方法,我们现在所实现的VLAN配置都是基于端口的配置,因为我们只是支持二层交换,端口数目有限一般为4-24个端口,并且只是对于一台交换机的配置,手动配置换算较为方便。
    当网络中的计算机数目超过一定数字(比如数百台)后,静态的划分设定操作就会变得烦杂无比。并且,客户机每次变更所连端口,都必须同时更改该端口所属VLAN的设定——基于端口的划分显然不适合那些需要频繁改变拓扑结构的网络。

    7.动态VLAN?
    动态VLAN是根据每个端口所连的计算机,随时改变端口所属的VLAN。这就可以避免上述的更改设定之类的操作。动态VLAN可以大致分为3类:
    1)基于MAC地址的VLAN(MAC Based VLAN)
    通过查询并记录端口所连计算机上网卡的MAC地址来决定端口的所属。假定有一个MAC地址“A”被交换机设定为属于VLAN“10”,那么不论MAC地址为“A”的这台计算机连在交换机哪个端口,该端口都会被划分到VLAN10中去。计算机连在端口1时,端口1属于VLAN10;而计算机连在端口2时,则是端口2属于VLAN10。
    由于是基于MAC地址决定所属VLAN的,因此可以理解为这是一种在OSI的第二层设定访问链接的办法。
    但是,基于MAC地址的VLAN,在设定时必须调查所连接的所有计算机的MAC地址并加以登录。而且如果计算机交换了网卡,还是需要更改设定。
    2)基于子网的VLAN(Subnet Based VLAN)
    通过所连计算机的IP地址,来决定端口所属VLAN的。不像基于MAC地址的VLAN,即使计算机因为交换了网卡或是其他原因导致MAC地址改变,只要它的IP地址不变,就仍可以加入原先设定的VLAN。
    基于子网的VLAN是一种在OSI的第三层设定访问链接的方法。一般路由器与三层交换机都使用基于子网的方法划分VLAN
    3)基于用户的VLAN(User Based VLAN)
    是根据交换机各端口所连的计算机上当前登录的用户,来决定该端口属于哪个VLAN。这里的用户识别信息,一般是计算机操作系统登录的用户,比如可以是Windows域中使用的用户名。这些用户名信息,属于OSI第四层以上的信息。
    总的来说,决定端口所属VLAN时利用的信息在OSI中的层面越高,就越适于构建灵活多变的网络。
    8.VLAN数据帧和传统的以太网数据帧的区别?
    在传统以太网数据帧的基础上增加了4个字节的802.1Q Tag,传统以太网数据帧为目的地址,源地址,长度/类型,数据,现场总线控制系统标识符,4个字符就增加在目的地址和源地址之后,长度/类型之前。
    在这里插入图片描述

    IEEE 802.1Q是VLAN的正式标准,在传统的以太网数据帧基础上(源MAC地址字段和协议类型字段之间)增加4个字节的802.1Q Tag。其中,数据帧中的VID(VLAN ID)字段用于标示该数据帧所属的VLAN,数据帧只能在所属VLAN内进行传输。
    PRI:这个是优先级,指明了包的优先级,共有8种优先级,当发生阻塞时,优先发送优先级高的包。
    CFI:Canonical Format Indicator,这一位主要用于总线型的以太网与FDDI、令牌环网交换数据时的帧格式。
    VLAN ID:12位,指明VLAN的ID,范围是1~4094 (全0、全1未用)。
    在VLAN环境下,VLAN帧可以分为untagged、tagged、priority-tagged三种,识别的方法是:
    Untagged:不包含标签头,或者TPID不等于0x8100 ;指明此数据包不属于任何VLAN。
    Tagged:包含标签头,TPID等于0x8100 ,VLAN ID不等于零;VID用于指明数据包属于哪个VLAN。
    Priority-tagged:包含标签头,TPID等于0x8100 ,VLAN ID等于零。
    9.PVID的概念及理解?
    PVID是端口的默认VLAN ID,也叫缺省VLAN ID,还可以叫native VLAN ID,又可以叫私有VLAN ID,总的说来PVID并不是加在帧头的标记,而是端口的属性,用来标识端口接收到的未标记的帧。在Untagged或者Priority-tagged进入端口以后,会插入VLAN ID为PVID的标签,区别是Pri-tagged的包会采用标签中自带的优先级,也就是说,当端口收到一个未标记的帧时,则把该帧转发到VID和本端口PVID相等的VLAN中去。另外PVID跟系统的默认VLAN不是一个概念,系统的默认VLAN一般为1,不可更改,初次进入设备,所有的端口都在VLAN 1里,此时各个端口的PVID为1;但是各个端口的PVID可以更改为其他任何值(1-4094)。
    10.VLAN的链路类型?
    Access接口:Access口只能属于1个VLAN,交换机上用来连接用户主机的接口,它只能连接接入链路(Access Link)。
    Trunk接口:Trunk口上可以同时属于多个VLAN,交换机上用来和其他交换机连接的接口,它只能连接干道链路(Trunk Link)。
    Hybrid接口:可以属于多个VLAN,是交换机上既可以连接用户主机,又可以连接其他交换机的接口。Hybrid接口既可以连接接入链路又可以连接干道链路。
    端口成对出现?不是!
    要确保网络中所有用户都能上网,则需要把Trunk端口的PVID设置成非上网用户所在VLAN的VLAN ID。见《关于trunk、hybrid、access、tag、untag、PVID的关系与区别》有一个实例,为什么PC2不能上网。
    11.三种接口对VLAN数据帧的处理过程?
    Access口收报文:
    收到一个报文,判断是否有VLAN信息(Tag):如果没有则打上端口的PVID,等待下一步处理,如果有则判断其VID是否等于端口的PVID,若等则接收待下一步处理,不等则直接丢弃(缺省)。
    Access口发报文:
    判断报文VID是否等于端口的PVID,若等则将报文的VLAN信息剥离,直接发送出去;若不等则直接丢弃(所以,Access端口可以实现同一交换机上相同VLAN下的主机通信;也可以实现交换机级连时的缺省VLAN1报文交换,但不能实现VLAN透传。)
    trunk口收报文:
    收到一个报文,判断是否有VLAN信息(Tag):如果有,判断该trunk端口是否允许该 VLAN的数据进入:如果可以则接收,否则丢弃;如果没有VLAN信息(Tag)则打上端口的PVID,等待下一步处理。
    trunk口发报文:
    比较将要发送报文的VLAN信息和端口的PVID,如果不相等则直接发送。如果两者相等则剥离VLAN信息,再发送。(如果更改Trunk的缺省PVID,则可以实现某一交换机下的VLAN-X和另一交换机下的VLAN-Y通信。)
    hybrid口收报文:
    收到一个报文,判断是否有VLAN信息:如果有,则判断该hybrid端口是否允许该VLAN的数据进入:如果可以则接收,否则丢弃 (此时端口上的untag配置是不用考虑的,untag配置只对发送报文时起作用);如果没有则打上端口的PVID,等待下一步处理。
    hybrid口发报文:
    判断该VLAN在本端口的属性(disp interface 即可看到该端口对哪些VLAN是untag,哪些VLAN是tag),如果是untag则剥离VLAN信息,再发送,如果是tag则直接发送(所以,Hybrid实现了不同VLAN下的主机的通信。)
    12.三种接口处理报文的方式图解?
    Access口:
    在这里插入图片描述

    Trunk口:
    在这里插入图片描述

    Hybrid口:
    在这里插入图片描述

    13.三种接口处理报文方式表解?
    为了更好理解三种接口对报文的处理方式,整理如下表:
    端口类型 收发 描述
    Access 收报文 判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发;如果有,判断VID和PVID是否相等,相等则可以转发,不等则直接丢弃。
    发报文 比较端口的PVID和将要发送报文的VLAN信息,如果两者相等则剥离VLAN信息,再发送,不相等,直接丢弃。
    Trunk 收报文 收到一个报文,判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发(只在VLAN ID=PVID的VLAN里进行转发);如果有判断该trunk端口是否允许该 VLAN的数据进入:如果可以则转发,否则丢弃
    发报文 比较端口的PVID和将要发送报文的VLAN信息,如果两者相等则剥离VLAN信息,再发送,如果不相等,比较帧的VLAN Tag 和接口允许通过的VID,若一致,则直接发送,不一致丢弃。
    Hybrid 收报文 收到一个报文判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发(只在VLAN ID=PVID的VLAN里进行转发);如果有则判断该hybrid端口是否允许该VLAN的数据进入:如果可以则转发,否则丢弃
    发报文 判断该VLAN在本端口的属性(该端口对哪些VLAN是untag, 哪些VLAN是tag)如果是untag则剥离VLAN信息,再发送,如果是tag则直接发送
    注意:Hybrid接口和Trunk接口在接收数据时,处理方法是一样的。唯一不同之处在于:发送数据时,Hybrid接口可以允许多个VLAN的报文发送时不打标签,而Trunk接口只允许缺省VLAN的报文发送时不打标签。
    14.二层转发PING流程?( PC ping SW1 )

    在这里插入图片描述

    已知PC端的IP、MAC和SW1的IP,PC要Ping SW1
    :PC端发送ARP广播,ARP报文格式

    在这里插入图片描述

    此时DA目的地址为广播地址(全F),OP选项为请求(request 1),并且该报文由PC发出,不含Tag。
    ①SW收到此报文,发现没有标签,打上自己的PVID的标签;更新自己的mac表,记录PC的mac地址及来时的端口号;查看报文目的mac,发现是广播地址;进行洪泛。
    ②SW1收到此报文,查看目的IP发现与自己IP相同;写入自己的mac地址并发回一个ARP应答报文,报文格式同ARP请求报文,但此时目的地址、目的IP和源地址、源IP交换,并且OP选项变更为应答(answer 2),此报文依旧不带Tag;更新自己的arp表,将PC的mac和对应IP写入表内。
    ③SW收到应答报文,打上自己的PVID,将对应的源mac和对应端口号写入自己的mac表;然后在自己的mac表里找目的mac,发现存在,从对应端口转发出去。
    ④PC收到应答报文,把SW1的IP和mac对应写入自己的arp表里。
    PC发送一个源IP为自己IP,目的IP为SW1 IP的icmp请求报文,PC查找arp表,找到与目的IP对应的目的mac,然后发出。
    ⑤SW收到这个无标签的icmp报文,打上自己的PVID,查找自己的mac表,源mac在表项里,更新HIT,找到目的mac对应的端口转发出去。
    ICMP请求/应答报文格式:

    在这里插入图片描述

    ⑥SW1收到icmp请求报文,更新自己的arp表,发送一个icmp应答报文。
    ⑦SW收到无标签的icmp应答报文,打上自己的PVID,查找mac表,源mac存在,更新HIT,找到目的地址对应的端口转发。
    ⑧PC收到icmp回显应答,更新自己的arp表。
    Ping过程结束。

    MAC
    1.MAC地址?
    MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC地址。长度是48比特(6字节),由16进制的数字组成,分为前24位和后24位:前24位叫做组织唯一标志符(Organizationally Unique Identifier,即OUI),是由IEEE的注册管理机构给不同厂家分配的代码,区分了不同的厂家。后24位是由厂家自己分配的,称为扩展标识符。同一个厂家生产的网卡中MAC地址后24位是不同的。
    2.MAC地址分类?
    MAC地址有单播、多播、广播之分。
    单播地址代表单一设备、节点;多播地址代表一组设备或节点;广播地址代表所有的地址,用全F表示。
    第一字节的第7bit是G/L位,表示该MAC地址是全球地址还是本地地址,0代表全球地址,1表示本地地址。
    网络设备上固化的MAC地址,它唯一标识这个设备,因此作为单播地址,它的MAC帧里的源地址第48位只能是0。
    组播和广播地址只能作为目的地址。
    关于多播地址,MAC地址的第一字节不一定非要是0x01,而是只要第48bit是1就表示多播地址,所以0x01/0xc1/0x33……都表示该地址是多播地址。
    3.MAC地址学习?
    二层转发基于MAC表实现。Mac地址表记录了MAC地址与接口的对应关系,以及接口所属的VLAN等信息。设备在转发报文时,根据报文的目的mac查询mac地址表。
    MAC表项的生成分为两种:自动生成和手工配置。
    以自动方式生成的叫做动态MAC,手工配置的则是静态MAC和永久MAC。
    1)动态MAC会随着学习而进行更新VID、端口等信息,或者老化,当交换机断电重启后会消失;
    2)静态MAC是通过配置产生的,是不会随着学习而产生变化,也不会参与老化,当交换机断电重启后会消失;
    3)永久MAC也是通过配置产生的,也不会发生变化,而且交换机重启后也不会消失。
    静态mac地址表项优先级高于动态mac地址表项,静态mac地址表项不会被动态mac地址表项删除,而动态的会被静态的覆盖。
    MAC地址的学习是数据包中的源MAC的学习,通过SMAC+VID进行学习。
    MAC地址的学习分为芯片的自主学习和CPU控制学习:
    1)芯片自主学习是芯片自主的更新MAC表,然后会向CPU发生MAC表更新的信息,达到芯片和CPUMAC表的同步;
    2)CPU控制学习是当发现新MAC或者端口迁移的时候,上报给CPU,由CPU来决定是否更新。芯片学习的速率高,但是可控性差,CPU控制学习处理速度要稍微差一点,但是可以通过软件实现有效的控制。
    4.MAC老化?
    MAC老化是对MAC表目中一段时间没有更新的条目进行清除,MAC老化的时间一般为1-2个周期。
    5.二层交换原则?
    引入VLAN后的二层转发原理与传统的转发原理相比,并没有本质上的改变,同样遵循‘源MAC学习,目的MAC转发’的基本原则。唯一不同的是,学习和转发都只在同一个VLAN中进行,数据帧不能跨VLAN交换或转发。

    VLAN间路由
    1.为什么进行VLAN间路由?
    两台计算机即使连接在同一台交换机上,只要所属的VLAN不同就无法直接通信。在LAN内的通信,必须在数据帧头中指定通信目标的MAC地址。而为了获取MAC地址,TCP/IP协议下使用的是ARP。ARP解析MAC地址的方法,则是通过广播。也就是说,如果广播报文无法到达,那么就无从解析MAC地址,亦即无法直接通信。
    计算机分属不同的VLAN,也就意味着分属不同的广播域,自然收不到彼此的广播报文。因此,属于不同VLAN的计算机之间无法直接互相通信。为了能够在VLAN间通信,需要利用OSI参照模型中更高一层——网络层的信息(IP地址)来进行路由。
    2.如何连接路由器与交换机?
    路由器与交换机的连接方法大致有两种:1) 把路由器和交换机以VLAN为单位分别用网线连接2) 不论VLAN数目多少,都只用一条网线连接路由器与交换机。
    第一种方法扩展性很成问题,每个端口都采用访问链接的方式;
    第二种方法解决扩展性的问题,交换机与路由器之间的端口采用汇聚链接的方式。
    3.不同VLAN间通信时数据的流程?
    接下来是这一讲的核心内容,不同VLAN间的通信。让我们来考虑一下计算机A与计算机C之间通信时的情况。
    计算机A从通信目标的IP地址(192.168.2.1)得出C与本机不属于同一个网段。因此会向设定的默认网关(Default Gateway,GW)转发数据帧。在发送数据帧之前,需要先用ARP获取路由器的MAC地址。
    得到路由器的MAC地址R后,接下来就是按图中所示的步骤发送往C去的数据帧。①的数据帧中,目标MAC地址是路由器的地址R、但内含的目标IP地址仍是最终要通信的对象C的地址。这一部分的内容,涉及到局域网内经过路由器转发时的通信步骤。
    在这里插入图片描述

    交换机在端口1上收到①的数据帧后,检索MAC地址列表中与端口1同属一个VLAN的表项。由于汇聚链路会被看作属于所有的VLAN,因此这时交换机的端口6也属于被参照对象。这样交换机就知道往MAC地址R发送数据帧,需要经过端口6转发。
    从端口6发送数据帧时,由于它是汇聚链接,因此会被附加上VLAN识别信息。由于原先是来自红色VLAN的数据帧,因此如图中②所示,会被加上红色VLAN的识别信息后进入汇聚链路。路由器收到②的数据帧后,确认其VLAN识别信息,由于它是属于红色VLAN的数据帧,因此交由负责红色VLAN的子接口接收。
    接着,根据路由器内部的路由表,判断该向哪里中继。
    由于目标网络192.168.2.0/24是蓝色VLAN,,且该网络通过子接口与路由器直连,因此只要从负责蓝色VLAN的子接口转发就可以了。这时,数据帧的目标MAC地址被改写成计算机C的目标地址;并且由于需要经过汇聚链路转发,因此被附加了属于蓝色VLAN的识别信息。这就是图中③的数据帧。
    交换机收到③的数据帧后,根据VLAN标识信息从MAC地址列表中检索属于蓝色VLAN的表项。由于通信目标——计算机C连接在端口3上、且端口3为普通的访问链接,因此交换机会将数据帧除去VLAN识别信息后(数据帧④)转发给端口3,最终计算机C才能成功地收到这个数据帧。
    简单来说:发送方——交换机——路由器——交换机——接收方 这样一个流程。
    4.路由器支持VLAN间通信的局限性?
    若VLAN间流量越来越大,路由器可能会“忙不过来”进而成为整个网络的瓶颈。就VLAN间路由而言,流量会集中到路由器和交换机互联的汇聚链路部分,这一部分特别容易成为速度瓶颈。并且从硬件上看,由于需要分别设置路由器和交换机,在一些空间狭小的环境里可能连设置的场所都成问题。
    5.路由器与交换机处理速度上的差别?
    交换机使用被称为ASIC(Application Specified Integrated Circuit)的专用硬件芯片处理数据帧的交换操作,在很多机型上都能实现以缆线速度(Wired Speed)交换。而路由器,则基本上是基于软件处理的。即使以缆线速度接收到数据包,也无法在不限速的条件下转发出去,因此会成为速度瓶颈。
    6.三层交换机?
    三层交换机,本质上就是“带有路由功能的(二层)交换机”。在一台本体内,分别设置了交换机模块和路由器模块;而内置的路由模块与交换模块相同,使用ASIC硬件处理路由。因此,与传统的路由器相比,可以实现高速路由。并且,路由与交换模块是汇聚链接的,由于是内部连接,可以确保相当大的带宽。
    7.加速VLAN间通信的方法?
    VLAN间路由,必须经过外部的路由器或是三层交换机的内置路由模块。但是,有时并不是所有的数据都需要经过路由器(或路由模块)。
    例如,使用FTP(File Transfer Protocol)传输容量为数MB以上的较大的文件时,由于MTU的限制,IP协议会将数据分割成小块后传输、并在接收方重新组合。这些被分割的数据,“发送的目标”是完全相同的。发送目标相同,也就意味着同样的目标IP地址、目标端口号(注:特别强调一下,这里指的是TCP/UDP端口)。自然,源IP地址、源端口号也应该相同。这样一连串的数据流被称为“流(Flow)”。只要将流最初的数据正确地路由以后,后继的数据理应也会被同样地路由。
    据此,后继的数据不再需要路由器进行路由处理;通过省略反复进行的路由操作,可以进一步提高VLAN间路由的速度。
    8.传统型路由器存在的意义?
    虽然三层交换机能够提供比传统型路由器更为高速的路由处理,但是网络中还有使用路由器的必要!主要原因如下:
    1)用于与WAN连接。三层交换机终究是“交换机”。也就是说,绝大多数机型只配有LAN(以太网)接口。在少数高端交换机上也有用于连接WAN的串行接口或是ATM接口,但在大多数情况下,连接WAN还是需要用到路由器。
    2)保证网络安全。在三层交换机上,通过数据包过滤也能确保一定程度的网络安全。但是使用路由器所提供的各种网络安全功能,用户可以构建更为安全可靠的网络。路由器提供的网络安全功能中,除了最基本的数据包过滤功能外,还能基于IPSec构建VPN(Virtual Private Network)、利用RADIUS进行用户认证等等。
    3)支持除TCP/IP以外的网络架构。尽管TCP/IP已经成为当前网络协议架构的主流,但还有不少网络利用Novell Netware下的IPX/SPX或Macintosh下的Appletalk等网络协议。三层交换机中,除了部分高端机型外基本上还只支持TCP/IP。因此,在需要使用除TCP/IP之外其他网络协议的环境下,路由器还是必不可少的。

    cs