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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 如何实现可靠的传输 -《计算机网络:自顶向下方法》 -> 正文阅读

[网络协议]如何实现可靠的传输 -《计算机网络:自顶向下方法》

如何实现可靠的传输

rdt:要实现的可靠传输

udt:rdt所使用的底层的不可靠传输

  • rdt1.0-如果底层的通信完全无误

  • 请添加图片描述

  • rdt2.0-如果底层的通信会产生位错误,(假设ACK和NCK通知不会产生错误)。则需要

    • 错误检测(Error detection) : 校验和(Checksum)

    • 接收反馈(Receiver feedback)发生ACK(Acknowledgment)和NAK给发送者,以指示是否成功接收信息

    • 重发(Retransmission)

    • 请添加图片描述

    • 请添加图片描述

  • rdt2.1 如果底层的通信会产生位错误,(不假设ACK/NAK不会出错)。需要引入:

    • duplicate packets:发送者可能会收到损坏的ACK/NAK报文段,无法知道接收者是否收到,重新发送该报文段。
    • 引入序号(Sequence Number), 接收者通过检查序号来检查已经接收到的报文段是否被重发的。这里假设每次只会有一个报文段被传输,所以只需要0和1两个序号,就可以区分是重复的还是下一个应该接收的。(接收的0号,期待下一个为1号;接收到1号,期待下一个为0号)。(TCP的序号按字节数,而不是报文段的个数
    • 请添加图片描述
  • 请添加图片描述

  • rdt2.2-如果底层的通信会产生位错误,(不假设ACK/NAK不会出错),且不再使用NAK,只有ACK

    • (假设每次只会有一个报文段被传输,所以只需要0和1两个序号)
    • 接收者收到报文段后返回携带着成功接收的最新的报文段的序号ACK给发送者
    • duplicate ACKs:若发送者收到两个携带着相同序号的ACK(上一次发送的报文段的序号),则认为本次发生的报文段未被收到
    • 请添加图片描述
    • 请添加图片描述
  • rdt3.0 如果底层的通信会产生报文段丢失位错误

    • 因为报文段可能会丢失,发送者可能不能收到ACK。但发送者不能一直等待这个ACK。所以,在报文段发送出一报文段时间后还没有收到ACK,则认为其已经丢失,重新发送该报文段。

    • 在rdt2.2的基础上加入倒计时的计时器(countdown timer):每当发送一个报文段后,启动开始倒计时;计时器归零后重发。

    • 请添加图片描述

    • 接收者的状态机与rdt2.2相同

流水线化 Pipelined

  • stop-and-wait:请添加图片描述

  • pipelined:请添加图片描述

  • 同时发送多个报文段,而用等待一个报文段完成传输(收到ACK)再发送下一个

Go-Back-N(GBN) (Sliding-window protocol)
  • 发送者:

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uBAFM00B-1641913456595)(gbn.png)]
    • base: 最早的没有收到ACK的报文段
    • nextseqnum :最小的没有发送的报文段
    • [0, base - 1] :已经完成传输的报文段(ACK)
    • [base, nextseqnum - 1] :已发送当未收到ACK的报文段
    • [nextseqnum, base + N - 1] : 即将要发送的报文段
    • N: Window Size 窗口大小
    • 一次性将[nextseqnum, base + N - 1]内的报文段发出,不需等待ACK
    • 请添加图片描述
  • 接收者:

    • 只接受其期待的下一个报文段(序号为expectedseqnum),其他的报文段直接丢弃
    • 其回复的ACK携带其已经收到的最新的报文段的序号、
    • 请添加图片描述
Selective Repeat(SR)
  • 避免了Go-Back-N对大量报文段的不必要的重发。
  • 发送者:
    • 窗口内的每一个报文段都可以被单独标记为已ACK,而不用像GBN那样只接收窗口的第一个报文段的ACK(base)
    • 每一个报文段都有其自己的逻辑的计时器,以在超时后重发该报文段。
    • 接收到ACK后,将指定的报文段标记为已被接收的。如果这个报文段的序号为send_base,则可以推进窗口到最小的没有被确认的报文段的序号。
  • 接收者:
    • 接收到序号在其窗口范围[rcv_base, rcv_base+N-1]内的报文段,将其缓存,并对每一个接收到的报文段返回对应的ACK(不在像GBN那样只接收其期待的下一个报文段)。若接收到的报文段的序号为rcv_base,则可以推进窗口。
    • 接收到序号在[rcv_base - N, rcv_base - 1]内的报文段:说明虽然该报文段已经被接收了,但发送者未收到ACK。需重新发送ACK
  • 请添加图片描述
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 02:22:35  更:2022-01-14 02:23:00 
 
开发: 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年10日历 -2024/10/5 9:27:47-

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