转载自:
https://blog.csdn.net/dwj_daiwenjie/article/details/103953494
https://blog.csdn.net/Once_day/article/details/125941219
大佬写的很详细,学习一下
二层转发和三层转发
① 源主机在发起通信之前,会将自己的IP与目的主机的IP进行比较,如果两者位于同一网段(用网络掩码计算后具有相同的网络号),那么源主机发送arp请求广播报,请求目的主机的mac地址,在收到目的主机的ARP应答后获得对方的物理层(MAC)地址,然后用对方MAC作为报文的目的MAC进行报文发送。位于同一VLAN(网段)中的主机互访时属于这种情况,这时用于互连的交换机作二层交换转发;
② 当源主机判断目的主机与自己位于不同网段时,它会通过网关(Gateway)来递交报文,即发送ARP请求来获取网关IP地址对应的MAC,在得到网关的ARP应答后,用网关MAC作为报文的目的MAC进行报文发送
对位于同一子网,即同一网段(不需要经过路由,所以是二层转发);
而对于位于不同子网,即不同的网段(必须经过路由器,所以该数据报文先经过三层路由转发)
那三层转发和二层转发有什么区别呢?
1.数据转发依靠的关键字不同,二层转发主要依靠MAC地址,而三层转发主要依靠IP地址。
2.数据交换的范围不同,二层交换指在同一网段内的通信,三层交换指跨网段的通信。
3.在三层转发的过程中,还要进行二层的封装。也就是说,在三层转发过程中二层帧头中的(源、目的)MAC地址是要改变的。但是IP数据报中的源IP和目的IP地址是不会改变的
三层转发例子
PC1准备向PC2发送数据包
(1) PC1检查报文的目的IP地址,发现和自己不在同一网段,则需要进行三层转发,通过网关转发报文信息;
(2) PC1检查自己的ARP表,发现网关的MAC地址不在自己的ARP表里;
PC1向Router发起arp请求(目的是获取网关的mac地址)
(3) PC1——>Router(网关)发出ARP请求报文;
(4) Router将PC1的MAC地址学习到自己的ARP表,
(5) Router(网关)——>PC1发出ARP应答报文;
(6) PC1学习到Router(网关)的mac地址,发出报文,此时源ip、目的ip不变,目的mac为Router(网关)的mac
(7) PC1——> Router(网关)发出报文。
(8) Router(网关)收到报文,发现是三层报文(原因是报文的目的mac是路由器自己的mac了,而二层转发根本就不需要经过路由器)
(9) Router(网关)检查自己的路由表(FIB),发现目的ip在自己的直连网段
(10)Router检查自己的arp表,如果发现有与目的ip对应的mac地址则直接封装报文(目的ip、源ip不变,目的mac为查arp表所得mac)发送给PC2
(11) 如果查ARP表没有得到与目的ip对应MAC,则重复(3)发arp请求
(12) PC2收到ARP广播报文,发现目的IP是自己的IP,于是给Router发送ARP应答报文。报文中会附上自己的mac地址。
(13) Router收到应答报文后,目的mac改为PC2的mac,然后向PC2发送数据帧。
(14) PC2向Router发送报文
(15) Router收到报文后,向PC1转发报文
三层交换机的三层转发
路由器由于自身成本高、转发性能低、端口数量少等特点无法很好的满足网络发展的需求。
路由器主要是通过IP转发(三层转发)来实现不同网络间的互连,后面,随着技术的发展,交换机转发高性能的特点融入到了三层转发中,就出现了三层交换机,一种实现了高速三层转发的设备。
比如:
PC A 和PC B连接在同一台三层交换机上
-
PC A 检查出PC B 的IP地址2.1.1.2 与自己不在一个网段,所以向网关1.1.1.1发送ARP分组,请求1.1.1.1地址的MAC。
-
L3交换机接收到PC A的ARP分组,根据1.1.1.0/24 , action=cpu(cfg svi2 ip),直接交给CPU处理,(也会更新MAC地址表)。软件处理发现请求IP是自己的三层接口IP,因此发送ARP应答并将自己的三层接口MAC(MAC S)包含在其中。随后会把PC A的IP地址与MAC地址对应关系记录到自己的ARP表项中去。
-
PC A得到网关L3_SW的ARP应答后,组装ICMP报文并发送。ICMP(目的MAC=MAC S,源MAC=MAC A,源IP=1.1.1.2,目的IP=2.1.1.2)
-
L3_SW收到报文,根据报文的源MAC+VID(VLAN ID),更新MAC地址表。根据报文的目的MAC+VID查找MAC地址表,发现匹配了自己三层接口MAC的表项。这里说明一下,三层交换机为VLAN配置三层接口IP后,会在交换芯片的MAC地址表中添加三层接口MAC+VID的表项,并且为表项的三层转发标志置位。当报文的目的MAC匹配这样的表项以后,说明需要作三层转发,于是继续查找交换芯片的三层表项。
-
交换芯片根据报文的目的IP去查找其三层表项,由于之前未建立任何表项,因此查找失败,于是将报文送到CPU去进行软件处理;
-
CPU根据报文的目的IP去查找其软件路由表,发现匹配了一个直连网段(PC B对应的网段),于是继续查找其软件ARP表,仍然查找失败。然后L3_SW会在目的网段对应的VLAN 3的所有端口发送请求地址2.1.1.2对应MAC的ARP请求。直连网段是人工配置的,但MAC地址却需要通过ARP自动更新。
-
PC B收到L3_SW发送的ARP请求后,检查发现被请求IP是自己的IP,因此发送ARP应答并将自己的MAC(MAC B)包含在其中。同时,将L3_SW的IP与MAC的对应关系记录到自己的ARP表中去。
-
L3_SW收到PC B的ARP应答后,将其IP和MAC对应关系(2.1.1.2<==>MAC B)记录到自己的ARP表中去,并将PC A的ICMP请求报文发送给PC B,报文的目的MAC修改为PC B的MAC(MAC B),源MAC修改为自己的MAC(MAC S)。同时,在交换芯片的三层表项中根据刚得到的三层转发信息添加表项(内容包括IP、MAC、出口VLAN、出端口),这样后续的PC A发往PC B的报文就可以通过该硬件三层表项直接转发了。
-
PC B收到L3_SW转发过来的ICMP请求报文以后,回应ICMP应答给PC A。ICMP应答报文的转发过程与前面类似,只是由于L3_SW在之前已经得到PC A的IP和MAC对应关系了,也同时在交换芯片中添加了相关三层表项,因此这个报文直接由交换芯片硬件转发给PC
A。 -
这样,后续的往返报文都经过查MAC表=>查三层转发表的过程由交换芯片直接进行硬件转发了。