如下图,如果A给F发送一个数据包,会经历什么样的过程?
1. 首先 A(192.168.0.1)通过子网掩码(255.255.255.0)计算出自己与 F(192.168.2.2)并不在同一个子网内,于是决定发送给默认网关(192.168.0.254)
2. A 通过 ARP 找到 默认网关 192.168.0.254 的 MAC 地址。
3. A 将源 MAC 地址(AAAA)与网关 MAC 地址(ABAB)封装在数据链路层头部,又将源 IP 地址(192.168.0.1)和目的 IP 地址(192.168.2.2)(注意这里千万不要以为填写的是默认网关的 IP 地址,从始至终这个数据包的两个 IP 地址都是不变的,只有 MAC 地址在不断变化)封装在网络层头部,然后发包
4. 交换机 1 收到数据包后,发现目标 MAC 地址是 ABAB,转发给路由器1
5. 数据包来到了路由器 1,发现其目标 IP 地址是 192.168.2.2,查看其路由表,发现了下一跳的地址是 192.168.100.5
6. 所以此时路由器 1 需要做两件事,第一件是再次匹配路由表,发现匹配到了端口为 2,于是将其封装到数据链路层,最后把包从 2 号口发出去。
7. 此时路由器 2 收到了数据包,看到其目的地址是 192.168.2.2,查询其路由表,匹配到端口号为 1,准备从 1 号口把数据包送出去。
8. 但此时路由器 2 需要知道 192.168.2.2 的 MAC 地址了,于是查看其 arp 缓存,找到其 MAC 地址为 FFFF,将其封装在数据链路层头部,并从 1 号端口把包发出去。
9. 交换机 3 收到了数据包,发现目的 MAC 地址为 FFFF,查询其 MAC 地址表,发现应该从其 6 号端口出去,于是从 6 号端口把数据包发出去。
10. F 最终收到了数据包!并且发现目的 MAC 地址就是自己,于是收下了这个包
总结:
从各个视角来看:
电脑视角:
首先我要知道我的IP以及目的IP;
通过子网掩码判断源IP和目的IP是否在同一个子网;
在同一个子网,就通过ARP(address resolution protocol 地址解析协议)来获取目的IP的MAC地址发送数据;
如果不在同一个子网,就通过ARP来获取默认网关(路由器IP)的MAC地址,进行数据转发;
交换机视角:
收到的数据包必须有目标MAC地址;
通过MAC地址表查映射关系;
查找了就按照映射表指定的端口发出去;
查不到就所有端口都发出去;
路由器视角:
收到的数据包必须有目标IP地址;
通过路由表查映射关系;
查到了就按照映射关系指定的端口发出去;
查不到就返回一个路由不可达的数据包;
涉及到的三张表:
交换机中有 MAC 地址表用于映射 MAC 地址和它的端口
路由器中有路由表用于映射 IP 地址(段)和它的端口
电脑和路由器中都有ARP 缓存表用于缓存 IP 和 MAC 地址的映射关系