7.1、传输层的可靠数据传输
传输层协议为运行在差异主机上的进程提供了一种逻辑通讯的机制。发送方在传输层会将应用递交的消息分成一个或多个的Segment,并向下传给网络层,吸收方在传输层会将吸收到的Segment组装成消息,并向上交给应用层。传输层还可以为应用层提供多种协议,如TCP协媾和UDP协议。与网络层提供的主机之间的逻辑通讯机制有所差异,传输层提供了应用进程之间的逻辑通讯机制。在OSI的网络参考模子中,传输层的位于网络层之上,而且传输层直接依赖于网络层的服务。
一、多路复用和多路分用
假如某层的一个协议对应直接上层的多个协议/实体,则须要复用/分用。
1.1、多路分用
传输层从网络层收到Segment后,依据每个Segment中头部信息的差异,将收到的全部Segment交给正确的Socket,这个过程就是多路分用。如下所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091607443-1910900793.png
多路分用的详细过程可以分为以下3步:
①、主机从传输层以下吸收到了 IP数据报(datagram),每个数据报携带源IP地点、目的IP地点;
②、每个 IP数据报(datagram) 携带一个传输层的Segment,该传输层的Segment携带了源端标语和目的端标语;
③、传输层协议提取Segment中的 IP地点和端标语信息,将Segment导向相应的Socket;
1.1.1、无毗连(UDP)的多路分用
无毗连的多路分用指的就是UDP的多路分用,UDP的Socket利用了 “目的IP地点、目的端标语” 这个二元组标识。当传输层收到UDP的Segment后,传输层会查抄Segment中的目的端标语,并将这个Segment绑定到对应端标语的Socket上。
1.1.2、面向毗连(TCP)的多路分用
面向毗连的多路分用指的就是TCP的多路分用,TCP的Socket利用了“源IP地点、源端标语、目的IP地点、目的端标语”这个四元组标识。当传输层收到TCP的Segment后,传输层会查抄Segment中的目的端标语,并将这个Segment绑定到对应端标语的Socket上。如下图所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091622906-1499691485.png
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091629775-1546545203.png
二、无毗连不可靠(UDP)的传输协议
UDP协议基于IP协议,是一种数据报(SOCK_DGRAM)的传输协议。UDP协议在传输层实现了多路复用/多路分用,而且UDP协议在传输层实现了简单的端到端的错误校验机制(端到端的错误校验机制差异于链路层和物理层的错误校验机制,端到端的错误校验机制是传输层特有的一种错误校验机制)。由于UDP协媾和IP协议一样,只是在他们地点的OSI模子中做了简单的错误校验机制,并没有做错误规复机制,因此,UDP协媾和IP协议雷同,都是一种简单的“Best effort”服务模子(“Best effort”服务模子大概会导致报文段丢失,大概报文段不能按序到达)。由于UDP协议无毗连,因此UDP协议中每个数据报(SOCK_DGRAM)的传输都是独立的,数据报之间并没有相互依赖。UDP协议相比于TCP协议,UDP协议中协议头部只须要8KB的存储空间,TCP协议中头部须要20KB的存储空间,而且UDP协议没有拥塞控制,而TCP协议有拥塞控制。
UDP协议常用于流媒体应用,DNS应用和SNMP应用。UDP协议报文的Segment如下图所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091640036-752296555.png
UDP协议报文的Segment中的checksum是UDP协议的校验和,重要用于检测UDP协议报文Segment在传输中是否发生错误,比如,位翻转。checksum的校验原理,如下图所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091645875-1747427552.png
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091650140-1043607285.png
三、有毗连可靠的传输协议——rdt协议,gbn协议,sr协议
可靠数据传输的界说为:发送方将信息通过可靠信道(reliable channel)大概不可靠信道(unreliable channel)传输给吸收方时,信息可以包管不错、不丢、不乱。由于传输信道(channel)存在不可靠性,因此可靠数据传输的过程终极要依赖于复杂的可靠数据传输协议——rdt协议。
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091705029-364977429.png
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091709634-896728941.png
可靠数据传输协议的接口中,有以下3点须要留意:
①、发送方的rdt_send()函数是单向的,这个表现发送方的应用层单向的将数据通过rdt_send()函数转达给传输层,然后由传输层通过TCP协议将数据传输给网络层的IP协议;
②、吸收方的deliver_data()函数是单向的,这个表现吸收方的网络层和传输层吸收到完备的数据之后,才会将完备的数据转达给应用层;
③、传输层和网络层的函数调用是双向的,传输层的TCP协媾和网络层的IP协议共同构成了可靠数据传输。
可靠数据传输协议一样寻常利用传输层的有限状态自动机(Finite State Machine, FSM)来描画传输协议,有限状态自动机的结构如下图所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091725757-1681209051.png
3.1、rdt1.0协议
rdt1.0协议办理的题目是在可靠信道上举行可靠数据传输(实际不存在这种理想环境)。rdt1.0协议创建在数据传输的底层信道是完全可靠的假设之上,比如:①、假设底层信道不会发生错误(bit error);②、假设底层信道不会抛弃分组。同时,rdt1.0协议中发送方和吸收方都会有各自的有限状态自动机(FSM),rdt1.0协议的工作流程,如下图所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091738839-308911633.png
在rdt1.0协议的工作流程图中,有以下3个逻辑比力告急:
①、发送方的有限状态自动机(FSM)只有1个状态——等候应用层的调用状态。当发送方的应用层调用传输层rdt_send(data)函数时,发送方的传输层通过make_pkt(data)函数创建一些packet(分组),然后利用可靠信道udt_send(packet)(固然在rdt1.0定名为udt_send(packet),但是可以看做为可靠信道传输)把这些packet(分组)发送出去。在这段逻辑的实行完成后,发送方的有限状态自动机(FSM)处于等候应用层的调用状态。
②、吸收方的有限状态自动机(FSM)只有1个状态——等候网络层的调用状态。当吸收方的网络层调用传输层rdt_rcv(packet)函数时,吸收方的传输层通过extract(packet,data)函数把网络层发过来的packet(分组)提取出来归并为data,然后通过deliver_data(data)转达给应用层。在这段逻辑的实行完成后,吸收方的有限状态自动机(FSM)处于等候网络层的调用状态。
③、由于rdt1.0协议创建在数据传输的底层信道是完全可靠的假设之上,以是吸收方的传输层通过extract(packet,data)函数把网络层发过来的packet(分组)提取出来归并为data时,并不须要检测网络层发过来的packet(分组)是否有错,是否有丢失,是否有重复...等这些题目。
3.2、rdt2.0协议
rdt2.0协议办理的题目是怎样处置处罚产生错误的分组信息。rdt2.0协议创建在数据传输的底层信道会产生错误信道的场景之上,比如:底层信道大概翻转分组中的位(bit)...等等;假如产生了错误的分组信息,rdt2.0协议还创建了错误规复的机制,如下图所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091759471-2010040156.png
总结如下,Rdt 2.0中引入的新机制中包罗了:①、不对检测,“校验和”只是不对检测方式中的一种;②、吸收方反馈控制消息ACK/NAK,来决定发送方是否重传分组,基于这种重传机制的rdt2.0协议又称为ARQ(Automatic Repeat reQuest)协议。
rdt2.0协议中发送方的有限状态自动机(FSM)和吸收方的有限状态自动机(FSM),分别操持如下:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091807883-169432237.png
与rdt1.0协议的有限状态自动机相比,rdt2.0协议的有限状态自动机,有以下2点比力告急:
①、发送方的有限状态自动机(FSM)有2个状态——等候应用层的调用状态、等候吸收方的ACK或NACK状态。当发送方的应用层调用传输层rdt_send(data)函数时,发送方的传输层通过make_pkt(data,checksum)函数创建一些sndpke(分组),然后利用可靠信道udt_send(sndpke)函数把这些sndpke(分组)发送出去之后,发送方的有限状态自动机(FSM)处于等候吸收方的ACK或NACK状态,吸收方复兴的内容有以下2种大概:第一种吸收方复兴了ACK,那么发送方的有限状态自动机(FSM)由等候吸收方的ACK或NACK状态变为等候应用层的调用状态;第二种吸收方复兴了NACK,那么发送方要重新发送刚才的sndpkt,继承等候直到吸收方复兴了ACK。
②、吸收方的有限状态自动机(FSM)只有1个状态——等候网络层的调用状态。当吸收方的网络层调用传输层rdt_rcv(rcvpkt)函数时,吸收方的传输层须要判断吸收到的rcvpkt(分组)是否正确,吸收方吸收到分组会有以下2种大概:第一种,rcvpkt是正确的,吸收方的传输层会把rcvpkt(分组)提取出来归并为data,然后通过deliver_data(data)转达给应用层,末了复兴发送方ACK信号;第二种,rcvpkt(分组)是错误的,吸收方会立即复兴发送方NACK信号,并删除刚才吸收到的rcvpkt(分组)。
可以用下面2个张图,分别模仿rdt2.0协议的传输过程和有限状态自动机:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091822259-1028589593.png
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091826752-1989762327.png
3.3、rdt2.1协媾和rdt2.2协议
3.3.1、rdt2.1协议
固然rdt2.0协议加入了吸收方反馈控制消息ACK/NAK,来决定发送方是否重传分组,但是在rdt2.0协议中,假如吸收方反馈给发送方的ACK/NAK消息发生错误/被粉碎(corrupted),那么发送方的有限状态自动机(FSM)将会进入死锁。为了办理这个题目,rdt2.1协议引入了序列号来控制分组信息,rdt2.1协议的针对rdt2.0协议的题目,处置处罚逻辑如下:
①、发送方给每个分组增长序列号,假如发送方吸收到的ACK/NAK消息发生错误/被粉碎(corrupted),发送方将重传当前序列号的分组;
②、吸收方假如吸收到了重复序列号的分组信息,那么吸收方将会抛弃重复的分组。
rdt2.1协议中发送方的有限状态自动机(FSM)和吸收方的有限状态自动机(FSM),分别操持如下:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091842237-550374311.png
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091855678-2098270199.png
与rdt2.0协议中有限状态自动机相比,rdt2.1协议中有限状态自动机,有以下2点比力告急:
①、发送方的有限状态自动机(FSM)有4个状态——等候序列号为0的分组、等候吸收方返回序列号为0的分组的ACK或NACK、等候序列号为1的分组、等候吸收方返回序列号为1的分组的ACK或NACK。详细的函数调用过程,此处不再赘述。
②、吸收方的有限状态自动机(FSM)有2个状态——等候序列号为0的分组、等候序列号为1的分组。详细的函数调用过程,此处不再赘述。须要留意的是,假如吸收方在等候序列号为0的分组时,完备无误的吸收到了序列号为1的分组,那么吸收方同样会给发送方返回序列号为1的分组的ACK和checksum;同样的,假如吸收方在等候序列号为1的分组时,完备无误的吸收到了序列号为0的分组,那么吸收方同样会给发送方返回序列号为0的分组的ACK和checksum。
3.3.2、rdt2.2协议
rdt2.2协议相比rdt2.1协议,吸收方采取ACK+序列号的返回方式替换了吸收方返回NAK。rdt2.2协议只利用ACK+序列号的处置处罚逻辑如下:
①、吸收方通过ACK告知发送方末了一个被正确吸收的分组,在ACK消息中,有被确认分组的序列号;
②、假如发送方收到了非当前发送分组的序列号,那么重传当前分组。
rdt2.2协议中发送方的有限状态自动机(FSM)和吸收方的有限状态自动机(FSM),分别操持如下:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091915359-2131192998.png
3.4、rdt3.0协议
rdt1.0协议创建在可靠信道上举行可靠数据传输(实际不存在这种理想环境),rdt2.x 协议创建在数据传输的底层信道会产生错误信道的场景之上,比如:底层信道大概翻转分组中的位(bit)...等等,但是,在真实的网络环境中,数据传输的底层信道除了大概发生错误以外,还大概丢失分组。因此,rdt3.0协议办理的题目就是数据传输的底层信道丢失了分组这种场景,rdt3.0协议的处置处罚逻辑如下:
①、继承了rdt2.x协议中ACK+序列号的机制;
②、rdt3.0 协议中发送方在发送完数据后,会等候“公道”时间,假如发送方在等候的时间内,没有收到吸收放的ACK,那么发送方重传分组;
rdt3.0协议中发送方的有限状态自动机(FSM)操持如下:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091930350-1313888658.png
rdt3.0协议在面临差异场景的分组丢失时,处置处罚流程如下:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091937752-1779360088.png
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091945595-949395073.png
rdt3.0协议固然可以或许正确工作,但是rdt3.0协议的性能很差,比如下面这个rdt3.0协议的利用场景:在1Gbps链路,端到端的传播延长为15ms,发送1KB的分组所利用的时间和服从分别为:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519091953365-512906893.png
由于rdt协议是停等协议,因此在一个分组发送完成时,整个网络不绝处于等候的状态,因此发送时间为:
\
发送方利用率(发送方发送时间百分比)为:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519092002477-2101451772.png
同样可以盘算得到,在1Gbps链路上,发送方每30毫秒才发送一个巨细为1KB的分组,那么1s可以发送的分组为33个,即1s可以发送33KB的数据。因此,可以得到如下结论,rdt3.0协议限定了物理资源的利用,造成这个限定的缘故原由是rdt3.0协议的停等操纵,如下图所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519092137597-356101288.png
3.5、流水线机制与滑动窗口协议
rdt3.0协议的性能瓶颈重要是由停等操纵造成的,假如在rdt3.0协议的根本上每次可以发送多个分组(流水线机制),那么就可以明显的进步rdt3.0协议的性能瓶颈,进步发送方利用率(发送方发送时间百分比),如下图所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519092148838-386438666.png
答应在rdt3.0协议的根本上每次可以发送多个分组的协议叫做流水线协议,流水线协议答应发送方在收到ACK之前一连发送多个分组,因此流水线协议与rdt协议相比,有3点重要区别:
①、流水线协议须要更大的序列号范围;
②、流水线协议中发送方和吸收方须要更大的存储空间以缓存分组,流水线协议;
流水线协议的工作原理与rdt协议的工作原理对比,如下图所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519092158636-1543333790.png
3.5.1、流水线协议的详细实现——Go-Back-N(GBN)协议
Go-Back-N协议的发送方包罗分组头、窗口尺寸N、ACK(n)、计时器(timer)、超时Timeout(n)事故...等,每一个属性的详细寄义如下:
①、分组头,表现分组头部包罗一个长度为k bit的序列号,因此序列号的长度为0~2^k;
②、窗口尺寸N,表现滑动窗口中最多答应N个分组未确认,如下图所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519092209232-1311960478.png
③、ACK(n),确认到序列号n(包罗n)的分组均已被正确吸收,大概收到重复ACK;
④、计时器(timer),为滑动窗口中未确认吸收的分组设置计时器(timer);
⑤、超时Timeout(n)事故,当计时器timer超时时,须要重传序列号大于便是n,还未收到ACK的全部门组。
Go-Back-N协议中发送方的有限状态自动机(FSM)操持如下:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519092221484-173882352.png
Go-Back-N协议中有限状态自动机,有以下3点比力告急:
①、当nextseqnum便是base时,表现滑动窗口开始从第一位向吸收方发送数据,此时发送方开启计时器并设置start_timer,直到滑动窗口中未吸收到ACK的数据量便是窗口尺寸N时,克制向吸收方发送数据;
②、假如滑动窗口中的第一位数据收到了吸收方的ACK,此时窗口会团体向前滑动一位,将吸收到ACK的第一位数据移出滑动窗口,并重置计时器的开始时间start_time,当发生timeout超时时,Go-Back-N协议会将滑动窗口中的全部数据全部发送一次;
③、假如滑动窗口中的末了一位数据收到了吸收方的ACK,而且整个传输层也没有更多须要发送的数据,那么计时器将会被关闭。
Go-Back-N协议中吸收方没有缓存,因此,吸收方的ACK机制为发送拥有最高序列号的、已被正确吸收的分组的ACK,这个ACK机制包管了Go-Back-N协议中吸收方只须要记取唯一的expectedseqnum即可,对于乱序到达的分组,由于Go-Back-N协议中吸收方没有缓存,吸收方直接抛弃即可。因此,Go-Back-N协议中吸收方只能吸收按序到达的分组。Go-Back-N协议中吸收方的有限状态自动机(FSM)操持如下:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519092303187-988612252.png
Go-Back-N协议的工作示例,如下图所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519092309043-706157170.png
通过上图可以看出,发送方已经发送了编号为0~5的分组。当计时器超时时,若发送方只收到0、1号分组简直认信息ACK0和ACK1,发送端则须要重发的分组数是4个,依次分别是2、3、4、5号分组。
3.5.2、流水线协议的详细实现——Selective Repeat(SR)协议
Selective Repeat协议在Go-Back-N协议的根本上,为Go-Back-N协议的吸收方设置缓存机制——增长了吸收方的滑动窗口,缓存乱序到达的分组。因此Selective Repeat协议中发送方在发送分组时,只须要重传那些充公到ACK的分组即可,而且Selective Repeat协议会为每一个发送过的分组设置定时器(Go-Back-N协议只会为整个窗口内的全部门组设置定时器)。
Selective Repeat协议中发送方滑动窗口和吸收方滑动窗口如下图所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519092327933-1272421046.png
Selective Repeat协议中发送方和吸收方的工作流程,如下图所示:
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519092347668-332372569.png
https://img2024.cnblogs.com/blog/2485827/202605/2485827-20260519092353584-231790136.png
Selective Repeat协议中发送方和吸收方的工作流程中,有以下2点比力告急:
①、发送方为每个发送过的分组设置一个计时器,当任何一个发送的分组超时后,将会重发;
②、发送方移动窗口的send_base属性永久在最小的没有继承到ACK信号的分组;
③、吸收方的在继承到乱序的分组时,起首会缓存分组序号比力大的分组数据,并立即返回ACK给发送方,当吸收方继承到当前窗口rcv_base所指向的分组序号时,吸收方会从缓存中查找与rcv_base相一连的已吸收到的全部门组,并把与rcv_base相一连的已吸收到的全部门组一起递交给应用层,比方第二张图中吸收方,当吸收方的rcv_base为指向序号2的分组时,吸收方吸收到了序号为3、4、5分组数据,此时吸收方会立即缓存序号为3、4、5的分组数据,并在继承到序号为2的分组数据后,将序号为2、3、4、5的分组一起递交给应用层,然后滑动窗口到下一组分组继承的序列。
别的,Selective Repeat协议在操持的时间须要思量序列号的总数目与窗口尺寸的对应关系,即:吸收方的窗口尺寸+发送方的窗口尺寸
页:
[1]