前端八股文系列三(url输入之后做了什么)

138 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情

前情回顾

上一篇中我们说了简洁的回答,详细回答中我们针对DNS域名解析TCP三次握手做了一个详细的解释。

我们现在来回顾一下DNS域名解析TCP三次握手

DNS域名解析

  1. 首先会在本机进行解析,浏览器会按照浏览器-操作系统-hosts顺序查找是否存在对应解析过的IP地址,本机上没有就将信息传递给本地DNS服务器
  2. 本地DNS服务器又分为缓存服务器递归服务器,缓存服务器里面又分为公共服务器和运营商提供的运营商服务器。80%的用户在运营商服务器可以找到缓存的IP地址,直接返回IP地址。如果这一步也没有找到
  3. 缓存服务器没有找到就进入递归服务器,根域名服务器会按照域名查找到对应的顶级域名服务器的IP地址返回给本地服务器,本地服务器再根据IP找到对应的顶级域名服务器,顶级域名服务器把负责这个域名的权威域名服务器的IP地址返回给本地域名服务器。本地域名服务器根据这个权威域名服务器的IP地址找到权威域名服务器,权威域名服务器将对应的主机IP返回给主机服务器。

正文

说完DNS解析我们url解析改进入下一步了,TCP三次握手

TCP三次握手

  1. 第一次,客户端发送一个请求给服务器请求连接。发送状态:SYN=1,序列号:seq=x
  2. 服务器接收客户端的请求连接,回应确认并发送确认序列号。确认报文段:ACK=1,SYN=1,初始序列号seq=y,确认序号:ack=x=1
  3. 第三次,客户端接收到服务器返回的确认连接信息。确认报文段:ACK=1,SYN=1,ack=y+1

至此,TCP三次握手就算完成了。

这里面也涉及了一些其他的问题,这里也进行一个补充说明。

为什么是三次握手而不是两次

是为了防止报文段丢失或者一些其他原因导致请求延迟到达服务器,客户端重复发送请求造成的资源浪费。

详细版本:如果是两次握手,客户端发起连接请求,但是因为报文头丢失等原因造成没有接到确认信息。这个时候客户端重新发送了一次请求,成功的建立了连接,数据传输完毕之后断开连接。这个时候第一次发送的请求也到达了服务器,服务器会以为重新发送了一个新请求再一次建立连接。

不采用三次握手,只要服务端发送确认信息就建立连接,客户端如果忽略确认信息,也不发送信息,服务端就一直等待客户端发送信息,造成了资源浪费。

结束

这一篇介绍了url在浏览器解析的第三步,下一篇将介绍建立连接之后的HTTP请求中的处理。