| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 【计算机网络】第3章 运输层 -> 正文阅读 |
|
[网络协议]【计算机网络】第3章 运输层 |
运输层文章目录3.1 运输层服务一,运输层和网络层的比较 运输层为相互通信的应用进程提供了逻辑通信 运输层: 进程间的逻辑通信 网络层: 主机间的逻辑通信 二,运输层协议数据的封装 通常链路层最大传输单元,为1500个字节 TCP具有最大报文长度(MaximumSegment Size,MSS),需减去ip请求头,20个bit,减去20个TCP报头,就是报文长度最大为1460 二,因特网运输层协议 可靠的、按序的交付(TCP)
不可靠、不按序交付(UDP)
它们都是不保证时延和带宽,具体在业务层保证 3.2 复用与分解多路复用与多路分解将由网络层提供的主机到主机的交付服务延伸到进程到进程的交付服务 分解:将运输层接收到的报文段交付给正确的套接字(一路到多路,向上) 复用:从多个套接字收集数据,用首部封装数据(多路到一路,向下) 无连接的复用和分解UDP套接字由二元组标识:
思考: 假定在主机C上的一个进程有一个具有端口号6789的UDP套接字。假定主机A和主机B都用目的端口号6789向主机C发送一个UDP报文段。这两台主机的这些报文段在主机C都被描述为相同的套接字吗?如果是这样的话,在主机C的该进程将怎样知道源于两台不同主机的这两个报文段?
面向连接分解TCP套接字由四元组标识:
思考:假定在主机C端口80上运行的一个Web服务器。假定这个Web服务器使用持续连接,并且正在接收来自两台不同主机A和B的请求。被发送的所有请求都通过位于主机C的相同套接字吗?如果它们通过不同的套接字传递,这两个套接字都具有端口80吗?讨论和解释之
多线程Web服务器 当今高性能Web服务器通常只使用一个进程,但为每个新的客户连接创建一个具有新连接套接字的新线程 3.3 无连接传输: UDPUDP协议特点
应用:
要想有可靠性,必须在应用层增加 UDP检验和 将报文所有内容分隔为16比特整数序列,初始UDP校验和位置全为0,然后全部相加后,取反,即为UDP校验和 当数字作加法时,最高位进比特位的进位需要加到结果中 思考:UDP提供的是端到端的差错检测,链路层对传输过程的帧进行差错检查。因此UDP提供的差错检查是否没有必要?
3.4 可靠数据传输的原则不可靠信道的特点决定了可靠数据传输协议(rdt) 的复杂性 我们逐渐递增地研究可靠数据传输协议(rdt) 的发送方和接收方 ###rdt1 底层信道非常可靠:无比特差错且分组按序无丢失 发送方: 接收方: 但是完美的信道不存在 ###rdt2 具有比特差错的底层信道:有比特差错,但分组按序无丢失 与rdt1相比,增加了检错,反馈(ACK为正确收到,NAK为错误收到),重传的机制 它是一个停等协议:发送方发出1个分组,等待 接收方响应后再继续发送 发送方: 接收方: rdt2有重大缺陷,如果ACK/NAK受损,接收方不清楚将是什么情况,如果重传的话,会导致重复,因此我们需要对每个分组增加序列号,也就是进化成rdt2.1 rdt2.1发送方,处理受损的ACK/NAK 接收方,处理受损的ACK/NAK 注意:rdt2.1的发送方状态增加了一倍,状态必须“记住”是否 “当前的”分组具有0或1 序号;接收方必须检查是否接收到的分组是冗余的 问题1:两个序号seq. #’ s (0,1) 将够用. ( 为什么?)
问题2:必须检查是否收到的ACK/NAK受损?
rdt2.2这是一个无NAK的协议,只需要在ACK里面带有分组的序号,如果需要不正确,重传即可 ###rdt3 能够处理具有差错和丢包的信道 方法:发送方等待ACK一段“合理的”时间,如果没有等待到就重传,简单来说就是加一个定时器 发送方: rd3效率很低,网络资源利用率很低,由于停等协议 但是停等协议如果不存在的话,发送方网络和接收方的网络能够对报文重排,那么比特交替协议将不能正确工作,将会乱序 流水线协议发送方允许发送多个、“传输中的”,还没有应答的报文段 它比较停等协议能增加利用率 滑动窗口协议发送方和接收方都具有一定容量的缓冲区(即窗口),允许发送站连续发送多个分组而不需要等待应答 发送窗口:发送端允许连续发送的分组的序号表 接收窗口:接收方允许接收的分组的序号表 Go-Back_N发送窗口尺寸为N;接收窗口尺寸为1;位于发送窗口内的分组才允许被发送,位于接收窗口内的分组才能被接收,关键是窗口如何滑动 重要特征:累计ACK(对正确接收的分组总是发送具有最高按序序号的ACK),全部重传 发送方FSM:
接收端FSM:
例子: 缺点:有不必要的重传问题 选择重传发送窗口尺寸为N;接收窗口尺寸为N; 特征:独立ACK,重传单个分组
发送方:
接收方:
例子: 问题:当接受窗口太大,难以区分新分组和重传分组,因此窗口长度需要小于等于序号空间的一半 可靠传输的机制:
3.5 面向连接的传输: TCP
报文段结构TCP序号就是已经发送第一个字节序号,确认号就是期待对方发送的下一个字节序号 为什么不从0开始编号呢?
如何设置超时的时间?
###可靠数据传输 TCP在IP不可靠服务的基础上创建可靠数据传输服务
由于重传的情况很多,重传的话时间间隔长,所以出现了快速重传(在定时器超时之前重传)的算法,这也是TCP实现可靠数据传输有特点的地方 通过冗余ACK,检测丢失的报文段,然后重传
###流量控制 流量控制:发送方不能发送太多、太快的数据让接收方缓冲区溢出 工作原理: 接收方在报文段接收窗口字段中通告其接收缓冲区的剩余空间,发送方要限制未确认的数据不超过RcvWindow
###连接管理 TCP是面向连接的协议,TCP连接的建立和释放是每次TCP传输中必不可少的过程,三个过程
总结:TCP连接的客户端生命周期 TCP连接服务器生命周期: 3.6 拥塞控制的原理当大量的分组进入网络,超出了网络的处理能力时,会引起网络局部或整体性能下降,这种现象称为拥塞。不加控制的拥塞甚至导致整个网络瘫痪 不同于流量控制
拥塞的原因与开销 更实际的情况,当分组丢失时, 任何用于传输该分组的上游传输能力都被浪费! 两类拥塞控制方法
3.7 TCP拥塞控制发送方根据所“感知”到的网络拥塞程度来“限制”发送速率 发送方传递的速率是根据这个公式来的
TCP拥塞控制算法
TCP拥塞控制FSM描述 总结:
###TCP吞吐量 作为窗口长度和RTT的函数,TCP的平均吞吐量是什么?(忽略慢启动)
###TCP公平性 如果K个 TCP 会话 共享带宽为 R的链路瓶颈, 每个会话应有R/K的平均链路速率 破坏公平的方式有两种:
之后持续更新,欢迎来我的个人博客网站😊😘www.liangyuanshao.top |
|
网络协议 最新文章 |
使用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年12日历 | -2024/12/30 4:13:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |