TCP可靠传输机制
Posted water2wine
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP可靠传输机制相关的知识,希望对你有一定的参考价值。
可靠性传输需要解决的问题
资源的无端浪费
数据的破坏
数据的丢包
数据的重复
数据的分片顺序混乱
传输速度慢
传输数据量过大导致网络拥堵
解决措施
通过序列号与确认应答提高可靠性
- 当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知。这个消息叫做确认应答(ACK)
- 序列号可以实现确认应答处理、重发控制以及重复控制等功能。序列号是按顺序给发送数据的每一个字节(8位字节)都标上号码的编号。接收端查询接收数据TCP首部中的序列号和数据的长度,将自己下一步应该接受的序号作为确认应答返送回去。
通过连接管理避免资源的无端浪费
- 连接管理指的就是TCP连接的三次握手四次挥手。相对于UDP这种面向无连接的通信协议而言,TCP的连接管理可以事先检查对端是否存在以及对端是否可以通信,避免了无意义的数据传输。
关于TCP连接管理的相关知识点可以看我的这篇博客: TCP三次握手四次挥手知识点总结
通过窗口控制提高传输速度
1. 设置窗口的原因及机制
- TCP以1个段为数据的传输单位,每发一个段进行一次确认应答的处理。这样的传输方式有一个缺点,那就是包的往返时间越长通信性能就越低。
- 为了解决这个问题,TCP引入了窗口的概念。
- 在窗口的大小范围内,发送端可以无需等待确认应答而可以继续发送数据。当收到确认应答后,将窗口滑动到确认应答中的序列号的位置,这样就可以顺序的将多个段同时发送提高通信性能。
2. 通过流量控制来控制窗口的大小
- 原因:当窗口大小过大,接收端可能会因为负荷过重而无法接受该数据,如此一来,如果接收端将本应该接收的数据丢弃的话,就会触发重发机制,从而导致网络资源的浪费。
- 解决措施:提供流控制机制,让发送端根据接收端的实际接收能力控制发送的数据量。
- 主要机制:接收端主机向发送端主机通知自己可以接受数据的大小,于是发送端会发送不超过这个限度的数据。该大小限度就被称作窗口大小。
- 为了避免窗口更新通知在传送途中丢失,发送端主机会时不时发送一个叫做窗口探测的数据段用以获取最小的窗口大小信息。
通过超时重发解决丢包问题
1. 超时重发的时间确定
- 如果数据在传输过程中丢包,发送端将不会收到接收端的确认应答,发送端在等待一定时间后出发超时重发机制,重新发送原数据包。
- 重发超时是指在重发数据之前,等待确认应答到来的那个特定时间间隔。
- TCP在每次发包时都会计算往返时间及其偏差,将这个往返时间和偏差相加,重发超时的时间就是比这个总和要稍大一点的值。
- 数据每次重发超时时间会以2倍指数延长,并在达到一定重发次数之后关闭连接。
2. 滑动窗口机制下的重发机制
- 首先考虑确认应答未能返回的情况。在这种情况下,数据已经到达对端,是不需要再进行重发的。在没有使用窗口控制的情况下,没有收到确认应答的数据都会被重发。而使用了窗口控制,如果窗口在一定程度上较大时,即使有少部分的确认应答丢失也不会进行数据重发。可以通过下一个确认应答进行确认。
- 其次考虑一下某个报文段丢失的情况。在某一报文段丢失后,发送端会一直收到该报文端序号的确认应答。当发送端主机连续3次收到同一个确认应答时,就会将所对应的数据进行重发。这种机制比之前提到的超时管理更加高效,因此也被称作告诉重发机制。
通过拥塞控制避免网络拥堵
- 通过窗口控制,收发主机之间可以连续发送大量数据包。但如果在通信刚开始就发送大量数据,也可以引发网络环境的拥堵。
- TCP通过拥塞控制来避免网络拥堵。
- 拥塞窗口:首先,为了在发送端调节所要发送数据的量,定义了拥塞窗口。在慢启动开始时,将拥塞窗口的大小定义为一个数据段发送数据,之后每收到一次确认应答,拥塞窗口的值就加1。在发送数据包时,取拥塞窗口大小与接收端主机通知的窗口大小的较小值。
- 慢启动阈值:虽然通过拥塞窗口的设置可以让通信开始阶段收发数据较小,但随着包的每次往返,拥塞窗口也会以指数增长从而引起网络拥塞。为了防止这些,引入了慢启动阈值的概念。只要拥塞窗口的值超出这个阈值,拥塞窗口的大小就会逐渐呈线性上升趋势。
- 慢启动算法:当重发机制为超时重发时使用的算法。在TCP通信开始时,并没有设置相应的慢启动阈值。拥塞窗口从1开始线性增长,当出现超时重发时,将慢启动阈值变为当时拥塞窗口的一半,拥塞窗口重新变为1。
- 快恢复算法:当重发机制为高速重发时使用的算法。由于高速重发机制下引发的网络拥堵一般比超时重发机制药效,所以,当出现重复确认应答引发的高速重发控制时,将慢启动阈值设置为拥塞窗口大小的一半,拥塞窗口设置为该慢启动阈值+3个数据段的大小。
以上是关于TCP可靠传输机制的主要内容,如果未能解决你的问题,请参考以下文章