计算机网络 第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.mzph.cn/news/888644.shtml

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

相关文章

股指期货基差的影响因素有哪些?

在股指期货交易中&#xff0c;有一个重要的概念叫做“基差”。简单来说&#xff0c;基差就是股指期货价格与其对应的现货价格之间的差异。比如&#xff0c;我们现在有IC2401股指期货&#xff0c;它挂钩的是中证500指数。如果IC2401的价格是5244&#xff0c;而中证500指数的价格…

智能社区服务小程序+ssm(lw+演示+源码+运行)

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了智能社区服务小程序的开发全过程。通过分析智能社区服务小程序管理的不足&#xff0c;创建了一个计算机管理智能社区服务小程序的方案。文章介绍了智能社区服务…

用人话讲计算机:Python篇!(十一)相对路径与绝对路径

目录 一、计算机中的路径 &#xff08;1&#xff09;什么叫路径 &#xff08;2&#xff09;绝对路径 &#xff08;3&#xff09;相对路径 二、Python中的路径 &#xff08;1&#xff09;绝对路径 &#xff08;2&#xff09;相对路径 &#xff08;3&#xff09;总结 一、…

基于VTX356语音识别合成芯片的智能语音交互闹钟方案

一、方案概述 本方案旨在利用VTX356语音识别合成芯片强大的语音处理能力&#xff0c;结合蓝牙功能、APP或小程序&#xff0c;打造一款功能全面且智能化程度高的闹钟产品。除了基本的时钟显示和闹钟提醒功能外&#xff0c;还拥有正计时、倒计时、日程安排、重要日提醒以及番茄钟…

MFC图形函数学习13——在图形界面输出文字

本篇是图形函数学习的最后一篇&#xff0c;相关内容暂告一段落。 在图形界面输出文字&#xff0c;涉及文字字体、大小、颜色、背景、显示等问题&#xff0c;完成这些需要系列函数的支持。下面做简要介绍。 一、输出文本函数 原型&#xff1a;virtual BOOL te…

【CANoe示例分析】Basic UDP Multicast(CAPL)

1、工程路径 C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 16.6.2\Ethernet\Simulation\UDPBasicCAPLMulticast 在CANoe软件上也可以打开此工程:File|Sample Configurations|Ethernet - Simulation of Ethernet ECUs|Basic UDP Multicast(CAPL) 2、示例目…

【动手学电机驱动】STM32-FOC(10)使用旋钮调节电机转速

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…

最新,Vue 性能提升 400%

最近&#xff0c;Vue 团队核心成员 Johnson Chu 开源一个全新的信号库&#xff1a;alien-signals&#xff0c;这是一个基于 Vue 3.4 响应式系统重写的研究型信号库&#xff0c;可以使 Vue 3.4 的响应式系统性能提升 400%。目前&#xff0c;alien-signals 是所有信号库中最快的实…

springboot mvn 打包,jar和资源文件分离打包

默认打包方式如下&#xff1a; <build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><execution…

OpenHarmony-3.HDF框架(2)

OpenHarmony HDF 平台驱动 1.平台驱动概述 系统平台驱动框架是系统驱动框架的重要组成部分&#xff0c;它基于HDF驱动框架、操作系统适配层(OSAL, operating system abstraction layer)以及驱动配置管理机制&#xff0c;为各类平台设备驱动的实现提供标准模型。 系统平台驱动(…

BT1120接口自学笔记

一、技术简介 1.1名词解释 BT.1120协议是一种广泛应用的高清数字视频传输协议,能够把取样结构为4:4:4和4:4:2的视频数据编码成内嵌同步定时基准码的视频数据流进行传输。也可以用于ITU-R BT.709建议书和ITU-R BT.2100建议书规定的像素阵列为1 920*1080视屏数据传输。 经常听…

pdf转word/markdown等格式——MinerU的部署:2024最新的智能数据提取工具

一、简介 MinerU是开源、高质量的数据提取工具&#xff0c;支持多源数据、深度挖掘、自定义规则、快速提取等。含数据采集、处理、存储模块及用户界面&#xff0c;适用于学术、商业、金融、法律等多领域&#xff0c;提高数据获取效率。一站式、开源、高质量的数据提取工具&…

探索前端世界的无限可能:玩转Excel文件

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

MySQL两阶段提交目的

阶段提交的过程 事务执行阶段&#xff1a;事务开始执行&#xff0c;InnoDB执行SQL语句的具体操作&#xff0c;如数据修改、删除等&#xff0c;并将这些操作记录在内存中。写入Redo Log&#xff08;准备阶段&#xff09;&#xff1a;事务即将提交时&#xff0c;首先将事务相关的…

前端项目使用gitlab-cicd+docker实现自动化部署

GitLab CI/CD 是一个强大的工具&#xff0c;可以实现项目的自动化部署流程&#xff0c;从代码提交到部署只需几个步骤。本文将带你配置 GitLab CI/CD 完成一个前端项目的自动化部署。 前言 为什么使用cicddocker&#xff1f; 目前我们公司开发环境使用的shell脚本部署&#…

easyexcel 导出日期格式化

1.旧版本 在新的版本中formate已经被打上废弃标记。那么不推荐使用这种方式。 2.推荐方式 推荐使用另外一种方式【 Converter 】代码如下&#xff0c;例如需要格式化到毫秒【yyyy-MM-dd HH:mm:ss SSS】级别 创建一个公共Converter import com.alibaba.excel.converters.Conv…

DApp开发前端框架选择:React还是Vue?

在区块链DApp开发中&#xff0c;前端框架的选择对用户体验和开发效率至关重要。React和Vue作为两大主流前端框架&#xff0c;各自拥有广泛的开发者基础和丰富的生态支持。那么在DApp开发中&#xff0c;该如何选择适合自己的框架呢&#xff1f;下面我们来比较一下&#xff0c;看…

6. 一分钟读懂“抽象工厂模式”

6.1 模式介绍 书接上文&#xff0c;工厂方法模式只能搞定单一产品族&#xff0c;遇到需要生产多个产品族时就歇菜了。于是&#xff0c;在需求的“花式鞭策”下&#xff0c;程序员们再次绷紧脑细胞&#xff0c;创造出了更强大的抽象工厂模式&#xff0c;让工厂一次性打包多个产品…

gulp应该怎么用,前端批量自动化替换文件

背景 最近公司准备把所有项目中用到的国际化相关的key规范化&#xff0c;原因是: 一直以来公司的app和web端 在针对相同的需求以及相同的国际化语言&#xff0c;需要设置不同的两份国际化文件&#xff0c;难以维护旧版的国际化文件中&#xff0c;存在的大量值重复&#xff0c…

UML箭线图的理解和实践

在软件开发的世界里&#xff0c;UML&#xff08;统一建模语言&#xff09;作为一种标准化的建模语言&#xff0c;扮演着举足轻重的角色。UML类图更是软件开发设计和架构过程中的核心工具&#xff0c;它不仅能帮助开发者明确系统中的类及其关系&#xff0c;还能为后续的代码实现…