计算机网络学习09(TCP传输可靠性保障)

news2025/5/24 12:15:04

1、TCP 如何保证传输的可靠性?

  1. 基于数据块传输 : 应用数据被分割成 TCP 认为最适合发送的数据块,再传输给网络层,数据块被称为报文段或段。
  2. 对失序数据包重新排序以及去重: TCP 为了保证不发生丢包,就给每个包一个序列号,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据就可以实现数据包去重。
  3. 校验和 : TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  4. 超时重传 : 当发送方发送数据之后,它启动一个定时器,等待目的端确认收到这个报文段。接收端实体对已成功收到的包发回一个相应的确认信息(ACK)。如果发送端实体在合理的往返时延(RTT)内未收到确认消息,那么对应的数据包就被假设为已丢失open in new window并进行重传。
  5. 流量控制 : TCP 连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议(TCP 利用滑动窗口实现流量控制)。
  6. 拥塞控制 : 当网络拥塞时,减少数据的发送。

2、TCP 如何实现流量控制?

TCP 利用滑动窗口实现流量控制。 流量控制是为了控制发送方发送速率,保证接收方来得及接收。

接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

为什么需要流量控制?

这是因为双方在通信的时候,发送方的速率与接收方的速率是不一定相等,如果发送方的发送速率太快,会导致接收方处理不过来。如果接收方处理不过来的话,就只能把处理不过来的数据存在 接收缓冲区(Receiving Buffers) 里(失序的数据包也会被存放在缓存区里)。如果缓存区满了发送方还在狂发数据的话,接收方只能把收到的数据包丢掉。出现丢包问题的同时又疯狂浪费着珍贵的网络资源。因此,我们需要控制发送方的发送速率,让接收方与发送方处于一种动态平衡才好。

这里需要注意的是(常见误区):

  • 发送端不等同于客户端
  • 接收端不等同于服务端

TCP 为全双工(Full-Duplex, FDX)通信,双方可以进行双向通信,客户端和服务端既可能是发送端又可能是服务端。因此,两端各有一个发送缓冲区与接收缓冲区,两端都各自维护一个发送窗口和一个接收窗口

接收窗口大小取决于应用、系统、硬件的限制(TCP传输速率不能大于应用的数据处理速率)。通信双方的发送窗口和接收窗口的要求相同

TCP 发送窗口可以划分成四个部分 :

  1. 已经发送并且确认的TCP段(已经发送并确认);
  2. 已经发送但是没有确认的TCP段(已经发送未确认);
  3. 未发送但是接收方准备接收的TCP段(可以发送);
  4. 未发送并且接收方也并未准备接受的TCP段(不可发送)。

TCP发送窗口结构图示 :

在这里插入图片描述

  • SND.WND :发送窗口。
  • SND.UNA:Send Unacknowledged 指针,指向发送窗口的第一个字节。
  • SND.NXT:Send Next 指针,指向可用窗口的第一个字节。

可用窗口大小 = SND.UNA + SND.WND - SND.NXT 。

TCP 接收窗口可以划分成三个部分 :

  1. 已经接收并且已经确认的 TCP 段(已经接收并确认);
  2. 等待接收且允许发送方发送 TCP 段(可以接收未确认);
  3. 不可接收且不允许发送方发送TCP段(不可接收)。

TCP 接收窗口结构图示 :

在这里插入图片描述

接收窗口的大小是根据接收端处理数据的速度动态调整的。 如果接收端读取数据快,接收窗口可能会扩大。 否则,它可能会缩小。

另外,这里的滑动窗口大小只是为了演示使用,实际窗口大小通常会远远大于这个值。

3、TCP 的拥塞控制是怎么实现的?

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。

拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。

拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。

拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。 相反,流量控制往往是点对点通信量的控制,是个端到端的问题

流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

在这里插入图片描述

为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。

TCP 的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。

  • 慢开始: 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd 初始值为 1,每经过一个传播轮次,cwnd 加倍。
  • 拥塞避免: 拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢增大,即每经过一个往返时间 RTT 就把发送方的 cwnd 加 1.
  • 快重传与快恢复: 在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。  当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。

4、ARQ 协议了解吗?

自动重传请求(Automatic Repeat-reQuest,ARQ)是 OSI 模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认信息(Acknowledgements,就是我们常说的 ACK),它通常会重新发送,直到收到确认或者重试超过一定的次数。

ARQ 包括停止等待 ARQ 协议连续 ARQ 协议

4.1 停止等待 ARQ 协议

停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认(回复 ACK)。如果过了一段时间(超时时间后),还是没有收到 ACK 确认,说明没有发送成功,需要重新发送,直到收到确认后再发下一个分组;

在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认。

1) 无差错情况: 发送方发送分组,接收方在规定时间内收到,并且回复确认.发送方再次发送。

2) 出现差错情况(超时重传):停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。因此每发送完一个分组需要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为 自动重传请求 ARQ 。另外在停止等待协议中若收到重复分组,就丢弃该分组,但同时还要发送确认。

3) 确认丢失和确认迟到 :

  • 确认丢失: 确认消息在传输过程丢失。当 A 发送 M1 消息,B 收到后,B 向 A 发送了一个 M1 确认消息,但却在传输过程中丢失。而 A 并不知道,在超时计时过后,A 重传 M1 消息,B 再次收到该消息后采取以下两点措施:1. 丢弃这个重复的 M1 消息,不向上层交付。 2. 向 A 发送确认消息。(不会认为已经发送过了,就不再发送。A 能重传,就证明 B 的确认消息丢失)。
  • 确认迟到 : 确认消息在传输过程中迟到。A 发送 M1 消息,B 收到并发送确认。在超时时间内没有收到确认消息,A 重传 M1 消息,B 仍然收到并继续发送确认消息(B 收到了 2 份 M1)。此时 A 收到了 B 第二次发送的确认消息。接着发送其他数据。过了一会,A 收到了 B 第一次发送的对 M1 的确认消息(A 也收到了 2 份确认消息)。处理如下:1. A 收到重复的确认后,直接丢弃。 2. B 收到重复的 M1 后,也直接丢弃重复的 M1

4.2 连续 ARQ 协议

连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了

优点: 信道利用率高,容易实现,即使确认丢失,也不必重传。

缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5 条 消息,中间第三条丢失(3 号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。

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

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

相关文章

Python德劳内三角剖分

文章目录 初步认识构造函数和属性实战-画个球 初步认识 对于熟悉matplotlib三维画图的人来说,最常用的应该是plot_surface,但这个函数的绘图逻辑是,将xy平面映射到z轴,所以没法一次性绘制球,只能把球分成两半&#xf…

python+nodejs+php+springboot+vue 企业仓库进销存管理系统

提供管理员管理和数据备份,确保信息的安全性和可靠性。仓库管理是企业的核心,是必不可少的一个部分。在企业的整个供应链中,仓库管理担负着最重要的角色。为满足如今日益复杂的管理需求,各类仓库管理程序也在不断改进。本系统除了…

三大本土化战略支点,大陆集团扩大中国市场生态合作「朋友圈」

“在中国,大陆集团已经走过30余年的发展与耕耘历程,并在过去10年间投资了超过30亿欧元。中国市场也成为了我们重要的‘增长引擎’与‘定海神针’。未来,我们将继续深耕中国这个技术导向的市场。”4月19日上海车展上,大陆集团首席执…

Python中的数据类型(python专栏002)

Python 中常用的数据类型包括: 数字类型:包括整型(int)、长整型(long)、浮点型(float)、复数型(complex)。字符串类型(str):用于保存文本数据,可以使用单引号、双引号或三引号来定义字符串。列表类型(list):可以保存多…

LeetCode:19. 删除链表的倒数第 N 个结点

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 一、🌱19. 删除链表的倒数第 N 个结点 题目描述:给你一个链表&a…

安装torch-cluster、torch-geometric、torch-scatter、torch-sparse、torch-spline-conv等库

在安装torch-cluster、torch-geometric、torch-scatter、torch-sparse、torch-spline-conv这些库时,要确保所下载的库与自己的torch和CUDA版本相匹配。以下是详细的步骤来找到并安装相应版本的库: 步骤一:首先,我们需要查看当前系…

【LeetCode】27. 消失的数字

题目链接:https://leetcode.cn/problems/remove-element/ 📕题目要求: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,…

HashMap底层源码解析及红黑树分析

HashMap线程不安全,底层数组链表红黑树 面试重点是put方法,扩容 总结 put方法 HashMap的put方法,首先通过key去生成一个hash值,第一次进来是null,此时初始化大小为16,i (n - 1) & hash计算下标值&a…

PWM输入信号转换模拟量电压电流隔离变送器1Hz~10KHz转0-10V/1-5V/4-20mA

主要特性: >>精度等级:0.1级。产品出厂前已检验校正,用户可以直接使用 >>辅助电源:8-32V 宽范围供电 >>PWM脉宽调制信号输入: 1Hz~10KHz >>输出标准信号:0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等&…

有什么牌子台灯性价比高?性价比最高的护眼台灯

由心感叹现在的孩子真不容易,学习压力比我们小时候大太多,特别是数学,不再是简单的计算,而更多的是培养学生其他思维方式,有时候我都觉得一年级数学题是不是超纲了。我女儿现在基本上都是晚上9点30左右上床睡觉&#x…

RK3399平台开发系列讲解(FLASH篇)MTD子系统结构

平台内核版本安卓版本RK3399Linux4.4Android7.1🚀返回专栏总目录 文章目录 一、什么是MTD二、MTD系统结构沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux内核对Flash存储器有很好的支持。内核设计了一个MTD(Memory Technology Device,内存技术设备)结构支持F…

平安银行潘多拉指标平台建设案例

潘多拉指标平台是平安银⾏指标管理和指标应⽤的统⼀平台。该平台以业务场景为驱动,提供了 AIBI内容的基础能⼒,并结合组件化开放平台,提供数据分析与应⽤的⼀站式解决⽅案。内容⽅⾯,提供了指标、维度和标签的录⼊、发布和规范化管…

一文看懂数据分析必备计算功能—内存计算

各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维数据分析,通过数据讲故事。 接下来,我们准备讲一系列的奥威BI软件的内存计算在各种分析场景中的应用。在正式开讲之前,我先简单说一下…

什么是阻抗?影响阻抗的因素有哪些?

问 什么是阻抗? 答 在具有电阻、电感和电容的电路里,对电路中的电流所起的阻碍作用叫做阻抗。 问 什么是阻抗匹配? 答 阻抗匹配是指信号源或者传输线跟负载之间达到一种适合的搭配。阻抗匹配主要有两点作用,调整负载功率和…

MATLAB函数封装2:QT调用封装函数

在利用MATLAB进行封装函数之后,最主要的目的是对函数进行调用,能够对矩阵运算和其他算法的运行进行快捷处理。 在有了MATLAB函数之后封装成DLL文件之后,在QT中添加动态链接库,就可以实现函数的调用过程,这个过程相对简…

「OceanBase 4.1 体验」OceanBase 4.1社区版的部署及使用体验

「OceanBase 4.1 体验」OceanBase 4.1社区版的部署及使用体验 一、前言1.1 本次实践介绍1.2 本次实践目的 二、准备环境资源2.1 部署前需准备工作2.2 本地环境规划 三、部署Docker环境3.1 安装Docker3.2 配置Docker镜像加速3.3 开启路由转发3.4 重启Docker服务 四、检查本地Doc…

开发者如何成为更好的自己,耐心和观察是关键

个人成长需要有耐心和观察力,这是一个“等待并观察”的视角。个人成长是一个自我提升的过程,需要结合耐心和观察力。这个过程可能会面临挑战,需要花费很多时间和精力,但最终的结果是值得的。耐心和观察是个人成长过程中的两个重要…

windows搭建一个FTP服务器超详细

一.场景: 在开发过程中需要FTP文件上传下载功能,需要在本地或者服务器上搭建一个FTP服务器。 二.详细步骤: 1. 安装FTP服务器支持和配置IIS web服务器 打卡“启动关闭Window功能” 控制面板>程序>启动或关闭Windows功能 或者选择快…

明确自动化测试目的

明确自动化测试目的 1.提高测试人员的工作成就感和幸福感,减少手工测试中重复性的工作 目前,在大部分中小企业中,手工测试在日常测试工作占据的比例很大。测试人员必须跟随开发团队不断地进行选代式开发和测试。一个功能模块可能在整个测试周…

会声会影2023中文旗舰版新增功能讲解及下载更新教程

本次更新不仅带来了标题动作、标题特效、转场特效、音频标记等功能的更新,也增强了热门的GIF创作器、定格动画制作、多语字幕、短时长转场等功能,让大家能体验到更加新潮的视频制作方式。会声会影2023是一款视频编辑软件,由Corel开发。该软件…