tcp网络协议详细讲解 tcp ip协议( 五 )


tcp网络协议详细讲解 tcp ip协议


序列号和确认应答
3.4 重发超时的确定
  • 重发超时是指在重发数据之前,等待确认应答到来的那个特定时间间隔 。如果超过这个时间仍未收到确认应答,发送端将进行数据重发 。最理想的是,找到一个最小时间,它能保证“确认应答一定能在这个时间内返回” 。
  • TCP 要求不论处在何种网络环境下都要提供高性能通信,并且无论网络拥堵情况发生何种变化,都必须保持这一特性 。为此,它在每次发包时都会计算往返时间及其偏差 。将这个往返时间和偏差时间相加,重发超时的时间就是比这个总和要稍大一点的值 。
  • 在 BSD 的 Unix 以及 Windows 系统中,超时都以 0.5 秒为单位进行控制,因此重发超时都是 0.5 秒的整数倍 。不过,最初其重发超时的默认值一般设置为 6 秒左右 。
  • 数据被重发之后若还是收不到确认应答,则进行再次发送 。此时,等待确认应答的时间将会以 2 倍、4 倍的指数函数延长 。
  • 此外,数据也不会被无限、反复地重发 。达到一定重发次数之后,如果仍没有任何确认应答返回,就会判断为网络或对端主机发生了异常,强制关闭连接 。并且通知应用通信异常强行终止 。
3.5 以段为单位发送数据
  • 在建立 TCP 连接的同时,也可以确定发送数据包的单位,我们也可以称其为“最大消息长度”(MSS) 。最理想的情况是,最大消息长度正好是 IP 中不会被分片处理的最大数据长度 。
  • TCP 在传送大量数据时,是以 MSS 的大小将数据进行分割发送 。进行重发时也是以 MSS 为单位 。
  • MSS 在三次握手的时候,在两端主机之间被计算得出 。两端的主机在发出建立连接的请求时,会在 TCP 首部中写入 MSS 选项,告诉对方自己的接口能够适应的 MSS 的大小 。然后会在两者之间选择一个较小的值投入使用 。
3.6 利用窗口控制提高速度
  • TCP 以 1 个段为单位,每发送一个段进行一次确认应答的处理 。这样的传输方式有一个缺点,就是包的往返时间越长通信性能就越低 。
  • 为解决这个问题,TCP 引入了窗口这个概念 。确认应答不再是以每个分段,而是以更大的单位进行确认,转发时间将会被大幅地缩短 。也就是说,发送端主机,在发送了一个段以后不必要一直等待确认应答,而是继续发送 。如下图所示:
    窗口控制
  • 窗口大小就是指无需等待确认应答而可以继续发送数据的最大值 。上图中窗口大小为 4 个段 。这个机制实现了使用大量的缓冲区,通过对多个段同时进行确认应答的功能 。
3.7 滑动窗口控制

tcp网络协议详细讲解 tcp ip协议


滑动窗口
  • 上图中的窗口内的数据即便没有收到确认应答也可以被发送出去 。不过,在整个窗口的确认应答没有到达之前,如果其中部分数据出现丢包,那么发送端仍然要负责重传 。为此,发送端主机需要设置缓存保留这些待被重传的数据,直到收到他们的确认应答 。
  • 在滑动窗口以外的部分包括未发送的数据以及已经确认对端已收到的数据 。当数据发出后若如期收到确认应答就可以不用再进行重发,此时数据就可以从缓存区清除 。
  • 收到确认应答的情况下,将窗口滑动到确认应答中的序列号的位置 。这样可以顺序地将多个段同时发送提高通信性能 。这种机制也别称为滑动窗口控制 。
3.8 窗口控制中的重发控制
在使用窗口控制中,出现丢包一般分为两种情况:

推荐阅读