物联网组网与通信技术——传输层基础知识

传输层基础知识

|| 先完成作业咯(__) 嘻嘻……

  • 传输层协议的作用包括哪些?哪些作用是最基本的?

传输层为运行在不同主机上的应用进程之间提供端到端的逻辑通信
复用与分解(最基本)、可靠数据传输、流量控制、拥塞控制。

  • UDP协议的优点是什么?主要用于传输什么类型的业务?

无需建立连接,时延较小;
发送方和连接方无需维持连接状态;
报文段的首部开销小;
无拥塞控制,UDP可以达到很高的发送速率。

主要用于可以容忍丢失但对速率敏感的业务比如流媒体应用,还有DNS,简单网络管理协议SNMP中。

  • 在可靠传输原理中,处理冗余的有效方法是什么?

对分组进行标号,在接收方对相同标号的分组进行处理。

  • 在可靠传输原理中,怎么用ACK代替了NAK?

用ACK代替NAK,接收方为最后一个成功接收的分组发送ACK,接收方必须在ACK报文中包含所确认的分组序号。发送方接收到冗余的ACK可视为接到NAK,重传当前分组。

  • 在可靠传输原理中,处理丢包的有效方法是什么?

每次发送分组时会设置一个定时器,当时间结束还未收到回复时就会重传数据,有效地处理了丢包问题。

  • 简述GBN和SR的优缺点 。
    GBN:
    优点—— 接收方缓存简单,不需要缓存任何失序分组
    缺点—— 随后的分组重传也许丢失或错误,引起更多重传
    SR:
    优点——能够精确定位,相同情况下重传量较GBN小
    缺点——回复报文ACK的开销比较大,需要考虑缓存设计

  • 流量控制和拥塞控制有什么共同点和不同点?

共同点:都是控制发送方的发送速率
不同点:流量控制是接收方接收不过来数据而通知发送方降低发送速率,拥塞控制是发送方检测到网络拥堵而降低发送速率。

  • 为什么TCP的连接建立需要三次握手?

我们知道在第一步客户机端可能向服务器端发送多个SYN请求,那么服务器端就可能会为同一个报文分配多个缓存,在第三步客户机端回复ACK,就可以让服务器端释放掉不需要占用的缓存资源,这样就避免了重复建立连接引起的资源浪费。

  • 简述超时定时器时长对TCP性能的影响。

定时器时间设置过短——太早超时引起不必要的重传。
定时器时间设置过长——对报文段丢失反映太慢。

|| 传输层服务与协议

在这里插入图片描述
传输层为运行在不同主机上的 应用进程 之间提供端到端的逻辑通信。
网络层为不同的主机提供逻辑通信。
传输层依赖并受限于网络层服务(定时,带宽保证),同时也能增强网络服务(可靠数据传输,安全性)。

发送方收集应用进程数据,封装成报文段,然后传递给网络层(复用网络层服务),接收方将报文恢复成报文,然后传递给正确的应用进程(分解)。

|| 复用与分解

在这里插入图片描述
发送主机的复用: 从不同套接字中收集数据块,并为每个数据块封装上首部信息(将在分解时使用)

接收主机的分解:将接收到的报文段交付给正确的套接字。(套接字是用于区分不同应用进程的)

那复用和分解是怎样完成的呢?

主机接收到一个IP数据报,每个数据报又会有源IP地址和目的IP地址,(这是为了能够正确送达主机),每一个数据报携带一个传输层报文段,每一个报文段都有源端口号和目的端口号(这是为了正确送达具体的进程),就好比你写信一定要写清地址和收信人姓名。

在这里插入图片描述
再了解一些分解的内容,分解有无连接的分解和面向连接的分解。下图解释的很清楚了。

UDP套接字是由二元组识别
在这里插入图片描述
TCP套接字通过四元组识别

在这里插入图片描述
|| 无连接传输 : UDP

我们先来了解一下 UDP 的特点吧

UDP 是最“懒”的因特网传输层协议,它提供“best effort” 的服务,因此报文段可能会丢失,错序;同时,它也是一种无连接的协议,发接双方无需握手。

那既然UDP这么“懒”,我们为什么还需要它呢??

其实,无需建立连接意味着可以减少很大一部分延时,这种协议比较简单,发接双方无需维持连接状态,报文段首部的开销也会比较小,没有拥塞控制可以达到很高的发送速率 ,所以对于那些对速率比较敏感的(比如看视频)可以采取UDP协议。

那UDP能不能进行可靠传输呢?其实是可以依赖应用层进行的!

在这里插入图片描述
发送方会将报文段内容视为16比特字串进行处理,对报文中的所有16比特字进行求和运算(1的补码和),然后将其放入UDP报文段的检验和字段。

接收方会计算接收的报文段的检验和,检查计算出的检验和是否等于传输过来的检验和的值,如果不等,一定有错出现;如果相等,不一定没有错误。

在这里插入图片描述

|| 可靠的数据传输(RDT , reliable data delivery)原理(停等)

没有一个信道是100%可靠的,既有可能 丢去分组,也有可能出现比特 传输错误

在这里插入图片描述
让我们一起来分析一下各种复杂的情况吧!!

Rdt 1.0 : 在可靠信道上的可靠传输

在这里插入图片描述
Rdt 2.0 : 存在比特错误的信道

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

思考一下这是一个完美的协议吗??显然不是!!!

试想一下如果ACV或者NAK发生错误,那么发送方根本不会知道接收方到底发生了什么!!!也不会立即重传,这样是会发生冗余的。那怎么办呢??

其实可以为每个分组添加序号,如果ACK/NAK受损发送方会重传当前分组(也不排除序号受损的情况),接收方会按照序号丢弃重复分组。

Rdt 2.1 : 处理受损的 ACK / NAK

发送方
在这里插入图片描述

接收方

在这里插入图片描述

Rdt 2.2 : 一个无NAK协议

用ACK代替NAK,接收方为最后一个成功接收的分组发送ACK,接收方必须在ACK报文中包含所确认的分组序号,当发送方接收到冗余的ACK可视为接收到NAK,会重传当前分组。

在这里插入图片描述

要深刻理解什么是最后一个成功发送的分组

Rdt 3.0 : 具有丢失和错误的信道

以上我们分析了无错、出错的情况,其实还有一个更糟糕的情况那是什么呢?试想如果回复信息丢失了,那发送方是不是要一直等待没有结果?那该怎么办呢?答案其实呼之欲出了,就是设置定时器!!!

情况1:ACK/NAK 丢失了,一段时间结束后,发送方自动重传
情况2:网络不太好,ACK/NAK来迟了,没关系,虽然已经进行了重传,但用序号法就可以解决这个问题了

在这里插入图片描述
这个有什么特点呢?就是说发送方接收到corrupt()或者ACK中其他序号时,不用立即重传,等着timer结束即可

以下介绍了无丢包、丢发送包、丢回复包、时间过长的四种情况。
在这里插入图片描述
在这里插入图片描述

我们所讨论的可靠传输协议被称为停等协议
(1) 每次只能发送一个分组,在高带宽,长延时的链路上,效率非常低
(2)通过引入序号解决重发分组可能带来的数据冗余
(3)通过引入定时器解决分组丢失

思考:这种协议是不是高效呢??显然不是

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

有没有解决办法呢??当然啦!!!

下面介绍可以提高信道利用率的 流水线可靠数据传输协议

流水线技术就是说发送方允许多个未被确认的分组同时传输,所以必须增加序号范围,收发双方都需要缓存多个分组(以备重传),还需要确定序号的范围和缓冲的大小
在这里插入图片描述
在这里插入图片描述
.

有两种基本形式——回退N步(GBN),选择性重传(SR)

.

  • GBN

发送方可以有N个未确认分组处于流水线中,需接收方发送累积确认,确认序号表明该分组及以前的分组均正确收到,发送方为每个未确认的分组设置定时器,超时则重传。
.
.
在这里插入图片描述
.
优点: 接收方缓存简单,不需要缓存任何失序分组
缺点: 随后的分组重传也许丢失或错误,更多重传
GBN 的性能问题:
(1)单个分组的差错可能引起GBN重传大量分组,许多分组其实并没有错,没必要重传
(2)信道差错率增加的情况下,引起大量没有必要的重传
.
.

  • SR
    .
    发送方可以有N个未确认分组处于流水线中,接收方逐个确认每个分组(必要时缓存分组,最终按序交付给上层),发送方为每个未确认的分组设置超时定时器,如果超时仅仅重传超时的分组(ACK的量会比较大,但是能够精准定位)

在这里插入图片描述
.
在这里插入图片描述
.
.
|| 面向连接的TCP
.
特点:
(1)端到端:一方发,一方收
(2)字节流传送:可靠、按序,没有“报文边界”
(3)流水线协议:发送窗口大小由拥塞控制与流量控制机制决定
(4)发送、接收缓存
在这里插入图片描述
(5)全双工数据传输:在同一连接中双向传输
(6)面向连接:数据交换前通过握手实现收发状态的初始化
(7)具有流量控制、拥塞控制:控制发方的数据发送速度
(流量——接收方收不过来;拥塞控制——网络拥堵)

  • TCP报文段结构

在这里插入图片描述
TCP报文在发收两方是怎样传输的呢???
序号Seq——数据的第一个字节在数据流中的编号
确认序号ACK——期望从对方端获得的字节序号(累积确认)
处理失序报文的方法是由编程人员设计的

在这里插入图片描述

  • TCP 的可靠数据传输

重传策略???

在这里插入图片描述
在这里插入图片描述
定时器时间设置过短——太早超时引起不必要的重传
定时器时间设置过长——对报文段丢失反映太慢

……问题来了,如何估计RTT呢 ???

测量 + 估计得出

测量报文段从发出至收到ACK的时间差——RTT测量(采样)值,SampleRTT;
SampleRTT是不断变化的,希望比较“平滑”地估计RTT
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • TCP流量控制

实质——发方不能过多过快地发送数据而导致收方缓存溢出,是hold住发送方的一种机制

接收方通过报文段中包含的RcvWindow值来通知缓存区中可用空间大小,发送方发出的unACK数据不能超过接收窗口大小以确保接收缓存不溢出。

  • TCP连接管理

建立连接 的三次握手:

step1:客户机端发送TCP SYN 报文段给服务器,指定初始序列号,没有数据
step2:服务器接收SYN,回复SYNACK报文段,指定服务器初始序列号以及分配缓存
step3:客户机接收SYNACK,回复ACK报文段,它可以包含数据。

思考:为什么要三步???两步可以吗??

我们知道在第一步客户机端可能向服务器端发送多个SYN请求,那么服务器端就可能会为同一个报文分配多个缓存,在第三步客户机端回复ACK,就可以让服务器端释放掉不需要占用的缓存资源,这样就避免了重复建立连接引起的资源浪费。

关闭连接 的四步:

在这里插入图片描述
step1:client 发送TCP FIN控制报文段给 server
step2:server 接收FIN,回复ACK;关闭连接,发送FIN
step3:client 接收FIN回复ACK
step4:server接收ACK,连接关闭
.
.
|| 拥塞控制原理

猜你喜欢

转载自blog.csdn.net/tian__si/article/details/106083002