文章目录
为什么输入url就可以展现对应的页面呢?背后经历了什么?
总体为以下几个过程:
- DNS解析,将域名解析成Ip地址
- Tcp/Ip三次握手建立连接
- 浏览器向服务器发送http请求
- 服务器处理请求并返回http报文
- 浏览器解析渲染页面
- tcp四次挥手断开连接
一、DNS域名解析
在浏览器输入网址(URL)后,首先要经过域名解析,因为浏览器只能通过IP地址找到对应的服务器,输入的是域名,那么就需要解析成IP地址。
过程
1、浏览器先检查自身缓存中有没有被解析过的这个域名对应的 IP 地址。
2、浏览器缓存中没有命中,浏览器会检查操作系统缓存中有没有对应的已解析过的结果。(在 Windows 中可通过 C 盘里一个叫 hosts 的文件来设置,如果你在这里指定了一个域名对应的 IP 地址,那浏览器会首先使用这个 IP 地址。)
3、至此还没有命中域名,会请求本地域名服务器(LDNS)来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约 80% 的域名解析到这里就会完成。
4、LDNS 仍然没有命中,就直接跳到 Root Server 域名服务器请求解析。
5、根域名服务器返回给 LDNS 一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org 等)地址。
6、此时 LDNS 再发送请求给上一步返回的 gTLD Server。
7、接受请求的 gTLD Server 查找并返回这个域名对应的 Name Server 的地址,这个 Name Server 就是网站注册的域名服务器。
8、Name Server 根据映射关系表找到目标 IP,返回给 LDNS。LDNS 缓存这个域名和对应的 IP。
9、LDNS 把解析的结果返回给用户,用户根据 TTL 值缓存到本地系统缓存中,域名解析过程至此结束。
二、Tcp三次握手建立连接
目的
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
过程
- 第一次握手,由浏览器发起,告知服务器,我要发送请求了(浏览器发送一个带SYN=1,Seq=x的数据包到服务器)
- 第二次握手,由服务器发起,告知浏览器,我准备接收了,你发送吧(服务器发回一个带SYN=1,ACK= X+1,Seq=Y的响应包以示传达确认信息)
- 第三次握手,由浏览器发起,告知服务器,我马上就要发了,你准备好接收吧(浏览器再传回一个带ACK=Y+1,Seq=Z)
三、浏览器向服务器发送http请求
一个 HTTP 请求报文由请求行(request line)、请求头部(headers)、空行(blank line)和请求数据(request body)4 个部分组成。
请求行
请求行包括请求方法、URL、协议版本如: