网关:是下一站路由器的IP地址
,第三层网络层负责IP地址,第二层数据链接层则负责MAC地址。
1.数据转发依靠的关键字不同,二层转发主要依靠MAC地址,而三层转发主要依靠IP地址。
2.数据交换的范围不同,二层交换指在同一网段内的通信,三层交换指跨网段的通信。
3.在三层转发的过程中,还要进行二层的封装。也就是说,在转发过程中二层帧头中的(源、目的)MAC地址是要改变的。但是IP数据报中的源IP和目的IP地址是不会改变的。
MAC地址是网卡决定的,是固定的。
当PC与其他主机通信时,首先判断与自己是否在同一网段
若在同一网段,则发送ARP广播寻求目标IP地址的MAC地址
若不在同一网段,则发送ARP广播寻求网关的MAC地址(前提是给PC配了网关)
二层交换机:接收到由自己的物理层送上来的二层数据帧时,根据源mac地址学习并写入mac地址表中,根据目的mac地址查找mac地址表决定是转发还是广播,这里交换机查找mac地址表和转发都是由硬件ASIC芯片来完成,而且二层交换机没有对数据帧做过任何封装,解封装动作(忽略物理层bit数据流还原成二层以太帧),并且没有对数据帧做过任何改写
路由器:工作在网络层,对接收到的数据帧必须解封装,获取三层数据,根据三层数据的目的ip,查找路由表,封装下一跳的mac等等一系列动作,相比二层交换机而言,路由器查找路由表是通过基于软件的cpu来查找,比二层交换机查找mac地址表用的ASIC硬件芯片慢,另外路由器还得对数据进行拆封,解封动作,而且还改写了数据帧(只改写二层数据帧的目的mac、源mac、FCS,不会改变三层数据包的内容)
路由器是工作在网络层的,在网络层可以识别逻辑地址。当路由器的某个接口收到一个包时,路由器会读取包中相应的目标的逻辑地址的网络部分,然后在路由表中进行查找。如果在路由表中找到目标地址的路由条目,则把包转发到路由器的相应接口,如果在路由表中没有找到目标地址的路由条目,那么,如果路由配置默认路由,就科举默认路由的配置转发到路由器的相应接口;如果没有配置默认路由,则将该包丢弃,并返回不可到达的信息。这就是数据路由的过程。
如下图:详细介绍路由器的工作原理
1) HostA在网络层将来自上层的报文封装成IP数据包,其中源IP地址为自己,目标IP地址是HostB,HostA会用本机配置的24位子网掩码与目标地址进行“与”运算,得出目标地址与本机不是同一网段,因此发送HostB的数据包需要经过网关路由A的转发。
2) HostA通过ARP请求获取网关路由A的E0口的MAC地址,并在链路层将路由器E0接口的MAC地址封装成目标MAC地址,源MAC地址是自己。
3) 路由器A从E0可接收到数据帧,把数据链路层的封装去掉,并检查路由表中是否有目标IP地址网段(即192.168.2.2的网段)相匹配的的项,根据路由表中记录到192.168.2.0网段的数据请发送给下一跳地址10.1.1.2,因此数据在路由器A的E1口重新封装,此时,源MAC地址是路由器A的E1接口的MAC地址,封装的目标MAC地址则是路由器2的E1接口的MAC地址。
4) 路由B从E1口接收到数据帧,同样会把数据链路层的封装去掉,对目标IP地址进行检测,并与路由表进行匹配,此时发现目标地址的网段正好是自己E0口的直连网段,路由器B通过ARP广播,获知HostB的MAC地址,此时数据包在路由器B的E0接口再次封装,源MAC地址是路由器B的E0接口的MAC地址,目标MAC地址是HostB的MAC地址。封装完成后直接从路由器的E0接口发送给HostB。
5) 此时HostB才会收到来自HostA发送的数据。
总结:路由表负责记录一个网络到另一个网络的路径,因此路由器是根据路由表工作的。