集线器、交换机、路由器


1. 集线器:将输入的信号广播到所有的端口,如果同时输入多个信号就会发生碰撞,无法同时传输多路信号。工作在物理层

2. 交换机:是基于以太网设计的二层网络设备,交换机的端口不具有MAC地址。只将包转发到具有特定MAC地址的设备连接的端口,可以同时转发多个包。工作在数据链路层。

3. 路由器:是基于IP设计的,是三层网络设备,路由器的各个端口都具有MAC地址和IP地址。
主要完成两个功能:完成路由选择(确定哪一条路径)和分组转发(当一个分组到达时所采取的动作)。前者是根据特定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。后者处理通过路由器的数据流,关键操作是转发表查询、转发及相关的队列管理和任务调度等。


路由器的基本原理:路由器的端口具有MAC地址,因此它就能够成为以太网包的发送方和接收方;同时还具有IP地址,从这个意义上来说,它和计算机的网卡是一样的。当转发包时,首先路由器端口会接收发给自己的以太网包,然后路由器查询转发目标,再由相应的端口作为发送方将以太网包发送出去。



路由器的包接收操作

1. 首先,电信号达到网线接口部分,路由器中的模块会将电信号转成数字信号,然后通过包末尾的FCS进行错误校验。 2. 如果没有问题则检查MAC头部中的接收方MAC地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包。

总的来说,路由器的端口都具有MAC地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃。

 

1、路由表


路由表是用来确定如何将包从一个子网传送到另一个子网的,换句话说就是用来决定从一个网卡接收到的包应该送到哪一张网卡上的。在Linux上可以用 ​​route add default gw <默认路由IP>​​ 来配置一条默认路由。

路由表的每一行至少有目标网络号、netmask、和到这个子网应该使用的网卡。当路由器从一个网卡接收到一个包时,它扫描路由表的每一行,用里面的netmask和包里的目标IP地址做逻辑与运算,找出目标网络号,如果此网络号和这一行里的网络号相同就将这条路由器保留下来作为备用路由,如果已经有备用路由就在这两条路由里将网络号最长的留下来,另一条丢弃,如此接着扫描下一行直到结束。如果扫描结束仍没有找到任何路由,就用默认路由。确定路由后,直接将包送到对应的网卡上去。在具体的实现中,路由表可能包含更多的信息为选路由算法的细节所用。