计算机网络 第5章 运输层

计算机网络 (第8版)

  • 第 5 章 传输层
    • 5.4 可靠传输的原理
      • 5.4.1 停止等待协议
      • 5.4.2 连续ARQ协议
    • 5.5 TCP报文段的首部格式
    • 5.6 TCP可靠传输的实现
      • 5.6.1 以字节为单位的滑动窗口
      • 5.6.2 超时重传时间的选择
    • 5.7 TCP的流量控制
      • 5.7.1 利用滑动窗口实现流量控制
    • 5.8 TCP的拥塞控制
      • 5.8.1 拥塞控制的一般原理
      • 5.8.2 TCP的拥塞控制方法

第 5 章 传输层

5.4 可靠传输的原理

5.4.1 停止等待协议

停止等待协议是一种数据链路层的可靠传输协议,其核心思想是发送方在发送完一个数据帧后,会停止发送,等待接收方的确认(ACK)或否认(NAK)信号后才能继续发送。

通信方式:全双工通信

  1. 无差错情况
    停止-等待协议_停止等待协议-CSDN博客

  2. 出现差错
    超时重传

  • 发送方在发送数据包(如TCP段)后,会启动一个超时计时器,等待接收方的确认(ACK)。
  • 如果在设定的超时时间内没有收到确认,发送方会认为数据包在传输过程中丢失或损坏,需要重新发送,否则撤销超时计时器。

注意点:

  • 发送完一个分组后,必须暂时保留已发送的分组副本,收到确认后再清除。
  • 分组和确认分组必须进行编号
  • 超时计时器设置的重传时间要合理
  1. 确认丢失和确认迟到

  2. 信道利用率
    在这里插入图片描述
    采用流水线传输
    【计算机网络】数据链路层可靠传输机制的三大协议:停止等待协议SW、后退N帧协议GBN、选择重传协议SR_选择重传协议信道利用率-CSDN博客

    使用流水线传输时,要使用到连续ARQ协议滑动窗口协议

5.4.2 连续ARQ协议

连续ARQ协议:是一种在数据链路层和传输层实现可靠传输的协议,它通过连续发送数据包来提高效率。

在这里插入图片描述

  1. 发送窗口:发送方维持着一个一定大小的发送窗口,位于发送窗口内的所有分组都可连续发送出去,而中途不需要等待对方的确认,这样信道的利用率就提高了。
  2. 累积确认:连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。接收方一般都是采用积累确认的方式,即不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认。
  3. Go-back-N(回退N):如果发送方发送的某个分组丢失或出错,接收方会丢弃该分组及其后续的所有分组,并只发送对收到的最后一个正确分组的确认。发送方收到该确认后,从丢失分组的位置开始重传。
  4. 效率提升:连续ARQ协议通过流水线传输数据,可以有效利用信道带宽,大大提高信道利用率。在理想情况下(无错误、无超时),信道利用率可以接近1。
  5. 缓冲存储空间:连续ARQ协议需要在发送方设置一个较大的缓冲存储空间(称作重发表),用以存放若干待确认的以及待发送信息帧。当发送方收到对某信息帧的确认帧后,便可从重发表中将该信息帧删除。
  6. 连续发送数据帧:在连续ARQ协议中,发送站点发送完一个数据帧后,不是停下来等待应答帧,而是可以连续再发送若干个数据帧。如果在此过程中又收到了接收端发来的应答帧,那么还可以接着发送数据帧。
  7. 应答帧编号:由于连续发送了许多帧,所以应答帧不仅要说明是对哪一帧进行确认或否认,而且应答帧本身也必须编号。
  8. 重传机制:如果某个数据帧出错,发送方需要从出错帧开始重传,这可能导致需要重传多个帧,增加了系统开销

5.5 TCP报文段的首部格式

TCP报文段首部格式介绍_tcp报文头部fin-CSDN博客

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP报文段(segment)的首部格式包含了多个字段,用于控制数据的传输和确保数据的可靠性。以下是TCP报文段首部的主要字段:

  1. 源端口和目的端口(Source Port and Destination Port)

    • 各占16位,分别标识发送方和接收方的端口号。
  2. 序号(Sequence Number)

    • 32位,用于标识从TCP源端向目的端发送的字节流中的每个字节的序号。
  3. 确认号(Acknowledgment Number)

    • 32位,当ACK标志位设置为1时,此字段有效,用于期望收到对方下一个报文段的起始序号
  4. 数据偏移(Data Offset)

    • 4位,指示TCP首部的长度,即从TCP首部开始到TCP数据开始的字节数,由于数据偏移是4位,所以它的最大值是 24−1=15,24−1=15 个32位字(word),即 15×4=60字节
  5. 保留(Reserved)

    • 6位,保留给将来使用,目前必须置为0。
  6. 控制位(Control Flags)

  • 6位,用于控制TCP段的功能,包括:
    • URG(紧急指针字段有效)
    • ACK(确认号字段有效):ACK = 1,确认号字段有效,ACK = 0 ,无效。
    • PSH(提示接收端应尽快将这个报文段交给应用层)PSH = 1
    • RST(重置连接)
    • SYN(同步序列编号,用于建立连接)
    • FIN(结束发送数据,用于释放连接)
  1. 窗口(Window)

    • 16位,指的是接收窗口,窗口值是[0,216 - 1],用于流量控制,指示发送端还可以发送多少字节的数据。窗口值作为接收方让发送方设置其发送窗口的依据。
  2. 检验和(Checksum)

    • 16位,用于错误检测,包括TCP首部、TCP数据和TCP伪首部。
  3. 紧急指针(Urgent Pointer)

    • 16位,当URG = 1时有效,指出本报文段中紧急数据的结束位置。
  4. 选项(Options)

    • 可变长度,选项和填充的总长度不能超过60−20=40 字节。最多40字节,用于提供额外的TCP功能,如最大报文段长度(MSS:TCP数据报中数据字段的最大长度)、窗口扩大、时间戳等。
  5. 填充(Padding)

    • 确保首部长度是32位字的整数倍。
  6. 数据(Data)

    • TCP段的数据部分,可以是0字节到TCP最大报文段长度(MSS)之间的任何值。

TCP首部的检验和字段包括了伪首部、TCP首部和TCP数据。伪首部是一个特殊的结构,包含源IP地址、目的IP地址、协议(TCP协议的协议号为6)、TCP报文段的长度等信息,用于计算检验和,但不包含在实际的TCP报文段中。

5.6 TCP可靠传输的实现

TCP实现可靠传输的技术主要包括以下几个方面:序列号和确认应答超时重传滑动窗口连接管理机制拥塞控制错误检测与恢复流量控制快速重传机制

5.6.1 以字节为单位的滑动窗口

接收方会通告一个窗口大小给发送方,告诉它在不需要等待新的确认应答的情况下可以发送多少数据。窗口大小是动态变化的,可以根据网络条件接收方的缓冲区大小进行调整。

  1. 发送窗口:发送方维护一个滑动窗口,该窗口定义了哪些数据字节可以被发送。窗口的起始位置是最后被确认的数据字节的下一个字节,窗口的结束位置是起始位置加上窗口大小减去1。

  2. 接收窗口:接收方同样维护一个滑动窗口,定义了它准备接收哪些数据字节。当接收方接收到数据后,它会发送确认应答,告知发送方哪些数据已经被成功接收,从而允许发送方移动其发送窗口。

  3. 窗口更新:接收方在其发送给发送方的TCP段中包含窗口大小信息。如果接收方的缓冲区空间增加,它会发送一个新的窗口大小值,允许发送方发送更多的数据。

  4. 零窗口探测:当接收方的窗口大小变为0时,发送方将停止发送数据,但会定期发送探测段以检查窗口大小是否已经增加。

计算机网络——运输层-CSDN博客

在这里插入图片描述

🌍P3 - P1 = A的发送窗口
🌍P2 - P1 = 已经发送但尚未确认的字节数(34 ~ 41)
🌍P3 - P2 = 允许发送但当前尚未发送的数据(42 ~ 53)

发送缓存和发送窗口

接收缓存和接收窗口

全双工的通信方式,每一方都有接收窗口和发送窗口。

5.6.2 超时重传时间的选择

超时重传时间(RTO, Retransmission Timeout)的选择是TCP协议中一个重要的动态过程,它基于网络往返时间(RTT)的估计来动态调整。以下是选择超时重传时间的一些关键点:

  1. 基于RTT的动态调整:TCP超时重传时间RTO的选择主要基于网络往返时间(RTT)的估计。由于RTT会因网络条件变化而波动,因此RTO需要动态调整以适应这些变化。

  2. 平滑往返时间(SRTT):TCP协议使用加权平均来计算平滑往返时间(SRTT),这是一种对实际RTT的平滑估计,以减少波动的影响。SRTT的计算公式为:新的SRTT = α ×(旧的SRTT)+(1-α)×(新的RTT样本),其中α是平滑因子,其值通常在0到1之间,RFC6298推荐的α值为1/8(0.125)。

  3. RTT的变异性(RTTVAR):除了SRTT,TCP还计算RTT的变异性(RTTVAR),这是对RTT变化幅度的估计,用于表示RTT的偏差或不确定性。

  4. Karn算法:在计算新的RTT时,如果重传了报文,则不会使用新的RTT值,反之,如果没有重传就更新RTT值。这样做可以避免因重传导致的RTT估计不准确。

  5. 指数退避策略:如果发生了重传,TCP会采取指数退避策略,每一次重传,RTO的数值就会加倍。例如,如果报文重传一次,RTO就会是原来的2倍;如果重传了两次,RTO就会是原来的4倍,以此类推。

  6. RTO的最小值和最大值:RTO_MIN必须大于等于1秒,如果小于则向上取整为1秒。RTO_MAX规定为60秒,这通常是基于网络的最大报文生存时间(MSL)的两倍。

  7. 时间戳选项:TCP的时间戳选项可以提供更精确的RTT测量,因为每个ACK都可以提供一个RTT的样本,这有助于更准确地调整RTO。

综上所述,超时重传时间的选择是一个复杂的自适应过程,它涉及到对RTT的平滑估计、变异性估计以及对重传事件的响应。通过这些机制,TCP能够在不同的网络条件下动态调整RTO,以确保数据的可靠传输。

5.7 TCP的流量控制

5.7.1 利用滑动窗口实现流量控制

TCP的流量控制主要通过滑动窗口机制来实现。所谓流量控制就是指让发送方的发送速率不要太快,要让接收方来得及接收。

在这里插入图片描述

持续计时器(Persistent Timer)是TCP协议中用于处理零窗口大小通知可能导致的死锁问题的一种机制。以下是持续计时器的工作原理和作用:

  1. 启动条件:当TCP连接的一方收到对方的零窗口通知(即接收窗口大小rwnd=0)时,就会启动持续计时器。
  2. 零窗口探测报文:如果持续计时器设置的时间到期,发送方就会发送一个特殊的探测报文段给接收方,这个探测报文段通常只携带1字节的数据。这个探测报文的目的是促使接收方回复当前的窗口值。
  3. 重新计时:接收方在确认这个探测报文段时,会给出自己现在的接收窗口值。如果接收窗口值仍为零,那么发送方收到这个确认报文段后就会重新设置持续计时器,继续等待非零窗口的通知。
  4. 打破死锁:如果接收方的接收窗口变为非零,那么死锁局面就可以被打破,发送方可以继续发送数据。
  5. 持续计时器的作用:持续计时器的主要作用是解决当接收方的接收窗口为零时可能出现的死锁问题。如果没有持续计时器,发送方可能会无限期地等待接收方的非零窗口通知,而如果这个通知因为某些原因丢失了,就会导致双方陷入互相等待的状态,形成死锁。
  6. TCP规定:即使接收窗口为0,也必须接受零窗口探测报文段、确认报文段以及携带有紧急数据的报文段。

5.8 TCP的拥塞控制

5.8.1 拥塞控制的一般原理

拥塞控制是网络通信中的一个重要概念,其目的是防止过多的数据同时进入网络,从而避免网络拥塞和数据包丢失。拥塞控制的一般原理包括以下几个方面:

  1. 监测网络状态
  • 网络中的路由器和交换机会监测经过的数据包流量,以判断网络是否出现拥塞。
  • 拥塞通常表现为数据包丢失、队列延迟增加、缓冲区溢出等。
  1. 反馈机制
  • 当网络出现拥塞时,路由器会通过某种机制(如发送 ICMP 消息)向发送方反馈拥塞信息。
  • 在TCP中,拥塞控制主要依赖于数据包的确认(ACK)和超时重传机制。
  1. 调整发送速率
  • 发送方根据网络的反馈信息调整数据的发送速率。
  • 在TCP中,这通常通过调整拥塞窗口(Congestion Window, cwnd)的大小来实现。
  1. 拥塞控制算法
  • 有多种拥塞控制算法,如慢启动(Slow Start)、拥塞避免(Congestion Avoidance)、快速重传(Fast Retransmit)和快速恢复(Fast Recovery)等。
  • 这些算法共同作用于TCP的拥塞控制过程,以适应不同的网络条件。

5.8.2 TCP的拥塞控制方法

TCP的拥塞控制主要通过四种算法来实现:慢开始(Slow Start)、拥塞避免(Congestion Avoidance)、快速重传(Fast Retransmit)和快速恢复(Fast Recovery)。

  1. 慢开始(Slow Start)
  • 在TCP连接建立之初,拥塞窗口(cwnd)的值被设置为1个MSS(最大报文段长度),表示开始时只能发送1个数据包。

  • 每当收到一个ACK,拥塞窗口cwnd就加倍,这样cwnd的值呈指数增长。1–> 2–> 4–> 8-- >16 …

  • 慢开始的目的是慢慢探测网络的容量,避免一开始就发送大量数据导致网络拥塞。

  • 当cwnd增长到达一个预设的慢开始门限(ssthresh)时,就会停止慢开始算法,转而进入拥塞避免阶段。

    🌍cwnd < ssthresh 慢开始算法。
    🌍cwnd > ssthresh 停止慢开始算法,该而用拥塞避免算法。
    🌍cwnd = ssthresh 既可以用慢开始算法,又可以用拥塞避免算法。

  1. 拥塞避免(Congestion Avoidance)
  • 当cwnd超过ssthresh后,进入拥塞避免阶段。

  • 在这个阶段,cwnd的增长速率变为线性,即每经过一个RTT(往返时间),cwnd增加1个MSS。

  • 拥塞避免算法更加保守,目的是在避免网络拥塞的同时,逐步增加数据的发送量。

【计算机网络】TCP的流量控制和拥塞控制_tcp流量控制和拥塞控制-CSDN博客

在这里插入图片描述

🌍在2超时处,设置门限值 ssthesh 为拥塞窗口 cwnd 的一半。即24/2 = 12 。

  1. 快速重传(Fast Retransmit)
  • 当发送方连续收到三个重复的ACK时,会立即重传丢失的数据包,而不是等待重传计时器超时。

  • 这种机制可以快速响应个别数据包的丢失,而不必等到整个RTT过去后才进行重传,从而减少了网络的等待时间。

  • 快速重传可以更有效地利用网络资源,减少因单个数据包丢失导致的延迟。

  1. 快速恢复(Fast Recovery)
  • 在快速重传之后,TCP不会回到慢开始阶段,而是进入快速恢复阶段。

  • 在快速恢复阶段,ssthresh会更新为cwnd的一半,cwnd也被设置为新的ssthresh值。

  • 然后,cwnd在收到新的ACK后线性增加,而不是像慢开始阶段那样指数增长。

  • 快速恢复允许TCP在发生丢包后快速恢复到较高的传输速率,而不是从很低的速率重新开始。

🌍在3 处 接收到3个ACK ,执行快恢复算法 ,并设置门限值 ssthesh 为拥塞窗口 cwnd 的一半 16/2 = 8。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PyTorch】(基础三)---- 图像读取和展示

图像读取和展示 pytorch本身并不提供图像的读取和展示功能&#xff0c;利用pytorch执行计算机视觉任务的时候&#xff0c;通常是利用opencv等工具先进行图像处理&#xff0c;然后将结果转化成tensor类型传递给pytorch&#xff0c;在pytorch执行之后&#xff0c;也可以将tensor…

Java课程设计项目-servlet+jsp美食系统、菜品管理系统

文章目录 Java课程设计项目-servletjsp美食系统一、项目介绍二、技术介绍2.1 环境需要2.2 技术栈 环境需要三、功能实现3.1登录注册3.2首页菜品展示、轮播图3.3美食菜品分类、查询3.4作品动态、个人简介、菜品收藏3.5创建菜谱、添加步骤 四、系统代码展示4.1项目架构&#xff0…

使用Unity脚本模拟绳索、布料(碰撞)

效果演示&#xff1a; 脚本如下&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;namespace PhysicsLab {public class RopeSolver : MonoBehaviour {public Transform ParticlePrefab;public int Count 3;public int Space 1;…

Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo)

Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo) 目录 Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo) 一、简单介绍 二、PyTorch 三、CNN 1、神经网络 2、卷…

【Python网络爬虫笔记】8- (BeautifulSoup)抓取电影天堂2024年最新电影,并保存所有电影名称和链接

目录 一. BeautifulSoup的作用二. 核心方法介绍2.1 构造函数2.2 find()方法2.3 find_all()方法2.4 select()方法 三. 网络爬虫中使用BeautifulSoup四、案例爬取结果 一. BeautifulSoup的作用 解析HTML/XML文档&#xff1a;它可以将复杂的HTML或XML文本转换为易于操作的树形结构…

ZLMediaKit+wvp (ffmpeg+obs)推拉流测试

这里使用了两种方式: ffmpeg命令和 OBS OBS推流在网上找了些基本没有说明白的, 在ZLMediaKit的issues中看到了一个好大哥的提问在此记录一下 使用OBS推流&#xff0c;rtmp&#xff0c;报鉴权失败 推流 1. ffmpeg命令推流 官方说明文档地址: 推流规则 rtsp://192.168.1.4:10554…

Linux入门攻坚——40、Linux集群系统入门-lvs(1)

Cluster&#xff0c;集群&#xff0c;为了解决某个特定问题将多台计算机组合起来形成的单个系统。 这个单个集群系统可以扩展&#xff0c;系统扩展的方式&#xff1a;scale up&#xff0c;向上扩展&#xff0c;更换更好的主机&#xff1b;scale out&#xff0c;向外扩展&…

威胁驱动的网络安全方法论

本文主要内容取自洛克希德马丁公司的论文&#xff1a;A Threat-Driven Approach to Cyber Security&#xff0c;想要全面准确了解论文内容的朋友建议阅读原文。希望能够抛砖引玉&#xff0c;为相关领域的相关工作人员带来一点不同的思路或启发&#xff0c;从而更好地维护企业/组…

【Verilog】实验三 数码管实验

目录 一、实验目的&#xff1a; 二、实验内容: 三、实验要求&#xff1a; 四、实验步骤: 一、实验目的&#xff1a; 进一步熟悉Modelsim和VIVADO工具&#xff1b;掌握7段数码管显示译码器&#xff1b;掌握7段数码管数码管动态输出显示的方法。 二、实验内容: 实现按动开关…

Spring Cloud + MyBatis Plus + GraphQL 完整示例

Spring Cloud MyBatis Plus GraphQL 完整示例 1、创建Spring Boot子项目1.1 配置POM&#xff0c;添加必要的依赖1.2 配置MyBatis-Plus 2、集成GraphQL2.1 定义schema.graphqls2.2 添加GraphQL解析器2.3 配置schame文件配置 3、访问测试3.1 查询测试&#xff08;演示&#xff…

MySQL书籍推荐

《高性能MySQL&#xff08;第4版&#xff09;》-西尔维亚博特罗斯 系统层次 Mysql性能优化和高可用架构实践 2020 系统基础 MySQL性能调优与架构设计 系统基础 Mysql技术大全 2021 综合 MySQL数据库应用案例教程 综合实战 从入门到项目实践 综合实战 丰富 超值 MySQ…

MR30分布式IO模块赋能喷水织机

纺织行业作为我国传统支柱产业&#xff0c;历经数千年的演变&#xff0c;如今仍面临着诸多困境&#xff0c;在纺织行业中&#xff0c;每一次技术的飞跃都是对行业边界的勇敢探索。在纺织行业&#xff0c;喷水织机作为关键生产设备&#xff0c;其性能直接影响到产品质量和产能。…

nodejs循环导出多个word表格文档

文章目录 nodejs循环导出多个word表格文档一、文档模板编辑二、安装依赖三、创建导出工具类exportWord.js四、调用五、效果图nodejs循环导出多个word表格文档 结果案例: 一、文档模板编辑 二、安装依赖 // 实现word下载的主要依赖 npm install docxtemplater pizzip --save/…

LabVIEW中“this VI‘s owning library is missing”错误及解决

问题描述 当加载或打开一个VI时&#xff0c;如果其所属的项目库未加载到内存&#xff0c;LabVIEW将提示错误&#xff1a;“this VIs owning library is missing”&#xff08;该VI的所属库不存在&#xff09;。 该问题通常发生在以下情况下&#xff1a; 项目库文件丢失或路径…

LongVU:用于长视频语言理解的空间时间自适应压缩

晚上闲暇时间看到一种用于长视频语言理解的空间时间自适应压缩机制的研究工作LongVU&#xff0c;主要内容包括&#xff1a; 背景与挑战&#xff1a;多模态大语言模型&#xff08;MLLMs&#xff09;在视频理解和分析方面取得了进展&#xff0c;但处理长视频仍受限于LLM的上下文长…

sphinx基本使用

sphix是一个文档生成工具 本文介绍一些基础技能&#xff0c;如果想深入学习&#xff0c;可以查看官方文档 Sphinx官方文档 1.安装虚拟环境 # ubuntu # 使用 venv 创建 .venv虚拟环境 python3 -m venv .venv# 激活虚拟环境 source .venv/bin/activate# windows # 创建虚拟环境…

爬虫第四篇:Xpath 路径表达式全解析:从网页基础到爬取百度贴吧图片实战

简介&#xff1a;本文围绕 Xpath 路径表达式展开讲解&#xff0c;先是介绍了网页相关基础如 html、css、vue 以及前后端分离的概念与示例&#xff0c;包括各部分的结构、作用及简单代码展示&#xff0c;随后详细阐述了 xml 的节点关系、选取节点、谓语等理论知识&#xff0c;最…

HarmonyOS NEXT开发进阶(一):初识 HarmonyOS NEXT开发

文章目录 一、前言二、HarmonyOS NEXT 开发框架三、HarmonyOS NEXT开发指导3.1 Windows环境准备 四、项目拆解4.1 工程目录4.2 全局配置4.2.1 APP全局配置: AppScope层&#xff08;AppScope/app.json5&#xff09;4.2.3 签名全局配置 4.3 APP代码初始化4.4 APP签名文件配置4.5 …

Chrome控制台 网站性能优化指标一览

打开chrome-》f12/右键查看元素-》NetWrok/网络 ctrlF5 刷新网页&#xff0c;可以看到从输入url到页面资源请求并加载网页&#xff0c;用于查看资源加载&#xff0c;接口请求&#xff0c;评估网页、网站性能等&#xff0c;如下图&#xff1a; request、stransferred、resour…

【C++】入门【六】

本节目标 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 八、继承的总结和反思 九、笔试面试题 一、继承的概念及定义 1.继承的概念 继承是面向对象…