二、三层转发原理(多例详解,图文相结合说明ping过程)

※ 首先要了解

① 源主机在发起通信之前,会将自己的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地址是不会改变的

 

下面主要以三层转发为例,做一个详细的说明和梳理。

1. 概述

如图1所示,交换机Router,SW1,SW2的所有表项为空,Host 1要ping Host 2,即Host 1要给Host 2发送ICMP echo请求,Host 2收到请求之后,发现是请求自己的IP地址,会回复ICMP echo应答报文。

                                wKiom1XmvyayH__sAAB6l_Oiga4610.jpg

                                                                                     图1 网络拓扑图

Host 1的IP地址为1.1.1.1/24,默认网关为1.1.1.254,MAC地址为ca02.1a14.0000;

Host 2的IP地址为2.2.2.2/24,默认网关为2.2.2.254,MAC地址为ca03.1a14.0000;

Router的fa0/0口的IP地址为1.1.1.254/24,MAC地址为ca06.1b2c.0008;

Router的fa0/1口的IP地址为2.2.2.254/24,MAC地址为ca06.1b2c.0006。

注:由此可以看出路由器可以具有多个ip地址和多个mac地址;

       并且主机的网关一般来说就是与路由器相连的端口的ip;

 

2. 三层转发的整个过程

2.1 Host 1的ARP请求

Host 1将ICMP echo请求报文,封装到源IP地址为1.1.1.1,目的IP地址为2.2.2.1的IP报文中。然后查询Host1的路由表,准备将报文发送给Host 1的默认网关1.1.1.254。由于Host 1没有其默认网关的MAC地址,因此Host 1会将该报文存到内存,先发送ARP请求来获取MAC地址。

Host 1将源物理地址为ca02.1a14.0000,源协议地址为1.1.1.1,目的物理地址填充00:00:00:00:00:00,目的协议地址为1.1.1.254的ARP请求,封装在源MAC地址为ca02.1a14.0000,目的MAC地址为ffff.ffff.ffff的以太网帧发出,如图2所示。

                         wKioL1XmwL-y3r1-AANE7G6p4fI201.jpg

                                                                                           图2 ARP请求

2.2 SW1学习MAC地址

Sw1收到该帧广播,同时将ca02.1a14.0000与自身的1端口关联起来,加入到交换机的MAC地址表中

2.3 Router的ARP应答

Router收到这个帧之后,去掉二层封装,查看到ARP请求中的目的协议地址为fa0/0口地址,会发送  响应物理地址为ca06.1b2c.0008,响应  协议地址为1.1.1.254,目的MAC地址ca02.1a14.0000,目的IP地址1.1.1.1的ARP应答,封装在源MAC地址为ca06.1b2c.0008,目的MAC地址为ca02.1a14.0000的以太网帧中发出,如图3所示。

                        wKiom1Xmvu3zqKvUAANaoPBd3pI906.jpg

                                                                                              图3 ARP应答

同时Router也会将物理地址ca02.1a14.0000与IP地址1.1.1.1存入到自己的ARP表中,如图4所示。

                               wKioL1XmwVywnYA-AABwbbC-g18049.jpg

                                                                                图4 Router的ARP表

2.4 SW1学习MAC地址

Sw1收到帧之后,查询MAC地址表,将帧从1口发出,同时将ca06.1b2c.0008地址与2口关联,加入到MAC地址表中。

2.5 ICMP echo请求

Host 1收到Router发送的ARP应答之后,会将物理地址ca06.1b2c.0008与IP地址1.1.1.254存入到自己的ARP表中,如图5所示。

                              wKiom1Xmv2ChUxx-AABwDzSdKBU230.jpg

                                                                                 图5 Host 1的ARP表

Host 1会调出ICMP echo请求,封装成源MAC地址为ca02.1a14.0000,目的MAC地址为ca06.1b2c.0008的数据帧(注意此处的目的MAC设成了路由器的 fa0/0口的MAC),发送给Router,如图6所示。

                         wKiom1Xmv3miBWZGAANviGDtYfM386.jpg

                                                                                   图6 ICMP echo请求

Router的fa0/0收到该报文,查找本地路由表,判断目的IP是否和自己IP处于同一网络,发现Host 2的IP和自己接口fa0/1的IP为同一网段,则Router会将该报文从fa0/1发送给Host 2。但由于Router的fa0/1口没有2.2.2.2的MAC地址,只能先进行ARP请求。

2.6 Router的ARP请求

Router会将源物理地址为ca06.1b2c.0006,源协议地址为2.2.2.254,目的物理地址填充全0,目的IP地址为2.2.2.2的ARP请求,封装在源MAC地址为ca06.1b2c.0006,目的MAC地址为ffff.ffff.ffff的以太网帧从fa0/1口广播出去。

2.7 SW2学习MAC地址

Sw2收到该帧之后会将该帧广播,同时将ca06.1b2c.0006与1口关联,加入到MAC地址表。

2.8 Host 2的ARP应答

Host 2收到ARP请求之后,会将响应MAC地址ca03.1a14.0000,响应IP地址2.2.2.2,目的MAC地址ca06.1b2c.0006,目的IP地址2.2.2.254的ARP应答,封装在源MAC地址为ca03.1a14.0000,目的MAC地址为ca06.1b2c.0006的以太网帧中发出。同时也将物理地址ca06.1b2c.0006与IP地址2.2.2.254关联起来,存入到自己ARP表中。

2.9 SW2学习MAC地址

Sw2收到帧之后,查询MAC地址表,将帧从2发出,同时将ca03.1a14.0000地址与1口关联,加入到MAC地址表中。

Router获到Host 2给他的ARP响应之后,会将物理地址ca03.1a14.0000与IP地址2.2.2.2关联,并且加入到ARP表中。这时,Router将刚才的ICMP echo报文转发给Host 2。

2.10 ICMP echo应答

Host 2收到由Host 1发送的ICMP echo请求之后,会将ICMPecho应答封装在源IP地为2.2.2.1,目的IP地址为1.1.1.1的IP报文中,发送给Host 1。

Host 1收到Host 2发送的ICMP echo应答,此次ping的过程结束,如图7所示。

                     wKioL1XmwcSgxeZwAAO3E4XEsUg245.jpg

                                                                              图7 ICMP echo应答

 

 

再上一个简洁点的例子

三层转发举例

 

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转发报文

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

WenjieDai

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值