目录
一、流量控制
二、连接管理
1. 建立连接(三次握手)
2. 关闭连接
3. TCP 连接的生命周期
一、流量控制
一条 TCP 连接的每一侧主机都为该连接设置了接收缓冲区。
TCP 的接收方的接收缓冲区:
1. 提供流量控制服务的原因
应用进程会从缓冲区中读取数据,但不是数据刚一到达就立即读取。事实上,接收方应用也许正忙于其它任务,甚至要过很长时间后才去读取数据。如果某应用程序读取数据时相对缓慢,而发送方发送得太多、太快,发送的数据就会很容易地使该连接的接收缓冲区溢出。
2. 流量控制服务
是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读取速率匹配。
3. 流量控制的实现
TCP 让发送方维护一个称为 接收窗口 的变量来提供流量控制。
- 接收窗口的值是接收方告诉发送方的,等于接收缓冲区的剩余空间
- 发送方根据接收窗口的值来限制没有确认的数据量不超过接收窗口
TCP 是全双工通信,因此连接两端的发送方都各自维护一个接收窗口
接收方把接收缓冲区剩余空间大小放入它发给发送方的报文段接收窗口字段中。
二、连接管理
1. 建立连接(三次握手)
TCP 在交换报文段之前在发送方和接收方之间建立连接
Step1:客户端的 TCP 首先向服务器端的 TCP 发送一个 SYN 报文段:
- 不包含应用层数据
- 标志位 SYN = 1,ACK = 0
- 客户随机选择一个初始序号放入序号字段中
Step2:服务器接收 SYN 报文段,为该 TCP 连接分配 TCP 缓存和变量,回复客户 TCP 一个 SYNACK 报文段:
- 不包含应用层数据
- 标志位 SYN = 1,ACK = 1
- 确认号:客户初始序号 + 1
- 服务器随机选择一个初始序号放入序号字段中
Step3:客户接收 SYNACK 报文段,为该 TCP 连接分配 TCP 缓存和变量,回复服务器 TCP 一个 ACK 报文段:
- 可能包含应用层数据
- 标志位 SYN = 0,ACK = 1
- 确认号:服务器初始序号 + 1
在建立连接后的每一个报文段中,SYN 都将被置为 0
2. 关闭连接
当客户应用进程关闭套接字后:
Step1:客户向服务器发送 FIN 报文段,其中 FIN = 1;
Step2:服务器接收 FIN 报文段,回复 ACK 报文段,进入半关闭连接状态;
Step3:服务器向客户发送 FIN 报文段,客户接收 FIN 报文段,回复 ACK 报文段;
TIME_WAIT
假设 ACK 丢失,TIME_WAIT 状态使客户重传
Step4:服务器接收 ACK 报文段,TCP 连接关闭。