TCP连接(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP连接的建立和维护是确保数据正确传输的关键。
建立连接(三次握手)
- SYN:客户端发送一个带有SYN(同步序列编号,Synchronize Sequence Number)标志的数据包到服务器,请求建立一个连接,这个数据包包含一个初始得序列号,表示客户端希望与服务器建立连接。
- SYN-ACK:服务器收到请求后,同意建立连接,发送一个带有SYN和ACK(同步-确认,Synchronize-Acknowledgment)标志的TCP段作为响应,确认客户端的序列号,并指定服务器的初始序列号。
- ACK:客户端收到服务器的SYN-ACK响应后,发送一个带有ACK标志的TCP段作为确认,确认服务器的序列号。
- 完成这三次握手后,TCP连接就建立成功了,客户端和服务器可以开始数据传输。
示意图
客户端 服务器
| |
| SYN (seq=x) |
|------------------------------------------------->|
| |
| SYN+ACK (seq=y, ack=x+1) |
|<-------------------------------------------------|
| |
| ACK (seq=x+1, ack=y+1) |
|------------------------------------------------->|
| |
| 连接建立成功 |
| |
数据传输
- 在TCP连接建立之后,客户端和服务器就可以开始发送数据。
- TCP通过序列号对数据包进行排序,确保数据按正确的顺序到达。
- TCP还提供了数据包的确认机制,如果发送方没有及时收到确认,它会重新发送数据包。
- TCP通过流量控制和拥塞控制来调整数据的发送速率,确保网络不会因为过多数据而拥塞。
断开连接(四次挥手)
- FIN:当客户端或服务器想要关闭连接时,它会发送一个带有FIN(结束)标志的TCP段,表示已经没有更多的数据要发送了。
- ACK:接收方收到FIN后,发送一个ACK确认,表示理解了对方想要关闭连接的请求。
- FIN:然后接收方等待所有的数据传输完成,发送一个带有FIN标志的TCP段,请求关闭它的一侧连接。
- ACK:发送方收到这个FIN后,发送一个ACK确认,然后双方的连接就完全关闭了。 完成这四次挥手后,TCP连接就完全关闭了。