一个访问网站的过程为,在浏览器的地址栏输入网站的URL,然后对应网站的服务器返回对应的主页源代码给浏览器,浏览器渲染出主页。

浏览器 Chrome 访问百度主页,这里的客户端是 Chrome,服务端是百度服务器。

我们称 Chrome 为 A,百度服务器为 B。

下面从网络通信的角度来简单剖析下这个过程。

如何知道服务端的位置?

在 Chrome 浏览器的地址栏输入 www.baidu.com

IP 地址

需要获取到百度服务器的IP地址,这个通过DNS协议获得IP地址 DNS协议详解

MAC地址

  • 如果是局域网内的通信,即本机访问的是同一网段内的主机,则直接在本机内进行广播询问对应目标IP地址的MAC地址的主机是哪个主机。
  • 如果是跨局域网的通信,即本机访问的是不同网段内的主机,则需要找到局域网网关,然后网关通过网络层的协议找到对应目标IP地址对应的网关,然后再由这个网关找到对应目标主机的MAC地址

如此获取到了目标主机的MAC地址。ARP协议详解

输入URL后访问网站的背后发生了什么

参考

路由器找地址介绍

golang参考

参考

ARP过程

ARP过程:先查arp缓存,若缓存命中直接返回;没命中则在本网段进行广播,若要解析的目标ip在当前网段,返回的是目标ip的mac地址;若目标ip不在当前网段则获取的是替我们转发ip数据报的路由器mac地址。获取到mac地址后返回并缓存至arp缓存中。