TCP(Transmission Control Protocol)传输控制协议
什么是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次挥手
- 主动关闭方发送FIN报文:主动关闭方(通常是客户端)发送一个FIN(结束)报文给被动关闭方(通常是服务端),表明自己已经没有数据要发送了。
- 被动关闭方回复ACK报文:被动关闭方接收到FIN报文后,发送一个ACK(确认)报文作为回应,表明已经收到了主动关闭方的FIN报文。
- 被动关闭方发送FIN报文:被动关闭方(现在成为主动关闭方)也发送一个FIN报文给主动关闭方,表示自己已经准备好关闭连接。
- 主动关闭方回复ACK报文:主动关闭方接收到被动关闭方的FIN报文后,发送一个ACK报文作为回应,表示已经收到了被动关闭方的FIN报文。
在这个过程中,每一方都需要发送一个FIN报文和接收对方的ACK报文。通过这四次挥手的过程,双方最终完成了连接的关闭。
使用TCP进行连接关闭时的一些最佳实践:
- 及时关闭不再使用的连接:当一个TCP连接不再被使用时,应该及时关闭连接以释放资源。长时间保持连接可能会导致资源浪费和连接池耗尽。
- 等待所有数据传输完成后再关闭连接:在主动关闭连接之前,应该确保所有的数据都已经传输完成。否则,可能导致对方接收到不完整的数据或者丢失部分数据。
- 处理超时情况:在进行连接关闭时,应该设置合适的超时时间,避免连接一直处于等待状态。当超过预定的超时时间后,可以采取相应的错误处理措施。
- 关注半关闭状态:在TCP连接关闭中,一方发送了FIN报文后,可能仍然需要接收对方发送的数据。这种状态称为半关闭状态。在实际应用中,应该考虑如何正确处理半关闭状态
TCP通信步骤
1. 创建连接
2. 传输数据
3. 关闭连接
socket客户端与服务端就是使用TCP协议
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?