前言
在网络通信中,浏览器向Web服务器发送HTTP请求消息的过程是一个复杂而精密的环节,涉及到URL解析、DNS解析、数据拆分、路由表规则和MAC头部添加等一系列步骤。本文将深入探讨这一过程的每个环节,帮助读者更全面地了解浏览器与Web服务器之间的通信运作原理。
步骤详解
-
对
URL
进行解析,从而生成发送给Web
服务器的请求信息。URL 实际上是请求服务器里的文件资源。对URL
进行解析之后,浏览器确定了 Web 服务器和文件名,接下来就是根据这些信息来生成 HTTP 请求消息了。
要是上图中的蓝色部分 URL 元素都省略了,那应该是请求哪个文件呢?
当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是
/index.html
或者/default.html
这些文件,这样就不会发生混乱了。
-
通过浏览器解析 URL 并生成 HTTP 消息后,需要委托操作系统将消息发送给
Web
服务器。但在发送之前,需要查询服务器域名对应的 IP 地址,因为委托操作系统发送消息时,必须提供通信对象的 IP 地址。有一种服务器就专门保存了Web
服务器域名与IP
的对应关系,它就是DNS
服务器。
域名解析的工作流程:
浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。
客户端向本地 DNS 服务器请求域名 www.server.com 的 IP 地址,如果缓存里的表格能找到 www.server.com,则它直接返回 IP 地址。
如果没有,本地 DNS 依次向根域名服务器 (每个DNS服务器都有的最底层DNS服务器) 、顶级域名服务器和权威 DNS 服务器 (就是用户定义的ip的那个DNS服务器) 查询,最终获取到目标域名的 IP 地址,缓存到本地DNS服务器中
-
应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作,如果 HTTP 请求消息比较长,超过了
MSS
的长度,这时 TCP 就需要把 HTTP 的数据拆解成一块块的数据发送,而不是一次性发送所有数据。每个被拆分的数据加上 TCP 头信息 (应用层端口) ,然后交给 IP 模块来发送数据。
协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。
协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。
-
委托 IP 模块将数据封装成网络包发送给通信对象。首先根据本地路由表规则,通过子网掩码来锁定与目标地址在同一子网的那个网卡的IP作为源地址 IP, 再提取目标地址数据为目标IP等形成 IP 包头,使请求获得远程定位能力。
-
接下来网络包还需要在 IP 头部的前面加上 MAC 头部。通过IP只能找到一个局域网,加上 MAC 头部才能告诉以太网对方的 MAC 的地址,以太网就会帮我们把包发送给局域网中的目标服务器。发送方的 MAC 地址直接在网关获取,接收方的 MAC 地址获取需要借助ARP 协议,其会在以太网中以广播的形式获取到 MAC 地址。在后续操作系统会把本次查询结果放到一块叫做 ARP 缓存的内存空间留着以后用
-
通过网卡驱动程序,将数字信息转换为电信号,基于已有的TCP/IP/MAC头部信息,能在交换机和路由器的转发下,将数据转发抵达到目的地
-
上述就是请求的过程,其实对于后续的响应也是围绕上述的方案来进行消息的逆传输操作,只不过就多了一步浏览器接收到 HTTP 响应后,解析 HTML、CSS、JavaScript 等资源,并渲染成页面展示给用户的过程
读者问答
读者问:“笔记本的是自带交换机的吗?交换机现在我还不知道是什么”
笔记本不是交换机,交换机通常是2个网口以上。
现在家里的路由器其实有了交换机的功能了。交换机可以简单理解成一个设备,三台电脑网线接到这个设备,这三台电脑就可以互相通信了,交换机嘛,交换数据这么理解就可以。
读者问:“如果知道你电脑的mac地址,我可以直接给你发消息吗?”
Mac地址只能是两个设备之间传递时使用的,如果你要从大老远给我发消息,是离不开 IP 的。
读者问:“请问公网服务器的 Mac 地址是在什么时机通过什么方式获取到的?我看 arp 获取Mac地址只能获取到内网机器的 Mac 地址吧?”
在发送数据包时,如果目标主机不是本地局域网,填入的MAC地址是路由器,也就是把数据包转发给路由器,路由器一直转发下一个路由器,直到转发到目标主机的路由器,发现 IP 地址是自己局域网内的主机,就会 arp 请求获取目标主机的 MAC 地址,从而转发到这个服务器主机。
转发的过程中,源IP地址和目标IP地址是不会变的(前提:没有使用 NAT 网络的),源 MAC 地址和目标 MAC 地址是会变化的。
总结
通过本文的阐述,我们详细介绍了浏览器发送HTTP请求的全过程,从URL解析到网络包的发送,最终到达Web服务器。网络通信的背后是诸多协议和规则的支撑,每一个步骤都是精心设计和优化的。了解这一过程不仅有助于我们更好地理解网络通信的运作方式,也为我们解决网络故障和优化网络性能提供了重要参考。希望本文对读者有所帮助,让大家对网络通信有更深入的了解。