计算机网络学习9:可靠传输

简介: 如果提供不可靠传输,丢弃有误码的帧即可,其他不做。如果提供可靠传输服务,就需要告诉发送端重发。

188cae1bd172c654d4f6f3f353b3175b_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

如果提供不可靠传输,丢弃有误码的帧即可,其他不做。

如果提供可靠传输服务,就需要告诉发送端重发。


可靠传输的实现比较复杂。即如果接收端发送给发送端的通知帧(告诉有收到误码)也出现了误码,那该怎么办呢。

de905e958c16b6f27349f5e40d12eead_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

1bc34aba129198ae23dc372eb715dfcd_761fc176126f42b7ad6b68ca17d08026.png

注意,此处将 帧 的称呼 改为了 分组。

6ecdfb14dfecd3b00fe47c23fb6b4514_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

f3e9fa38542980ed9ecc035b1cde24f6_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

4c026917c42d0636c7a6a80d257da78e_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

停止-等待协议 SW


1fa35fdcc1d921a5ef65254af6591621_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_9,color_FFFFFF,t_70,g_se,x_16.png


发送方发送完分组之后,不能立马从缓存中把分组删除,而是要等到ack才能删除。

这样就实现了可靠传输,但是还是会有一些特殊情况。


如果一开始就没发送失败。

838e62a5553424a6ca5d800576762604_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png


也有可能就是接收方 发送的确认分组或者否认分组都没有发送出去。


7279f08217108da173875a9bacb6253e_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_15,color_FFFFFF,t_70,g_se,x_16.png

5a5f702a63eed26a750a1ccc42162172_3004a70ab08944348e96d50e7a532572.png


所以需要对确认分组也需要加一个序号。

baf8630568e2443d4bebc58929ec1c57_424f90a2931f47f4ad5fb462abc2c1fa.png


对于点对点,可以不用给确认分组进行编号。数据链路层一般不会出现ACK分组迟到的问题。

6e2a530cfbd0a901657b8b3f7cf8dc65_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

da464ceda223e10daa9c681d89ef442b_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

一般 TA远小于TD,可以 忽略不计。

9d4c6d1eda68bdb5b517db2587fb21af_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

accfdd9f79c1069139794d3382e40acc_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_14,color_FFFFFF,t_70,g_se,x_16.png

例如使用卫星电路,会造成利用率很低。

d4d12f9f1519dff44f82ab2e9da815f2_c06832e0f8a547cf95f6e814c8ad90f7.png

练习题:

a5231355e7fc9e724f255fc3f1538f1e_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

退回N帧协议GBN:Go-Back-N

c27b190a32cfa9312f2aba493233d2e2_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png


GBN就是在流水线传输的基础上 利用发送窗口来限制发送方可以连续发送分组的个数

cae34688a89b00da4236368eef79a6ab_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png


WT是 发送窗口的范围,如果WT=1 那么就是停止等待协议SW。


如果超过了上限,就会造成严重的错误。

568fdbc6778e002cdbc17d20714bcb36_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png


无差错情况:

将0-4号依次发送出去,没有出现乱序和误码,然后按序接收,然后接收窗口向下滑动。发送方接收一个ack,就向前移动一个位置,这样就可以删除发送过的缓存了。

d42cfccc54e081a22b00883541e2b284_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png


可以进行进一步的优化,就是累计确认。

0fb3576e36dd909d875e256ebc24d1e7_9f4cc1e1550846dda01ccea972c8496b.png

246b99297d2ca919df2f1e74b18f798b_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

假设ack1传输丢失了,发送方也会知道ack4之前的也正确接收了。发送窗口往前滑动5个位置。接收方可以将已经接收的数据交付给上层处理了。


优点:确认分组丢失,发送方也可以不必重传。还可以减少网络资源的占用。


缺点:不能及时反映正确接收的信息。

f1a309c79e0270381036ba2983cfc23d_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

如果发送56701,而接收方第一个5就已经有差错了,不接收,那么后面的也同样不会接受。将他们丢失,并且重新发送一个ack4。每丢弃一个分组,就会发送一个ack4.


当发送方接收到了重复的ack4后,就可以立刻重传了。

1d11ae0f5c04479b226c04e5bbd4f36d_22e96fa8f97c4804b481f72bb33c7026.png

eaabfddd267b76dc582e3ffa730560d5_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png


如果WT超过范围,(成功接收到的信息没有发到发送方。)就会造成接收方无法辨析是不是接受过。

0e9808a36869021c87b3d2a6c90aa139_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png


f20f6778ca7f7c05a7239054605b32f9_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

a09e8622c6b6b1a5df260375abd64c87_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

退回N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议。


在协议的工作过程中发送窗口和接收窗口不断的向前滑动,因此这类协议又称为滑动窗口协议。


由于其特性,当通信线路的质量不好时,信道利用率并不比停止-等待协议高。


选择重传协议-SR:selective request

回顾GBN的优缺点:

437d026374e3abf55271bb966dba4dcc_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

选择重传协议为了使得发送方仅仅重传出现差错的分组,接收方不能再采用累积确认!而需要对每个正确接收到数据分组进行逐一确认!

假设采用三个比特来给分组编序号,就是0-7。

32093af11edd4b3d1586af26efac6472_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png


f3ff23466f2c0b137a90e516877ca1bf_2d151eacc639426884f5cd25f550fc1a.png

发送方接收到了3之后,并不能使发送窗口向前滑动,因为是未按序到达的窗口。


接收方在没收到2号,那么就接收窗口就不会向前滑动的。


如果在上述过程中,发送方的重传计时器超时了,那么就会重传2号,同时发送方也会记录45号已经成功发送了。

6acb2e58eeab33124da1e57898e33fda_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_11,color_FFFFFF,t_70,g_se,x_16.png


这个时候接收窗口重新收到了2,那么就会往前移动4个。

发送窗口接收到了2,也会向前移动4个。

e0845748f362060855502d8f0ed367cd_0e23bf0f0c1340d8b5647599ce719da5.png


如果超过了窗口的尺寸范围会怎么样呢?


会一样出现接收方无法分辨新旧的数据分组。

c10384e700bdeeec1190f2175a653f98_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

01d5a82dc8cb670730b43ab68bdc24f6_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png


相关文章
|
1月前
|
消息中间件 网络协议 C++
C/C++网络编程基础知识超详细讲解第三部分(系统性学习day13)
C/C++网络编程基础知识超详细讲解第三部分(系统性学习day13)
|
1月前
|
监控 网络协议 Java
Linux 网络编程从入门到进阶 学习指南
在上一篇文章中,我们探讨了 Linux 系统编程的诸多基础构件,包括文件操作、进程管理和线程同步等,接下来,我们将视野扩展到网络世界。在这个新篇章里,我们要让应用跳出单机限制,学会在网络上跨机器交流信息。
Linux 网络编程从入门到进阶 学习指南
|
3月前
|
SQL 运维 安全
黑客(网络安全)技术自学——高效学习
黑客(网络安全)技术自学——高效学习
28 1
|
3月前
|
开发框架 网络协议 .NET
【网络奇缘】- 计算机网络|分层结构|深入学习ISO模型
【网络奇缘】- 计算机网络|分层结构|深入学习ISO模型
48 0
|
1天前
【计算机网络】第三章 数据链路层(可靠传输)
【计算机网络】第三章 数据链路层(可靠传输)
|
2天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
16天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
30 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
17天前
|
传感器 监控 安全
|
1月前
|
机器学习/深度学习 开发者
论文介绍:基于扩散神经网络生成的时空少样本学习
【2月更文挑战第28天】论文介绍:基于扩散神经网络生成的时空少样本学习
16 1
论文介绍:基于扩散神经网络生成的时空少样本学习
|
1月前
|
机器学习/深度学习 存储 人工智能
一文带你了解神经网络是如何学习预测的
一文带你了解神经网络是如何学习预测的
21 0