TCP(Transmission Control Protocol)传输控制协议

发布时间 2023-08-12 00:19:40作者: Allen_Hao

什么是TCP?

TCP的英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。

它提供了端到端的数据传输,确保数据按顺序到达目标,并进行错误检测和恢复

常用于对数据进行准确无误的传输,比如: 文件下载,浏览器上网。

 

 

TCP的特点

1. 面向连接

        通信双方必须先建立好连接才能进行数据的传输,并且双方都会为此连接分配必要资源用来记录连接的状态和信息。当数据传输完成后,双方必须断开此连接,以释放系统资源。

 

2. 可靠传输

2.1 TCP采用发送应答机制:   通过TCP这种方式发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传送成功
2.2 超时重传:   发送端发送一个报文之后就会启动定时器,如果指定时间内没有得到应答就会重新发送这个报文段
2.3 错误校验:   TCP用一个校验和函数来校验数据是否有错误,在发送和接收时都要计算校验和
2.4 流量控制和阻塞管理:   流量控制用来避免发送端发送过快而使得接收方来不及接收

TCP的工作原理

 

建立连接的3次握手

 

TCP使用三次握手建立连接,

第1次:即客户端发送SYN(同步)报文给服务端,

第2次: 服务端回复SYN+ACK(同步-确认)报文给客户端,

第3次:最后客户端再回复ACK(确认)报文给服务端。通过这个握手过程,双方建立起可靠的连接。

3次握手实现了A、B网络ok

A对B说我给的发消息,你收到了吗?(第1次握手)

B说我收到了,你收到了我的回复吗?(第2次握手)

A收到B的回复,告诉B,老子已经收到你的回复了(第3次握手)

经过3次后,A,B可以确定网络是通的,可以发送数据了。

滑动窗口机制实现数据的收发

在连接建立后,TCP使用滑动窗口机制来管理发送和接收数据。发送方将数据分成多个小块(称为报文段),并为每个报文段分配一个唯一的序列号。接收方接收报文段,按照序列号重新组装数据,然后发送确认报文段给发送方。

为何成为可靠传输?

TCP还使用超时重传、拥塞控制和流量控制等机制来确保数据的可靠传输。如果发送方未收到确认报文段,则会重传未确认的报文段,以防止丢失。拥塞控制机制可以根据网络状况调整发送速率,以避免网络拥塞。流量控制机制可以根据接收方的处理能力,控制发送方的数据发送速度。

 

断开连接的4次挥手

 

 

  1. 主动关闭方发送FIN报文:主动关闭方(通常是客户端)发送一个FIN(结束)报文给被动关闭方(通常是服务端),表明自己已经没有数据要发送了。
  2. 被动关闭方回复ACK报文:被动关闭方接收到FIN报文后,发送一个ACK(确认)报文作为回应,表明已经收到了主动关闭方的FIN报文。
  3. 被动关闭方发送FIN报文:被动关闭方(现在成为主动关闭方)也发送一个FIN报文给主动关闭方,表示自己已经准备好关闭连接。
  4. 主动关闭方回复ACK报文:主动关闭方接收到被动关闭方的FIN报文后,发送一个ACK报文作为回应,表示已经收到了被动关闭方的FIN报文。

在这个过程中,每一方都需要发送一个FIN报文和接收对方的ACK报文。通过这四次挥手的过程,双方最终完成了连接的关闭。

使用TCP进行连接关闭时的一些最佳实践:

  1. 及时关闭不再使用的连接:当一个TCP连接不再被使用时,应该及时关闭连接以释放资源。长时间保持连接可能会导致资源浪费和连接池耗尽。
  2. 等待所有数据传输完成后再关闭连接:在主动关闭连接之前,应该确保所有的数据都已经传输完成。否则,可能导致对方接收到不完整的数据或者丢失部分数据。
  3. 处理超时情况:在进行连接关闭时,应该设置合适的超时时间,避免连接一直处于等待状态。当超过预定的超时时间后,可以采取相应的错误处理措施。
  4. 关注半关闭状态:在TCP连接关闭中,一方发送了FIN报文后,可能仍然需要接收对方发送的数据。这种状态称为半关闭状态。在实际应用中,应该考虑如何正确处理半关闭状态

TCP通信步骤

1. 创建连接
2. 传输数据
3. 关闭连接

socket客户端与服务端就是使用TCP协议