Sep 14, 2021
包的生命周期
在搭建Facebook ATC的过程中,发现自己对计算机网络二三层的基本工作原理并不熟悉,后来发现思科网络模拟工具(Cisco Packet Tracer,简称PT)可以模拟二三层的工作原理,特别不错。
我们先来看下二三层的设备,二层是交换机,三层是路由器。
交换机的特点
- 有多个网口(通常24个以上)供终端主机连接
- 为同一局域网内的主机提供连接
- 不能为不同局域网或因特网提供连接
路由器的特点
- 网口比交换机少
- 为不同局域网提供连接
- 能发送数据到因特网
下面我们通过一个简单的网络拓扑图来讲解包的生命周期。
从上图我们可以得到以下信息:
- 路由器R1连接了两个局域网
- 局域网1(192.168.1.0/24)中,主机PC1连接交换机SW1
- 局域网2(192.168.2.0/24)中,主机PC2连接交换机SW2
- PC1的IP为192.168.1.1,默认网关为192.168.1.254,MAC地址为0011(MAC地址为48位,这里为了简单,我用16位来表示)
- PC2的IP为192.168.2.1,默认网关为192.168.2.254,MAC地址为0021
- R1左端口的IP为192.168.1.254,MAC地址为1254
- R1右端口的IP为192.168.2.254,MAC地址为2254
现在我们思考一个问题:PC1 ping PC2的具体过程是怎么样的?当然你可以作弊,用PT单步调试看每一步的细节。下面是我用PT单步调试后结合自己理解的过程:
- PC1把目标IP和自己的子网掩码做逻辑与运算,发现目标IP和自己不在同一个子网,所以把包发给默认网关
- PC1在自己的ARP缓存表中查询默认网关的MAC地址,发现没有找到,于是发送一个ARP广播包
- SW1收到ARP包后,发现是个广播包,于是广播除PC1连接端口外的所有端口
- R1收到ARP包后,取出头部查看,发现目标IP是自己,于是将自己的MAC地址返回给PC1
- PC1将R1的MAC地址更新到ARP缓存表
- PC1发送包给R1
- R1收到包后发现目标IP所在子网就在自己右端口上
- R1在自己的ARP缓存表中查询目标IP的MAC地址,发现没有找到,于是从右端口发送一个ARP广播包
- SW2收到ARP包后,发现是个广播包,于是广播除R1连接端口外的所有端口
- PC2收到ARP包后,取出头部查看,发现目标IP是自己,于是将自己的MAC地址返回给R1
- R1将PC2的MAC地址更新到ARP缓存表
- R1发送包给PC2
- PC2收到包后给PC1发送回应
- 发送回应的过程跟发送的过程类似,只是少了ARP过程,因为发送方的IP与MAC地址的映射关系已经记录在ARP缓存表中
我们留意到,整个过程涉及到三个表:
- 交换机有MAC地址表,存储着MAC地址和端口的映射关系
- 路由器有路由表,存储着IP和端口的映射关系
- 主机和路由器都有ARP缓存表,存储着IP和MAC地址的映射关系
这三张表是怎么来的:
- MAC地址表通过局域网内各节点之间不断通过交换机通信逐步完善起来的
- 路由表是各种路由算法+人工配置逐步完善起来的
- ARP缓存表是不断通过ARP协议的请求逐步完善起来的
如果用PT单步调式,你会发现原始包的目标IP始终不变,变的只是目标MAC地址,所以其实三层并不具备传输包的功能,而是靠二层去传输。