这是我参与「第四届青训营 」笔记创作活动的第1天
我们在浏览器地址栏输入网址后发生了什么
大概的流程如下
graph TD
输入网址 --> browser进程处理输入的信息 --> 浏览器内核发起请求 --> 进入互联网到达服务器
--> 服务器响应 --> 浏览器内核读取返回的数据-->渲染-->返回browser进程完成加载页面
互联网采用TCP/IP的四层网络模型,在浏览器发起请求到读取返回的数据之间发生了三次握手和四次挥手,三次握手和四次挥手也是面试考研常遇到的问题
对于三次握手:
1.客户端和服务器处于关闭状态
2.客户端被动打开处于监听状态
3.客户端主动打开发送TCP连接请求报文然后客户端处于同步已发送状态(第一次握手)
4.服务器在收到请求后发送针对TCP连接请求的确认然后处于同步以接收状态(第二次握手)
5.客户端在收到服务器对连接请求的确认后发送给客户端对连接请求的确认的确认然后客户端处于连 接已建立状态(第三次握手)
6.服务器接收到对连接的确认的确认后处于连接已建立的状态到此连接通道建立
我们可以发现客户端在收到服务器确认后还要对其确认发送一次确认的确认才进行连接的建立,我们可不可以在收到请求后就直接开始建立连接也就是采用两报文握手呢?三次握手的第三次是否多余
答案是不可以
我们可以试想一下客户端发送了一个TCP请求而这个请求因为某种原因滞留在网络中这就导致了客户端的超时重传重新发送一个新的TCP请求给服务器,服务器在接收到TCP请求后通过两报文握手最后释放连接后,这个最早的滞留的TCP请求到达了服务器,服务器会认为客户端又发送了一次请求,而现在服务器处于关闭状态无法得到服务器的确认,而服务器却处于连接已建立状态将会一直等待客户端的发送数据,这将造成进程的浪费