当你在浏览器的地址栏输入了一行网址,并回车了之后,浏览器到底做了什么呢?

先笼统的讲一下:
浏览器通过 DNS 解析你输入的网址( URL )根据网址中的域名(Domain)部分也就是www.xxxxx.com获取域名对应的IP地址,然后通过基于 TCP/IP 协议的 http 协议发送请求到服务器,服务器响应请求返回数据,浏览器接收数据解析并 渲染 到页面。

我们总结出几个关键词:

  • DNS解析
  • URL
  • TCP/IP
  • HTTP协议
  • HTTP请求发起和响应
  • 页面渲染的过程

DNS解析

DNS:Domain Name Server,域名服务器。是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。IP地址其实就是一串乱七八糟的数据用户很难记住,但是域名就不一样了,比如谷歌的google.com,百度的baidu.com 简单易记。
所以为了处理这个问题,就需要用域名去映射IP地址。
因此,当用户在浏览器输入https://www.baidu.com 回车时,它经历了以下步骤:

1.浏览器根据地址去本身缓存中查找dns解析记录,如果有,则直接返回IP地址,否则浏览器会查找操作系统中(hosts文件)是否有该域名的dns解析记录,如果有则返回。
2.如果浏览器缓存和操作系统hosts中均无该域名的dns解析记录,或者已经过期,此时就会向域名服务器发起请求来解析这个域名。
3.请求会先到LDNS(本地域名服务器),让它来尝试解析这个域名,如果LDNS也解析不了,则直接到根域名解析器请求解析
4.根域名服务器给LDNS返回一个所查询余的主域名服务器(gTLDServer)地址。
5.此时LDNS再向上一步返回的gTLD服务器发起解析请求。
6.gTLD服务器接收到解析请求后查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server通常就是你注册的域名服务器(比如阿里dns、腾讯dns等)
7.Name Server域名服务器会查询存储的域名和IP的映射关系表,正常情况下都根据域名得到目标IP记录,连同一个TTL值返回给DNS Server域名服务器
8.返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,缓存的时间有TTL值控制。
9.把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。

URL

URL:Uniform Resource Locator 统一资源定位符。说白了就是网络上用来标识具体资源的一个地址,包含了用户查找该资源的信息,HTTP使用它来传输数据和建立连接。
一个URL有以下组成部分:

1. 协议
2. 服务器地址(域名或IP+端口)
3. 路径
4. 文件名

TCP/IP协议

TCP:Transmission Control Protocol, 传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。
双方建立TCP连接需要经历三次握手:

1.客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。
2.服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
3.客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

上面几个状态码的解释:

1.SYN:synchronous 建立联机
2.ACK:acknowledgement 确认
3.SYN_SENT:请求连接
4.SYN_RECV:服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态。再进一步接收到客户端的ACK就进入ESTABLISHED状态。
TCP连接时并不携带数据

HTTP协议

HTTP协议:Hypertext Transfer Protocol 也叫超文本传送协议 ,它是一种基于TCP/IP协议栈、在表示层和应用层上的协议(TCP在传输层的协议),通俗一点说就是TCP/IP是位于传输层上的一种协议,用于在网络中传输数据;HTTP协议是应用层协议,基于TCP协议,用于包装数据,程序使用它进行通信,可以简单高效的处理通信中数据的传输和识别处理。