这篇文章讲述了上网时数据包转发的全过程,下面是电脑和网络设备连接简略图:
以PC1 ping PC3为例讲述数据包转发过程:
1、当PC1 ping PC3时,发现它们的IP不在同一网段,PC1就将数据包发送至网关(1.1.1.1/24),这时需要知道网关的MAC地址,
PC1于是查找自身ARP缓存表,如果没有则会发出ARP广播包,包中的地址分别为:
源 IP : 1.1.1.2/24 源 MAC : a.a.a(PC1)
目的 IP : 1.1.1.1/24 目的 MAC : f.f.f
2、交换机SW1从e0/1接口收到数据包,解封后读取数据包的MAC地址,将其写入SW1的MAC地址表,发现该数据包是广播包,加
上帧头后向来源接口外的所有接口发送数据包,PC2接口收到该数据包发现其目的IP地址(1.1.1.1/24)与自身不符,丢弃该数据
包并不做回应。经过交换机后的源IP、源MAC、目的IP、目的MAC都不改变。
3、路由器R1接收到数据包,发现其MAC地址为广播地址,接收该包,再解封,发现请求的目的IP地址为自己的IP(1.1.1.1/24),
需要向源地址进行ARP回复。读取的数据包来源于1.1.1.1/24,源MAC地址为a.a.a。于是向PC1发送数据包,该包中地址为:
源 IP : 1.1.1.1/24 源 MAC : b.b.b(R1、e0/0)
目的 IP : 1.1.1.2/24 目的 MAC : a.a.a(PC1)
4、交换机SW1收到来自R1的数据包,查看源MAC地址为b.b.b,将改地址连同来源的接口号保存到MAC地址表。查看目的MAC地址
a.a.a,查看MAC地址表,找到与a.a.a的匹配项,向指定接口转发该包,经该接口封装后向PC1进行单播。PC1收到数据包,解
封后读到源IP为1.1.1.1/24,源MAC地址为b.b.b,PC1得到网关的MAC地址,并保存到ARP缓存表。
5、PC1向PC3发出数据包,包中地址为:
源 IP : 1.1.1.2/24 源 MAC : a.a.a(PC1)
目的 IP : 2.2.2.2/24 目的 MAC : b.b.b(R1、e0/0)
该包进入SW1,根据目的MAC地址查询MAC地址表后由上接口转出向R1发送,到达接口s0/1,查到数据包MAC地址为自己MAC
地址,将包解封到IP层,查询路由表:在路由表中查到最优匹配项,查找到下一跳接口IP地址,并发送出去;如果没有最优匹配
项,则按照默认路由发送,没有默认路由则丢弃数据包,并发送回应包,目的地址不可达。
查询路由表后得到转发接口为R1s0/1口,下一跳接口的IP地址为3.3.3.2/24,查询ARP表中IP地址为3.3.3.2的接口的MAC地址,
得到其MAC地址d.d.d;如果表中无匹配项,则通过s0/1口发送ARP广播,请求3.3.3.2的MAC地址。封装好包后,从接口s0/1转发
数据包,发出去的包MAC地址改变为:
源 IP : 1.1.1.2/24 源 MAC : c.c.c(R1、s0/1)
目的 IP : 2.2.2.2/24 目的 MAC : d.d.d(R2、s0/0)
6、路由器R2接口s0/0接收到数据包,检验MAC地址后接收并解封至IP层,查询路由表,发现转发接口为E0/0,且目的IP地址与接口
E0/0在同一网段内,查找ARP表中目的IP(2.2.2.2)的MAC地址,得到PC3的MAC地址e.e.e;如果没有查到,则通过E0/0接口
发送ARP广播包查询IP地址为2.2.2.2的MAC地址。
7、E0/0接口将封装好的数据包发送出去,报地址为:
源 IP : 1.1.1.2/24 源 MAC : g.g.g(R2、E0/0)
目的 IP : 2.2.2.2/24 目的 MAC : e.e.e(PC3)
经过SW2的上接口进入,根据其目的MAC地址查询MAC地址表,如果找到匹配表项,则根据指定接口转发出去;如果没有找
到,则向除进接口外的所有接口转发出去。
8、PC3接收到SW2发来的数据包,解封检验MAC地址为自己MAC地址e.e.e,接收数据包,包地址表为:
源 IP : 1.1.1.2/24 源 MAC : g.g.g(R2、E0/0)
目的 IP : 2.2.2.2/24 目的 MAC : e.e.e(PC3)
然后向源地址发送ICMP应答数据包,过程相似。