Advertisement

计算机网络 自顶向下(3)传输层——学习笔记

阅读量:

· 概述和传输层服务:

· · 传输服务:

· · 传输层在两个远程进程 之间进行报文段逻辑通信

· · · 传输层协议运行在端系统:

发送方:将应用层的报文划分为若干个独立的报文段,并传输给网络层处理。接收方:将接收到的报文段重组为完整的报文,并进一步传递给应用层进行处理。

· · · 可选协议:

· · · Internet:TCP和UDP

· · 传输层与网络层的工作对比:

· · 网络层服务:主机之间的逻辑通信。
· · 传输层服务:进程之间的逻辑通信。

· · · 传输层依赖于网络层提供的服务:

在网络层中处理的数据块可能存在损坏(data corruption)、延迟(latency)或顺序被打乱(out-of-order delivery)的风险,并因此导致不可靠的传输问题。为此类不可靠传输特征进行强化的是传输层协议。
通过协议机制确保这些关键特性得到处理:
例如信息损坏(data corruption)、信息顺序被打乱(out-of-order delivery)以及加密通信(encrypted transmission)。而对于不可靠传输的特征如传输延迟(transmission delay)和带宽限制(bandwidth constraint),网络层无法进行强化。

· · Internet传输层协议:

· · · TCP:

· · · 多路复用、解复用;拥塞控制;流量控制;建立连接;可靠的、保序的。

· · · UDP:

· · · 不可靠且不保持顺序;允许多路复用和解码复用;未对IP服务增加其他相关服务。

· 多路复用、解复用:

在发送方主机上实施多路复用技术时,则会从多个网络通道接收来自不同进程的报文数据,并根据各套接字对应的IP地址及端口号等关键信息设置头信息字段(该字段内容主要用于实现数据解复用)。当处理数据传输时,则会首先将原始数据拆分成若干个独立的报文段,并对每个报文段前附加包含对应进程所属端口信息以及目标端口配置的信息字段;随后将经过字段封装的数据块、源系统IP地址标识及目标系统IP地址标识一并传递至网络层,在此层次则完成进一步的数据封装并发送出去。

通过多路复用技术在接收端主机进行处理,并依据报文头中的目标IP地址以及指定端口号码对接收到的数据进行分析与处理。
当接收方网络层检测到一个IP数据报到达时,在处理该数据包的过程中需要完成多个步骤:首先提取并解析出该数据包中所包含的关键信息;其次,在确定目标服务的位置后将其相关的数据发送至运输层;最后由 transport 层根据这些配置参数确定最终的数据流向。

· · 多路解复用原理

· 主机接收到来自网络的IP数据报。
· 每个数据包都包含源节点的IP地址和目标节点的IP地址。
· 每一个接收的数据包中都有一个对应的传输层协议的数据分段。
· 每一传输层的数据分段都包含指定的源端口与目标端口信息;其中一些应用如Web服务通常使用预定义的标准端口。
· 通过结合IP地址与指定的本地与远程端口信息,主机向相应的网络接口发送该传输层的数据分段。

在这里插入图片描述

· 无连接传输:UDP(User Datagram Protocol)

· UDP发送端与接收端之间未建立数据传输连接
· 所有UDP报文块均被单独处理
· 未实施拥塞控制和流量管理机制
· 报文段头部较小且占用了少量计算资源且消耗较少的带宽

· · UDP数据报的格式:

在这里插入图片描述

· · UDP校验和(EDC):

为了识别传输报文中可能出现的差错(例如bit翻转),我们采用了如下机制进行检测。

在数据发送端(发送方),我们将整个报文数据划分为一个个16位整数块,并对这些整数块进行累加运算;随后对累加结果执行取反操作以获得最终的校验码;然后将该校验码值安全地嵌入到UDP协议指定的校验字段中以完成数据传输过程。

接收端则通过以下步骤进行数据完整性验证:首先计算接收到的所有报文块所对应的校验码总和,并将其与UDP协议中的官方校验码字段值进行对比;如果两者不一致,则判定传输过程中存在差错;反之则表明传输过程基本无误,但不排除由于某些偶然因素导致未能完全消除所有的传输误差(即所谓的"莫名其妙的错误")。

· · · 例:

· · · 当两个或多个数字相加时,在最高位发生进位的情况下,请将最高位置于最低位(即将其再加入结果中称为进位回卷)。
· · · 在接收端,请计算校验和(即校验字段之值)与其对应位置上数据之总值(其反码称为校验范围总值)。如果该总值的所有二进制位均为1,则表明检验过程获得成功。

在这里插入图片描述

· 可靠数据传输(RDT)的原理:

信道作为通信渠道而言,在其运行过程中表现出不稳定性特征,并且反映出可靠数据传输协议(RDT)所具有的复杂特性。

· · 函数定义:

· rdt_send(): 由上层(如应用层)发起请求, 将数据传输给发送实体。
· udt_send(): 由RDT负责, 将分组发送到不可靠信道以实现通信。
· deliver_data(): 负责将数据传递给应用层以完成任务。
· udt_rcv(): 在接收到分组时被触发, 实现接收方的数据接收功能。
· rdt_rcv(): 表示接收方已成功接收报文段, 可用于状态机状态判断。
· extract(): 实现接收方对报文段中数据包的解封与提取功能。
· corrupt(): 表示接收到的数据报出现传输错误现象。
· notcorrupt(): 表示接收到的数据报传输过程无误, 可用于验证逻辑判断。
· has_seq0(): 在当前事件中接收到的分组序列号必须为0序列号。
· 使用有限状态机(FSM)来描述发送方与接收方的行为: 每个事件的变化只会导致状态发生单一变化, 无需考虑复杂多态情况。

在这里插入图片描述

· · RDT 1.0:在可靠信道上的可靠数据传输

· 基于下层信道无误传输的情况假设。
· 由发送方发送至下层信道的数据接收方则会接收。
· FSM描述为:

在这里插入图片描述
复制代码
    data为应用传输的数据;
    packet = make_pkt(date)为将数据封装为报文段

· · RDT 2.0:具有bit差错的信道:

在下层信道传输过程中可能存在bit翻转错误,在分组数据传输中可能出现的bit翻转错误可以通过计算校验和的方法有效检测并定位bit传输错误

· · · 出错时的解决方案:

· · · 确认(ACK): 接收方显示地告诉发送方分组已被正确的接收。
· · · 否认(NAK): 接收方显示地告诉发送方分组发生了差错,需要发送方重新发送分组。
· · · RDT2.0中的新机制: 采用差错控制编码进行差错检测;发送方进行差错控制编码、缓存;接收方使用编码检查差错;然后接收方进行反馈:发送控制报文(ACK,NAK)到接收方;然后发送方收到反馈并进行相应的动作。

· · · FSM描述:

在这里插入图片描述

· · · 在无误的情况下操作流程依次是1->4->5
· · · 在发生错误的情况下操作流程依次是1->2->3->4->5
· · · 这里的错误是指发送的数据传输出现了问题

· · · RDT2.0版本的致命缺陷:

· · · 前面讲的是传输数据可能出现差错的情况。
· · · 但返回端的ACK/NAK如果出现差错,则可能导致重复发送和死锁等问题。

· · · RDT 2.1:处理重复、死锁等现象。

在每个数据分组中明确标识其序列号。
当接收端未收到有效的ACK/NBK信号时(即表示传输失败),sender应重新发送该数据包。
若接收端检测到重复的数据包,则丢弃多余副本。
该协议规定:每当sender传输一个数据包后(随后),receiver需进行确认响应。

· · · · 发送方处理出错的ACK/NAK的FSM描述:
在这里插入图片描述
· · · · 接收方处理出错的ACK/NAK:
在这里插入图片描述
· · · · 对上述错误进行分析:

· · · · 发送方:

复制代码
    必须在分组中加入序列号;
    序列号只用0,1便足够了;
    一次只发送一个未经确认的分组;
    必须检查ACK/NAK是否出现错误(用EDC);
    状态数会变为两倍,且必须记住当前分组的序列号为0还是1。

· · · · 接收方:

复制代码
    必须检测接收到的分组是否是重复的;
    状态会指示希望接收到的分组序号是0还是1;
    接收方并不知道发送方是否正确的接收到了ACK/NAK;
· · · · RDT 2.1的运行:
在这里插入图片描述

在收到ACK出现错误的情况下,在线程层中发现该情况后, 发送方将被视为丢弃(NAK), 并重新发送上一个数据包. 需要特别注意的是0/1仅作为序列编号使用, 并不能唯一标识每个数据分组.

· · · RDT 2.2:无NAK的协议:

· · · 功能与RDT 2.1完全一致,在回馈控制报文中仅采用ACK作为反馈机制;

复制代码
    	 一次能够发送多个;
    	 每一个的应答都有:ACK,NCK比较麻烦;
    	 使用对前一个数据分组的ACK,代替本数据单位的NAK;
    	 确认信息减少一半,协议处理简单。
· · · · RDT 2.2的运行:
在这里插入图片描述

· · RDT 3.0:具有bit差错和分组丢失的信道

对于下层信道可能存在分组丢失(数据或确认信息),这可能引发死锁等异常情况。发送方需等待接收方确认信息一段时间(超时时间),其中链路层的超时时间是固定的设置值,而传输层的超时时间是动态调整的。若发送端未收到响应并超时,则会重新发送该数据包。重传操作会导致数据重复出现的问题,并可通过使用序列号机制来解决此问题。接收方需明确确认已正确接收的数据序列号。

· · · RDT 3.0发送方的FSM描述:

在这里插入图片描述

· · · RDT 3 .0运行:

在这里插入图片描述

· · · 即使设置得过早也会正常运行 但其效率相对较低 其中一半的时间用于重复确认操作 因此需要根据具体情况合理设置超时阈值

· · · RDT 3.0的性能:

RDT3.0在正常工作状态下能够完成任务,在传输带宽较大的情况下运行效率较低。当传输带宽较大时,在发送单个PDU时未能有效提升系统的整体传输效率

在这里插入图片描述

· · RDT的流水线:提高链路利用效率:

· 允许发送方在获得对方认可的情况下一次性传输多个数据分组。
· 需要扩展序列号的范围:采用多比特位来表示各分组的序号;
· 为确保数据传输可靠性,在发送端和接收端各自设置缓冲区。

复制代码
    	发送方缓冲:未得到确认,可能需要重传; 
    	接收方缓存:上层用户取用数据的速率≠接收到的数据速率;
    	接收到的数据可能乱序,所以需要排序交付(体现了可靠性)
在这里插入图片描述

· · 有两种通用的流水线协议:回退N步(GBN)和选择重传(SR)。

· · · 滑动窗口(Slide Window)协议:

· · · · 发送缓冲区:

内存中的一块区域用于临时存储那些即将被处理的数据分组;其中一部分分组一旦落入缓冲区就会被立即发送出去;而另一部分则暂时存储于缓冲区以便后续处理;特别地当这些数据包需要重新发送时就会被放置在这里以等待进一步的操作。缓冲区容量:它表示系统一次最多能够接收并存储多少个尚未完成传输的数据分组数量

复制代码
    停止等待协议中的发送缓冲区=1;
    流水线协议的发送缓冲区>1(不能很大)。

在传输缓冲区域中包含有三种类型的条目:一种是尚未被传输出去却已被放置于缓存区域中的条目(即能够持续不断地被传输出去);第二种是已经成功传输出去的部分;第三种是在等待接收方给予确认以接受这些数据的部分(因为只有当接收方给予确认之后才会从传输缓冲区域中删除这些条目)。

· · · · 发送窗口:

· 表示由尚未确认分组序号构成的一个缓冲区域的内容空间。
· 发送窗口的最大值不超过发送缓冲区的值。
· 在初始状态下,在没有任何分组被发送出去的情况下,在发包窗口前后端重合时其大小为零。

· · · · · 前、后沿移动:

· · · · · 前沿移动代表:发送分组;

在这里插入图片描述

接收新分组的标志:当确认了旧数据块的到来后,请接收缓冲区覆盖新数据块,并确保不超过当前前沿位置发送新数据块。

在这里插入图片描述
在这里插入图片描述

其中绿色区域标记着发送缓冲区的最大容量值(即最大容量)。
注解:
如图所示:黑色编号代表尚未被发送出去的分段;红色显示的是已发出但尚未得到对方认可的段落;蓝色与绿色组合则表明该段已经获得了对方的认可与接受。

在这里插入图片描述
· · · · 接收窗口:

接收窗口(Receiving Window)对应于接收缓冲区。
接收窗口负责管理特定的分组数据,并决定哪些分组能够被允许处理。

复制代码
    只有收到的分组序号落入接收窗口内才允许接收;
    若序号在接收窗口之外,则丢弃;

当接收窗口尺寸为Wr=1时,则必须按顺序接收(采用GBN机制);
当处理窗口尺寸为Wr>1时,则允许数据以随机顺序到达;但需确保上层分组能够依次提交(采用SR机制)。

· · · · 接收窗口的滑动和发送确认:

滑动机制:当较低序列号的分组抵达时, 接收窗口会发生位置调整. 当较高序列号的分组出现乱序时, 该数据块将被缓存但不会向应用层传输(因为要实现RTT机制不允许数据包出现乱序情况), 因此不会发生滑动.
发送ack机制:当当前接收窗口大小等于1单位时, 传输所有已到达的数据段累积ack信息. 当当前接收窗口大小超过一定阈值后, 在每个数据段到达时都会发送对应的ack信息.

· · · · 例:

接收窗口尺寸=1时如下:

在这里插入图片描述
复制代码
    Wr=1,在0的位置;只有0号分组可以接收;
    若接收到0号分组,则向前滑动一个,罩在1的位置;
    如果在等待1号分组的时候,收到了2号分组,则丢弃2号分组;

接收窗口尺寸 >1时
(1)按序接收到0、1分组

在这里插入图片描述

(2)乱序接收到1、2分组(还未接收到0号分组):

在这里插入图片描述
· · · · 正常的发送窗口与接收窗口之间的互动:

当有新的数据块进入发送队列时, 发送该数据块并前缘滑动.
接收到的数据块若属于较低顺序编号,则向对方发来确认.
高龄较低顺序编号的数据块到达后, 后沿向前滑动, 以便新数据可入队列.

· · · · 异常情况下GBN的窗口互动:

新分组若能进入发送缓冲区的有效范围,则会被被发送并在接收端触发前沿滑动;
接收缓冲区接收到的是乱序数据分组且未落在接收窗口的有效范围内,
因此必须丢弃该数据分组并重传老分组的确认信息以避免后续混乱;
另一方面,
当发送缓冲区接收到老数据分组的重复确认时,
会导致后沿位置不会向前移动,
从而阻塞新数据分组的有效入队(前提是当前队列中仍有待发送的数据包);
为实现可靠通信,
系统会采用超时重发机制,
使得发送端能够及时将当前窗口内的全部数据包重新传输出去以恢复稳定状态

· · · · 异常情况下SR的窗口互动:

刚进入发送队列范围后立即传输并推动前端移动。
接收到乱序数据包后自动进入接收窗口范围内,在确认接收到数据包后再发出确认报文;
若接收到确认却未推动前端,则表示后续数据包未能及时到达(但若有后续数据包仍可被接受);
当队列中出现超时情况时会在下一周期主动重发相关数据包。

· · · GBN(go back N):

· · · 发送方的FSM:

在这里插入图片描述

· · · 接收方的FSM:

在这里插入图片描述

· · · 运行的GBN演示:

在这里插入图片描述

· · · SR(选择重传,selective repeat):

· · · 接收方将每个正确接收的分组分别发送ACKn(非累积确认)。
· · · 仅当某些分组尚未收到ACK时才进行重发(选择性重发),发送方针对每个未被确认的分组设置了一个定时器来触发后续操作。
· · · 最大值设定在发送缓冲区中以限制待传输未被确认的数据包数量。

· · · · 发送方:

由上层获取数据流量,并检查是否下一分组可用。
当某个数据包达到超时状态时,在系统中执行以下操作:

  1. 重发编号为n的数据包
  2. 并重置定时器变量。
    在收到ACKn确认后,在系统中进行如下操作:
  3. 标记该数据包已成功接收
  4. 若当前处理的数据包是最小未被确认的数据包,则将其重定位到下一个尚未被确认的数据序列号。
· · · · 接收方:

接收一组数据并发送对应的确认标记ACKn。若收到的数据顺序被打乱,则将其暂存在缓冲区域待处理。若收到的数据是按顺序排列,则将当前这组数据连同之前缓存的所有连续编号的数据一并提交给上一层处理系统。然后移动窗口至尚未完全接收的数据段落开始处继续处理。

· · · · SR的运行:
在这里插入图片描述

· · · GBN协议和SR协议的异同:

· · · 相同之处:发送窗口>1;一次能够可发送多个未经确认的分组。
· · · 不同之处:

复制代码
    GBN :
    	• 接收窗口尺寸=1;
    	• 接收端:只能顺序接收;
    	• 发送端:从表现来看,一旦一个分组没有
    	发成功,如:0,1,2,3,4; 假如1未成功,234
    	都发送出去了,发送端需要返回1再发送1234。
    	• 发送端拥有对最老的未确认分组的定时器,
    	只需设置一个定时器,当定时器到时时,重传
    	所有未确认分组。
    SR: 
    	• 接收窗口尺寸>1;
    	• 接收端:可以乱序接收;
    	• 发送端:发送0,1,2,3,4,一旦1未成功,
    	0234已发送,无需重发,选择性发送1。
    	• 发送方为每个未确认的分组保持一个定时器,
    	当超时定时器到时,只重发到时的未确认分组。

· · · · GBN与SR的对比:

在这里插入图片描述

· TCP(Transmission Control Protocol)面向连接的传输协议:

· · 特性:

基于两端(单个接收端、单个发送端)的一种通信模式;一种可靠的、有序的字节流传输(无报文分界);采用流水线式传输;通过TCP拥塞控制与流量控制机制来配置窗口大小;系统具备发送缓存与接收缓存模块;数据在同一条连接上双向流动;应用层数据的最大长度(不包括TCP头信息)即为MSS值;通过交换双方握手报文来初始化双方的状态变量

· · TCP报文段结构:

· ·由一个首部字段和一个数据字段组成。

在这里插入图片描述

在传输过程中,数据字段的第一个字节位于整个报文中指定的位置(起始索引非零值,该值由连接建立时确定)。例如,将第一个字段部分赋予索引值零,随后的每个字段部分依次赋予递增的数值

在这里插入图片描述

下一个预期到达方的数据段顺序编号(即接收方希望发送方发送的具体数据段序列中的一个编号),这被称为累积确认编号(ACK),通常也称为确认编号。
双方都有能力随机选择初始序号,在TCP连接中这样做的好处是可以减少那些来自同一台主机之前已经关闭连接的数据段被错误地视为后来这两台主机之间新建立连接产生的有效数据。(这些数据恰好与旧链接使用了相同的端口号)

有时可选且可变的选项字段用于发送方与接收方协商最大报文段长度(MSS)时或者在高速网络环境下用作窗口调节因子时使用等目的。有时ACK比特用于确认接收的数据段是否有效;而RST、SYN、FIN比特主要用于连接建立与拆除;此外PSH比特设置时也指示接收端应立即将数据交送给上层;URG比特则用来指示当前报文段中的数据为紧急状态;最后当存在紧急数据并带有指向尾部的指针时TCP必须通知接收端的上层实体

· · 例如:

在这里插入图片描述

其中,在网络协议中定义了如下变量:Seq = 42, ACK = 79, data = \texttt{'C'};表示当主机A发送某份报文时其指定的段序编号为42而接收方应在此基础上接收响应数据其对应的确认编号应设置为79;类似地当主机B发送另一份报文时其指定的确认编号应设置为79而接收方应在此基础上接收响应数据其对应的确认编号应设置为43;数据字段均为\texttt{'C'}类型的数据单元

· · TCP往返延时(RTT)和超时设置:

· · 报文段的样本RTT(SampleRTT)是从某个报文段被发送出去直到该报文段得到确认接收的时间间隔。
· · 大多数TCP协议仅在特定时刻记录一次RTT值,并非对每个发送的报文段单独测量。
· · 超时时间设定应超过RTT值;然而由于RTT值会随网络状况变化,在设置过短可能导致过早超时而产生不必要的重传问题;如果设置过长则可能导致数据包丢失从而引起响应速度变慢。
· · 持续监测并记录每个数据包块的RTT值的同时计算其平均值与方差;然后将超时阈值设定为平均值加上四倍的标准差(方差开平方)。

在这里插入图片描述

· · 一旦报文收到并更新EstimatedRTT后,TimeoutInterval就会重新计算。

在这里插入图片描述

· · 可靠数据传输:

· · · 三个主要事件:

该协议整合了GBN与SR机制,在数据传输中实现了累积确认功能,并配置了一个单个重传定时器(对应最早分组)。在该定时器尚未处理其他报文段的情况下,在下一个报文段被发送至IP层后立即触发该定时器设置。
在timeout事件发生后, 仅限于发送最早尚未得到确认的数据包并重新设置计时器;若收到重复确认反馈, 则会执行快速再传流程;一旦接收到三个针对最早未获确认数据包的成功ACK, 就会启动快速再传机制;若未收到三个针对最早未获确认数据包的有效ACK, 则会在计时器超限时自动发起再发送操作。

· · · TCP发送方(简化版):

在这里插入图片描述

当系统从应用层接收数据时会生成一个名为nextseq的新字段以创建新的数据片段这个字段存储着每个数据片段起始位置对应的唯一标识符即该片段的第一个字节。其中每个新生成的数据片段都会分配一个唯一的**sequence number(序列号)**作为其唯一的标识符这个标识符由第一个字节决定以便于后续处理和追踪。此外当系统在发送这些数据前还未启用计时机制则会在首次发送前立即启用计时机制并将此计时逻辑与当前未被完全处理的数据片断相关联以便及时检测和处理潜在的问题。

在这里插入图片描述

· · · 快速重传:

超时周期过长可能导致在完成数据传输前出现延迟问题。
当发送方检测到接收端对同一数据帧发出了三个冗余确认应答(Ack)时, 应立即重传最小编号的数据帧, 因为"冗余Ack"指的是接收端再次接收到同一报文帧的 Ack 确认。
快速再传机制: 在定时器计时未满的情况下及时重新发送数据帧, 并重新启动计时器。
该机制假设: 接收端紧跟已获确认的数据后出现的数据丢失情况; 第一个 Ack 是正常的; 收到第二个该数据帧的 Ack 则表示接收端已接收到一个顺序错乱的数据帧; 若随后返回第三个及第四个该数据帧的 Ack 则表明接收端已经接收到两个及三个顺序错乱的数据帧, 段落丢失的可能性非常大, 因此发送方必须执行快速再传操作。
样例:

在这里插入图片描述

· · · 产生TCP ACK的建议:

当接收方接收到包含间断的报文序列时(interleaved frames),这一中断可能源于网络中报文段丢失或被重新排序(reordering)所致;而在此情况下(intermittent frames),接收端无法向发送端发出明确的否定确认(NACK);相反地(alternatively),它只需对已接收的最后一组有序字节数据执行重复确认(redundant ACK)操作即可传输一个冗余ACK响应(redundant ACK)。

在这里插入图片描述

· · · 重传样例:

在这里插入图片描述
在这里插入图片描述

· · · TCP的选择确认:

TCP发送方负责维护尚未确认的数据单元的最小序列号以及下一待发送的最小序列号(类似于GBN)。接收方在接收到第三个冗余ACK之前,在接收到不连续的报文单元后会将该单元存储起来,并在随后再次接收到不连续的报文单元时会立即向应用层发送正确的顺序报文单元(类似于SR)。当接收方接收到第三个冗余ACK之前,在接收到不连续的报文单元后会将该单元存储起来,并在随后再次接收到不连续的报文单元时会立即向应用层发送正确的顺序报文单元(类似于SR)。当接收方在等待ACK的过程中出现不连续性或超时,则会触发重传机制以确保数据完整性

· · 流量控制:

TCP赋予其应用程序一种流量控制服务,旨在防止发送方因接收缓存溢出而导致的问题.该服务是一种速度匹配型控制机制,即确保发送端的数据传输速率与接收端的应用程序读取速率相协调.此外还有另一种流量控制机制,当链路中的数据流量达到饱和时,该机制能够有效管理数据传输的速度.

· · · 流量控制实现机制:

· · · 定义术语:

复制代码
    	LastByteRead:接收主机上的应用进程
    从缓存读取的数据流的最后一个字节的编号;
    	LastByteRcvd:从网络中到达的并且已
    放入接收主机接收缓存中的数据流的最后一个
    字节编号。
    	RcvBuffer:用于表示接收主机为TCP连接
    提供的接收缓存的大小,由socket选项设置。
    	rwnd:接收方维护的一个接收窗口的变量
    来提供流量控制。接收窗口用于给发送方一个
    指示——该接收方还有多少可用的缓存空间。
    
    	TCP不允许已分配的缓存溢出,所以下式
    必须成立:LastByteRcvd - LastByteRead <= RcvBuffer
    	接收窗口用根据缓存可用该空间的数量来
    设置:rwnd = RcvBuffer - [LastByteRcvd - LastByteRead]

· · · 假设有两个设备A和B,在设备B将当前rwnd值传输至与设备A相关的报文段接收窗口字段后会通知设备A其在该连接中的可用空间数量。
· · · 最初,在持续维持连接的过程中。
· · · 设备A必须交替跟踪LastByteSent和LastByteAcked这两个变量。
· · · A通过控制未确认的数据量不超过rwnd值来防止主机B的缓存溢出。
· · · 当设备需要发送数据或有确认(ACK)时才向其他设备发送报文段。
· · · 当设备B的接收窗口处于空闲状态时,则要求设备持续发送单字节数据包直到收到释放信号。

· · TCP连接管理

· · · 三次握手步骤:

第一步,在发起连接时,客户端首先生成一个特定类型的TCP报文段(不含应用层数据),其中SYN字段被设置为1(称为SYN数据包)。同时,在该数据包中随机确定并记录客户端初始序列号值(client_isn)。
第二步,在收到包含SYN数据包的数据时(通常经过IP层传输),目标服务器会解析该TCP SYN数据字段,并为其开辟新的缓存区域及变量空间;随后将生成一个响应SYN的数据包(称作SYNACK数据包),其中将确认位字段设置为目标服务器方初始序列号加一(server_isn+1),并将自己的初始序列号值(server_isn)放置于数据包头部相应的字段位置。
第三步,在接收到SYNAck响应后(通常经过IP层传输),客户端会立即生成一个用于确认连接状态的数据包;此时将目标服务器方当前的初始序列号值加一(server_isn+1)赋值于该数据包的确认位字段位置上,并将SYNA字段清零;随后将该数据包发送至目标服务器端口处以便接收端接收并处理应用层相关业务逻辑处理。

在这里插入图片描述

· · · 四次挥手(连接关闭):

当客户端试图断开与服务器的连接时,随后会发送一个ACK报文段,导致客户端向服务器发送了一个特殊的TCP报文(设置FIN位为1).当服务器接收此报文后,会生成一个ACK响应,随后生成终止ACK(TAK)报告(设置FIN位为1),此时相关联的两端主机的所有资源将会被断开并释放.

在这里插入图片描述

· · · 正常情况下客户端的TCP状态变迁:

在这里插入图片描述

· · · 正常情况下服务器的TCP状态变迁:

在这里插入图片描述

· · · 返回RST报文段的情况:

假如一台设备接收了一个目标端口为80的TCP SYN分组,在该设备当前配置中未绑定端口80服务的情况下,则会向源设备发送一个特别重置数据包(RST标志位设置为1),以此表明接收的数据包中存在未绑定的服务。

· · · TCP SYN 泛洪:

对于TCP协议,在客户端向服务器发起连接请求并初始化时的过程里头,服务器一端的协议栈会预留一块缓冲区来处理握手过程中的信息交换。当客户端发送的数据包包含SYN位时,则标识了数据包的顺序信息;攻击者可快速在短时间内发起大量这样的连接请求以绕过服务器响应机制,并且还可以伪造源IP地址等信息。

· · · TCP LAND:

LAND攻击基于TCP连接初始化所需的三步通信流程,在这一过程中攻击者向目标主机发送了一个TCPSYN SYN报文以完成发起攻击的动作。
与常规TCPSYN报文不同的是:LAND攻击所使用的SYN报文中其源IP地址与目的IP地址完全一致且都指向目标宿主。
当接收方接收到SYN SYN报告后会向该报告来源端发送一个ACK ACK确认包从而建立TCP连接控制结构;由于SYN SYN报告来源于自身的目的端口因此此ACK ACK确认包将被反馈至接收方本身。
因为SYN SYN报告的目的端口与源端口均为同一个机器所以此ACK ACK确认包最终会被发送回给接收方自身。

· · 拥塞控制原理:

· · 当网络变得拥塞时由于路由器缓存溢出,从而导致丢包现象。

· · · 拥塞原因:

· · · · 两台发送方和一台具有无穷大缓存的路由器

两台主机各自拥有独立的一条连接线段,在同一台路由器设备下实现数据传输共享功能;这两条连接线路总带宽容量为R,则A和B两台主机各分得R/2的带宽份额

在这里插入图片描述

发送速率如下图:

在这里插入图片描述

当数据传输速率介于0至R/2时

在这里插入图片描述

当发送速率达到或超过R/2时, 路由器内的平均排队分组数量将趋于无限大, 而源与目的之间的平均延迟也将趋于无穷大. 因此, 在这种情况下, 网络拥塞的影响是分组经历巨大的排队延迟, 尤其是当分组的到达速率接近链路容量的时候.

· · · · 两个发送方和一台具有有限缓存的路由器。

在以下情况下,在每条链路均可靠的情况下,在以下情况下,在以下情况下,在以下情况下,在以下情况下,在以下情况下,在以下情况下,在以下情况下,在以下情况下,在以下情况下,在以下情况下,在以下情况下,在以下情况下,在以下情况下,在以下情况下,在以下情况下

在这里插入图片描述

· · · · 仅当缓存空闲时才会发送分组,此时发送速率相等。当分组被重传时,初始数据占一部分传输速率,重传的数据占一部分速率,导致数据被交付给接收方的速率降低(为初始数据传输速率)。所以这种情况下网路拥塞的代价是,发送方必须执行重传以补偿因为缓存溢出而丢失的分组。
· · · · 还有一种情况是,发送方也许会提前发生超时并重传在队列中已被推迟但还未丢失的分组。所以这种情况下,路由器会接收到还未传输的副本,导致可用数据的传输速率下降。这种情况的代价是发送方在遇到大时延时所进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组副本。

· · · · 四个发送方和具有有限缓存的多台路由器及多跳路径

· · · · 假设每台主机都采用超时重传机制实现可靠数据传输服务。

在这里插入图片描述

在这种情况下, 路由器的缓存溢出会很少发生, 其吞吐量通常接近供给负载. 由于A-C流量与B-D流量在同一路由器R2上争夺有限的缓存空间, 所以当从B-D连接注入的负载不断增加时, 经过该节点的数据传输速率将逐渐降低. 当从B-D连接输入的负载趋向于无限大时, R2的空间缓存将立即被B-D连接的数据包填满, 此时A-C流量经由该节点的数据传输速率将几乎为零. 这种情况下会产生相应的性能损失. 如果某数据包被丢弃在其传输路径上, 这些路由器原本用于转发此数据包至其丢弃目的地所需的带宽资源最终将无法得到利用.

· · · 拥塞控制方法:

· · · 端到端拥塞控制:
在该方案中并未为运输层提供显式的拥塞控制支持。以观察网络行为(如分组丢失或延迟)为基础进行判断(TCP协议采用此方法)。例如,在TCP协议中,报文段的丢失通常通过超时或三次冗余确认来判断是否属于网络拥塞现象;一旦确定存在这种情况,则会相应地减小其传输窗口大小。
· · · 网络辅助的拥塞控制:
在该方案下,路由器等网络构件能够向发送方反馈有关网络中的拥塞状况信息。例如,在ATM ABR协议中就可实现这一功能。
· · · 网络辅助的拥塞控制有两种方法:
一种是发送阻塞分组;另一种则是标记或更新分组中的相关字段以指示拥塞发生。一旦接收方接收到带有标记的信息,则会向发送方反馈此信息以表明存在网络拥 congestion.

在这里插入图片描述

· · · ATM ABR例子:

· ATM 采用 信元 表示 数据分组 ,而 交换机 则 代表 路由器 的功能 作用 。
对于 ATM ABR 服务 ,源主机 发出 的 数据信元 经过一连串 的 分组交换机 进行 转换 和传输 ,最终抵达 目的主机 。这些数据信元 中 包含着 资源管理信元 ( RM 信元 ),这些 特殊 数据单元 可用于 在主机 和交换机之间传输与网络拥塞 相关 的信息 。当一个 RM 信元抵达 目的主机时 ,它会 将其 内容 按照规定 方式 调转方向 并向发送机 发送 ( 其内容可能在接收端进行更新 )。
ABR 支持三种不同的机制 ,用以 将 相关 拥塞信息 传递 给接收方 。

· · · · EFCI比特:

每一个数据信元都包含一个具有明确标识符的显示转发拥塞指示(Explicit Forward Congestion Indication, EFCI)比特。该网络交换机会将该数据信元中的EFCI比特标记为1以通知接收方当前网络处于拥塞状态。当接收方收到多个这样的信号后,则会将CI比特置位并返回给发送方作为确认信息。接收方接收到此确认后即可启动相关的处理流程并采取相应的优化措施以缓解当前拥塞状况。

· · · · CI、NI比特:

在32个数据信元中,默认设置有一个RMCRC(Ring Message Control)。每个RMCRC单元包含两个控制位:C/I标记和N/I标记。这两项配置参数可以通过一个繁忙的交换机进行配置。当网络出现轻微拥塞时(轻度拥挤),N/I标记会被设置为1;而当网络出现严重拥塞时(高度拥挤),则会将C/I标记设为1。一旦主机接收到一个RMCRC后会将其反馈给发送方,并保持C/I和N/I标志不变。

· · · · ER的设置:

每一个RM信元均包含一个两字节的显示速率(Explicit Rate)字段;当网络拥塞发生时,一个交换机可能会降低其经过RM信元中的ER字段所包含的值;这种配置将使该ER字段被设置为源至目的路径上所有交换机最小可支持的有效传输速率;此外,在ATM ABR系统中,每个ATM接入点(ABR)都会响应RM信元中的CI、NI和ER参数;

· · TCP拥塞控制:

TCP采用了端到端的拥塞控制机制。由于IP层未能提供明显的网络拥塞反馈信号给终端系统,在接收数据包之前,发送方需要通过感知网络拥塞程度来调节连接的发送速率。

· · · TCP是如何限制发送流量的。

运行在发送方的TCP拥塞机制被一个额外变量——拥塞窗口(cwnd)所遵循。该机制对TCP发送方施加了流量速率限制。通常被设定为cwnd除以RTT(秒)

· · · TCP是如何感知它与目的地之间的路径出现了拥塞的。

基于端到端式的拥塞控制机制,在路由器无法接收信元报文的情况下,“丢包事件”被定义为:要么发生超时现象;要么接收方成功接收到至少三个冗余ACK报文。

· · · TCP发送方怎么确认它应当发送的速率。

TCP依据一系列指导原则来判断拥塞状态。一个丢失的报文段(包括超时或接收到三个冗余确认 acknowledged messages, ACKs)表示存在拥塞情况;此时应当降低发送端的传输速率(即减少其拥塞窗口大小)。一个确认报文段表明该网络正在传输发送方的所有报文段(即此时网络尚未出现拥塞现象)。当先前未确认完成的确认 acknowledged message到达时,则能够提升发送端的速度(即增加其拥塞窗口大小)。带宽检测机制:由于ACKs和丢包事件充当了隐含的信息信号;每个发送端根据本地信息与其它发送端之间的异步行为而自主做出响应;TCP通过增加到达确认acknowledged messages的数量来调节传输速率:在出现丢包事件时则会减缓传输速率以防止过度扩展窗口规模。

· · · TCP拥塞控制算法:

该技术方案主要涉及网络流量管理机制中的三个核心环节:慢启动、拥塞避免以及快速恢复机制。其中,在TCP协议体系中,默认配置下这两项功能被视为必要组成部分,并且它们的主要区别在于不同应对接收确认信号(ACK)时调整约束窗口(CWND)大小的方式特征——其中慢启动机制能够实现更迅速地增大约束窗口(CWND)大小的能力;而快速恢复机制则并非必须配置但具有优化性能的重要辅助功能。

· · · · 慢启动:

当一个TCP连接首次建立时,在其初始阶段窗口宽度(cwnd)会被设定为一个Minimum Segment Size(MSS)值的较小倍数,在此状态下数据传输速率为每个MSS除以Round Trip Time(RTT)。而在慢启动阶段中,在接收每个报文首部确认后会递增其大小。具体而言,在发送第一个数据报文并获得确认之后,在接收第二个确认报文后会将窗口大小扩大至两个MSS长度;随后会在接收第三个确认后将其扩展至四个MSS,并以此类推。这样虽然起始速度较慢但在慢启动过程中窗口宽度呈指数级增长。

在这里插入图片描述

· · · · 结束慢启动状态的条件:

复制代码
如果存在一个由超时引起的丢包事件,TCP
    发送方会将cwnd设置为1并重新开始慢启动过程,
    除此之外,TCP发送方还会将第二个状态变量的
    值ssthresh置为拥塞窗口的一半,ssthresh与
    慢启动的第二种结束方式、进入拥塞避免状态有关。
当检测到拥塞时ssthresh设为cwnd的值的
    一半,并当到达或超过ssthresh时,此时会结束
    慢启动并进入拥塞避免模式。
当检查到3个冗余ACK的丢包事件时,TCP会
    执行快速重传,并进入快速恢复状态。
· · · · 拥塞避免:
复制代码
一旦进入拥塞避免状态,那么TCP将在每经历
    一个RTT,就将cwnd的值增加一个MSS。实现这种
    思路的通用方法是TCP无论何时到达的一个新确
    认,就将cwnd增加一个MSS/cwnd的字节。
    
如何结束拥塞避免的线性增长(每RTT 1MSS),
    当出现超时引起的丢包事件时,cwnd被置位1个
    MSS,ssthresh的值被更新为cwnd值的一半,进
    入慢启动状态。如果丢包事件由三个冗余的ACK
    引起(说明拥塞不是很严重),TCP会将ssthresh
    记录为cwnd值的一半,将cwnd的值置为ssthresh+3
    (为了测量更精确,根据已收到的三个冗余ACK
    也会加上三个MSS),然后进入快速恢复状态。
· · · · 快速恢复:

在当前状态下,在接收到每个冗余的ACK报文段后,cwnd值会增加一个MSS长度。随后,在缺失报文段的ACK到达并被处理后,TCP会降低其cwnd以进入拥塞避免状态。如果发生超时情况,则TCP将按照慢启动超时机制进行处理,并切换到慢启动模式;当遇到数据包丢失事件时,则将cwnd设为一个MSS长度,并将ssthresh参数设定为当前cwnd值的一半。

TCP拥塞控制主要采用增广步长与退避算法相结合的方式进行管理(Additive-Increase Multiplicative-Decrement AIMD)。这种方法通过动态调整传输速率以维持网络稳定。

· · · · AIMD拥塞控制常常表现如锯齿形状的传输速率。

在这里插入图片描述
· · · · 公平性:

· 假设所有数据流量仅通过可靠数据分组的形式在现有网络拓扑结构下流动,并且未有UDP流量存在于该特定网络路径上,在这种情况下各数据流均能获得与其容量成比例的最大吞吐量(假定共有K个独立通道共同承载总流量),则称此资源分配策略为公平分配方案。
· 基于TCP协议的标准分析表明,在实际网络环境下若两个独立且相互竞争的数据流共享一条固定传输速率(传输速率为R)的理想信道资源,则当两者具备完全相同的初始配置参数(拥塞窗口大小、最大报文尺寸、Round Trip Time)并持续按照增广指数移动平均算法(AIMD)模式运行时,在稳态条件下两者的资源分配结果将稳定在各自能够获得的最大吞吐量的一半即R/2

在这里插入图片描述

假设初始状态为A,在经过一段时间后发现其吞吐量超过R/2;与此同时另一条连接(称为连接2)其吞吐量低于R/2。随着时间推移这两条连接将经历一个典型的拥塞-空闲-再拥塞循环的状态。这是因为它们并未考虑慢启动阶段而直接跳入了拥塞规避状态因此在首次遭遇拥塞时会切换至状态B(呈现线性增长趋势)。此时系统会自动检测到链路的拥塞状况并降低各自的传输速率即从当前最高水平减半至原来的一半水平从而降至C点的位置(横纵坐标均降至原值的一半水平)。具体而言当TCP连接感知到链路处于拥塞状态时它会将当前的最大窗口大小cwnd减半以避免进一步的拥塞问题随后逐步恢复至正常工作状态这一过程会导致系统多次经历类似的拥塞调整最终必然达到双方均衡带宽分配的状态即两条传输线路都将稳定在R/2的工作点上。

· 其他协议

· · 数据报拥塞控制协议(Datagram Congestion Control Protocol,DCCP)

提供一种低消耗基于分组的不可靠服务方案,在于与UDP类似的同时支持应用程序可选的流量控制机制,并与TCP兼容。

· · 流控制传输协议(Stream Control Transmission Protocol,SCTP)

一种可靠且适用于报文传输的方式称为SCTP协议。
该协议允许不同层次的应用将多个'流'整合到一个SCTP连接中。
即使某些'流'在传输过程中丢失也不会影响其他未受影响的'流'。

· · TCP友好速率控制(TCP-Friendly Rate Control,TFRC)协议

该协议主要是一种拥塞控制机制而非一种功能完善的运输层协议,在此基础之上可被应用于其他如DCCP等运输层协议中使用。而TFRC的设计目标则是旨在平滑TCP拥塞控制中的波动性(即所谓的"锯齿"现象),同时维持一种较为恒定且合理的长期发送速率。这种设计使得其发送速率与TCP相当接近。

全部评论 (0)

还没有任何评论哟~