首页 > 代码库 > tcp的可靠性

tcp的可靠性

在理想的传输条件下是不需要tcp这类协议来保证可靠传输的,所谓理想是指:
  • 传输过程中数据不会出错、丢失(现在的网络质量很好,这种情况多数不会出现);
  • 不论发送端多块发送,接收端都可以接收(这是主要问题)。
但真实传输条件远不能达到理想情况,所以才需要tcp来保证可靠传输。
 

可靠传输的工作原理

ARQ(automatic repeated request,自动重传请求)保证了:
  • 请求报文段在网络传输过程中出错,接收端通过校验会将其丢弃;
  • 确认报文在网络中延迟、丢失,发送端超时重发,但接收端会丢弃重复的的报文段;
停止等待ARQ,发送端都需要得到接收端的确认才会发送下一个请求;
连续ARQ,利用滑动窗口,实现了一次发送多个请求,接收端只需要对连续接收到的最大的请求进行确认即可。如下图,发送窗口大小为5,发送方发送5个报文段后,等待接收方确认,收到确认1后向前滑动,发送6。
 
技术分享

 

 

滑动窗口和缓存的关系(以字节为单位发送、接收)

技术分享

TCP流量控制

借用滑动窗口很容易实现流量控制

技术分享

 

当发送方收到窗口为0时会启动一个计时器,计时器到期后会向接收端发送一个探测报文,接收方的响应中就会携带窗口大小。
传输效率的问题,可以使用nagle算法尽量避免小数据传输(假设数据为1b,tcp、ip头部就有40b,再加上帧结构,网络利用率会很低),当然在要求实时性的场景下,小数据也需要随时发送。
 

TCP拥塞控制

注意和流量控制相区别,流量控制的对象是某tcp连接的两个端点,而拥塞控制的对象是整个网络(通过控制网络中的端点,最终达到控制网络的目标)。
经典的拥塞控制算法有慢开始、拥塞避免、快重传、快恢复。发送方会维护一个cwnd(拥塞窗口,只是一个数值),该窗口大小变换与所采用的算法和网络拥塞状况有关,最终拥塞窗口(cwnd)大小会和接收方窗口(rwnd)大小一起作用于滑动窗口大小(发送方滑动窗口上限=Min(cwnd, rwnd))。

 

技术分享

 

tcp的可靠性