计算机网络 第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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AI系统】EfficientNet 系列

EfficientNet 系列 本文主要介绍 EffiicientNet 系列&#xff0c;在之前的文章中&#xff0c;一般都是单独增加图像分辨率或增加网络深度或单独增加网络的宽度&#xff0c;来提高网络的准确率。而在 EfficientNet 系列论文中&#xff0c;会介绍使用网络搜索技术(NAS)去同时探索…

debian编译失败

A、缘由和分析 debian的代码在删除该路径下的2个包后&#xff0c; 重新全编&#xff0c;编译不过的问题。 至于我为什么删除这2个包&#xff0c;这是因为在sdk第一次编译时一些文件已经打包进去了&#xff0c;我现在的修改无法更新进img中&#xff0c;而现在我的项目中不需要…

2024年12月5日Github流行趋势

项目名称&#xff1a;HelloGitHub 项目维护者&#xff1a;521xueweihan, yaowenqiang, daixiang0等项目介绍&#xff1a;分享 GitHub 上有趣、入门级的开源项目。项目star数&#xff1a;95,244项目fork数&#xff1a;9,707 项目名称&#xff1a;Best-websites-a-programmer-sh…

大数据新视界 -- 大数据大厂之 Hive 临时表与视图:灵活数据处理的技巧(上)(29 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

第一部分:基础知识 3. 数据类型 --[MySQL轻松入门教程]

第一部分:基础知识 3. 数据类型 --[MySQL轻松入门教程] MySQL 支持多种数据类型,这些数据类型可以分为几大类:数值类型、字符串类型、日期和时间类型、二进制类型以及枚举和集合。每种类型都有其特定的用途和存储需求。以下是 MySQL 中常用的数据类型的详细介绍: 1. 数值…

百问FB显示开发图像处理 - 图像调整

2.4 图像调整 2.4.1 图像的缩放 2.4.1.1 图像缩放算法浅析 图像缩放算法有很多种&#xff0c;这里参考网友"lantianyu520"所著的"图像缩放算法"。 原理浅析 ​ 要理解这个图像缩放算法的原理&#xff0c;最重要的是需要理解&#xff1a;对于图像上的每…

嵌入式驱动开发详解5(ioctl的使用)

文章目录 ioctl介绍应用层详解驱动层详解ioctl的cmd实验例程 ioctl介绍 linux内核给用户提供了两类系统调用函数&#xff1a;一类是数据操作函数&#xff0c;比如read、write…。 另外一类函数是非数据操作函数&#xff0c;比如ioctl…&#xff0c;用户程序可以用ioctl给底层设…

从零开始使用GOT-OCR2.0——多模态OCR项目:微调数据集构建 + 训练(解决训练报错,成功实验微调训练)

在上一篇文章记录了GOT-OCR项目的环境配置和基于官方模型参数的基础使用。环境安装的博文快速链接&#xff1a; 从零开始使用GOT-OCR2.0——多模态通用型OCR&#xff08;非常具有潜力的开源OCR项目&#xff09;&#xff1a;项目环境安装配置 测试使用-CSDN博客 本章在环境配置…

Facebook:筑牢隐私安全堡垒,守护社交净土

在全球社交媒体平台中&#xff0c;Facebook一直是风靡全球的佼佼者。然而&#xff0c;随着数字化信息的迅速膨胀&#xff0c;用户隐私保护的重要性日益凸显。面对用户对数据安全性的高度重视&#xff0c;Facebook致力于通过一系列措施来确保隐私保护&#xff0c;守护每位用户的…

VBA信息获取与处理第四个专题第二节:将工作表数据写入VBA数组

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。这部教程给大家讲解的内容有&#xff1a;跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…

python通过ODBC连接神通数据库

1、安装神通数据库 2、安装python 3、安装pyodbc pip3 install pyodbc-5.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 注&#xff1a;pyodbc要和python版本相对应 4、安装unixodbc 5、配置神通数据库ODBC数据源 6、示例代码如下 #!/usr/bin/python…

Vue Web开发(一)

1. 环境配置 1.1. 开发工具下载 1.1.1. HbuilderX 官网地址&#xff1a;https://uniapp.dcloud.net.cn/ 1.1.2. Visual Studio Code 官网地址&#xff1a;https://code.visualstudio.com/Download 1.1.3. Node环境 官网地址&#xff1a;https://nodejs.cn/   正常软件安装…

Tomcat新手成长之路:安装部署优化全解析(下)

接上篇《Tomcat新手成长之路&#xff1a;安装部署优化全解析&#xff08;上&#xff09;》: link 文章目录 7.应用部署7.1.上下文7.2.启动时进行部署7.3.动态应用部署 8.Tomcat 类加载机制8.1.简介8.2.类加载器定义8.3.XML解析器和 Java 9.JMS监控9.1.简介9.2.启用 JMX 远程监…

模拟实现vector(非常详细)

模拟实现vector 1.vector基本概念2.vector()默认构造函数3.size()成员函数迭代器4.capacity()成员函数5.empty()成员函数6.reverse()成员函数7.push_back()成员函数8.pop_back()成员函数9.operator[ ]成员函数10.resize()成员函数11.insert()成员函数12.erase()成员函数13.swap…

Elastic Cloud Serverless:深入探讨大规模自动扩展和性能压力测试

作者&#xff1a;来自 Elastic David Brimley, Jason Bryan, Gareth Ellis 及 Stewart Miles 深入了解 Elasticsearch Cloud Serverless 如何动态扩展以处理海量数据和复杂查询。我们探索其在实际条件下的性能&#xff0c;深入了解其可靠性、效率和可扩展性。 简介 Elastic Cl…

微信小程序之手机归属地查询

微信小程序之手机归属地查询 需求描述 API申请和小程序设置 API申请 第一步&#xff1a;完整账号注册 我们需要来到如下网站&#xff0c;注册账号&#xff1a;万维易源 第二步&#xff1a;账号注册完成以后&#xff0c;点击右上角的控制台信息。 第三步&#xff1a;在控制…

Agent AI: Surveying the Horizons of Multimodal Interaction---摘要、引言、代理 AI 集成

题目 智能体AI:多模态交互视野的考察 论文地址&#xff1a;https://arxiv.org/abs/2401.03568 图1&#xff1a;可以在不同领域和应用程序中感知和行动的Agent AI系统概述。Agent AI是正在成为通用人工智能&#xff08;AGI&#xff09;的一个有前途的途径。Agent AI培训已经证…

分布式光伏电站如何实现监控及集中运维管理?

安科瑞戴婷 Acrel-Fanny 前言 今年以来&#xff0c;在政策利好推动下光伏、风力发电、电化学储能及抽水蓄能等新能源行业发展迅速&#xff0c;装机容量均大幅度增长&#xff0c;新能源发电已经成为新型电力系统重要的组成部分&#xff0c;同时这也导致新型电力系统比传统的电…

SpringMVC其他扩展

一、全局异常处理机制: 1.异常处理两种方式: 开发过程中是不可避免地会出现各种异常情况的&#xff0c;例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题&#xff0c;甚至直接导致程序崩溃。因此&#xff0c;在开发过程中&#xff0c;…

Cesium 6 ,Cesium 全局注册,Cesium 常用事件解析与应用,全局注册Cesium事件

目录 前言 一. 全局注册事件 1.1 事件机制介绍 1.2 this.Cesium 和 this.viewer 1.3 全局注册 二. 常见事件分类 2.1 鼠标事件 2.1.1 点击事件 (click) 2.1.2 双击事件 (doubleClick) 2.1.3 鼠标移动事件 (mouseMove) 2.1.4 鼠标滚轮事件 (mouseWheel) 2.2 视图与摄…