浏览器访问服务器的过程
首先判断要解析域名,但是解析域名之前首先找到域名服务器,根据配置的域名服务器的ip地址判断 这个域名服务器是否在本网络范围内,一般情况下域名服务器都和当前电脑不在同一个局域网范围内,所以当前电脑需要通过网关访问外网。
我们假定 电脑配置了网关ip,那么 首先当前pc需要向这个网关发送查询DNS的数据,但是因为仅仅知道网关的ip还不知道网关的mac地址,所以会首先使用ARP协议查询当前网关的mac地址。这个arp协议数据包是通过广播的形式发送的,也就是说ARp协议数据包中的ip地址就是网关的ip地址(下图中的Target Ipj就是查询目标主机的ip),但是 mac地址全为F。 下图中右上角的位置 DEST ADDR :FFFF FFFF FFFF

这样当前主机就知道网关的mac地址。此时当前pc发送 dns查询数据包(UDP协议),首先数据包中的ip地址是DNS主机的ip地址,数据包的mac地址就是网关的mac地址,因为是在局域网内发送数据,所以是通过广播的形式发送,然后局域网内的主机都可以接收到这个数据包,但是仅网关的mac地址匹配,所以网关可以收到这个数据包。然后网关根据路由表和数据包中DNS服务器的ip地址查询路由表得到 下一条路由器的ip地址,如果此时没有下一条路由器的mac地址,那么就使用arp广播发送查询下一条路由器的mac地址。
这样整个过程就可以实现将查询DNS请求数据包发送给DNS 主机,DNS主机解析之后返回数据。DNS解析之后就得到了这个DNS域名对应 的ip。
需要说明的是:
(1) ARP协议是局域网内的 ip地址到mac地址解析协议,注意是局域网内使用的,arp请求是多播,主机发送一个arp请求 该局域网内的所有主机都可以收到,但是仅ip地址匹配的主机会将自己的mac地址放到arp
然后当前pc 发送Http请求,这个请求底层使用tcp协议,数据包中 的ip地址是web服务器的ip地址,mac地址是网关的mac地址。 事实上 当前pc首先 判断 web服务器的ip 和当前主机是否在同一个局域网内,如果在同一个局域网内(也就是使用当前pc的子网掩码与上web服务器的ip地址,所得结果是否等于当前pc所在子网的网络号),如果是处于同一个局域网,那么直接使用arp协议获取这个web服务器的的mac 地址,然后通过硬件广播的形式发送请求就可以了。但是大多数情况下web服务器 和本机不在同一个 局域网内,所以当前pc需要将数据包的ip地址设置为web服务器的ip地址,然后将mac地址设置为网关的mac地址,通过广播的方式交给网关处理。
网关收到后就根据数据包的目的ip地址查询下一条路由器,更改数据的目的mac地址,转发数据包给下一条。
整个过程就是数据传送的过程。
当然, 在当前pc 请求web数据之前需要首先和web服务器建立 tcp连接,这个过称就是三次握手的过程。
三次握手建立之后 发送get请求获取页面数据,服务器返回页面数据,浏览器加载渲染, 最终超过一定 的时间之后 通过4次挥手断开Http连接
特别强调的一点是: 当三次握手建立成功之后,客户端发出get请求 ,浏览器接收到get请求之后需要对这个请求进行确认,也就是返回一个确认数据,然后才发回页面数据,客户端接收到页面数据之后也要发回一个对页面数据的确认。 并不是说客户端发愁get请求 浏览器返回页面数据 仅这两个过程。 http是基于tcp的,底层都要有确认。