全文概要
作为计算机网络中最重要的两种数据包转发设备,交换机和路由器在功能设计方面既存在本质差别,又包含诸多相似之处,本文从两种设备的工作原理出发,详细介绍了它们之间的种种区别与联系。
交换机(Switch)
核心功能
交换机的三个核心功能如下:
- 学习:以太网交换机了解与每一端口相连设备的MAC地址,并将地址同相应的端口映射对应起来存放在交换机缓存中的MAC地址转发表中;
- 转发:或称“过滤”,当一个数据帧的目的MAC地址在MAC地址表中有映射条目时,它被转发到连接目的节点的端口而不是所有的端口;若没有对应条目,则转发至交换机除接收端口外的全部端口;
- 消除环路:当检测到出现冗余回路时,以太网交换机通过生成树协议消除回路。
工作流
交换机通过以下步骤完成数据帧转发这一核心功能:
- 交换机通过“自学习”过程:根据收到的数据帧中的源MAC地址及其到达端口建立起映射关系,并将其写入转发表中;
- 交换机将数据帧中的目的MAC地址同已缓存的转发表条目比较,以决定向哪个端口进行转发并从该端口将数据帧输出至链路;
- 如数据帧中的目的MAC地址不在转发表中,则向除其到达端口以外的所有端口转发,这一过程称为泛洪(Flood);
- 广播帧或组播帧则向所有端口转发。
工作原理
- 交换机的每一个端口所连接的网段都是一个独立的冲突域,即交换机隔离冲突域;
- 交换机所连接的设备仍然在同一个广播域内,也就是说,交换机不能隔离广播域(VLAN环境中除外);
- 交换机依据帧头信息进行转发,因此说交换机是工作在数据链路层的网络设备,此处交换机仅指传统的二层交换设备。后文还会介绍工作在三层甚至四层的交换机。
转发模式
交换机有两种转发方式:
直通转发(Cut-Through)
交换机一旦解析到数据包的目的MAC地址,就开始查询MAC地址转发表,向目的端口转发该数据包。往往,交换机在接收到数据包的前6个字节时,实际已经知道目的地址,从而可以决定向哪个端口转发该数据包。直通转发技术的优点是转发速率快、减少延时与提升整体吞吐率。其缺点是交换机在没有完全接收并检查数据包的正确性之前就开始了数据转发,这实际上会给整个交换网络带来许多垃圾通讯包,交换机会被误解为发生了广播风暴。
因此,直通转发技术适用于网络链路质量较好、出错数据包较少的网络环境。
存储转发(Store-and-Forward)
存储转发技术要求交换机在接收到全部数据包后再决定如何转发,这样一来,由于在转发之前已经收到了数据帧的全部字段内容,当然也收到了最后一个字段FCS(Frame Check Sequence,帧校验序列),因此,交换机可以在转发之前通过重新计算FSC与接收到的FCS比较从而检查数据包的完整性和正确性。存储转发技术的优点是没有残缺数据包转发,减少了潜在的不必要数据转发。其缺点是由于引入了校验逻辑,增加了额外的时间开销,因而转发速率比直通转发技术要慢。
因此,存储转发技术适用于普通链路质量的网络环境。
三层交换机
三层交换机就是具有部分路由器功能的交换机,三层交换机的最重要目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。对于数据包转发等规律性的过程由硬件高速实现,而像路由信息更新、路由表维护、路由计算、路由确定等功能,由软件实现。
三层交换技术 = 二层交换技术+三层转发技术:传统交换技术是在OSI网络模型第二层,即数据链路层进行操作的,而三层交换技术是在网络模型中的第三层实现了数据包的高速转发,既可实现网络路由功能,又可根据不同网络状况做到最优网络性能。
三层交换技术实际就是将路由技术与交换技术合二为一的技术,在对第一个数据流进行路由后,它将会产生一个MAC地址与IP地址的映射表,当同样的数据流再次通过时,将根据此表直接从二层通过而不是再次路由,从而消除了由网络层进行路由选择而造成的转发延迟,提高了数据包的转发效率。
举例说明如下:
假设两个使用IP协议的站点A、B通过第三层交换机进行通信。发送站点A在开始发送时,把自己的IP地址与B站的IP地址比较,利用子网掩码判断B站是否与自己在同一子网内。
若两个站点在同一子网内,则进行二层的转发,如一开始转发数据所需的目的MAC地址,A站就发送一个ARP广播请求,B站接收到后会将其MAC地址封装在ARP应答中发送给A,A利用此目的MAC地址封装数据包并发送给交换机,交换机此时启用二层交换模块,查找MAC地址转发表,将数据包转发至对应端口并最终发送给站点B;
若两个站点不在同一子网,那么A想要实现与B的通讯,在ARP缓存表中没有对应的MAC地址条目,就将第一个数据包发送给一个缺省网关,该网关一般在操作系统中已设定好,实际就是三层交换机的第三层交换模块。然后数据包被发送给缺省网关,目的MAC地址就是缺省网关与A相连的端口的MAC地址。三层交换机接收到此数据包,查询路由表以确定到达B的路由(下一跳IP地址和输出端口),发现主机B在与其端口直连的网段内,于是三层交换机重新封装该数据包,构造一个新的帧头,其中以交换机的输出端口MAC地址为源MAC地址,查询ARP表以获得主机B的MAC地址,以此作为目的MAC地址。通过一定的识别触发机制,确立主机A与B的MAC地址及转发端口的对应关系,实际就是交换机的二层交换模块的“自学习”功能,并记录到转发表,此后从A与B的数据包通信,就直接交由二层交换模块完成转发,这就是所说的一次路由多次转发。
由于仅仅在路由过程中才需要三层处理,绝大部分数据都通过二层交换转发,因此三层交换机的速度很快,接近二层交换机的速度,同时比相同路由器的价格低很多。
在实际应用过程中,典型的做法是:处于同一个局域网中的各个子网的互联以及局域网中VLAN间的路由,用三层交换机来代替路由器,而只有局域网与公网互联之间要实现跨地域的网络访问时,才通过专业路由器。
小结
传统交换机通常指工作在数据链路层的交换设备,采用“自学习”方式维护与MAC地址与其输出端口的映射关系,并在数据链路层根据数据帧的目的MAC地址完成其转发功能。二层交换机一般都有专门用于处理数据包转发的ASIC(Application Specific Integrated Circuit,特定用途集成电路),因此转发速度可以做到非常快,不同厂家采用的ASIC不同,直接影响产品性能。
三层交换,也称多层交换技术,或IP交换技术,是相对于传统交换概念而提出的:传统的交换技术是在OSI网络标准模型中的第二层,即数据链路层进行操作的,而三层交换技术是在网络模型中的第三层,即网络层实现了数据包的高速转发。简单地说,三层交换技术就是:二层交换技术+三层转发技术。三层交换技术的出现,解决了局域网中网段划分之后,网段中子网必须依赖路由器进行管理的局面,解决了传统路由器低速、复杂所造成的网络瓶颈问题。
路由器(Router)
核心功能
一般而言,路由器工作在网络层,其工作模式与二层交换类似,但路由器工作在第三层,这个区别决定了路由器与交换机在转发数据包时使用的控制信息(首部字段)是不同的。
路由器内部有一个路由表,这表标明了如果要去某个地方,下一步应该往哪走。路由器从某个端口收到一个数据包,它首先把链路层的包头去掉(拆包),读取目的IP地址,然后查找路由表,若能确定下一步往哪送,则再加上链路层的包头(打包),把该数据包转发出去;如果不能确定下一步的地址,则向源地址返回一个信息(Unreachable,目的地不可达),并把这个数据包丢弃。
工作流
路由器接收到数据包后,首先在其自身维护的路由表中查找它的目的地址,若找到了目的地址对应项即获知转发的下一跳地址,就在数据包的MAC首部中添加该IP地址对应的MAC地址作为目的MAC地址,同时IP首部中的TTL(Time to Live)字段也开始减数,并重新计算校验和,最终在其输出端口完成数据帧的重新封装,源MAC地址为输出端口的MAC地址。
路由器在工作时会运行某种路由通信协议生成路由表,用于生成并维护在数据包到来时查找匹配目的IP地址的表项。如果到某个特定节点有一条以上的路径,则基于预先确定的路由准则是选择最优(代价最小)的传输路径。由于各网段及其相互链接的情况可能会因环境变化而变化,因此路由信息一般也按所使用的路由通信协议的规定根据实时网络拓扑情况而即时更新。
小结
路由技术其实是由两项最基本的活动组成,即决定最优路径和传输数据包。其中,数据包的传输相对较为简单和直接,而路由的确定则更加复杂一些。路由算法在路由表中写入各种不同的信息,路由器会根据数据包所要到达的目的地选择最佳路径把数据包发送到可以到达该目的地的下一台路由器处。当下一台路由器接收到该数据包时,也会查看其目标地址,并使用合适的路径继续传送给后面的路由器。依次类推,直到数据包到达最终目的地。
冲突域 VS 广播域
冲突域(Collision Domain)
以太网使用CSMA/CD(Carrier Sense Multiple Access with Collision Detection,带碰撞检测的载波多路侦听)算法来进行通信介质的访问控制。如果两个或者更多站点同时检测到信道空闲而有帧准备发送,它们将发生冲突,一组竞争信道访问的站点称为冲突域。
简单来说,在以太网中,如果某个CSMA/CD网络上的任意两个节点在同时通信,即发送数据时会发送冲突,它们几乎同时检测到冲突且只好都放弃传输,那么这个CSMA/CD网络内的全部节点就构成了一个冲突域。如果以太网中的各个网段内部都是以集线器连接,因为集线器会把接收到的帧转发至自身的全部端口,还是会引起冲突,所以即使包含集线器,该网段仍然是一个冲突域。
显然,同一个冲突域中的节点竞争信道,就会导致冲突和退避。而不同冲突域的节点不会竞争公共信道,则不会发生冲突。在交换式局域网中,每个交换机端口就对应一个冲突域,端口就是冲突域终点。由于交换机具有交换功能,在不同端口之间都有专门的信道,故不同端口的节点之间不会产生冲突。如果每个端口只连接一个节点,那么在任何一对节点之间都不会发生冲突。若一个端口连接到一个共享式局域网(内部多台计算机相连,或直连,或与集线器相连等等方式构成局域网),那么在与该端口直连局域网中的任意节点之间都会产生冲突,但与该端口直连的节点和与交换机其它端口相连的节点之间通信则不会发生冲突,这样交换机就隔离了不同的冲突域,使得冲突只发生在各个冲突域内部,而不会影响其它冲突域。
集线器
集线器是一种物理层设备,本身不能识别MAC地址和IP地址,当集线器连接的主机设备之间传输数据时,数据包是以广播方式进行传播,即集线器会将收到的数据包广播至其所有端口,而由每台主机根据数据包与自身MAC地址是否匹配来决定是否接收。
这种情况下,同一时刻由集线器连接的网络中只能有一个节点在占用信道传输数据,即所谓的”Top Talker“,其它节点在检测到信道忙碌则退避等待,若信道空闲时同时有两个或多个节点开始传输,则会发生冲突,各自放弃数据传输。集线器所有端口共享集线器的整个带宽,即所有端口为一个冲突域,如下图所示:
交换机
交换机工作在数据链路层,在接收数据帧后,通过查找自身维护的MAC地址转发表找出对应输出端口,并把数据传送到目的端口。
交换机在同一时刻可进行多个端口之间的数据传输,即支持“并发传输”,这是由于交换机不同端口之间都有专门的链路相连,且独享全部带宽。每一端口相连的都是独立的物理网段,连接在端口上的网络设备独自享有全部带宽,因此,交换机起到了分割不同冲突域的作用,每一个端口相连的网段为一个独立的冲突域,如下图所示:
小结
集线器是一个标准的共享式设备,也就是同一时刻只有一个端口下联的设备可以发送数据。正常工作时,集线器随机选出某一端口设备并让它独占全部带宽与集线器上联设备(如交换机、路由器等)进行通信。因此,集线器设备的所有端口即形成了一个冲突域。
为了有效避免冲突,局域网中使用交换机(Switch)来分割冲突域。对网络进行分割的原因是为了分离流量并创建更小的冲突域来使用户获得更高的带宽,否则同一时刻数据太多容易导致网络拥挤形成阻塞。
广播域(Broadcast Domain)
常见广播情形有如下两种:
- 源节点发送数据帧给全部主机,在封装数据帧时直接将广播地址:ff:ff:ff:ff:ff:ff作为目的MAC地址,则交换机在接收该帧时解析到该广播地址,就会复制数据帧并向全部非接收端口转发;
- 当转发表中没有匹配的目的MAC地址项时,交换机会将数据帧复制并转发至全部非接收端口,这一过程实际也是广播。
路由器
然而,以上两种形式的广播会到什么地方结束呢?答案是路由器。
为什么到路由器就结束了呢?再来回顾一下路由器的工作流程:
当路由器接收到一个数据包时,首先提取数据包头的目的MAC信息,与自身MAC表比较,分两种情况:
- 如果找到对应项,则按MAC表进行转发(与交换机一样);
- 如果没找到则提取数据包头的目的IP地址,与自身路由表进行比较,这里又分两种情况:
(1) 存在对应的路由表项,则按路由表转发(与查到MAC表很像);
(2) 没找到对应路由表项,则按缺省路由转发至默认网关(自始自终没有出现过广播!)。
路由表和MAC的区别在于,路由表存放的是目的IP,即下一步要去地方的IP地址。
广播在路由器能够结束,原因就在于路由器会在查找不到对应MAC表时,根据目的IP进行路由。路由过程的两种情况都不存在广播。因此,路由器可以隔离广播域,如下图所示:
小结
以太网中,冲突域通常是由集线器组织的,与同一个集线器相连的全部节点就组成了一个冲突域。交换机的每个端口相连的网络都是一个单独的冲突域。
广播域是指一个节点发出一个广播信号后,能够接收到该信号的全部节点的集合。通常来说一个局域网就是一个广播域。交换机的所有端口都在同一个广播域内。
- 冲突域:在同一个冲突域中的每一个节点都能收到它们之中任意一个节点发送的帧;
- 广播域:网络中能接收到任意节点发出的广播帧的所有节点的集合。
冲突域是基于第一层,即物理层的;广播域是基于第二层,即数据链路层的。
总结
二层交换机工作在数据链路层,路由器工作在网络层,而三层交换机则工作在数据链路层和网络层。
二层交换机 VS 三层交换机
三层交换机使用了三层交换技术,简单地说,三层交换技术就是:二层交换技术+三层转发技术。即三层交换机在包含了全部二层交换机的功能之外,还具备一部分的网络层功能。它解决了局域网中网段划分之后,网段中子网必须依赖路由器进行管理的局面,解决了传统路由器低速、复杂所造成的网络瓶颈问题。
二层交换机 VS 路由器
二层交换机即传统交换机,从网桥发展而来,属于OSI第二层即数据链路层设备。它根据MAC地址寻址,转发表(目的MAC地址到输出端口的映射)的建立和维护由交换机自动进行。
路由器属于OSI第三层即网络层设备,它根据IP地址进行寻址,通过运行路由协议生成和维护路由表(目的IP地址到输出端口、下一跳IP地址的映射)。
交换机最大的好处是快速,由于交换机只须识别以太网帧首部中的MAC地址,直接根据MAC地址产生选择转发端口,算法简单,便于ASIC实现,因此转发速度极高。但与此同时,交换机的工作机制也带来一些问题:
回路:根据交换机地址学习和转发表建立算法,交换机之间不允许存在回路。一旦存在回路,必须启动生成树算法,阻塞掉产生回路的端口。而路由器的路由协议没有这个问题,路由器之间可以有多条通路来平衡负载,提高可靠性;
负载集中:交换机之间只能有一条通路,使得信息集中在一条通信链路上,不能进行动态分配,以平衡负载。而路由器的路由协议算法可以避免这一点,OSPF路由协议算法不但能产生多条路由,而且能为不同的网络应用选择各自不同的最佳路由;
广播控制:交换机只能缩小冲突域,而不能缩小广播域。整个交换式网络就是一个大的广播域,广播报文散布到整个交换式网络。而路由器可以隔离广播域,广播报文不能通过路由器继续进行广播;
子网划分:交换机只能识别MAC地址。MAC地址是物理地址,而且采用平坦的地址结构,因此不能根据MAC地址来划分子网。而路由器识别IP地址,IP地址由网络管理员分配,是逻辑地址且IP地址具有层次结构,被划分成网络号和主机号,可以非常方便地用于划分子网,路由器的主要功能就是用于连接不同的网络,甚至是异构网络;
保密问题:虽说交换机也可以根据帧的源MAC地址、目的MAC地址和其他帧中内容对帧实施过滤,但路由器根据报文的源IP地址、目的IP地址、TCP端口地址等内容对报文实施过滤,更加直观方便;
介质相关:交换机作为桥接设备也能完成不同链路层和物理层之间的转换,但这种转换过程比较复杂,不适合ASIC实现,势必降低交换机的转发速度。因此目前交换机主要完成相同或相似物理介质和链路协议的网络互连,而不会用来在物理介质和链路层协议相差甚远的网络之间进行互连。而路由器则不同,它主要用于不同网络之间互连,因此能连接不同物理介质、链路层协议和网络层协议的网络。路由器在功能上虽然占据了优势,但价格昂贵,报文转发速度低。近几年,交换机为提高性能做了许多改进,其中最突出的改进是虚拟网络和三层交换。
路由器可以划分子网,从而缩小广播域,减少广播风暴对网络的影响。路由器每一端口连接一个子网,广播报文不能经过路由器广播出去,连接在路由器不同端口的子网属于不同子网,子网范围由路由器物理划分。
对交换机而言,每一个端口对应一个网段,而子网由若干网段构成,通过对交换机端口的组合,可以逻辑划分子网。广播报文只能在子网内广播,不能扩散到别的子网内,因此可通过合理划分逻辑子网,达到控制广播的目的。由于逻辑子网由交换机端口任意组合,没有物理上的相关性,因此称为虚拟子网,或叫虚拟网(VLAN)。虚拟网技术不用路由器就解决了广播报文的隔离问题,且虚拟网内网段与其物理位置无关,即相邻网段可以属于不同虚拟网,而相隔甚远的两个网段可能属于不同虚拟网,也可能属于同一个虚拟网。不同虚拟网内的终端之间不能相互通信,增强了对网络内数据的访问控制。
三层交换机 VS 路由器
在第三层交换技术出现之前,几乎没有必要将路由功能器件和路由器区别开来,他们完全是相同的:提供路由功能并由路由器负责执行。然而,现在第三层交换机完全能够执行传统路由器的大多数功能。作为一种可跨层次工作的网络互连设备,第三层交换机具有以下特征:
- 转发基于第三层地址的业务流;
- 完全交换功能;
- 可以完成特殊服务,如报文过滤或认证;
- 执行或不执行路由处理。
第三层交换机与传统路由器相比有如下优点:
- 子网间传输带宽可任意分配:传统路由器每个接口连接一个子网,子网通过路由器进行传输的速率被接口的带宽所限制。而三层交换机则不同,它可以把多个端口定义成一个虚拟网,把多个端口组成的虚拟网作为虚拟网接口,该虚拟网内信息可通过组成虚拟网的端口送给三层交换机,由于端口数可任意指定,子网间传输带宽没有限制。
- 合理配置信息资源:由于访问子网内资源速率和访问全局网中资源速率没有区别,子网设置单独服务器的意义不大,通过在全局网中设置服务器群不仅节省费用,更可以合理配置信息资源。
- 降低成本:通常的网络设计用交换机构成子网,用路由器进行子网间互连。目前采用三层交换机进行网络设计,既可以进行任意虚拟子网划分,又可以通过交换机三层路由功能完成子网间通信,为此节省了使用路由器带来的高昂成本。
- 交换机之间连接灵活:作为交换机,它们之间不允许存在回路,作为路由器,又可有多条通路来提高可靠性、平衡负载。三层交换机用生成树算法阻塞造成回路的端口,但进行路由选择时,依然把阻塞掉的通路作为可选路径参与路由选择。
交换机和路由器是性能和功能的矛盾体,交换机交换速度快,但控制功能弱,路由器控制性能强,但报文转发速度慢。解决这个矛盾的最新技术是三层交换,既有交换机线速转发报文能力,又有路由器良好的控制功能。
参考资源
[1] 交换机的工作原理
[2] 二、三层交换机和路由器的工作原理与主要区别
[3] 三层交换机与路由器的比较
[4] 教你读懂路由表
[5] 网络知识:二层、三层、四层交换机的区别