C++之每日知识树-06-TCP如何保证可靠传输

本文深入探讨了TCP协议的可靠传输机制,包括数据编号、校验和计算、数据确认等关键措施,以及解决粘包问题的方法。同时,文章分析了不可靠现象的原因,如接收端粘包、发送方数据过快导致的缓冲区溢出等,并提出了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

what:什么是TCP的可靠传输?
作为一个面向连接的传输层协议,TCP的目标是为用户提供可靠的端到端连接,保证信息有序无误的传输。它除了提供基本的数据传输功能外,还为保证可靠性采用了数据编号、校验和计算、数据确认等一系列措施。它对传送的每个数据字节都进行编号,接收方在接收到数据后检查校验和并请求接收方回传确认信息(ACK)。发送方如果在规定的时间内没有收到数据确认,就重传该数据。
在这里插入图片描述

why:为什么会出现不可靠的现象?
(1)保护消息边界,就是指传输协议把数据当作一条独立的消息在网上传输,接收端只能接收独立的消息。也就是说存在保护消息边界,接收端一次只能接收发送端发出的一个数据包。而面向流则是指无保护消息保护边界的,如果发送端连续发送数据,接收端有可能在一次接收动作中,会接收两个或者更多的数据包。
由Nagle算法造成的发送端的粘包:Nagle算法是一种改善网络传输效率的算法.简单的说,当我们提交一段数据给TCP发送时,TCP并不立刻发送此段数据,而是等待一小段时间,看看在等待期间是否还有要发送的数据,若有则会一次把这两段数据发送出去.这是对Nagle算法一个简单的解释。
(2)接收端接收不及时造成的接收端粘包:TCP会把接收到的数据存在自己的缓冲区中,然后通知应用层取数据.当应用层由于某些原因不能及时的把TCP的数据取出来,就会造成TCP缓冲区中存放了几段数据.

如下图粘包的产生(传输过程中的三种情况):
在这里插入图片描述

(3)发送方发送数据过快,接收方未来得及接收,造成接收缓冲区溢出,从而造成分组丢失。流量控制也会出现死锁现象
(4)网络拥挤

How:如何保证TCP的可靠传输?

(1)解决粘包问题。

1、使用带消息头的协议、消息头存储消息开始标识及消息长度信息,服务端获取消息头的时候解析出消息长度,然后向后读取该长度的内容(可联想到封包和拆包问题)。
2、设置定长消息,服务端每次读取既定长度的内容作为一条完整消息,当消息不够长时,空位补上固定字符。
3、 设置消息边界,服务端从网络流中按消息编辑分离出消息内容,一般使用‘\n’。

(2)数据编号、校验和计算、数据确认
(3)流量控制以及解决死锁。
(4)拥塞控制(慢启动、拥塞避免、快重传/快恢复)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值