有关 ARP 协议
ARP 协议:由 IP 地址获取与该 IP 地址绑定的 MAC 地址。
ARP-A 协议:MAC → IP
DNS 协议:IP → 域名,或域名 → IP。
例一:同一局域网内两主机通信
如图,假设主机 1 要给主机 3(同一局域网)发送一个 PDF 文件。
1)首先,应用层:message,到了传输层,将message划分成报文段segment,再往下传。
2)在网络层,需要封装源IP地址和目的IP地址,目的IP地址由 DNS 协议获得。
3)到了数据链路层,需要加头(FCS)和尾(源MAC地址和目的MAC地址)。
其中,目的 MAC 地址由 ARP 协议获得,如果本机的 ARP 高速缓存中没有目的 IP 对应的 MAC 地址,则向网络发送一个广播 ARP 请求分组(包含源IP地址、目的IP地址、源MAC地址以及全1的目的MAC地址,表明这是一个广播帧,以能从交换机中通过,但不能从路由器中通过,因为 ARP 广播属于局域网广播)。
目的IP主机获悉后,返回一个单播 ARP 响应分组。即 ARP 请求是广播,响应是单播。
拿到目的 MAC 地址后,封装成帧,得以在链路上传输。 数据链路层是认识 MAC 地址的,所以最后可以成功把数据帧传给目的 MAC。
4)到了物理层,将数据帧转换成比特流进行传输。
例二:非同一局域网,两主机通信
现在假定主机 1 要和主机 5 通信。
步骤 1)、2)和例一相同。只是到了第 3)步,因为封装数据帧需要目的 MAC地址。
通常来说,本机的 ARP 高速缓存只有本局域网内的映射。而主机 1 和主机 5 并不在同一局域网内(不同网段)。Worse still,ARP 请求广播并不能通过路由器!而主机 1 和主机 5 隔了好几个路由器呢!
解决办法就是先把数据帧传给最近的路由器或(默认)网关,路由器传给路由器,重复这一步骤,直到传到了目的 MAC 所在的局域网。
插播一个疑问:为什么不传给交换器呢?因为交换器没有 MAC 地址。
那它是怎么传给默认网关的呢?填写默认网关的 MAC 地址就好。通过 ARP 请求广播可以获取默认网关的 MAC 地址。
数据帧到达网关(路由器)后,会重复进行3)的步骤,即:查找 ARP 高速缓存,没找到则发送 ARP 请求广播,不同网段则转给下个路由。