浏览器发起请求的整个过程

域名解析——TCP三次握手——IP层发起http请求——服务器响应http请求,返回结果——浏览器解析html,请求具体的资源文件——浏览器对页面进行渲染

DNS解析

DNS 是因特网使用的命名系统,采用客户/服务器模型,协议是udp 协议,使用53号端口

先找自身缓存——找到根域名服务器层层向下查找,找到后层层返回,缓存

  1. 客户机向本地域名服务器发起DNS请求报文
  2. 本地域名服务器接到请求后,查看本地缓存(比如浏览器chrome://chrome-urls),假设没有该记录,则以DNS客户身份向根域名服务器发起解析请求,
  3. 根域名服务器收到请求后 =》 查看顶级域名 =》 权限域名,递归查询

4.dns解析的过程中返回了可用的url,比如说淘宝会将所有可能的相关的域名都买下来,然后当发出dns解析的时候,会将这些域名都会被重定向到www.taobao.com这个正确的域名,浏览器一直都是默认的http协议 和80端口,服务器做的事情是使用http协议并监听80端口,等待请求,把请求转化为https协议和对应的443端口。更多:https://blog.csdn.net/hydro88/article/details/87934150

TCP三次握手

传输层的TCP协议是端到端的可靠的面向连接的协议,首先服务端会启动服务Listened状态,准备接受请求
1.客户端起始状态Closed,发出SYN=1 seq=x,发出后状态变为SYN-SENT
2.服务端收到后 返回确认信息SYN=1 ACK=1 seq=y ack=x+1, 发出后状态变为SYN-RCVD
3.客户端收到确认后发起真正的http请求 ACK=1 seq=x+1 ack=y+1,客户端状态变为ESTABLISHED
4.服务端收到确认后,状态变为ESTABLISHED,建立TCP连接成功
5.服务端给浏览器返回需要的html文件
6.浏览器进行解析,并下载所需的css js 图片资源包,进行渲染
7.四次挥手断开tcp连接

TCP四次挥手

1、Client发起断开请求FIN=1 seq=w 状态变为FIN-WAIT1
2、Server收到后立即返回ACK=1 seq=v ack=w+1 发出后状态变为CLOSED-WAIT
3、Client收到确认信息 状态变为FIN-WAIT2
4、Server发送完毕后发起断开 FIN=1 ACK=1 seq=u ack=w+1 发出后状态变为LAST-ACK
5、Client收到后发出确认关闭 ACK=1 seq=w+1 ack=u+1 后进入TIME-WAIT状态,2msl后进入CLOSED状态
6、Server收到确认后 进入CLOSED状态
注:等待2ms是为了防止server收不到client最后发的确认消息,而导致半连接的请求未关闭,会导致资源的溢出,甚至残留的数据错误。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章