zoukankan      html  css  js  c++  java
  • 传输层知识总结

    传输层知识总结

    传输层概述:

     为什么要划分传输层?

      既然网络层已经能把源主机上发出的数据传送给目的主机,那么为什么还需要加上一个传输层呢?这就需要我们理解主机用户应用层通信的主体,位于两台网络主机中真正的数据通信主体并不是这两台主机,而是两台主机中的各种网络应用进程.同一时间一台主机上可能有多个进程同时运行,这时候就需要为应用程序提供一个标识,那就是端口.而传输层就是为了提供这种端到端的服务而存在的.下面以一张图来解释.

    同时从图中也可以看出来,IP协议提供了主机之间的逻辑通信.而传输层协议提供的是进程之间的逻辑通信.

    什么是端到端? 和点对点有啥区别?

      "点对点"连接是通信双方直接通过电缆进行的连接,中间没有经过其他任何设备.

      "端到端"连接是两个终端主机之间的连接,这两个终端系统的连接中要经过很多个设备(路由器).

    传输层两个重要的术语:TSAP和TPDU

      TSAP(传输层服务访问点)是上层(应用层)调用下层(传输层)的一个逻辑接口,其实就是我们所说的端口,端口用来标识应用层的进程.

       端口:

          端口用16位二进制来表示,所以共有65535个端口号.

          一般将0~1023号端口分配给一些市面上公用的一些网络协议或应用,这一类端口号的分配被广大使用者所接受,事实上成为了一种标准,称为保留端口.

          剩下的是一般端口,可以自己使用.

      TPDU(传输层协议数据单元)指的是传输层与对等层之间传输的报文,也就是"数据段",其实每一层都有每一层的SAP和PDU.

       

    传输层提供的服务:

      1. 逻辑连接的建立
      2. 传输层寻址
      3. 数据传输
      4. 传输连接释放
      5. 流量控制
      6. 拥塞控制
      7. 多路复用和解复用
      8. 崩溃恢复

    TCP(传输控制)协议     

      TCP协议的特点:

        面向连接的传输协议:数据传输之前必须先建立连接,数据传输完成之后,必须释放连接.

        仅支持单播传输:每条传输连接只能有两个端点,只能进行点对点的连接,不支持多播和广播的传输方式,UDP是支持的.

        提供可靠的交付服务:传送的数据无差错,不丢失,不重复,且顺序与与源数据一致

        传输单位是数据段:每次发送的数据段不固定,受应用层传送报文大小和网络中的MTU(最大传输单元)值大小的影响.最小数据段可能仅有21个字节(其中20个字节属于TCP头部,数据部分仅1字节).

        支持全双工传输:通信双方可以同时发数据和接收数据.

        TCP连接是基于字节流的:UDP是基于报文流的.

      TCP数据报格式:

        

        各字段的具体说明,可以详见这篇博文,内容很多,不想写了.http://www.360doc.com/content/12/1218/10/3405077_254718387.shtml

     TCP套接字(Socket):

         Socket是TCP/IP协议中的叫法,它类似于之前说的TSAP地址,即传输层协议接口,为了区别不同的应用程序进程和连接,一般计算机操作系统都为应用程序与TCP/IP交互提供了套接字(socket)接口.

         注意:Socket与TSAP最大的不同之处就是,TSAP是位于传输层的,而Socket是位于应用层的,但它调用了传输层的端口.

          在应用层上,针对每一个应用进程都有一个Socket,用来调用传输层的一个特定端口,Socket与端口和IP地址是多对一的关系.

      TCP传输连接的建立(3次握手):

        

      TCP传输连接的释放(4次握手):

        

    TCP是如何保证数据可靠性的:

       TCP是一个可以保证可靠数据传输的传输层协议,主要采用采用以下四个机制实现数据可靠性传输:

      1.  字节编号机制:TCP数据段以字节为单位对数据段的"数据"部分进行一一编号,确保每一个字节的数据都可以有序传送和接收.
      2.    数据段确认机制:每接收一个数据段都必须有接收端向发送端返回确认数据段,其中的确认号表示已经正确接收的数据段序号.
      3.    超时重传机制:TCP中有一个重传定时器(RTT),发送一个数据段的同时也开启这个定时器,如果定时器过期之时还没有返回确认,则定时器停止,重传该数据.
      4.  选择性确认机制:(Selective ACK,SACK)/只重传缺少部分的数据,不会重传那些已经正确接收的数据.

    TCP的流量控制:

        需要进行流量控制的原因就是,数据发送的太快,接收端来不及接收而出现的丢包状况.流量控制的目的也就是不要让发送端的发送的数据大于接收端的数据处理能力.

        TCP的流量控制通过滑动窗口机制来进行,窗口的大小的单位是字节.

        在TCP首部有一个窗口字段(见上图TCP首部),这个字段的数值就是给对方设置的发送窗口的上限,发送窗口在连接时由双方商定,但在通信过程中,接收端可以依据自己的资源状况,动态的调整对方发送窗口的值的大小,达到控制的目的.

       

        假设每个字段大小为100字节,当前发送窗口大小是400字节,发送端已经发送了400字节的数据,但是仅收到前200个字节的确认信息,还有200个字节没有发来确认,那么发送窗口当前时刻还能发送300字节,于是发送窗口前移,整个过程如图所示.是一个简单的滑动窗口的情况.

    TCP的拥塞控制:

      什么是网络拥塞呢?我只发图,不说话.

          

    两个方案:慢启动与拥塞避免

         

        "拥塞窗口":是为了避免发生拥塞而设置的窗口,最终发送的字节数是接收端为发送端设置的"发送窗口"和"拥塞窗口"的最小值.

        "慢启动阈值"(SSTHRESH):初始值是64k,即65535个字节,当发生一次数据丢失时,其值变为"拥塞窗口"大小的一半.

        慢启动:

          主机刚开始发送报文段时先将拥塞窗口的大小设置为一个MSS(该连接上当前使用的最大数据段大小).

          每收到一个报文段的确认后,将拥塞窗口增加最多一个MSS的大小.

          以此类推,用这样的方法逐步增大发送端拥塞窗口的大小,使分组注入到网络的速率更加合理.

          直到拥塞窗口的值达到慢启动阈值,这时候"拥塞避免"就发挥作用了.

        拥塞避免:

          该方案不再像慢启动一样以指数速度增长拥塞窗口的大小,而是到达慢启动阈值后,按线性规律增长,是网络比较不容易出现拥塞.


       以上两个方案配合使用,可有效减少网络拥塞的影响,但不能完全避免拥塞情况,后来又提出了"快速重传"和"快速恢复"机制,基本思想是:

          当接收端收到一个不是按3顺序到达的数据段时,迅速发送一个重复ACK数据段,再重复收到3个重复的ACK数据段后,即认为对应"确认号"上的字段已丢失,TCP不等重传定时器失效,就重传已丢失的数据,此为快速重传,同时快速恢复发挥作用,把当前拥塞窗口大小设置为当前慢启动阈值大小的一半,以减轻网络负荷,然后再执行"拥塞避免"....

    UDP协议:

         在一些视频通过,网络电话中,丢失一部分数据,影响并不大,这时候使用UDP协议传输就是一个更好的选择.

      UDP协议的特点:

      1.     无连接性
      2.     不可靠性
      3.     以报文为边界
      4.     无流量控制和拥塞控制方案
      5.     支持但播,组播,广播等多种通信方式

    其他的...就真没啥好说的了.......

     
    分类: 学习笔记
  • 相关阅读:
    自定义组件要加@click方法
    绑定样式
    647. Palindromic Substrings
    215. Kth Largest Element in an Array
    448. Find All Numbers Disappeared in an Array
    287. Find the Duplicate Number
    283. Move Zeroes
    234. Palindrome Linked List
    202. Happy Number
    217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/5415437.html
Copyright © 2011-2022 走看看