一、基本拓扑

场景二:PCI —>ping—> PC3
1. PCI与PC3通信,PC1组装ICMP包,如下:
| 条目 | 内容 |
|---|---|
| 目的MAC | 未知 |
| 源MAC | aa:aa:aa:aa:aa:aa |
| 源IP | 192.168.3.2 |
| 目的IP | 192.168.4.2 |
2. 通过查询ARP表发现没有目的IP对应的下一跳MAC,因此组装ARP报文请求目的IP的MAC。
(1)先将要发送的IPV4报文缓存在arp缓存表中,如果arp表项缓存满了则直接丢包。
(2)通过对比目的IP和源IP发现位于不同网段,所以直接请求网关的ARP请求包,如下:
| 条目 | 内容 |
|---|---|
| 目的MAC | ff:ff:ff:ff:ff:ff |
| 源 MAC | aa:aa:aa:aa:aa:aa |
| Type | 0x0806 |
| Sender MAC | aa:aa:aa:aa:aa:aa |
| Sender IP | 192.168.3.2 |
| Target MAC | ff:ff:ff:ff:ff:ff |
| Target IP | 192.168.3.1 |
(3)arp请求包经过交换机,交换机更新自己的fdb表,如下,然后将arp请求包广播。
| MAC | 接口 |
|---|---|
| aa:aa:aa:aa:aa:aa | eth1 |
(4)arp请求是二层广播包,其他非请求IP的接口收到不做响应,路由器eth1口收到后首先更新自己的ARP表,然后进行arp应答, 此时路由器的ARP表如下:
| IP | MAC |
|---|---|
| 192.168.3.1 | bb:bb:bb:bb:bb:bb |
| 192.168.4.1 | cc:cc:cc:cc:cc:cc |
| 192.168.3.2 | aa:aa:aa:aa:aa:aa |
(5)arp应答报文经过交换机,交换机更新自己的fdb表,如下,然后通过查询fdb表,查到将arp应答从eth1口发出。
| MAC | 接口 |
|---|---|
| aa:aa:aa:aa:aa:aa | eth1 |
| bb:bb:bb:bb:bb:bb | eth3 |
(6)PC1收到arp应答后,新增自己的arp表项,并把缓存的报文通过查询arp表项填充目的MAC后发送出去。此时arp表项如下:
| IP | MAC |
|---|---|
| 192.168.3.1 | bb:bb:bb:bb:bb:bb |
(7)此时PC1通过查询本机arp表项。将报文发送到路由器eth1口。
| 条目 | 内容 |
|---|---|
| 目的MAC | bb:bb:bb:bb:bb:bb |
| 源MAC | aa:aa:aa:aa:aa:aa |
| 源IP | 192.168.3.2 |
| 目的IP | 192.168.4.2 |
(8)路由器eth1口收包后,以目的IP “192.168.4.2” 查询路由表,存在直连路由,出口是eth2口,所以报文转到eth2口发送,通过查询arp表发现没有“192.168.4.2”的表项,所以从eth2口发送arp请求。之后流程与同网段arp过程一致。最终路由器arp表如下:
| IP | MAC |
|---|---|
| 192.168.3.1 | bb:bb:bb:bb:bb:bb |
| 192.168.4.1 | cc:cc:cc:cc:cc:cc |
| 192.168.3.2 | aa:aa:aa:aa:aa:aa |
| 192.168.4.2 | ee:ee:ee:ee:ee:ee |
3. 此时PC1与PC3可正常通信
(1)PC1 ping PC3
(2)PC1判断目的IP与自己不是同一网段,将报文发往网关,查询本机arp表,获取网关 “192.168.3.1” 的MAC为 "bb:bb:bb:bb:bb:bb"作为下一跳MAC
(3)PC1组包发送
(4)交换机收到包,更新fdb表项老化时间,通过使用报文的目的MAC查询fdb表项,从eth3口转发报文。
(5)路由器收到包,根据目的IP查路由,确认从eth2口发送;查询本机arp表,获取目的IP “192.168.4.2” 的下一跳MAC为 “ee:ee:ee:ee:ee:ee”, 组包发送
(7)PC3收到回包,更新本地ARP表老化时间,然后查询本地arp表获取下一跳MAC地址,组包应答。
(8)路由器收到包,根据目的IP查路由,确认从eth1口发送;查询本机arp表,获取目的IP “192.168.3.2” 的下一跳MAC为 “aa:aa:aa:aa:aa:aa”, 组包发送
(9)交换机收到包,更新fdb表项老化时间,通过使用报文的目的MAC查询fdb表项,从eth1口转发报文。
(10)PC1收到回包,ping通