输入url,到网页完全打开?
首先读取缓存,搜索自己的DNS缓存,找到了IP地址就直接访问
1.DNS解析
由DNS服务器来将域名解析成为对应服务器的IP地址
2.TCP连接
知道了服务器的IP后,需要三次握手协议才能建立连接,发送3个包
确认双方的发送和接受能力都是正常的,指定自己的初始化序列号
实质连接服务器指定端口,建立TCP连接,同步连接双方的序列号和确认号
开始客户端:closed 服务端:listen
1.第一次握手
客户端向服务端发送一个SYN报文并指明自己的初始化序列号ISN
客户端进入SYN_SENT状态
首部的同部位SYN=1,初始序号seq=x
SYN=1的报文段不能携带数据,但需要消耗一个序号
2.第二次握手
服务端收到客户端的SYN报文之后,以自己的SYN报文作为应答
指定自己的初始化序列号ISN(s),将客户端ISN+1作为ACK的值
此时服务端处于SYN_RCVD状态
确认报文段中SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y
4.第三次握手
客户端收到SYN报文段后,继续发送一个ACK报文,值为服务端ISN+1
服务端处于ESTABLISHED状态
服务端收到这个ACK报文后也进入ESTABLISHED状态
确认报文段ACK=1,确认号ack=y+1,序号seq=x+1
ACK报文段可以携带数据,不携带数据则不消耗序号
3.发送请求
发送HTTP请求
4.接受响应
服务器接受请求并返回HTTP报文
5.根据返回的状态码判断服务端处理是否正常
6.浏览器渲染页面
返回成功后,浏览器拿到请求页面的代码,将其解析渲染器出来
1.HTML标记
调用HTML解析器解析成Token并构建成DOM树
2.style/link标记
调用CSS解析器,处理CSS标记并构建CSSOM树
3.script标记
调用JS解析器,处理JS代码,绑定事件,修改DOM树和CSSOM树
将两颗树合并成为一个渲染树
根据渲染树来计算布局,计算每个节点的几何信息
根据计算好的信息来绘制页面
7.断开连接
同理断开一个连接需要四次挥手
1.第一次挥手(客户端: 我想断开了)
客户端发送一个FIN报文,报文中指定一个序列号
客户端处于FIN_WAIT1状态
也就是发送连接释放报文段(FIN=1,序号seq=u)
停止发送数据,主动关闭连接
2.第二次挥手(服务端: 你想断开吗)
服务端收到FIN之后,会发送ACK报文,且把客户端的序列号值+1作为ACK报文的序列号值
服务端处于CLOSE_WAIT状态
也就是服务端收到连接释放报文段后发出确认报文段
TCP处于半关闭状态,连接释放
客户端收到服务端的确认后,进入FIN_WAIT2状态
等待服务端发出连接释放报文段
3.第三次挥手(服务端: 我也想断开了)
服务端也想断开连接了,向客户端发送FIN报文,指定一个序列号
服务端处于LAST_ACK状态
4.第四次挥手(客户端: 发起确认)
客户端收到FIN后,一样发送一个ACK报文作为应答,把服务端序列号值+1作为自己ACK报文的序列号值
客户端处于TIME_WAIT状态,确保服务端收到了自己的ACK报文才会进入CLOSED状态
URL输入到网页打开
最新推荐文章于 2023-05-06 15:15:26 发布