| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 计算机网络学习笔记(5)---传输层--可靠数据传输、Rdt1.0、2.0、2.1、2.2、3.0、流水线与滑动窗口协议、GBN、SR -> 正文阅读 |
|
[网络协议]计算机网络学习笔记(5)---传输层--可靠数据传输、Rdt1.0、2.0、2.1、2.2、3.0、流水线与滑动窗口协议、GBN、SR |
目录 ?1 传输层1.1 传输层服务和协议 1、传输层协议为运行在不同Host上的进程提供了一种逻辑通信机制; 2、端系统运行传输层协议: (1)发送方:将应用递交的消息分成一个或多个的Segment,并向下传给网络层; (2)接收方:将接收到的segment组装成消息,并向上交给应用层; 3、传输层可以为应用提供多种协议?--- Interrnet上的TCP;UDP; 1.2 传输层与网络层的区别 1、网络层:提供主机之间的逻辑通信机制; 2、传输层:提供应用进程之间的逻辑通信机制; (1)位于网络层之上;(2)依赖于网络层服务;(3)对网络层服务进行(可能的增强); 1.3?Internet传输层协议 1、可靠、按序的交付服务(TCP) (1)拥塞控制;(2)流量控制;(3)连接建立; 2、不可靠的交付服务(UDP) 基于“尽力而为(Best-effort)”的网络层,没有做(可靠性方面的)扩展; 3、两种服务TCP/UDP均不保证延迟、带宽; 1.4 多路复用和多路分用 ?注:Socket是传输层与应用层之间的,“门”; 1、无连接分用---面向UDP? ?2、面向连接的分用---TCP,一对一 ?注:一个进程创建多个线程; ?1.5 UDP---User Datagram Protocol [RFC 768] 1、基于Internet IP协议----(1)复用/分用;(2)简单的错误校验; 2、“Best effort”服务,UDP服务:(1)丢失;(2)非按序到达; 3、无连接:(1)UDP发送方和接收方之间不需要握手;(2)每个UDP段的处理独立于其他段; 4、UDP优点(存在价值) (1)无需建立连接(减少延迟);(2)实现简单:无需维护连接状态;(3)头部开销小; (4)没有拥塞控制:应用可更好的控制发送时间和速率; 5、UDP应用 (1)常用于流媒体应用:容忍丢失;速率敏感;(2)DNS、SNMP; 在UDP上实现可靠数据传输:在应用层增加可靠性机制;应用特定的错误恢复机制; ?6、UDP校验和checksum校验和---检测UDP段在传输中是否发生错误(如位翻转); (1)发送方: a、将段的内容视为16-bit整数; b、校验和计算:计算所有整数的和,进位加在和的后面,将得到的值按位求反,得到校验和 c、发送方将校验和放入校验和字段; (2)接收方 a、计算所收到段的校验和; b、将其与校验和字段进行对比:不相等---检测出错误;相等:没有检测出错误(但可能也有错误) (3)校验和计算示例:最高位进位必须被加进去 2 可靠(不错、不丢、不乱)数据传输2.1 可靠数据传输原理 (1)可靠数据传输对应用层、传输层、链路层都很重要; (2)网络Top-10问题; (3)信道的不可靠特性决定了可靠数据传输协议(rdt)的复杂性; 2.2?可靠数据传输协议基本结构:接口 2.3?可靠数据传输协议 2.4 Rdt1.0:可靠信道上的可靠数据传输? (1)底层信道完全可靠;不会发生错误(bit? error);不会丢弃分组; (2)发送方和接收方的FSM独立; ?2.5 Rdt2.0:产生位错误的信道 (1)底层信道可能翻转分组中的位(bit),利用校验和检测位错误; (2)如何错误恢复? a、确认机制(Acknowledgements,ACK):接收方显式地告知发送方分组已正确接收; b、NAK:接收方显示地告知发送方分组有错误; c、发送方收到NAK后,重传分组; (3)基于这种重传机智的rdt协议称为ARQ(Automatic Repeat Request)协议; (4)Rdt2.0中引入的新机制:差错检测;接收方反馈控制消息:ACK/NAK;重传 ?2.6 Rdt2.1和2.2 1、Rdt2.0的缺陷:ACK/NAK消息发生错误/被破坏(corrupted) (1)为ACK/NAK增加校验和,检错并纠错; (2)发送方收到被破坏ACK/NCK时不知道接收方发生了什么,添加额外的控制消息; (3)如果ACK/NAK坏掉,发送方重传; (4)不能简单地重传:产生重复分组; 2、如何解决重复分组的问题 (1)序列号(Sequence number):发送方给每个分组增加序列号;(2)接收方丢弃重复分组; 3、Rdt2.1:应用对ACK/NAK破坏 发送方: 接收方: ?4、Rdt2.1 VS Rdt2.0 5、Rdt2.2:无NAK消息协议? ?2.7 Rdt3.0:信道既可能发生错误,也可能丢失分组 1、“校验和+序列号+ACK+重传”够用吗? 2、?发送方: ? 3、Rdt3.0示例: ?4、Rdt3.0性能分析---Rdt3.0能够正确工作,但性能很差 软硬件协同设计,停等操作,引起的Rdt3.0的性能很差 ?3 流水线机制和滑动窗口协议3.1 流水线协议? 1、允许发送方在收到ACK之前连续发送多个分组: (1)更大的序列号范围;(2)发送方/接收方需要更大的存储空间以缓存分组; ?3.2 滑动窗口协议(Sliding-window protocol) ?? 1、窗口---(1)允许使用的序列号范围;(2)窗口尺寸为N:最多有N个等待确认的消息; 2、滑动窗口---随着协议的运行,窗口在序列号空间内向前滑动; 3、滑动窗口协议:GBN,SR 3.3 GBN协议---Go-Back-N协议 ?1、Go-Back-N(GBN)协议:发送方 (1)分组头部包含K-bit序列号;(2)窗口尺寸为N,最多允许N个分组未确认; (3)ACK(n):确认序列号n(包含n)的分组均已被正确接收:可能受到重复ACK;累计确认 (4)为空中的分组设置计时器(timer); (5)超时Timeout(n)事件:重传序列号大于等于n,还未受到ACK的所有分组 2、GBN:发送方扩展FSM ?3、GBN:接收方扩展FSM ?(1)ACK机制:发送拥有最高序列号的、已被正确接收的分组的ACK; a、可能产生重复的ACK;b、只需要记住唯一的expectedseqnum; (2)乱序到达的分组: a、直接丢弃-->接收方没有缓存;b、重新确认序列号最大的、按序到达的分组; 4、GBN示例 ?3.4 Selective Repeat---SR协议,多了一个接收方的窗口 1、 GBN协议缺陷:会重传重复分组很多; 2、SR协议改进 (1)接收方对每个分组单独进行确认---设置缓存机制,缓存乱序到达的分组; (2)发送方只重传那些没收到ACK的分组---为每个分组设置定时器; (3)发送方窗口:a、N个连续的序列号;b、限制已发送且未确认的分组; 3、SR发送方/接收方窗口 ?4、SR协议 ? 5、SR协议示例? ? |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/25 21:12:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |