zoukankan      html  css  js  c++  java
  • 传输层-Transport Layer(上):传输层的功能、三次握手与四次握手、最大-最小公平、AIMD加法递增乘法递减

    第六章 传输层-Transport Layer(上)

    6.1传输层概述

    在之前的几章内容中,我们自底向上的描述了计算机网络的各个层次,还描述了一些处于不同层次下的经典网络协议(如以太网、无线局域网、或者因特网)。现在我们将把视野放在传输层,看看这一层的的协议提供了怎样的服务、以及他们是如何实现的。由于传输层的内容也比较多,所以也会拆分成两篇来写。这一篇文章会介绍一下传输层的功能、提供给上层的服务,以及传输层是如何完成差错控制、流量控制、拥塞控制等任务的。

    image-20201130223407352

    6.1.1 传输层概述

    在网络层,我们使用VC和Datagram实现了链路上的通信;而传输层把传输服务扩展到了存在于两台计算机的进程上(provides end-to-end delivering),并强调提供一种可靠的跨网络传输方法。传输层的任务主要是:1.接收应用层的数据(并有可能需要切分成小段);2.发送数据段segment;3.区分属于不同进程的segment

    image-20201130223416156

    同时,传输层还决定了究竟提供哪种类型的服务。如果应用层不需要一种可靠的数据流(比如斗鱼一类的视频直播,就算有几帧帧画面的数据发生了错误也无伤大雅),那么传输层向网络层发送的数据就不会设计过多的差错控制及确认机制以节省资源;而反过来,如果应用层需要一种可靠的无错信道(虽然现实中不可能完全不出错),那么传输层发送给网络层的段就会包含序列号以保证顺序、ACK机制以应对丢包发生...此外,传输层还需要继续考虑拥塞控制的问题,因为仅仅凭借网络层是无法彻底解决网络拥塞的。

    6.1.2 传输层提供给上层的服务

    • 提供了面向连接的服务(如TCP)与无连接(如UDP)的服务

    6.1.3 传输服务原语

    image-20201201202034298

    6.2 传输协议的要素

    这部分将描述一些传输协议的要素(比如传输层如何寻址或者进行流量控制),为后面介绍TCP、UDP做好铺垫。但是这些要素并不是全部出现在传输层的所有协议之中。比如UDP协议就没有连接建立的过程。

    6.2.1 寻址

    传输服务的访问点:端口(port)

    相对应的,网络层服务的访问点可以理解成:IP地址

    6.2.2 传输建立(连接建立)

    连接建立的过程是一个很经典的三次握手的过程。如下。

    image-20201201210722137

    简单的三次握手其实包含了很多考量,如在连接建立时发送的序列号(是为了防止早先发送的数据包超时到达导致重复接受),以及设置的计时器,等等。主机发送一个连接建立请求(CR),接收方收到后返回一个ACK表示已经收到,并返回一个自己的起始需要y(Host2的后续数据包将从y开始发送),最后主机一把对于这一消息的确认夹带在需要发送的数据中。下面我们考虑几种特殊的情况(其实在实际的操作过程中是很容易发生的)

    image-20201201212125705

    首先考虑上图的情况。主机1在很久之前向主机2发送了一个连接请求,而当这个请求真正到达的时候H1已经不再需要这个连接了。在这种情况下,尽管主机2并不知道到达的这个请求是否是真心实意的需要建立,H2仍旧可以通过确认机制实现对于数据包的判断(如,H1已经不需要这个连接,就会向H2发送拒绝的数据)

    在下图这种情况中,H1所发送的超时CR和超时DATA同时存在于网络中。当H2收到一个请求后,照常发出一个ACK等待H1开始发送数据(此时H2并不知道这是一个已经过期的请求)。而下一刻,当超时的DATA数据包也到达H2,H2经过判断发现这个数据包的ACK和自己发送的确认序列号不符(y和z),所以判断出这是一个超时的数据包,继续等待H1的回复。

    总而言之,在传输层,三次握手的存在使得老的段的任何组合都不会让协议失败,主机间也不会出人意料的建立一个连接

    6.2.3 连接释放(2)

    连接释放的问题相对复杂。一个典型的例子是两军对垒问题(感兴趣的同学可以搜索一下,这里不再花费大量篇幅展开)。总之,不存在一种两方都完全确认并做好准备的释放连接。现在的释放连接方法分成两种,对称释放与非对称释放

    image-20201201215820238

    非对称释放

    例如电话,在一方挂机之后连接直接断开

    对称释放

    将一个连接看成是两个单向的连接,需要分别单独释放。

    6.2.3 差错控制&流量控制

    在之前的内容里,我们已经讨论过链路层和网络层的流量控制。

    差错控制:确保数据传输具备可靠性(所有的数据被无差错的传输至目的地)
    流量控制:防止快速发送端淹没慢速接收端

    这两个问题已经在链路层考察过,而在传输层,我们采用了和链路层基本一致的解决方案,即:

      1. 帧中携带一个验错码(如CRC或者checksum),在接收端检测信息是否正确。
      1. 使用自动重复请求(ARQ)
      1. 使用停-等式协议
      1. 使用滑动窗口

    6.2.4 多路复用(可以解决地址匮乏问题!!!!

    除了在网络层讲到了的三种解决方案之外,在传输层还有一个方法可以用于缓解地址匮乏问题,那就是多路复用(multiplexing)。

    image-20201201223636997

    上图中左图使用的方法就是多路复用。同一个地址上到达的端,分给不同的进程(前面已经讲过传输层和网络层接入点的问题)。相对应的,另一种方法称为逆向多路复用,即把一个连接的流量分给多条路径。通过逆向多路复用,传输层可以合并多条低速链路,把他们当作一条高速链路来使用。

    6.3 传输层拥塞控制

    如果读者还能想起来,在网络层中,我们说到拥塞控制需要网络层与传输层的共同努力。下面的内容将解释传输层如何进行拥塞控制

    拥塞控制的唯一途径就是减少传输层向下发送数据包的速度

    6.3.1 最大-最小公平

    image-20201201225303356

    上图很形象的阐述了最大最小公平的原则:如果分配给一个流的带宽,在不减少分配给另一个流带宽的前提下,无法得到进一步增长,那么就不分配给这个流更多带宽。

    这个定义绕来绕去不好理解,我们还是用图片来阐释。上图中存在6个路由器、一个工字形的链路以及ABCD四条数据流。我们假设每一段链路的最大上限都是1。任意拿一条流距离,分配给B流的带宽,在不减少其它流的前提下已经无法再进一步增长(比如再R4和R5之间已经达到了瓶颈,不能再增加了)。同理用A流举例来说,尽管在R1R2之间没有到达流量上限,但是A流在R2R3之间已经达到了上限(如果不减少流B就无法进一步增长),全部判断之后,我们可以说这种分配是符合最大-最小公平的。读者可以自行判断一下流C和流D。

    6.3.2 调整发送速率

    然而,单独依靠最大-最小公平仍旧不足以使每个流都公平的分配到最大带宽。下面介绍的内容将是传输层一个重点算法的基础。

    在传输层,发送速率会受到两个因素的影响。分别是流量控制和拥塞控制。当接收端没有足够的缓冲区,据必须进行流量控制;而拥塞控制针对的是网络层容量不足的情况,如下图。

    image-20201202161631678

    加法递增与乘法递减:AIMD-additive increase and multiplicative decrease

    image-20201202162808486

    我们还是通过图片来理解。假设在某一条网络上存在两个用户(或着说,两个数据流)同时需要占用带宽。我们构建一个坐标系,横轴是用户1的实际带宽,纵轴是用户2的带宽,网络的总容量为C。由于两个用户处于一个网络下,易知对于任意的x,y,一定存在:

    [x+y<=C ]

    当x+y=c,这条网络的带宽被全部占满,我们称这条曲线位效率线。同时,对于x和y两个用户来说,为了维持收发速度的公平,两个用户应该能够获取相同大小的带宽,即:

    [x-y=0 ]

    这条线被称作公平线我们把这两条曲线表示在刚刚的坐标系中,他们的交点被称作最优点。这是每一个网络希望达到的理想状态。因此现在的问题是,网络应该采取何种策略,到达之前所说的公平点呢?我们给出的答案称作加法递增与乘法递减控制法

    所谓加法,指的是同时增加或减少用户1和用户2 的带宽;而所谓乘法,指的是按照比例改变用户1和用户2的带宽。可想而知,如果在图像上表示这两种更改方式,加法一定是一条斜率为1的直线,乘法一定是一条过原点的直线。

    而之所以加法只用在增加,乘法只用在减少,是由于TCP拥塞控制中的稳定性观点:驱使网络拥堵非常容易,而想要使其恢复,则相对困难。因此,递增策略应相对温柔,递减策略应相对积极

    image-20201202165453828

    对于刚才的网络,我们假设当前网络的效率处在A点。(即用户1 的带宽位x1,用户2的带宽为x2)

    image-20201202205405024

    从A点开始,首先进行加法递增(蓝紫色实线)。当X+Y到达1号点,超出了网络的容量之后,网络层会向用户发送一个拥塞信号,这是各个用户开始使用乘法递减原则,共同减少自己占用的带宽,到达2号点(路径为途中红色实线)。反复执行这一流程多次后,系统会慢慢趋近最优点。

    AIMD是TCP采用的拥塞控制法则。但这个法则不是完全的公平。因为TCP每次都要根据往返时间测量值来调整窗口的大小,所以接近主机的连接往往比距离远的连接要获得更多带宽(距离近则往返时间短)。


    到此为止,本章的内容已经全部结束。下一章将继续传输层的下半部分内容,介绍两个传输层的超重要协议:TCP与UDP协议。传送门:传输层(下)

  • 相关阅读:
    Codeforces 376A. Night at the Museum
    Assigning Workstations
    树的直径证明
    Frogger
    Circle
    HDU 1022 Train Problem I
    Argus
    树状数组总结
    C++ 容器(一):顺序容器简介
    C++ 输出缓冲区的管理
  • 原文地址:https://www.cnblogs.com/maomaozi/p/14111386.html
Copyright © 2011-2022 走看看