【计算机网络 - 第三章】运输层

news2024/12/23 22:44:34

目录

一、多路复用和多路分解

1、运输层端口号

2、概述

3、原理

 1、无连接的多路复用与多路分解 - UDP

2、面向连接的多路复用与多路分解 - TCP

二、无连接运输——UDP用户数据报协议

1、UDP概述

2、UDP的优点

三、可靠数据传输原理

1、概述

2、rdt1.0——可靠信道上的可信数据运输

3、rdt2.0——产生位错误的信道

4、rdt2.1——发送方处理错误的ACK/NAK

5、rdt2.2——不需要NAK的协议

6、rdt3.0—— 比特差错和丢包的信道、比特交替协议

四、流水线可靠数据传输协议

1、流水线技术

2、回退N步协议GBN

3、选择重传

五、面向连接的传输——TCP传输控制协议

1、TCP概述

2、TCP报文段结构 

(1)端口号

(2)序号和确认号

(3)数据偏移

(4)保留

(5)窗口rwnd

(6)校验和

(7)标志位

① 紧急标志位URG

② 推送标志位PSH

③ 复位标志位RST

④ 同步标志位SYN

⑤ 终止标志位FIN

(8)紧急指针

(9)选项(长度可变)

(10)填充

3、TCP可靠传输的实现

4、TCP超时重传时间的选择

(1)超时重传时间RTO选择

(2)计算超时重传时间RTO的方法

 ① RTTs加权平均往返时间

② RTTd偏差的加权平均

(3)误差分析

5、TCP流量控制

6、TCP拥塞控制

(1)慢开始

(2)拥塞避免

(3)快重传

(4)快恢复

7、TCP连接管理

(1)建立TCP连接

(2)释放TCP连接

六、UDP和TCP比较 

七、TCP吞吐量

八、相关习题


一、多路复用和多路分解

1、运输层端口号

  • 运行在计算机上的进程用进程标识符PID标志
  • 不同的操作系统(windows、Linux)用不同格式的PID
  • TCP/IP体系的运输层用端口号来区分应用层的不同进程

端口号用16bit表示,取值范围0~65535

  • 熟知端口号【0~1023】
    • 指派给重要应用协议,例如:FTP——21/20,HTTP——80,DNS——53
  • 登记端口号【1024~49151】
    • 为没有熟知端口号的应用程序使用
  • 短暂端口号【49152~65535】
    • 留给客户进程选择暂时使用

端口号只有本地意义,只是为了标识本计算机应用层的各进程

2、概述

一个进程对应一个或多个套接字

  • 多路分解(接收端)报文段→各套接字 将运输层报文段中的数据交付到正确的套接字的工作
  • 多路复用(发送端)各套接字→报文段 从不同套接字中收集数据块,并在数据块封装上首部信息生成报文段,将这些报文段传递给网络层

3、原理

 1、无连接的多路复用与多路分解 - UDP

UDP套接字用二元组标识(目的IP地址,目的端口号)

如果两个UDP报文段具有不同的源IP地址(或源端口号),但具有相同的目的ip地址和目的端口号,则这俩报文段将通过相同的目的套接字定向到相同的进程

2、面向连接的多路复用与多路分解 - TCP

  • 主机A的P1和主机B的P3除了源IP地址外均相同,主机C能准确区分P1和P3
  • 主机B的P2和P3除了源端口号外均相同,主机C能准确区分P2和P3

TCP套接字用四元组标识

(源IP地址 源端口号 目的IP地址 目的端口号)

两个TCP报文段具有不同的源IP地址(或源端口号),将被定向到两个不同的套接字

二、无连接运输——UDP用户数据报协议

1、UDP概述

  • UDP从应用进程得到数据,附加上用于多路复用/多路分解服务的【源、目的端口号】,将形成的报文段交给网络层,网络层将其封装到IP数据报,然后将其交付给接收主机
  • 当报文段到达接收主机,UDP使用目的端口号将报文段的数据交给正确的进程
  • 在发送报文段之前,发送方和接收方运输层实体之间没有握手,因此是无连接的
  • DNS是一个通常使用UDP的应用层协议的例子
  • UDP段使用应用层协议提供可靠性

2、UDP的优点

  • 无需建立连接 TCP需要三次握手,而UDP无须任何准备直接可以传输数据
  • 无需维护连接状态
  • 分组首部开销小 每个TCP报文段有20字节的首部开销,UDP只有8个字节的开销

三、可靠数据传输原理

1、概述

注:本节研究蓝框和绿框代表的可靠数据传输协议

(1)有限状态机FSM

2、rdt1.0——可靠信道上的可信数据运输

  • 假设:下层信道完全可靠:既不会发生位错误,也不会丢弃分组(理想状态)
  • 在发送方向接收方发送数据时,接收方不必要向发送方反馈任何消息,因为发送方能100%确保数据可以正确无误地发送到接收方

3、rdt2.0——产生位错误的信道

  • 假设:可能发生比特位翻转错误:checksum 检测比特位错误(2.1,2.2都是这个错误)

  • ACKs(肯定确认):接收方告知发送方,分组已正确接收——停等协议
  • NAKs(否定确认):接收方告知发送方,分组有错误
  • 当发送方收到NAK,重传数据包(pkt)——自动重传协议ARQ

rdt2.0缺点

  • 如果ACK/NAK出错,发送方不知道接收方出了什么情况
  • 不能直接重传,因为可能发生重复传输
  • 发送方需要让接收方知道自己发送的数据是新的还是旧的——在数据报添加顺序号

4、rdt2.1——发送方处理错误的ACK/NAK

给分组添加序列号

  • 假设:ACK或NAK分组发生比特差错:如果发送方收到了含糊不清的ACK或NAK分组(发生比特差错)时,只需要重传当前分组既可。
  • 然而这种方法会产生一个问题:接收方不知道发送方是否正确地收到了ACK或NAK分组,因此接收方无法事先确认它收到的是新的分组还是一次重传。解决这个问题的简单办法就是让发送方对其数据分组编号,并在分组中添加一个序号字段。这样接收方就可以根据分组序号来判断收到的是新的分组还是一次重传。

发送方:

接收方:

5、rdt2.2——不需要NAK的协议

  • 与rdt2.1类似,但只使用ACKs,给ACK加上顺序号,不需要NACK
  • 发送方收到重复的ACK,将进行与接收NAK后一样的动作:重传数据报

6、rdt3.0—— 比特差错和丢包的信道、比特交替协议

  • 假设:既会产生比特差错,又会产生分组丢失
  • 对于分组丢失:发送方发送一个分组时启动一个倒计数定时器,如果在倒计数定时器倒计时结束之前收到了ACK响应,则中断定时器,进入准备接收来自上层的下一次调用。如果倒计数定时器超时,则发送方认为分组丢失,向接收方重传该分组,并且重新启动定时器

注:

  1. 定时器超时有以下三种可能:数据分组确实丢失、ACK丢失、过度时延(发送方与接收方之间的一个往返时延大于倒计数定时器)
  2. 重传在发送方到接收方的信道中引入了冗余数据分组,但是rdt3.0是基于rdt2.2的,rdt2.2可以处理冗余数据分组,因此rdt3.0也可以处理冗余数据分组

四、流水线可靠数据传输协议

1、流水线技术

 

  • 必须增加序号范围。因为每个输送中的分组(不计算重传的) 必须有一个唯一的序号, 而且也许有多个在输送中的未确认报文。
  • 发送方和接收方需要缓存多个分组。发送方最低限度应当能缓冲那些已发送但没有确认的分组。接收方或许也需要缓存那些已正确接收的分组。
  • 所需序号范围和对缓冲的要求取决于数据传输协议如何处理丢失、损坏及延时过大的分组。

解决流水线的差错恢复有两种基本方法: 

  • 回退N步(Go-Back-N,GBN) 
  • 选择重传(Selective Repeat, SR)

2、回退N步协议GBN

GBN协议:允许发送方发送多个分组而不需等待确认,但它也受限于在流水线中未确认的分组数不能超过某个最大允许数N,接收方丢弃所有失序分组 

  • 上图给出窗口长度N=4的GBN协议运行情况,发送方先发送分组0~3,在继续发送前,必须等待直到一个或多个分组被确认
  • 当收到每一个连续的ACK(ACK0-ACK1),窗口向前滑动,可以发分组4、5
  • 因为分组2丢失,则接收方丢弃失序分组3、4、5

GBN缺点:一旦超时,会有许多不必要重传的分组被重新传送,尤其是当窗口长度N很大时,随着差错率的提升,信道中会充斥着不必要重传的分组

3、选择重传

SR协议:让发送方仅重传那些它怀疑在接收方出错(丢失或受损)的分组从而避免不必要的重传,失序分组将被接收方缓存

五、面向连接的传输——TCP传输控制协议

1、TCP概述

  • 点对点通信:发送者→接受者
  • 全双工:可以同时双向传输数据(全双工——电话,半双工——对讲机)
  • 面向连接:通信前双方先握手(交换控制报文),建立数据传输所需状态(套接字、缓存、变量)
  • 可靠、有序的字节流:不保留报文边界
  • 流水线

2、TCP报文段结构 

(1)端口号

  • 源端口号:16bit,发送方
  • 目的端口号:16bit,接收方

(2)序号和确认号

  • 序号32bit 指出本TCP报文段数据载荷的第一个字节的序号

  • 确认序号ack:指出期望收到对方下一个TCP报文段数据载荷的第一个字节的序号,也是对之前收到的所有数据的确认
  • (若确认号=n,说明到序号n-1为止所有数据都已经正确接收,期望收到序号为n的数据)
  • 只有当ACK位取值为1时,确认序号段才有效,TCP规定在连接建立后所有传送的TCP报文段都必须把ACK置1

(3)数据偏移

  • 数据偏移占4bit,以4B字节为单位
  • 指出【TCP报文段的数据载荷部分的起始】距离【TCP报文段的起始处】有多远

实际上指出TCP报文段的首部长度

  • 首部固定长度为20字节(5个单位),因此数据偏移字段的最小值为0101
  • 首部最大长度为60字节(15个单位),因此数据偏移字段最大值为1111
  • 设数据偏移=0101,则偏移值为5,5×4=20字节,即首部长度=20字节

(4)保留

  • 6bit,保留为今后使用,目前置为0

(5)窗口rwnd

  • 16bit,以字节为单位
  • 指出发送本报文段一方的接收窗口
  • 本报文【接收方】按照本报文【发送方的报文的窗口值】来设置自己的窗口值
  • 以接收方的接收能力来控制发送方的发送能力,称为流量控制

(6)校验和

  • 16bit
  • 检查范围:TCP报文段首部 + 数据载荷

(7)标志位

① 紧急标志位URG

  • URG=1时,紧急指针字段有效,URG=0时,紧急指针字段无效
  • 当发送方有紧急数据时,可以将紧急数据插队到发送缓存的最前面,并立刻封装到报文段发送

② 推送标志位PSH

  • 尽快上交应用进程,不必等到接收缓存都填满再向上交付

③ 复位标志位RST

  • 复位TCP连接
  • 当RST=1时,表明TCP连接出现异常,必须释放连接,再重新建立连接
  • 用于拒绝一个非法报文段或拒绝打开一个TCP连接

④ 同步标志位SYN

  • 在TCP连接建立时用于同步序号

⑤ 终止标志位FIN

  • 用来释放TCP连接

(8)紧急指针

16bit,指明紧急数据的长度

(9)选项(长度可变)

  • 最大报文段长度MSS选项:TCP报文段数据载荷部分的最大长度
  • 窗口扩大选项:扩大窗口,提高吞吐率
  • 时间戳选项:用于计算往返时间RTT,用于处理序号超范围的情况(防止序号绕回PAWS)

(10)填充

因为选项长度可变,所以要用填充确保报文段首部能被4整除

3、TCP可靠传输的实现

5.7 TCP可靠传输的实现_哔哩哔哩_bilibili

TCP基于以字节为单位的滑动窗口来实现可靠传输

用SR选择重传协议——将失序分组保存在缓存中

 相关题目:

4、TCP超时重传时间的选择

(1)超时重传时间RTO选择

  • 如果超时重传时间RTO < 往返时间RTT——引起报文段不必要的重传,网络负荷增大

  • 如果超时重传时间RTO >> 往返时间RTT——网络空闲时间增大,降低传输效率

 综上:RTO应该设置为略大于RTT的值

(2)计算超时重传时间RTO的方法

 RTO=RTT_{S}+4\times RTT_{D}

 ① RTTs加权平均往返时间

RTT_{S1}=RTT_{1}

newRTT_{S}=(1- \alpha )\times oldRTT_{S}+\alpha \times newRTT_{sample}

\alpha =0.125

② RTTd偏差的加权平均

RTT_{D1}=RTT_{1}\div 2

newRTT_{D}=(1- \beta )\times oldRTT_{D}+\beta \times \left | oldRTT_{S}-newRTT_{sample}\right |

\beta =0.25

出现超时重传,新的RTO=2倍旧RTO

(3)误差分析

5、TCP流量控制

5.4 TCP的流量控制_哔哩哔哩_bilibili

流量控制:让发送方的发生速率不要太快,要让接收方来得及接收,利用调整滑动窗口长度的机制

收到确认后,先滑动窗口,再流量控制(改变窗口大小)

 

 

 相关习题:

6、TCP拥塞控制

5.5 TCP的拥塞控制_哔哩哔哩_bilibili

拥塞:对网络的某一资源需求超过该资源所能提供的可用部分,网络性能就会变坏

发送方维护一个拥塞窗口cwnd的状态变量: 其值取决于网络的拥塞程度,并且动态变化
拥塞窗口cwnd的维护原则

  • 只要网络没有出现拥塞,拥塞窗口就再增大一些
  • 但只要网络出现拥塞,拥塞窗口就减少一些

判断出现网络拥塞的依据: 没有按时收到应当到达的确认报文 (即发生超时重传)


发送方将拥塞窗口作为发送窗口swnd,即swnd = cwnd
维护一个慢开始门限sshresh状态变量:

  • 当cwnd < sshresh时,使用慢开始算法
  • 当cwnd > sshresh时,停止使用慢开始算法而改用拥塞避免算法
  • 当cwnd = sshresh时,既可使用慢开始算法,也可使用拥塞避免算法

(1)慢开始

  • 拥塞窗口cwnd是x,就可以发生x个数据报文段
  • 如果接收方返回已传数据报个数m的确认报文段,则拥塞窗口cwnd=cwnd+m
  • 当拥塞窗口值达到sshresh(慢开始门限),则进入拥塞避免算法

(2)拥塞避免

拥塞窗口只能+1,即cwnd=cwnd+1

假设报文段发生丢失,则发送方会对这些丢失报文段超时重传,则判断出现网络拥塞

  • 将【慢开始门限值】更新为【发生拥塞时拥塞窗口的一半】
  • 拥塞窗口减少为1,并重新开始慢开始算法

(3)快重传

快重传:使发送方尽快进行重传,而不是等超时重传计时器超时再重传

  • 要求接收方不要等待自己发送数据时才进行捎带确认, 而是要立即发送确认
  • 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
  • 发送方一旦收到3个连续的重复确认, 就将相应的报文段立即重传, 而不是等该报文段的超时重传计时器超时再重传
  • 对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞 (进而降低拥塞窗口cwnd为1) ,使快重传可以使整个网络的吞吐量提高约20%

(4)快恢复

发送方一旦收到3个重复确认,知道只是丢了个别报文段,不启动慢启动算法,执行快恢复算法

慢开始门限和拥塞窗口值cwnd=当前窗口的一半,执行拥塞避免算法

 

7、TCP连接管理

TCP是面向连接的协议,基于运输连接来传输TCP报文段

(1)建立TCP连接

三报文握手目的:建立可靠传输,确保数据丢失后可以恢复

 相关习题:

 

(2)释放TCP连接

四报文挥手

六、UDP和TCP比较 

七、TCP吞吐量

一条链路的平均吞吐量 = 最大段长度MSS × 最大场口尺寸W / RTT

八、相关习题

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/698417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AUTOSAR】BMS开发实际项目讲解(十一)----电池管理系统相关项功能安全要求

相关项功能安全要求 SG-BMS-1 : BMS系统应防止电池单体过充导致热失控&#xff08;ASIL C&#xff09; 功能框图&#xff08;SG-BMS-1&#xff09; 功能组件说明 功能组件ID 功能组件名称 描述 ASIL等级 FSC-FC-01 Detection Cell Volt&Temp 采集表征单体电压和温度的…

Qt中QCompleter自动补全功能

在Qt中有QCompleter这个类可以和QLineEdit组合实现自动补全功能&#xff0c;类似搜索框形式的&#xff0c; 1.QCompleter类可以在输入框输入字符时&#xff0c;进行提示可以匹配上的字符 例&#xff1a;为QLineEdit设置自动补全QLineEdit* pLineEdit new QLineEdit(this);QStr…

【算法】最长递增子序列:动态规划贪心+二分查找

文章目录 最长递增子序列解法一&#xff1a;动态规划解法二&#xff1a;LIS 和 LCS 的关系解法三&#xff1a;贪心 二分查找 相关题目673. 最长递增子序列的个数 https://leetcode.cn/problems/number-of-longest-increasing-subsequence/1964. 找出到每个位置为止最长的有效障…

29.组件库 Element UI

Element UI是PC端常用的组件库&#xff0c;支持vue2与vue3&#xff0c;vue2项目使用的叫 Element UI,vue3使用的叫 Elements Plus&#xff0c;官网地址 一个 Vue 3 UI 框架 | Element Plus 我们下面的代码都是以vue3为例 目录 1 安装 2 引入 3 使用 1 安装 2 引入 完…

快消EDI:联合利华Unilever EDI需求分析

联合利华&#xff08;Unilever&#xff09;是一家跨国消费品公司&#xff0c;总部位于英国和荷兰&#xff0c;在全球范围内经营着众多知名品牌&#xff0c;涵盖了食品、饮料、清洁剂、个人护理产品等多个领域。作为一家跨国公司&#xff0c;联合利华在全球各地都有业务和生产基…

el-table表单一键展开折叠,展开部分后一键全部展开或折叠

实现功能&#xff1a; 1.表单一键展开或者一键折叠 2.表单点击展开一部分后&#xff0c;再次点击展开或折叠按钮可以全部展开或全部折叠 3.完整代码在最后 1.建立el-table的树形结构 1.ref"table"&#xff0c;用节点绑定的方式实现 2.data&#xff1a;树形结构…

Redis系列--数据过期清除策略缓存淘汰策略

一、过期策略 一、前言 Redis 所有的数据结构都可以设置过期时间&#xff0c;时间一到&#xff0c;就会自动删除。可以想象里面有一个专门删除过期数据的线程&#xff0c;数据已过期就立马删除。这个时候可以思考一下&#xff0c;会不会因为同一时间太多的 key 过期&#xff0…

windows电脑设置每天自动关机

有时候我们需要我们的笔记本或者电脑在每天固定的时间自动关机&#xff0c;但是windows本身是没有带这个设置的&#xff0c;下面记录下如何设置电脑每天自动关机&#xff0c;无需安装任何第三方软件&#xff1b; 文章目录 一、设置自动关机程序二、取消自动关机三、Windows任务…

chatgpt赋能python:Python连接表

Python连接表 Python作为一种高级编程语言&#xff0c;可以用于各种各样的任务。其中之一就是连接表格数据。连接表是在数据管理中非常重要的概念&#xff0c;因为它可以将不同表格中的数据合并在一起&#xff0c;从而使我们能够更好地分析和理解数据。在这篇文章中&#xff0…

蓝桥杯专题-试题版含答案-【猜算式】【排列序数】【还款计算】【滑动解锁】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

探索Gradio的CheckboxGroup模块:交互式多选框组件

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

详解金融机构敏捷营销落地:体系架构、关键技术和实施方法

本文根据 2023 年金融营销科技价值发现论坛中&#xff0c;神策数据金融首席架构师王仕的主题演讲整理所得&#xff0c;聚焦营销 5.0 理念下的敏捷营销&#xff0c;详细讲解金融机构落地时涉及到的体系架构、关键技术及实施方法。 根据国家发改委官网披露的数据&#xff0c;2022…

macOS编译AirMap开源全景图源码image-processing

1.克隆源码 git clone --recursive https://github.com/airmap/image-processing.git 2. 使用CLion打开CMakeLists.txt并做为工程打开 2.默认配置名为Default,可修改,下面的所有配置项都可改 3.点击OK后会自动生成

青翼自研--4通道DAC播放子卡产品数据手册

FMC131是一款4通道3GSPS采样率或者2通道6GSPS采样率16位DA播放FMC子卡模块&#xff0c;该板卡为FMC标准&#xff0c;符合VITA57.4规范&#xff0c;可以作为一个理想的IO模块耦合至FPGA前端&#xff0c;16通道的JESD204B接口通过FMC连接器连接至FPGA的高速串行端口GTH。插值模式…

突破性5G NTN技术,美格智能携手高通发布卫星物联网连接方案

通信技术的快速发展&#xff0c;使得万物互联成为现实&#xff0c;物联网深刻影响我们的生活方式。目前&#xff0c;全球物联网连接主要由WiFi、蓝牙和蜂窝网络等几类技术支撑。数据显示&#xff0c;蜂窝基站的陆地覆盖率约为20%&#xff0c;而海洋覆盖率则不到5%。 这意味着陆…

十大编程算法

算法一&#xff1a;快速排序算法 快速排序是由东尼霍尔所发展的一种排序算法。在平均状况下&#xff0c;排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较&#xff0c;但这种状况并不常见。事实上&#xff0c;快速排序通常明显比其他Ο(n log n) 算法更快&a…

uni-app/vue 文字转语音朗读(附小程序语音识别和朗读)

语音播报的实现的方法有很多种&#xff0c;我这里介绍集中不引用百度、阿里或者迅飞的API的实现方式。 一、采用new SpeechSynthesisUtterance的方式 废话不多说直接上代码 data() {return {utterThis:null,} },//方法使用this.utterThis new SpeechSynthesisUtterance(); …

地下水管三维可视化综合管控平台提升政府服务质量

随着当前互联网技术数据的快速发展和增长&#xff0c;总数越来越大&#xff0c;结构越来越复杂。如果你想更清楚、更快地理解和理解数据&#xff0c;传统的二维平面图数据图性能不能满足需求。 什么是三维可视化? 三维可视化是一种利用计算机技术&#xff0c;再现三维世界中的…

命令模式(Command)

别名 动作&#xff08;Action&#xff09;事务&#xff08;Transaction&#xff09; 定义 命令是一种行为设计模式&#xff0c;它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中&#xff0c…

(1)深度学习学习笔记-数据操作和处理

文章目录 前言一、张量操作二、csv文件数据操作数据预处理(读入csv文件作为pytorch能处理的) 来源 前言 张量的一些处理和操作 csv文件数据操作 一、张量操作 [&#xff1a;&#xff0c;1]表示全部行 第二列 [&#xff1a;]是全取 [1:3,1&#xff1a;]&#xff1a;1:3表示1~3的…