您的位置:首页 > 其它

学习记录——运输层(4)

2016-12-24 17:24 113 查看
所用教材为: 计算机网络(第六版) 谢希仁 编著

TCP的流量控制

  一、利用滑动窗口实现流量控制

            (一)流量控制:让发送方的发送速率不要太快,要让接收方来得及接收。
            (二)利用滑动窗口机制实现:
                      


         (三)为解决可能出现的死锁局面,需要持续计时器
                     TCP为每一个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。
                     


      (四)必须考虑传输效率

TCP的拥塞控制

   一、拥塞控制的一般原理

             (一)什么是拥塞?

                        在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。

             (二)出现拥塞的条件

                        对资源的需求>可用资源

             (三)拥塞产生的原因

                          (1)某个节点的缓存容量太小,分组被丢弃
                          (2)处理机速度太慢。
                          (3)会恶性循环

            (四)关于拥塞控制

                           (1)拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
                           (2)拥塞控制的前提:网络能够承受现有的网络负荷。
                           (3)拥塞控制是一个全局性的过程。

            (五)拥塞控制所起的作用

                             


  二、几种拥塞控制方法

(一)慢开始和拥塞避免

           慢开始

          (1)拥塞窗口:
                      1、  由发送方维持
                      2、  大小取决于网络的拥塞程度,并且动态地在变化。
                      3、  发送方让自己的发送窗口等于拥塞窗口。
         (2)发送方控制拥塞窗口的原则:
                        只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。
                        但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
         (3)慢开始算法的原理
                   1、在主机刚刚开始发送报文段时可先设置拥塞窗口cwnd=1,即设置为一个最大报文段MSS的数值。
                   2、每接收到一个新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值
                   3、用这样的方法逐步增大发送方放的拥塞窗口cwnd,可以使分组注入到网络中的速率更加合理。
         (4)慢开始算法举例:
            


                 
           ①使用慢开始算法后,每经过一个传输轮次,拥塞窗口 cwnd 就加倍

           ②一个传输轮次所经历的时间其实就是往返时间 RTT

           ③“传输轮次”更加强调:把拥塞窗口cwnd 所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认

           ④例如,拥塞窗口 cwnd = 4,这时的往返时间 RTT 就是发送方连续发送 4 个报文段,并收到这 4 个报文段的确认,总共经历的时间

           ⑤慢开始的慢指:从cwnd=1开始,而非cwnd的指数增长速度,逐步试探网络是否出现拥塞情况

      (6)慢开始门限状态变量 ssthresh

                设置的目的:为防止拥塞窗口cwnd增长过大引起网络拥塞

                用法:

                          当cwnd<ssthresh时,使用上述慢开始算法。

                          当cwnd> sstresh时,停止使用慢开始算法而该用拥塞避免算法

                          当cwnd = sstresh时,可以使用慢开始,也可以使用拥塞避免。

       拥塞避免

       (1)拥塞避免的思路: 
               让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RRT就把发送方的拥塞窗口cwnd加1,而不是加倍
                这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率慢得多。

      网络出现拥塞

       (1)无论在慢开始还是在拥塞避免阶段,只要发送方判断网络出现拥塞(根据就是没有按时收到确认),就要把慢开始门限sstresh设置为出现拥塞时的发送窗口值的一半(但不能小于2)。
       (2)然后把拥塞窗口cwnd重置为1,执行慢开始算法
       (3)目的是迅速减少主机发送到网络的分组数,使得发生拥塞的路由器有足够的时间把队列中积压的分组处理完毕。  

 慢开始和拥塞避免算法的实现举例

      


         拥塞窗口增加到24时,网络出现超时(这很可能是网络发生拥塞了)。更新后的ssthresh值变为12.
       (1)乘法减小:
                 不论在慢开始阶段还是在拥塞避免阶段,只要出现超时(即很可能出现了网络拥塞),就把慢开始门限值减半,即设置为当前拥塞窗口的一半。
                  与此同时,执行慢开始算法
                  当网络中频繁出现拥塞时,ssthresh值就下降的很快,大大减小注入到网络中的分组数
       (2)加法增大
                 指执行拥塞避免算法后,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。

强调:

       拥塞避免并非指完全能够避免了拥塞。拥塞避免是说在拥塞避免阶段将拥塞窗口控制为按线性增长,使网络比较不容易出现拥塞。

(二)快重传和快恢复

   快重传算法

      (1)要点:
             1、要求接收方每收到一个失序的报文段后就立即发出重复确认,以让发送方及早知道有报文段没有到达接收方。
             2、发送方只要一连收到3个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待为丢失帧(下图M3)设置的重传计时器到期。
      (2)举例
              


   快恢复算法

   (1)要点:
           1、当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把慢开始门限ssthresh减半。但不执行慢开始算法
           2、由于发送方现在认为网络很可能没有发生拥塞(如果网络出现了严重拥塞,就不会有一连好几个报文段连续到达接收方,也就不会导致接收方连续发送重复确认)
                 因此不执行慢开始算法(即拥塞窗口cwnd不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半之后的数值
                 然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

  快重传和快恢复的示意图

           从连续收到三个重复的确认转入拥塞避免
   


     在采用快恢复算法时,慢开始算法只是在TCP连接建立时和网络出现超时时才使用

发送窗口的上限值

    


  三、随机早期检测RED

TCP的运输连接管理

关于管理

   (一) 运输连接的三个阶段:

              连接建立、数据传送、连接释放
              运输连接管理就是使运输连接的建立和释放都能正常地进行。

   (二)TCP连接建立过程要解决的三个问题

             (1)要使每一方能够确知对方的存在
             (2)要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项及服务质量等)
             (3)能够对运输实体资源(缓存大小、连接表中的项目等)进行分配

   (三)TCP连接的建立采用客户服务器方式

             主动发起连接的应用进程是客户
            被动等待连接的应用进程叫服务器

一、TCP的连接建立

   (一)三次握手

       


        (1)假定主机运行的是TCP客户程序,而B运行TCP服务器程序。最初两端的TCP进程都处于CLOSED状态

        (2)A 的 TCP向B发出连接请求报文段,

                其首部中的同步位 SYN= 1,并选择序号seq= x,表明传送数据时的第一个数据字节的序号是 x。

        (3)B 的 TCP收到连接请求报文段后,如同意,则发回确认。

                   B 在确认报文段中应使SYN= 1,使ACK= 1, 其确认号ack= x + 1,自己选择的序号seq= y。

        (4)A收到此报文段后向B给出确认,

                  其ACK= 1, 确认号 ack= y + 1。
                  A 的 TCP通知上层应用进程,连接已经建立。   

二、TCP的连接释放

  (一)图示TCP连接释放过程:四次握手

               


          数据传输结束后,通信的双方都可释放连接。现在A和B都处于ESTABLISHED状态。
        (1)A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接
        (2)B收到连接释放报文段后即发出确认。
                  然后B进入CLOSED-WAIT状态
                  TCP服务器进程这时应通知高层应用进程,因而从A到B这个方向的连接就释放了,这时的TCP连接处于半关闭状态,即A已经没有数据要发送了,但B若发送数据,A仍要接收
                A收到来自B的确认后,就进入FIN-WAIT-2状态,等待B发出的连接释放报文段
        (3)若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。
                 B发出连接释放报文段。进入LAST_ACK状态,等待A的确认
        (4)A收到B的连接释放报文段后,必须对此发出确认。
                 发出确认报文段,进入到TIME_WAIT状态。但是,现在TCP连接还没有释放掉
        (5)必须经过时间等待计时器(TIME_WAIT)设置的时间2MSL后,A才进入到CLOSED状态。
                 当A撤销相应的传输控制块TCB后,就结束了这次的TCP连接
        (6)B只要收到了A发送的确认,就进入CLOSED状态。
                 同样,B在撤销相应的传输控制块TCB后,就结束了这次的TCP连接。

 为什么需要 时间等待计时器

   (一)为了保证A发送的最后一个ACK报文段能够到达B。因为这个报文段有空不丢失。
   (二)防止“已失效的连接请求报文段”出现在本连接中。

三、TCP的有限状态机

(一)图的介绍

             (1) 每一个方框即TCP可能具有的状态。
             (2)每个方框中的英文字符串是TCP标准所使用的TCP连接状态名。
             (3)状态之间的箭头表示可能发生的状态变迁
             (4)箭头旁边的字,表明引起这种变迁的原因,或表明发生状态变迁后又会出现什么动作。
                             粗实线箭头表示对客户进程的正常变迁
                             粗虚线箭头表示对服务器进程的正常变迁
                             细线箭头表示异常变迁。

(二)TCP的有限状态机(图)

            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: