交换机和路由器区别
交换机主要是用于组建局域网,而路由器则是负责让主机连接外网。
局域网间通信
例子1:
- PC1与PC2通信时,在PC1电脑中,应用层产生数据交给传输层;传输层进行数据的分段,使数据的大小适合在网络上传递,根据应用层不同软件产生的数据,选择不同协议栈进行封装TCP或UDP,再进行不同服务端口号的封装(例:WWW 80 ,FTP 21),再传递给网络层;网络层在数据包头部进行封装源IP、目的IP,根据上层协议栈标识不同协议号,当IP包头封装TCP时协议号为6、UDP协议号为17,用来标识上层使用的协议,继续传递给数据链路层; 数据链路层在数据包头部进行帧的封装,封装源MAC、目的MAC,由于不知道目的MAC地址,会进行ARP的广播包,封装一个全F的类型字段为0X0806广播包,交付给物理层,物理层转换成电信号(bit流),发送到交换机;
- 交换机接收后发现为ARP的广播包,进行其解封学习到PC1的MAC地址,继续封装并除接受端口以外的端口再次进行ARP的广播;
- 路由器收到交换机发来的ARP广播,进行解封,查看到数据包中的类型字段为0X0806即ARP的广播包,进行回复,源MAC为路由(网关)的MAC,目的MAC为PC1的MAC,类型字段为0X0806,经过物理层将数据转换为电信号(bit流)发送给交换机;
- 交换机收到后进行解封,学习到源MAC(路由器的MAC ),发现目的MAC已经存在自己的MAC表中,查看目的MAC对应的端口,并从对应的端口发送到PC1;
- PC1接收数据包后进行解封,学习到路由器(网关)的MAC,在数据链路层将目的MAC封装为路由器(网关)的MAC, 类型字段为0X0800,并在数据帧尾部封装FCS,来校验数据的完整性,然后向下层传递给物理层,物理层把数据帧转换成电信号(bit流),发送到交换机; (注:不同网段的通信,PC机先把数据传送到网关)
- 交换机接收到数据包,查看到目的MAC已存在自己的MAC表中,根据自己MAC表中对应的端口发送出去;
- 路由器接收到数据包后进行解封装,在数据包头部发现目的ip,便查找路由表条目中对应的端口,便对数据进行重写,由于不知道目的主机的MAC地址,路由器会发送ARP广播,PC2收到数据包进行解封,发现是ARP广播,类型字段为0X0806, 然后对其进行封装回复,源MAC为PC2的MAC,目的MAC为路由器的MAC,路由器收到后把PC2对应的MAC地址和端口记录在MAC表中,
- PC2接受到信息,便对数据进行解封装,发现目的IP是给自己的,然后继续解封装,然后把数据传送给应用程序qq。然后对路由回复,在传输层设源端口号为8000,目的端口号为4000,封装udp头部。在网络层将源ip设为192,。168.2.1,目的ip设为192.168.1.2,协议号为17,在数据链路层将源mac设为12个3,目的mac设为12个1,类型字段为0x0800,封装FCS,然后经物理层将数据转为bit流传给路由器,路由器再查找路由表,并对数据进行重写,从f0/0传送出去,交换机解封装,查找mac表,再对数据进行封装,从f0/0传送给pc1.通信完成。
例子2:
- HostA在网络层将来自上层的报文封装成IP数据包,其中源IP地址为自己,目标IP地址是HostB,HostA会用本机配置的24位子网掩码与目标地址进行“与”运算,得出目标地址与本机不是同一网段,因此发送HostB的数据包需要经过网关路由A的转发。
- HostA通过ARP请求获取网关路由A的E0口的MAC地址,并在链路层将路由器E0接口的MAC地址封装成目标MAC地址,源MAC地址是自己。
- 路由器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地址。
- 路由B从E1口接收到数据帧,同样会把数据链路层的封装去掉,对目标IP地址进行检测,并与路由表进行匹配,此时发现目标地址的网段正好是自己E0口的直连网段,路由器B通过ARP广播,获知HostB的MAC地址,此时数据包在路由器B的E0接口再次封装,源MAC地址是路由器B的E0接口的MAC地址,目标MAC地址是HostB的MAC地址。封装完成后直接从路由器的E0接口发送给HostB。
- 此时HostB才会收到来自HostA发送的数据。
局域网内通信
ARP协议:ARP协议是工作在网络层的协议,它负责将IP地址解析为MAC地址。
- 如果主机A想发送数据给主机B,主机A首先会检查自己的ARP缓存表,查看是否有主机B的IP地址和MAC地址的对应关系,如果有,则会将主机B的MAC地址作为目标MAC地址封装到数据帧中。如果没有,主机A则会发送一个ARP请求信息,请求的目标IP地址是主机B的IP地址,目标MAC地址是MAC地址的广播帧(即FF-FF-FF-FF-FF-FF),源IP地址和源MAC地址是主机A的IP地址和MAC地址。
- 当交换机接受到此数据帧之后,发现此数据帧是广播帧,因此,会将此数据帧从非接收的所有接口发送出去。
- 当主机B接受到此数据帧后,会校对IP地址是否是自己的,并将主机A的IP地址和MAC地址的对应关系记录到自己的ARP缓存表中,同时会发送一个ARP应答,其中包括自己的MAC地址。
- 主机A在收到这个回应的数据帧之后,在自己的ARP缓存表中记录主机B的IP地址和MAC地址的对应关系。而此时交换机已经学习到了主机A和主机B的MAC地址了。
总结
- 每个主机内都有ARP表。
- 交换机主要是转发数据的,根据MAC表,转发给指定接口,MAC表没有的话从非接受接口发送出去(也就是广播)。
- 局域网内通信是通过交换机的(同功能的),假如主机ARP表中没有目标MAC地址,发送ARP请求信息到交换机,交换机有的话直接回,没有的话就广播等目标返回,更新ARP表。源主机得到目标MAC重新填充数据包发送给交换机转给目标主机。
- 局域网间的通信通过路由器,目标主机在另一网络,这里可以将路由器看出目标主机,源主机发送ARP请求到交换机->路由器,路由器返回更新交换机和源主机的MAC表和ARP表,源主机将数据发送到路由器,检查路由表是否有目标网段相匹配的项,重新封装包,源MAC为路由MAC,目标MAC为目标路由2MAC,当到达路由2,对目标IP地址进行检测,并与路由表进行匹配,此时发现目标地址的网段正好是自己E0口的直连网段,路由器B通过ARP广播,获知HostB的MAC地址,此时数据包在路由器B的E0接口再次封装,源MAC地址是路由器B的E0接口的MAC地址,目标MAC地址是HostB的MAC地址。封装完成后直接从路由器的E0接口发送给HostB。
原文:https://blog.****.net/ff900709/article/details/82225288