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

6.1传输层概述

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

6.1.1 传输层概述

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

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

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

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

6.1.3 传输服务原语

6.2 传输协议的要素

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

6.2.1 寻址

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

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

6.2.2 传输建立(连接建立)

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

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

首先考虑上图的情况。主机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)

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

非对称释放

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

对称释放

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

6.2.3 差错控制&流量控制

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

差错控制:确保数据传输具备可靠性(所有的数据被无差错的传输至目的地)

流量控制:防止快速发送端淹没慢速接收端

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

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

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

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

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

6.3 传输层拥塞控制

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

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

6.3.1 最大-最小公平

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

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

6.3.2 调整发送速率

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

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

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

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

\[x+y<=C
\]

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

\[x-y=0
\]

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

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

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

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

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

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


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

传输层-Transport Layer(上):传输层的功能、三次握手与四次握手、最大-最小公平、AIMD加法递增乘法递减的更多相关文章

  1. 传输层-Transport Layer(下):UDP与TCP报头解析、TCP滑动窗口、TCP拥塞控制详解

    第六章 传输层-Transport Layer(下) 上一篇文章对传输层的寻址方式.功能.以及流量控制方法做了简短的介绍,这一部分将介绍传输层最重要的两个实例:TCP协议和UDP协议,看一看之前描述的 ...

  2. 计算机网络自顶向下方法第3章-传输层 (Transport Layer).2

    3.5 面向连接的运输: TCP 3.5.1 TCP连接 TCP是因特网运输层的面向连接的可靠的运输协议. TCP连接提供全双工服务(full-duplex service). TCP连接是点对点的连 ...

  3. 计算机网络自顶向下方法第3章-传输层 (Transport Layer).1

    3.1 概述和运输层服务 运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信(logic communication)功能. 3.1.1 运输层和网络层的关系 网络层提供了主机之间的逻辑通信,而 ...

  4. 层定位layer

    一.如何实现层定位position属性 二.相对定位relative 三.绝对定位absolute 四.元素堆叠z-index 一.实现层定位的方法 position属性实现层定位,把元素分出层次形成 ...

  5. 传输层(一)TCP的三次握手和四次挥手及关闭套接字的原理

    TCP连接需三次握手才能建立,断开连接则需要四次握手. 客户端TCP状态迁移: CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_W ...

  6. 第6章 传输层(详解TCP的三次握手与四次挥手)

    第6章 传输层 传输层简介 传输层为网络应用程序提供了一个接口,并且能够对网络传输提供了可选的错误检测.流量控制和验证功能.TCP/IP传输层包含很多有用的协议,能够提供数据在网络传输所需的必要寻址信 ...

  7. jQuery layer弹出层插件 http://layer.layui.com/直接上官网学

    在许多网站中,经常用到弹出层,有时候为了达到更好的用户体验,你将写繁琐的css跟js,这款 jquery-layer可以让你想到即可做到的web弹窗/层js组件.layer侧重于用户灵活的自定义,为不 ...

  8. 计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接建立---三次握手、tcp连接释放---四次握手)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105516090 学习课程:<2019王道考研计算机网络> 学习目的 ...

  9. Secure Sockets Layer(安全套接层)

    SSL SSL(Secure Sockets Layer安全套接层)及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议.TL ...

随机推荐

  1. Ceph编译加速的小技巧

    总结了几个小技巧,用于在ceph编译过程中,能够更快一点 修改clone的地址 git clone https://github.com/ceph/ceph.git 可以修改成 git clone g ...

  2. DNS系列—DNS简介

    DNS是什么? 如果了解互联网主机之间是用IP地址来进行通信的话,有了这个认识的前提,我们来聊一下什么是DNS.一个IP地址有十几个字符那么长,和手机号码长度差不多,我们怎么记住这些我们想要访问的主机 ...

  3. Python爬虫实现翻译功能

    前言 学了这么久的python理论知识,需要开始实战来练手巩固了. 准备 首先安装爬虫urllib库 pip install urllib 获取有道翻译的链接url 需要发送的参数在form data ...

  4. Linun中配置redis密码

    这里以linux服务器为例,为redis配置密码. 1.第一种方式 (当前这种linux配置redis密码的方法是一种临时的,如果redis重启之后密码就会失效,) (1)首先进入redis,如果没有 ...

  5. redis面试问题(一)

    五大常用数据类型 redis与其他缓存的比较 rdb和aof 主从复制,读写分离,哨兵机制 -------------------------------- 1.为什么使用redis (一)性能 我们 ...

  6. 微前端大赏二-singlespa实践

    微前端大赏二-singlespa实践 微前端大赏二-singlespa实践 序 介绍singleSpa singleSpa核心逻辑 搭建环境 vue main react child 生命周期 结论 ...

  7. PADS CAM光绘输出文件设置

    PADS CAM光绘输出文件设置 在使用PADS完成电路板的设计后,通常还需要在CAM350中经过一些处理生成Gerber文件,交给制板厂商进行电路板的生产,这就要求在PADS中设置生成CAM文件,然 ...

  8. 使用Git,10件你可能需要“反悔”的事

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师.官方网站:devui.designNg组件库:ng-devui(欢迎S ...

  9. Spring Cloud 学习 (六) Spring Cloud Config

    在实际开发过程中,每个服务都有大量的配置文件,例如数据库的配置.日志输出级别的配置等,而往往这些配置在不同的环境中也是不一样的.随着服务数量的增加,配置文件的管理也是一件非常复杂的事 在微服务架构中, ...

  10. Kafka探究之路-命令小结

    操作kafka之前,要先启动安装好的zk ,因为kafka的数据都保存在zk中,zk相当于是kafka的数据库吧. 安装的zk kafka 一定要按照书上,网上的教程,将相应的配置文件全部改成自己的, ...