在网络中,一个文件通常会被拆分为很多数据包来进行传输,而数据包在传输过程中又有很大概率丢失或者出错。那么如何保证页面文件被完整地送达浏览器呢。
- 建立连接阶段:通过“三次握手”来建立客户端和服务端之间的连接。
- 客户端向服务端发送建立连接请求,客户端进入 SYN-SEND 状态
- 服务端收到建立连接请求后,向客户端发送一个应答,服务端进入 SYN-RECEIVED 状态
- 客户端接收到应答后,向服务端发送确认接收到应答,客户端进入 ESTABLISHED
- 传输数据阶段:接收端需要对每个数据包进行确认操作
- 接收端在收到数据包后,需要发送确认数据包给发送端。
- 当发送端发送了一个数据包,但是没有拿到接收端的反馈确认消息,则判断数据包丢失并触发重发机制。
- 大文件会在传输端拆分成很小的数据包,数据包到达接收端后,接收端安装 TCP 头序号排序,来组成完整数据。
- 断开连接阶段:“四次挥手”保证双方都能断开连接
- 客户端向服务端发送断开连接请求
- 服务端收到断开连接请求后,告诉应用层去释放 TCP 连接
- 服务端向客户端发送最后一个数据包 FINBIT,服务端进入 LAST-ACK
- 客户端收到服务端的断开连接请求后,向服务端确认应答