计算机网络——运输层

运输层位于应用层与网络层之间,是分层网络体系结构的重要组成部分。
 
运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信,使得在应用进程的角度看,运
行不同进程的主机好像直接相连。应用进程使用运输层提供的逻辑通信功能彼此发送报文,而无
需考虑这些报文的物理基础设施的细节。下文主要介绍两个运输层协议: UDP 与 TCP,通过比较
它们的异同,来说明它们各自的特点。
 
以两台主机之间通信为例,当我们只讨论运输层时,我们可以看到运输层在发送端将从应用进程
接收到的报文转换成运输层分组(即报文段),再将这些报文段传递给网络层;在接受段,网络层
从数据报中提取运输层报文段,并将该报文段交给运输层,运输层则处理收到的报文段,使报文
段中的数据为接收端的应用进程使用。
    
   
    在整个过程中,我们应该思考以下这些问题,并且下文将会通过这些问题来介绍运输层。
       
        1.报文为什么要转换为报文段?
        2.UDP、TCP的优缺点?
        3.采用不同运输层协议时,报文段的格式有何区别?
        4.通过何种机制来实现TCP、UDP各自的功能?
        5.UDP、TCP各自适合哪种网络应用场景?
       
运输层的多路复用与多路分解————数据在应用层与运输层间的传递
   
    在叙述数据在应用层与运输层间的传递之前,我们需要先了解什么是 套接字
       
        套接字SOCKET:它相当于从网络向进程传递数据和从进程向网络传递数据的门户,在主
        机的运输层中,实际上并没有直接将数据交付给进程,而是将数据交给了中间的一个套
        接字,再通过该套接字将数据交给该套接字对应的进程。任意时刻,每个主机可能有多
        个套接字,但每个套接字都有唯一的描述符。
       
        
       
    多路复用:在源主机从不同套接字中收集数据块,并为每个数据封装上首部信息从而生成报
    文段,然后将报文段传递到网络层
       
        首部信息:
            源端口号字段、目的端口号字段、其他首部字段(具体见下文UDP、TCP报文段结构)
           
            端口号:一个16比特的数,其大小在0-65535之间
                具体介绍:https://blog.csdn.net/zuyi532/article/details/7731617
   
    多路分解:将运输层报文段中的数据交付到正确的套接字

无连接运输:UDP
    UDP只提供了运输层协议能够提供的最低限度的功能,除了复用、分解功能及少量的差错检
    测外它几乎没有对IP增加别的东西
   
        UDP作用过程:UDP从应用进程得到数据,附加上用于多路复用、分解所需的源和目
        的地端口号字段,以及两个其他的小字段,然后将形成的报文段交给网络层。
       
        UDP报文结构:
            
           
            UDP校验和:用于确定UDP报文段从源到目的地的移动时,其中比特是否发生了改变
                具体介绍:www.cnblogs.com/noble/p/4144139.html
               
            UDP为何提供校验和?
              
               端到端原则:与在较高级别提供某些功能相比,在较低级别上设置的功能可能是
               冗余的或几乎没有价值。
       
    优点:
        1.关于何时、发送哪些数据的应用层控制更为精细
        2.无需建立连接,因此UDP没有建立连接的时延       
        3.无连接状态,减少使主机开销
        4.分组首部开销小
       
    缺点:
        1.UDP没有拥塞控制,可能导致发送方和接收方之间的高丢包率
        2.不保证数据传输的可靠性(UDP应用可以通过在应用程序自身中建立可靠性机制来完成
          可靠的数据传输)   
         
         
面向连接的运输:TCP
    TCP特点:
        1.面向连接
        2.全双工
        3.提供可靠数据传送
        4.拥塞控制
       
    TCP被称为是面向连接的,这是因为在一个进程可以向另一个进程发送数据之前,这
   两个进程必须向相互“握手”,即相互发送某些预备报文段,以确定数据传输的参数。
  
  全双工:如果一台主机上的进程A与另一台主机上的进程B之间存在一条TCP连接,那
  么应用层数据就可以在进程B流向进程A的同时,也从进程A流向进程B  
    
  TCP传输数据的过程:
  
  一旦建立起一条TCP连接,两个应用进程之间就可以相互发送数据,进程通过套接字
   递数据流,TCP将这些数据引导进该连接的发送缓存,TCP从发送缓存中取出数据块发送
  
   TCP可以从缓存中取出并放入报文段中的数据数量受限于最大报文段长度MSS,MSS通常
   根据最初确定的由本地发送主机发送的最大链路层帧长度(即最大传输单元MTU)确定
  
   需要注意的是MSS是指报文段中应用层数据的最大长度而不是指包括TCP首部的TCP报文
   段的最大长度
   
      
    TCP连接的建立与终止,在TCP连接终止后,主机中的资源(缓存、变量)都将被释放  
    
     
         
          
    
   TCP报文结构:
       
      
   在上图中,我们可以看到TCP报文首部中两个最重要的字段是序号字段和确认号字
    段,若果主机A向主机B发送一个TCP报文段,主机A填充进报文段的确认号是主机A
    期望从主机B收到的下一字节的序号。
      
   TCP的可靠数据传输服务确保一个从其接受缓存中读取的数据流是无损坏、无间隔、
   非冗余和按序的数据流,即该字节流与连接的另一端系统发出的字节流时完全相同
    那么TCP如何提供可靠地数据传送服务?
   
    TCP采用超时/重传机制来处理报文段的丢失问题,那么应该如何设置超时时间?
    而TCP又是如何知道丢失了哪些报文段?   
   
    我们可能会想到,如果我们可以为每一个已发送但未被确认的TCP报文段设置一个
    定时器,这样在判断超时时就会十分方便,但定时器的管理需要相当大的开销,因
    此TCP在超时管理时仅使用单一的重传定时器,即使有多个已发送但未被确认的报
    文段。TCP发送方维持一个状态变量SendBase,这是最早已发送未被确认的字节的
    序号。
   
    TCP接收方只确认已收到的数据流中至第一个丢失字节为止的字节,所以TCP被称为
    提供累积确认
   
    TCP将ACK的值y与SendBase比较,来确认是否超时。
   
    TCP超时重传机制具体可参考:https://blog.csdn.net/wdscq1234/article/details/52476231
   
    TCP拥塞控制:
   
    TCP使用端到端拥塞控制,让每一个发送方根据感知到的网络拥塞程度来限制其能向
    连接发送流量的速率。
   
    1.当TCP发送方出现丢包事件(出现超时或收到接收方的三个冗余ACK)时,发送方就认
    为在发送方到接收方的路径上出现了拥塞指示,此时应当降低减小发送方的速率
    2.当对先前未确认报文段的确认到达时,能够增加发送方的速率
   
    TCP拥塞控制算法:
       
        慢启动:TCP发送速率起始慢,但在慢启动阶段以指数级增长
        拥塞避免:一旦进入拥塞避免状态,即很快可能拥塞
        快速恢复
       
        TCP拥塞控制算法详述:http://www.cnblogs.com/fll/archive/2008/06/10/1217013.html   
              
   
UDP、TCP各自的应用场景:
   
    UDP:DNS、远程文件服务器、网络管理、多媒体应用
   
    TCP:电子邮件、远程终端访问、Web、文件传输、多媒体应用       
   
全面了解运输层及各种运输层协议,可以阅读这本书:《Unix网络编程》,想要了解这本书,
你可以点击下面的链接:https://book.douban.com/subject/1500149/
   
posted @ 2018-05-13 11:49  荒唐了年少  阅读(671)  评论(0编辑  收藏  举报