一、基本拓扑
场景一:PCI —>ping—> PC2
1. PCI与PC2通信,PC1组装ICMP包,如下:
条目 | 内容 |
---|---|
目的MAC | 未知 |
源MAC | aa:aa:aa:aa:aa:aa |
源IP | 192.168.3.2 |
目的IP | 192.168.3.3 |
2. 通过查询ARP表发现没有目的IP对应的下一跳MAC,因此组装ARP报文请求目的IP的MAC。
(1)先将要发送的IPV4报文缓存在arp缓存表中,如果arp表项缓存满了则直接丢包。
(2)通过对比目的IP和源IP发现位于同一网段,所以直接请求目的MAC的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.3 |
(3)arp请求包经过交换机,交换机更新自己的fdb表,如下,然后将arp请求包广播。
MAC | 接口 |
---|---|
aa:aa:aa:aa:aa:aa | eth1 |
(4)arp请求是二层广播包,其他非请求IP的接口收到不做响应,PC2收到后首先更新自己的ARP表,然后进行arp应答, 此时PC2的ARP表如下:
IP | MAC |
---|---|
192.168.3.2 | aa:aa:aa:aa:aa:aa |
(5)arp应答报文经过交换机,交换机更新自己的fdb表,如下,然后通过查询fdb表,查到将arp应答从eth1口发出。
MAC | 接口 |
---|---|
aa:aa:aa:aa:aa:aa | eth1 |
dd:dd:dd:dd:dd:dd | eth2 |
(6)PC1收到arp应答后,新增自己的arp表项,并把缓存的报文通过查询arp表项填充目的MAC后发送出去。此时arp表项如下:
IP | MAC |
---|---|
192.168.3.3 | dd:dd:dd:dd:dd:dd |
3. 此时PC1与PC2可正常通信
(1)PC1 ping PC2
(2)PC1查询本机arp表,获取目的IP “192.168.3.3” 的下一跳MAC为 “dd:dd:dd:dd:dd:dd”
(3)PC1组包发送
(4)交换机收到包,更新fdb表项老化时间,通过使用报文的目的MAC查询fdb表项,从eth2口转发报文。
(5)PC2收到包,进行应答,查询本机arp表,获取目的IP “192.168.3.2” 的下一跳MAC为 “aa:aa:aa:aa:aa:aa”, 组包发送
(6)交换机收到包,更新fdb表项老化时间,通过使用报文的目的MAC查询fdb表项,从eth1口转发报文。
(7)PC1收到回包,ping通。