TCP可靠传输
TCP采用校验 序号 确认 重传机制来实现可靠传输.
- 序号
- 确认
TCP首部的确认号是期望收到的对方的下一个报文段数据的第一个字节的序列号. - 重传
- 超时: 每次发送一次报文,设置一次计数器,若重传时间内没有收到确认.就重传这段报文.
- 冗余ACK确认:
- 每当收到比期望序号大的失序报文时,发送一个冗余的ACK.
- 当发送发收到对同一个报文的冗余ACK.就认为这个被确认过的报文之后的报文端已经丢失.就需要进行重传. 快速重传
TCP流量控制
- 如果发送方发太快了->接收方来不及接收->导致分组丢失
- 基于滑动窗口协议的流量控制机制:
- 在通信过程中,接收方根据自己接受缓存的大小,动态的调整发送方的发送窗口大小rwnd;
- 发送方根据rwnd和拥塞窗口cwnd来限制自己的发送窗口的大小.一般取最小值.
TCP拥塞控制
- 拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载
- 通常用以下方式来实现拥塞控制:
- ( 1 )慢开始、拥塞避免
- ( 2 )快重传、快恢复。
慢启动和拥塞避免
- 发送方位置一个叫做拥塞窗口cwnd. cwnd的大小取决于网络的拥塞程度.动态变化.
- 发送窗口的大小取决于 拥塞窗口cwnd和发送窗口rwnd.
- 慢启动的思想就是: 一开始不要发送大量数据.先测探一下网络的拥塞程度.也就是从小到大逐渐增加拥塞窗口的大小.
- 这里的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,然后逐渐增大,这当然比按照大的cwnd一下子把许多报文段突然注入到网络中要“慢得多”。
- 为了防止cwnd增长过大引起网络拥塞,还需设置一个慢开始门限ssthresh状态变量
- (1)当cwnd<ssthresh时,使用慢开始算法。
- (2)当cwnd>ssthresh时,改用拥塞避免算法。
- (3)当cwnd=ssthresh时,慢开始与拥塞避免算法任意。
- 拥塞避免: 让拥塞窗口缓慢增长.每经过一个往返时间RTT.发送方的拥塞窗口cwnd增加1. 加法增大. 而非加倍,是一种线性的增长
- 当遇到拥塞! 把慢启动的门限 ssthresh 乘法减小 . 变成原来的一半.然后将 cwnd拥塞窗口设置为1.
快速重传
- 快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方,可提高网络吞吐量约20%)而不要等到自己发送数据时捎带确认。
- 快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
快恢复算法
- 快重传配合使用的还有快恢复算法
- 当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半(为了预防网络发生拥塞)。但是接下去并不执行慢开始算法.
- 考虑到如果网络出现拥塞就不会连续收到好几个重复的确认信号.所以认为网络并没有拥塞.
- 此时将 cwnd 拥塞窗口设置为把ssthresh门限的1/2. 然后是用拥塞避免算法进行加法增大.