什么是交换机

交换机是根据地址表进行包转发工作的设备。在传统交换机上(二层设备)交换机端口是不需要有MAC 地址的,所以交换机接到数据包后,无需检查目的MAC 地址是否是自己,而是在MAC 模块校验过数据包FCS 完整后直接将数据放到缓冲区。

接下来交换机需要查询这个包的接收方MAC 地址是否已经存在与MAC 表中。MAC表包含两个信息:连接设备的MAC 地址和该设备连接的是哪个端口。这样接收方MAC 地址匹配到MAC 表中的地址信息后,交换机就知道将数据包从哪个接口发送出去。(如果目的MAC 地址不存在与MAC 表中,则交换机会将包原封不动的泛洪到其他端口,注意这里不是广播,广播会改变数据包的目的地址为全F;而收到泛洪报文的设备通常是PC,会检查目的MAC 地址是否是本机网卡的,不是的话直接丢失,是的话会进行对应的处理,从而保证数据发送到了正确的目的地)

交换机使用MAC 地址表进行包转发

交换机交换电路的设计思路:交换机的输入端和输出端连接起来。其中信号线排列成网格状,每一个交叉点都有一个交换开关,交换开关是电子控制的,通过切换开关的状态就可以改变信号的流向。
交换电路的构造逻辑

交换机可以同时执行多个转发操作,如上图,2号端口到7号端口的数据转发只使用了交换电路的一条同路,其他端口都是空闲的。空闲的端口可以是可以传输其他包的,因此相较于集线器,交换机是可以多个端口同时使用的。

什么是路由器

路由器是根据路由表(IP地址相关表)进行包转发工作的设备
通常来说,路由器面对的物理连接环境更为复杂(因为多数是与运营商连接,运营商环境复杂,具体能提供的物理线路类型并不固定),所以路由器通常由转发模块和端口模块两部分构成(交换机面对的连接情况比较单一,现在多为以太网链路,所以并不需要单独的端口模块;而选购路由器是需要选配不同接口模块,例如以太网接口模块、T1 接口模块,甚至无线模块等等,根据不同的网络连接类型选配不同的端口模块是路由器配置不可避免的一点)。
路由器内部逻辑结构

路由器在转发包时,首先通过端口模块将对应通信技术的数据接收过来,并传递给转发模块。转发模块根据收到数据的IP 信息(即网络层头部信息)查询路由表,以此来判断需要将数据从哪个接口转发出去,将数据交给对应端口的端口模块。端口模块再将数据封装成符合端口规则的通信信息发送到下一个网络设备。

与交换机相比,选配了以太网模块的路由器有一点很大的不同是,路由器接口在接收到以太网包时会查看目的MAC 地址是否是接口本身;同时路由器的接口还会配置IP 地址,而交换机不会这样工作(这里说的是二层交换机,而不是现在使用很多的三层交换机)。

路由器也是通过查表判断转发目标的,在这一点上与交换机大体类似。但是具体的工作过程不同,交换机多数是通过以太网帧的目的MAC 地址来判断转发目标的,而路由器是通过网络层的IP 头部中的IP 地址来判断的(这里有两点需要注意,1. 并不一定通过目的IP 来判断转发目标,因为在网络层路径选择中有一种类型是”source routing”,可以由发送方指定数据包的前进路径抵达目的地;2. 也不一定是通过IP 地址来判断转发目标的,例如在MPLS 网络中,路由器是通过MPLS 标签来判断转发目标的)。

同时,另一个不同是,交换机通过MAC 地址来判断转发目标,对于所有以太网设备而言,MAC 地址是一个固定长度(48 bits)的一个值,也就是说交换机判断目的地址使用的是一个定长值。而路由器通过IP 地址来判断转发目标时,不光要考虑IP 地址还需要考虑子网掩码等变长信息。(不定长信息带来结果就是判断转发目标带来的开销更大)

路由器查表选路

交换机和路由器维护转发信息表的方法也不同。对于交换机来说,接收到的每一个包都会将包的源MAC 地址和对应的接口绑定写入MAC 地址表中。而对于路由器来说,对路由表的维护更为复杂,大致可以分为:1. 由人手工添加(静态路由);2. 根据路由协议,在网络设备之间交换路由信息自动学习获得。