whwq2012
2019-05-19 17:29:11 +08:00
你要 ping 的时候,会发送一个 ip 数据包,这个数据包中包括源 IP 和目的 IP。
那这个数据包发给谁呢?网络层比对了 ip 地址后发现该 ip 不在本网段内,决定先发送给网关。
那怎么知道网关的地址呢?在同一局域网内传播发送数据,靠的不是 ip 地址而且 MAC 地址了,所以需要知道网关的 MAC 地址,而知道它的办法则是查询本机的 ARP 缓存,如果从 ARP 缓存中没有查询到网关的映射关系,则只能发送 ARP 广播询问其他主机广播的地址,网关收到 ARP 请求后则会回复自己的 MAC 地址,其他主机收到广播发现问的不是自己的地址则会丢弃。
然后数据链路层获取网关的 MAC 后,封装成帧发送给网关。
网关收到帧后,则将帧解开,获取其中的 IP 数据包,根据其中的目的地址计算出网络地址,然后送到相应网络地址的端口。再获取目的路由的 MAC 地址,封装成帧,发给下个路由器以此类推,直到到达目的服务器的网络的路由器。
路由器再根据目的地址,查询 ARP 缓存或者广播局域网内主机获取目的主机 MAC 地址。再将帧发送给目的主机。
目的主机收到后则解帧,获取 IP 数据包。
以上只是普通情况,还有 NAT 的情况,不过我也不会。