本篇是计网全家桶系列的开篇之作,本文只围绕一个问题来展开讨论。
浏览器中输入URL后到底发生了什么?

选取这个问题作为开篇之作是因为,这道高频的面试题将计算机网络中的HTTP/HTTPS协议、TCP协议、IP协议、MAC地址、APR地址解析协议、DNS 域名解析、 等重要组成部分很好的串联了起来,深入了解整个过程对计算机网络体系结构有会一个宏观、清晰的认识!
在此之前先来聊聊什么是URL。
URL(统一资源定位符)是Internet上资源的地址,可以定义为引用地址的字符串,用于指示资源的位置以及用于访问它的协议。
其实通俗一点讲 URL 就是我们熟知的网址,其作用就是用于检索资源和资源名称。
如果资源是Web类型资源,则URL在开头包含 http / https 。
如果资源是电子邮件地址,则以 mailto 开头。
如果资源是文件,则以 ftp 开头。

如图所示,URL 包含了以下信息:
http、https。www.csdn.com。说到这里,其实 URL 还有一个 父亲 URI 可以聊聊。
URI(统一资源标识符)是标识逻辑或物理资源的字符序列,与URL类似,也是一串字符。通过使用位置,名称或两者来标识Internet上的资源;它允许统一识别资源。
有两种类型的URI,统一资源标识符(URL)和统一资源名称(URN)
所以URL 是 URI 的子集。
那URL和URI之间的主要区别是什么呢?
可以说URL是URI(URL是URI的子集),但URI永远不能是URL
对于同一台设备上的进程间通信,有很多种方式,比如有管道、消息队列、共享内存、信号等方式。
而对于不同设备上的进程间通信,就需要网络通信,而设备是多样性的,所以要兼容多种多样的设备,就协商出了一套通用的网络协议。
而这个网络协议太过复杂,我们需要将它按照特定的功能进行分层。这样层与层之间相互独立,只需要完成自己本层的传输任务即可。
本来一个很复杂的网络间题会被每一层都分解为许多比较小的、界线清晰的简单问题来处理和解决。
这样使得复杂的计算机网络系统变得易于设计,实现和标准化。
而TCP/IP 网络模型 是目前被广泛采用的一种模型。
TCP/IP 网络模型主要有

这里的网络接口层由于功能的差异被分为了数据链路层和物理层。实际上的TCP/IP网络模型 只有四层。

协议:协商是用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。
应用层协议定义了网络通信规则,对于不同的网络应用需要不同的应用层协议。
支持 Web 应用的 HTTP 协议,支持电子邮件的 SMTP 协议
运输层主要使用传输控制协议 TCP 和用户数据协议 UDP。
TCP提供面向连接的,可靠的数据传输服务。
UDP提供无连接的,快速的数据传输服务,但不保证数据传输的可靠性。
网络层最常使用的是 IP 协议。
IP协议的作用主要是在相互连接的网络之间传递IP数据包
IP数据包会有显示源设备与目的设备的位置信息,即源IP地址和目的IP地址
接下来就进入正文部分了
浏览器中输入URL后到底发生了什么?

URL,浏览器通过 URL 确定了 web 服务器和文件名,将这些信息生成 HTTP 请求消息,生成 HTTP 也是通过解析 URL后才确定的。
HTTP请求 信息之前,我们需要找到 Web 服务器的IP地址。URL 中存有服务器的位置,即网址域名。 DNS 服务器。DNS 服务器中专门保存了 Web 服务器域名与 IP 的对应关系。DNS会将网址域名对应的IP发送回给客户端。HTTP请求报文交付给运输层处理IP地址之后,首先需要 TCP 建立连接,TCP 连接的建立,通常称为三次握手。TCP 报文中的数据部分就是存放 HTTP 头部 + 数据,运输层组装好 TCP 报文之后,就需交给下面的网络层处理。TCP 报文如下图
IP 协议 ARP 协议ARP协议通过广播目的IP地址的形式找到对应的MAC地址
FCS就是帧校验序列,用来检查包传输过程是否有损坏。
数据包抵达服务器后,服务器会先扒开数据包的 MAC 头部,查看是否和服务器自己的 MAC 地址符合,符合就将包收起来。
接着继续扒开数据包的 IP 头,发现 IP 地址符合,根据 IP 头中协议项,知道自己上层是 TCP 协议。
扒开 TCP 的头,TCP头部里面还有端口号, HTTP 的服务器正在监听这个端口号。
于是,服务器自然就知道是 HTTP 进程想要这个包,于是就将包发给 HTTP 进程。
服务器的 HTTP 进程看到,原来这个请求是要访问一个页面,于是就把这个网页封装在 HTTP 响应报文里。
HTTP 响应报文也需要穿上 TCP、IP、MAC 头部,不过这次是源地址是服务器 IP 地址,目的地址是客户端 IP 地址。
ok以上就是对 浏览器中输入URL后到底发生了什么? 的全部讲解啦,很感谢你能看到这儿。如果有遗漏、错误或者有更加通俗易懂的讲解,欢迎小伙伴私信我,我后期再补充完善。