目录
(1)为什么 TCP 建立连接需要三次握手,明明两次就可以建立起连接
总结:
- 协议
- DNS域名解析协议:网络层协议;
- TCP/UDP协议:传输层协议;
- http/https:网络层协议;
- 步骤
- [1]DNS域名解析;
- [2]建立tcp连接;
- [3]发送请求
- [4]获取数据;
- [5]解析数据,渲染页面;
- [6]释放tcp连接
1.DNS(Domain Name System)域名解析
注:DNS域名解析协议是应用层协议;
[1]首先我们要知道域名是什么?
- 域名是IP地址的别名;
- 因为IP存在数字和英文的组合(IPV6),不利于记忆,所以就出现了域名;
[2]DNS域名解析就是根据用户输入的域名去查询IP地址是什么(真正的名字是什么)
- 步骤
- 浏览器缓存:浏览器会先检查自身缓存中有没有被解析过的此域名的ip地址
- 有:解析结束;
- 没有:操作系统缓存查找
- 注:浏览器缓存时间可以通过TTL属性进性设置
- 操作系统缓存:浏览器检查操作系统缓存中有没有对应的已经解析过的ip地址
- 有:解析结束;
- 没有:请求本地域名服务器(LDNS)来解析这个域名
- LDNS(本地域名解析服务器):查看有没有域名解析结果
- 解析成功:返回
- 不成功:到根服务器(Root Serve)解析这个域名
- 注:LDNS性能很好,一般会缓存域名解析结果(80%都能在这里查找到),所以·LDNS主要承担了域名解析的工作;
- Root Serve:解析域名
- 根域名服务器负责找出 一级域名 的服务器 (gTLD) 返回给本地域名服务器;
- 本地域名服务器向 gTLD服务器 发出请求,返回Name Serve域名服务器的地址(通常是你注册的域名服务器的地址)
- Name Serve域名服务器 会查询存储的域名和IP的映射关系,返回IP和TTL值;
- LDNS缓存这个域名和IP的对应关系,缓存时间由TTL值控制;
- 将解析结果返回给用户,缓存到本地;
- 浏览器缓存:浏览器会先检查自身缓存中有没有被解析过的此域名的ip地址
[3]DNS域名解析协议是基于UDP的协议;
- 不使用TCP的原因
- TCP建立连接/释放连接要经历三次握手以及四次挥手(浪费网络资源)
- DNS数据不是大的数据包
- 不需要考虑分包(不担心UDP的丢包现象)
2.通过TCP协议建立连接
[1]建立连接时的三次握手
TCP 是一个全双工的协议
起初,两端都为 CLOSED 状态。在通信开始前,双方都会创建 TCB。 服务器创建完 TCB 后便进入 LISTEN 状态,此时开始等待客户端发送数据。
第一次握手
客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号。请求发送后,客户端便进入 SYN-SENT 状态。
第二次握手
服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后便进入 SYN-RECEIVED 状态。
第三次握手
当客户端收到连接同意的应答后,还要向服务端发送一个确认报文。客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。
(1)为什么 TCP 建立连接需要三次握手,明明两次就可以建立起连接
------->为了防止出现失效的连接请求报文段被服务端接收的情况,从而产生错误
情况:
- 客户端发送了一个连接请求 A,但是因为网络原因造成了超时,这时 TCP 会启动超时重传的机制再次发送一个连接请求 B;
- 请求B顺利到达服务端,服务端应答完就建立了请求,然后接收数据后释放了连接。
- 假设这时候连接请求 A 在两端关闭后终于抵达了服务端,那么此时服务端会认为客户端又需要建立 TCP 连接,从而应答了该请求并进入 ESTABLISHED 状态。但是客户端其实是 CLOSED 的状态,那么就会导致服务端一直等待,造成资源的浪费
[2]断开连接时的四次挥手
TCP 是一个全双工的协议
第一次握手
若客户端 A 认为数据发送完成,则它需要向服务端 B 发送连接释放请求。
第二次握手
B 收到连接释放请求后,会告诉应用层要释放 TCP 链接。然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明 A 到 B 的连接已经释放,不再接收 A 发的数据了。但是因为 TCP 连接是双向的,所以 B 仍旧可以发送数据给 A。
第三次握手
B 如果此时还有没发完的数据会继续发送,完毕后会向 A 发送连接释放请求,然后 B 便进入 LAST-ACK 状态。
PS:通过延迟确认的技术(通常有时间限制,否则对方会误认为需要重传),可以将第二次和第三次握手合并,延迟 ACK 包的发送。
第四次握手
A 收到释放请求后,向 B 发送确认应答,此时 A 进入 TIME-WAIT 状态。该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,若该时间段内没有 B 的重发请求的话,就进入 CLOSED 状态。当 B 收到确认应答后,也便进入 CLOSED 状态。
3.发送接收数据
- 客服端通过http/https协议发送请求;
- 服务端接收请求,处理数据,结束请求,返回数据;
4.浏览器解析数据
- 浏览器的渲染引擎会解析HTML,生成一个html的dom树;
- 包含所有节点,包括隐藏节点;
- 浏览器的渲染引擎解析css,生成css规则树;
- 生成 DOM 树和 CSS规则 树以后,就需要将这两棵树组合为渲染树
- 渲染树只会包括需要显示的节点和这些节点的样式信息,如果某个节点是
display: none
的,那么就不会在渲染树中显示;
- 渲染树只会包括需要显示的节点和这些节点的样式信息,如果某个节点是
- 当浏览器生成渲染树以后,就会根据渲染树来进行布局(也可以叫做回流),然后调用 GPU 绘制,合成图层,显示在屏幕上;