IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络 Kurose 第三章 3.4 可靠数据传输原理 -> 正文阅读

[网络协议]计算机网络 Kurose 第三章 3.4 可靠数据传输原理

3.4.1 构造可靠数据传输协议

1.经完全可靠信道的可靠数据传输

首先,我们考虑最简单的情况,即底层信道时完全可靠的,我们称该协议为rdt1.0,该协议本身是简单的。

rdt的发送端只通过rdt_send(data)时间接受来自较高层的数据,产生一个包含该数据的分组。并将分组发送到信道中。

在接收端,rdt通过rdt_rcv(packet)时间从底层信道接收一个分组,从分组中取出数据,并将数据上传给较高层。

在这个简单的协议中,一个单元数据与一个分组没什么差别。而且,所有分组是从发送方流向接收方;有了完全可靠的信道,接收端就不需要提供任何反馈信息给发送方。因为不必担心出现任何差错。

2.经具有比特差错信道的可靠数据传输:rdt2.0

控制报文使用“肯定确认”和“否定确认”可以让发送方知道哪些内容被正确接收,那些内容接受有无并因此需要重复。在计算机网络环境中,基于这样重传机制的可靠数据传输协议称为自动重传请求协议(ARQ)。

ARQ协议中还需要另外三种协议功能来处理存在比特差错的情况

  • 差错检测
  • 接收方反馈
  • 重传

停等协议:发送方确认接收方收到正确的分组的时候在发送一块新的数据

rdt2.1

发送方获得来自上层的数据后,封包(编号为0)发送至接收方,接收方接收到分组后:

1、如果没有损坏,回送ACK分组,并等待编号为1的分组

2、如果损坏,回送NAK分组,并继续等待编号为0的分组

发送方接收到回送分组后:

1、如果没有损坏,且为ACK分组,无任何动作,等待上层协议

2、如果没有损坏,且为NAK分组,重发编号为0的分组

3、如果损坏,无论是ACK还是NAK,重发编号为0的分组

接收方收到分组后(接收方不知道自己的ACK或NAK分组在传输过程中是否损坏):

1、如果没有损坏,且为编号1的分组,回送ACK分组,且等待编号为0分组(循环)

2、如果没有损坏,且为编号0的分组,回送ACK分组,且等待编号为1分组

3、如果损坏,回送NAK分组,等待编号为0分组

rdt2.2

发送方获得来自上层的数据后,封包(编号为0)发送至接收方,接收方接收到分组后:

1、如果没有损坏,回送ACK0分组,并等待编号为1的分组

2、如果损坏,回送ACK1分组,并继续等待编号为0的分组

发送方接收到回送分组后:

1、如果没有损坏,且为ACK0分组,无任何动作,等待上层协议

2、如果没有损坏,且为ACK1分组,重发编号为0的分组

3、如果损坏,无论是ACK1还是ACK0,重发编号为0的分组

接收方收到分组后(接收方不知道自己的ACK分组在传输过程中是否损坏):

1、如果没有损坏,且为编号1的分组,回送ACK1分组,且等待编号为0分组(循环)

2、如果没有损坏,且为编号0的分组,回送ACK0分组,且等待编号为1分组

3、如果损坏,回送ACK1分组,等待编号为0分组

3. 经具有比特差错的丢包信道的可靠数据传输:rdt3.0

3.4.2 流水线可靠数据传输协议

不以停等方式运行,允许发送方发送多个分组而无需等待确认。

  • 必须增加序号范围,因为每个输送中的分组必须有一个唯一的序号,而且也许有多个在输送中的未确认的报文
  • 协议的发送方和接收方两端也许不得不缓存多个分组
  • 所需序号范围和对缓冲的要求取决于数据传输协议如何处理丢失,损坏及延时过大的分组。

3.4.3 回退N步

基序号:最早未确认分组序号

下一步序号:最小的未使用的序号

已被发送但还未被确认的分组的许可序号范围可以被看成是一个在序号范围内长度为N的窗口。随着协议的协议的运行,该窗口在序号空间向前滑动。N被称为窗口长度。GBN协议也被称为滑动窗口协议。

GBN发送方必须响应三类事件:

  • 上层的调用。当上层调用的时候,发送方首先检查发送窗口是否已满,即是否有N个已发送但未被确认的分组。
  • 收到一个ACK。在GBN协议中,对序号为n的分组的确认采取累计确认的方式。
  • 超时事件。定时器将用于恢复数据或者确认分组丢失。

3.4.4 选择重传(SR协议)

SR发送方的事件与动作

  1. 从上层收到数据。当从上层收到数据以后,SR发送方检查下一个可用于该分组的序号。
  2. 超时。定时器再次被用来防止丢失分组。
  3. 收到ACK。如果收到ACK,倘若该分组序号在窗口内,则SR发送方将那个被确认的分组标记为已接收。如果该分组的序号等于send_base,则窗口基序号向前移动到具有最小序号的未被确认分组处。

SR接收方的事件与动作

  1. 序号在 [rcv_base, rcv_base+N-1] 内的分组被正确接收。在此情况下,收到的分组落在接收方的窗口内,一个选择 ACK 被回送给发送方。如果该分组以前没收到过,则缓存该分组。如果该分组的序号等于接收端的基序号(rcv_base),则该分组以及以前缓存的序号连续的(起始于 rcv_base 的)分组交付给上层。然后,接收窗口按向前移动分组的编号向上交付这些分组。
  2. 序号在 [rcv_base-N, rcv_base-1] 内的分组被正确收到。在此情况下,必须产生一个 ACK,即使该分组是接收方以前确认过的分组。
  3. 其他情况。忽略该分组。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:40:35  更:2022-04-15 00:45:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 3:09:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码