理解交换机与路由器工作方式(上)

实验目的

本文中我要实验的是,当一根网线配置好 IP 后,接入交换机,然后 ping 另一个网段的主机后,数据报的流动方向以及各个设备在此过程中到底做了什么。

实验环境

Cisco Packet Tracer 是思科研发的一款网络实验模拟器。在这个软件中可以很轻松的观察数据包的流动、实验交换机和路由器的配置。

为了更好的研究数据在路由过程中做了什么,我做了一个简单的实验环境。其中包含两个网段共四台机器,两台交换机和一个路由器,并在 Tracer 中通过模拟方式来跟踪数据传递的过程。其示意图如下所示。

交换机配置

交换机 A 的 Fa0/1 口连接主机 A,Fa0/2 连接路由器 Gig0/0 口。

交换机 B 的 Fa0/1 口连接主机 B,Fa0/2 连接路由器 Gig0/1 口。

路由器配置

路由器上 Gig0/0 口配置 IP 地址为 10.1.5.1,Gig0/1 IP 地址为 192.168.1.1。

主机配置

主机 A 配置 IP 地址为 10.1.5.20 ,网关为 10.1.5.1( 网关其实是路由器的别称——《网络是怎样连接》一书 P328 )。主机 B IP 地址为 192.168.1.20,网关为 192.168.1.1。

用语约定

数据包(Packet)——三层传输单元。数据帧(Frame)——二层传输单元。

ARP 表——本机中通过 arp -a 指令查看。

MAC 表——思科交换机通过 show mac-address-table  查看。

填充数据包

在主机 A 上 Ping 主机 B 时,程序首先会设定 IP 报文中的源 IP 为主机 A 的地址,目的 IP 为主机 B 的地址。然后将此数据包交由二层进行封装。

填充数据帧

上一节的数据包需要由二层封装成数据帧。关键是填写由 IP 对应的 MAC 地址。操作系统会检查本机的 ARP 表 ( IP —— MAC 地址表)。若有对应 MAC 地址则进行填充,若没有,则在局域网内广播 ARP 请求。

再看看我们上一节中数据包,源 IP 这个没问题,本机 A 可以直接拿到对应的 MAC 地址。而在第一次通信时,主机 B 的 MAC 地址在主机 A 的 ARP 表中并不存在,因此需要由主机 A 发起一个 ARP 请求。

细节

若请求的主机和本机在一个网段,那么本机可以直接在局域网内发送 ARP 请求的广播,请求对方主机 IP 对应的 MAC 地址。

若请求的主机和本机不在一个网段,那么必须通过路由器的路由,双方才能发起通信。因此首先要将数据发送到路由器上。在这种情况下,本机请求的就是路由器 IP 的 MAC 地址,即我们在本机中配置的默认网关的 IP 地址。

发送!

很显然,主机 A 和 B 分处于两个不同的网段,此时主机 A 请求的是路由器上 Gig0/0 接口 IP 10.1.5.1 所对应的 MAC 地址。当主机 A 封装好所有的数据之后,将其发送给交换机 A。通过 Packet Tracer 可以看到主机 A 发出的完整的 ARP 请求格式如下所示。需要注意的是,在数据包中,目标地址为主机 A 的网关地址(10.1.5.1)。

交换机广播

交换机 A 从 Fa0/1 口接收到主机 A 的数据之后,拆解出其中的数据帧。若发现此数据帧中源(主机 A )MAC 地址还未添加到交换机自身的 MAC——接口地址表中,则把这个 MAC 地址添加进去。交换机 Fa0/1 接口收到的数据如下所示。

交换机 A 再看数据帧中的目标地址,发现它是一个广播地址,就直接把这个帧从交换机所有的接口上广播出去。当然这是在没有 VLAN 的情况下,有 VLAN 的话会稍微有些不同。

路由器响应

路由器 Gig0/1 收到交换机 A 发来的数据之后,拆解出数据帧之后发现记录的目标 MAC 地址是广播地址,就进行处理。继续拆解数据帧中的数据,得到 ARP 请求数据。路由器 Gig0/1 接口上会启动 ARP 程序处理这个请求,并把主机 A 的 IP —— MAC 地址记录在自己的 ARP 表中。

然后在 ARP 返回的包中将源地址设为 Gig0/1 接口 IP,将目标地址设为主机 A 的 IP。然后通过 ARP 表获取 IP 对应的 MAC 地址填入数据帧中。最后发回给交换机 A。发送给交换机 A 的响应数据如下所示。

交换机转发

交换机 A 收到路由器发来的数据,拆解出数据帧找出源 MAC 地址。若此 MAC 地址不在自己的 MAC ——接口地址表中,则添加进来。然后根据目的 MAC 地址,在表中找到对应的接口 Fa0/1,把数据转发出去。

收到!

主机 A 接收到交换机 A 发来的数据后,解析得到路由器 Gig0/1 接口的 MAC 地址。主机 A 把这个 MAC 地址记录下来,添加到本机的 ARP 表中。同时一并将其数据帧的目标地址中,发送给交换机。交换机 A 经过 MAC —— 接口表比对帧结构中的目标地址,将此数据帧抓发给路由器 Gig0/1 接口。

结语

需要注意的是,假如 Ping 的不是同网段的主机(不是同一类地址,或者不处于同一子网),且网关/路由器地址没有设置,那么发出 Ping 命令的主机就会把这个 IP 数据包给丢弃。

至此,主机 A 已经将 ICMP 报文发给路由器。关于路由器如何处理主机 A 发送过来的 ICMP 报文,我会在下节进行分解。

相关阅读

理解交换机与路由器工作方式(下)

为什么 TCP 需要三次、四次握手

发表评论

电子邮件地址不会被公开。 必填项已用*标注