对ns项目有帮助的一些TCP知识总结

  今天回顾了一下和项目有关的一些TCP知识,熟悉这些时候后再去看ns的源码,发现事半功倍...这里,总结一下这些TCP的知识点:

1. 流交付服务
  TCP是一种面向流的协议,它允许进程以字节流的形式来传递数据,而接收进程也把数据作为字节流来接受;
  在接收端和发送端都有缓存的设置。处理发送进程和接收进程在速度上的差异可以使用缓存;
  IP层作为TCP的服务提供者,发送数据时需要以分组为单位,而不是按字节流来发送。这时候在运输层,TCP把若干字节构成一个分组,叫做报文段(segment)。TCP给每一个报文段添加首部,然后把这个报文段交付给IP层传输,这些报文段在封装成IP数据报后就被发送出去。

2. 编号系统
  TCP把一个连接中发送的所有 数据字节都编上号;
  TCP给每一个报文段指派一个序号,每个报文段的序号就是在这个报文段中的第一个字节数据的序号。
  如果报文段不携带用户数据,它从逻辑上讲不定义序号。但是此时,序号字段是存在的。某些仅携带信息的报文段需要有一个序号,以便从接收端得到一个确认。

3. 流量控制
  和UDP不同,TCP提供流量控制。数据的接收端控制发送端可以发送多少数据。这是为了避免大量的数据使接收端瘫痪。
  流量控制对源点在收到从终点发来的确认之前可以发送的数据量进行管制。TCP采用这样一种方法,它在缓存上定义一个窗口,发送数据的多少由这个滑动窗口协议定义。这个窗口覆盖了缓存的一部分, 在这个窗口中的数据字节就是可以发送而不必考虑确认的。
 
4. 差错控制
  虽然差错控制把一个报文段看作是差错检测的数据单元(报文段丢失或受损伤),但差错控制实际上是 面向字节的
  差错控制包括以下机制:检测受到损伤的报文段、丢失的报文段、失序的报文段和重复的报文段。差错控制还包括检测出差错后纠正差错的机制。
  数据可能不按序到达,接收TCP把它们暂时存储下来,但TCP保证没有失序的报文段被交付到进程。

5. 拥塞控制
  TCP提供在网络中的拥塞控制。发送端所能发送的数据量不仅要受接收端的控制(流量控制),而且还要受网络的拥塞程度来决定。发送端滑动窗口的真正大小是接收端通告的窗口大小和拥塞窗口大小中较小的一个。
  大多数的实现对拥塞检测的反应不一样:
     如果是用超时检测到拥塞,那么就开始一个新的慢开始阶段;
     如果是用3个重复的ACK检测到拥塞,那么就开始一个新的拥塞避免阶段。

6. TCP的计时器

  重传计时器:
      RTT:往返时间。注意,zai TCP中,在任何时刻,只能有一个正在进行的RTT测量。这就是说,如果RTT的测量开始了,那么在这次的RTT测量结束之前,不能再开始进行其他的测量。用RTTm表示当前测量的RTT。
           平滑的RTT:
                      最初  ——>  没有数值
                  第一次测量后  ——>   RTTs = RTTm
               其他任何次测量后  ——>  RTTs = (1-α)RTTs + α*RTTm
               α的数值与实现有关,但通常置为1/8。
          RTT的偏差:
                   最初  ——>  没有数值
                  第一次测量后  ——>  RTTd = RTTm/2
               其他任何次测量后  ——>  RTTd = (1-β)RTTd + β*|RTTs - RTTm|
               β的数值与实现有关,但通常置为1/4。
            重传超时(RTO)的数值基于平滑的往返时间及其偏差:
                      最初  ——>  初始值
                  任何次测量后  ——>  RTO = RTTs + 4*RTTd
         注意:RTT在计算新的RTO时不考虑重传报文段的RTT。(Karn算法)
   如果发生了重传,每产生一次重传,RTO的数值就加倍。

  持久计时器:(persistence timer)
       当发送端收到窗口值为0的确认时,就启动持久计数器。

  保活计时器: (keepalive timer)
       每当服务器收到客户的信息,就把计数器复位。

  TIME-WAIT计数器:
       是在连接终止期间使用的。
 

猜你喜欢

转载自chrisongs.iteye.com/blog/830850
今日推荐