参考原文链接:https://blog.csdn.net/hjq129520/article/details/60956536
二三层网络交换基础:
1、二层转发,三层转发?
二层转发原理:学习源MAC,根据目的MAC转发
三层转发原理就是路由器的转发原理:根据路由表转发,路由表中有路由才会转发,无路由则直接丢弃
2、二层转发具体过程:
IP与掩码与。相同则处于同一网段,走二层转发
1、最起初,交换机无任何表项,二层基于mac转发,pc A先发广播ARP找寻PC B的mac地址(广播查询,单播应答)
源mac和源IP 是PC A的mac和IP,目的mac全ff广播,目的IP为请求的IP-PC B的IP,目的mac为全0
/*ARP协议类型0X0806*/
2、交换机Port1端口收到广播报文:
/*学习 PC A源mac---端口1 的对应关系,记录到mac表中,记录IP和mac的对应关系到ARP表中*/
此时解析报文得知要获取192.168.1.2的mac地址,查询表项没有找到,继续从其他端口广播
3、主机B收到报文后,主机B发现ARP请求报文中的目的IP地址与自己的IP相同,则给予主机A 发送ARP应答报文
SMAC为主机B 的MAC,SIP为主机B的IP192.168.1.2 / DMAC为主机A的MAC,DIP为主机A的IP地址192.168.1.1
/*记录PC A 的 IP和mac的对应关系到ARP表中*/
/*其他主机不会应答该广播*/
4、交换机 学习 PC B源mac---端口2 的对应关系,记录到mac表中,记录IP和mac的对应关系到ARP表中*/
5、主机A收到主机B的ARP应答报文之后,将主机B的MAC地址和对应的IP地址写入自己的ARP表项中,以便后续的二三层转发,同时,将IP数据包封装发送给主机B。
6、此时,主机A B已学到各自的表项,可以正常交互报文(交换机有转发关系的表项,再次收到PC A的报文后,查表后,会直接从PORT2转给PC B)
3、三层转发具体过程
IP与掩码与。不属于同一网段,走三层转发
(有网关时,对网关发送ARP请求,无网关时,需要设置静态路由,route add IP mask nextHop要到达IP,下一跳要选择的是 nextHop;网关的0.0.0.0/0代表能够到达任何一个IP)
------------->PCA 向网关192.168.1.2/24发送ARP请求(广播,发送的ARP请求只有广播的形式),以获得交换机的MAC地址,
------------->网关发现PC A请求的IP地址为自己的三层接口IP,因此网关给予PC A发送ARP应答,并更新自己的ARP表项,告知 PC A交换机的MAC地址,主机A也更新自己的ARP表项
------------->PC A将ICMP报文发送给网关192.168.1.2,ICMP的目的MAC为交换机13端口的MAC、源MAC为MAC A、源IP为 192.168.1.1、目的IP为192.168.2.1。
------------->交换机根据IP查询FIB表,此时无表,上送CPU处理
------------->CPU根据报文的目的IP去查找软件路由表,发现匹配了一个直连网段(PC B 对应的网段),于是继续查找其软件ARP 表,仍然查找失败。然后,交换机会在目的网段对应的VLAN 2的所有端口发送请求地址192.168.2.1对应的MAC的 ARP请求(请求PC B的MAC地址)。
*根据目的IP与硬件的FIB作最长匹配,如果匹配的是32位的主机路由,则直接转发,如果匹配的是接口网段路由,则送CPU处理,CPU触发下一跳的ARP请求,在收到ARP应答之后根据ARP创建新的主机路由,后续即可匹配此主机路由,所谓“一次路由,多次交换”
------------->主机B收到后应答给2.2,并学习交换机mac和对应IP到ARP表项中
------------->交换机收到应答报文后,学习主机B mac和对应IP到ARP表项中,并将A的ICMP报文,替换源mac为2的mac,源IP1.1 目的IP2.1
------------->PC B收到交换机转发过来的ICMP请求报文以后,回应ICMP应答给PCA。此时已经得到PC A的IP和MAC对应关系 了,也同时在交换芯片中添加了相关三层表项,因此这个报文直接由交换芯片硬件转发给PC A。
------------->后续的往返报文都经过查MAC表==>查三层转发表的过程由交换芯片直接进行硬件转发了
4、总结
通常来说一次Ping的过程就是二层转发和三层路由相结合最好的例子:
1、主机A在应用层发起对主机B的Ping请求
2、传输层将数据分段并加上报头
3、网络层将A的IP地址为源IP地址、B的IP地址为目标IP地址,根据ICMP协议封装成数据包。
4、根据B的IP地址和子网掩码,检测A、B是否属于同一子网。
同一子网(不经过路由,所以是二层转发):
如果属于同一子网,则查找本机的ARP缓存,找到B的MAC地址。
若ARP缓存表中找不到B的MAC地址,则发送ARP请求广播,B收到ARP广播后进行解封装,发现所请求的MAC地址是自己 的。B将A的MAC地址写入ARP缓存表中,然后向A发送一个ARP应答单播。A收到B的ARP应答报文后将B的MAC地址存入 ARP缓存中。
A将B的Mac地址作为目标MAC地址并封装到数据帧中,发送给网络接口层进行传输。B接收到这个数据帧后,首先在网络接 口层中发现目标MAC地址指向自己,B将帧头去掉,向上传传输。 网络层接收到这个数据包后会查看包头,发现目标IP地址 和自己匹配,继续解封装并将数据向上层传输。传输层接收ping请求报文,去掉报头,向应用层传送。应用层收到ping请求 后,发送一个ping回应报文给A
不同子网(必须经过路由器,所以该数据报文先经过三层路由转发):
该数据报文按照上面的IP数据分组转发流程进行转发。
当发送到目的网段时,开始进行上面同一子网的转发流程。