TCP如何保证可靠性?

2023-05-16

TCP如何保证可靠性?

TCP协议保证数据传输可靠性的方式主要有:校验和、序列号、确认应答、超时重传、连接管理、流量控制、拥塞控制

1. 校验和

**计算方式:**在数据传输的过程中,将发送的数据段都当做一个16位的整数。将这些整数加起来。并且前面的进位不能丢弃,补在后面,最后取反,得到校验和。 **发送方:**在发送数据之前计算检验和,并进行校验和的填充。 **接收方:**收到数据后,对数据以同样的方式进行计算,求出校验和,与发送方的进行比对。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zkVbD00m-1657355988061)(https://uploadfiles.nowcoder.com/images/20220224/4107856_1645697750584/615A581F8A18065E509E57958679912F)]

**注意:**如果接收方比对校验和与发送方不一致,那么数据一定传输有误。但是如果接收方比对校验和与发送方一致,数据不一定传输成功。

2. 序列号和确认应答

**序列号:**TCP传输时将每个字节的数据都进行了编号,这就是序列号。 **确认应答:**TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。也就是发送ACK报文。这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iRv2Z89Y-1657355988063)(https://uploadfiles.nowcoder.com/images/20220224/4107856_1645697763966/15FA1994E2C2180DFF6C75070B4CA4C5)]

 序列号的作用不仅仅是应答的作用,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据。这也是TCP传输可靠性的保证之一。

3. 超时重传

 在进行TCP传输时,由于确认应答与序列号机制,也就是说发送方发送一部分数据后,都会等待接收方发送的ACK报文,并解析ACK报文,判断数据是否传输成功。如果发送方发送完数据后,迟迟没有等到接收方的ACK报文,这该怎么办呢?而没有收到ACK报文的原因可能是什么呢?

 首先,发送方没有接收到响应的ACK报文原因可能有两点:

 (1)数据在传输过程中由于网络原因等直接全体丢包,接收方根本没有接收到。

 (2)接收方接收到了响应的数据,但是发送的ACK报文响应却由于网络原因丢包了。

 TCP在解决这个问题的时候引入了一个新的机制,叫做超时重传机制。**简单理解就是发送方在发送完数据后等待一个时间,时间到达没有接收到ACK报文,那么对刚才发送的数据进行重新发送。**如果是刚才第一个原因,接收方收到二次重发的数据后,便进行ACK应答。如果是第二个原因,接收方发现接收的数据已存在(判断存在的根据就是序列号,所以上面说序列号还有去除重复数据的作用),那么直接丢弃,仍旧发送ACK应答。

4. 连接管理

 连接管理就是三次握手与四次挥手的过程,保证可靠的连接,是保证可靠性的前提。

5. 流量控制

 收端在接收到数据后,对其进行处理。如果发送端的发送速度太快,导致接收端的结束缓冲区很快的填充满了。此时如果发送端仍旧发送数据,那么接下来发送的数据都会丢包,继而导致丢包的一系列连锁反应,超时重传呀什么的。而TCP根据接收端对数据的处理能力,决定发送端的发送速度,这个机制就是流量控制。

 在TCP协议的报头信息当中,有一个16位字段的窗口大小。在介绍这个窗口大小时我们知道,窗口大小的内容实际上是接收端接收数据缓冲区的剩余大小。这个数字越大,证明接收端接收缓冲区的剩余空间越大,网络的吞吐量越大。接收端会在确认应答发送ACK报文时,将自己的即时窗口大小填入,并跟随ACK报文一起发送过去。而发送方根据ACK报文里的窗口大小的值的改变进而改变自己的发送速度。如果接收到窗口大小的值为0,那么发送方将停止发送数据。并定期的向接收端发送窗口探测数据段,让接收端把窗口大小告诉发送端。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-351dnQjn-1657355988063)(https://uploadfiles.nowcoder.com/images/20220224/4107856_1645697783115/80D43DFCBDB0DA0BDA5BE34F674B666D)]

6. 拥塞控制

 TCP传输的过程中,发送端开始发送数据的时候,如果刚开始就发送大量的数据,那么就可能造成一些问题。网络可能在开始的时候就很拥堵,如果给网络中在扔出大量数据,那么这个拥堵就会加剧。拥堵的加剧就会产生大量的丢包,就对大量的超时重传,严重影响传输。

 所以TCP引入了慢启动的机制,在开始发送数据时,先发送少量的数据探路。探清当前的网络状态如何,再决定多大的速度进行传输。这时候就引入一个叫做拥塞窗口的概念。发送刚开始定义拥塞窗口为 1,每次收到ACK应答,拥塞窗口加 1。在发送数据之前,首先将拥塞窗口与接收端反馈的窗口大小比对,取较小的值作为实际发送的窗口。

 拥塞窗口的增长是指数级别的。慢启动的机制只是说明在开始的时候发送的少,发送的慢,但是增长的速度是非常快的。为了控制拥塞窗口的增长,不能使拥塞窗口单纯的加倍,设置一个拥塞窗口的阈值,当拥塞窗口大小超过阈值时,不能再按照指数来增长,而是线性的增长。在慢启动开始的时候,慢启动的阈值等于窗口的最大值,一旦造成网络拥塞,发生超时重传时,慢启动的阈值会为原来的一半(这里的原来指的是发生网络拥塞时拥塞窗口的大小),同时拥塞窗口重置为 1。

在这里插入图片描述

 拥塞控制是TCP在传输时尽可能快的将数据传输,并且避免拥塞造成的一系列问题。是可靠性的保证,同时也是维护了传输的高效性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP如何保证可靠性? 的相关文章

  • MySQL夺命连环15问,你能坚持到第几问?

    文章目录 前言一 关系型和非关系型的区别 xff0c 以及使用场景二 Mysql索引优缺点三 给字段加索引最好怎么加 xff1f 四 什么情况下会导致索引失效 xff1f 五 为什么使用模糊匹配会使索引失效六 回表查询和索引覆盖是什么七 联
  • educoder数字逻辑实训:比较器设计(Logisim)

    第1关 xff1a 1位比较器设计 任务描述 本关任务 xff1a 在Logisim中完成1位比较器电路的绘制并完成测试 第2关 xff1a 2位比较器设计 任务描述 本关任务 xff1a 在Logisim中完成2位比较器电路的绘制并完成测
  • 1、树莓派的VNC文件传输

    目录 第一步 xff1a 在树莓派端打开VNC服务器 第二步 xff1a 输入指令运行vncserver 第三步 xff1a 在电脑端安装VNC查看器 第一步 xff1a 在树莓派端打开VNC服务器 第二步 xff1a 输入指令运行vncs
  • Hadoop 3.x(HDFS)----【HDFS 的读写流程】

    Hadoop 3 x xff08 HDFS xff09 HDFS 的读写流程 1 HDFS写数据流程1 剖析文件写入2 网络拓扑 结点距离计算3 机架感知 xff08 副本存储节点选择 xff09 1 机架感知说明2 Hadoop3 1 3
  • 【C++】程序运行时间计算的方式

    1 利用C 43 43 标准库 std chrono xff0c 如下计算一个主体程序的运行时间 xff0c 算出来的时间差值单位为毫秒 lt float std milli gt 表示用毫秒表示 auto t start 61 std c
  • FPGA之蜂鸣器播放音乐《花海》

    文章目录 前言一 蜂鸣器1 蜂鸣器简介 xff1a 2 有源蜂鸣器 xff1a 3 无源蜂鸣器 xff1a 二 简谱常识1 音符时值 xff1a 2 简谱名 xff1a 3 简谱名频率 xff1a 三 程序设计1 调用ROM IP核储存每个
  • Verilog语法基础HDL Bits训练 01

    文章目录 前言一 Basics simple wire1 RTL代码2 仿真波形图 二 Basics four wires1 RTL代码2 仿真波形图 三 Basics Not gate1 RTL代码2 仿真波形图 四 Basics And
  • c++文件写入数据

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • 基于HC-08蓝牙模块的蓝牙通讯

    RXD接TXD xff0c TXD接RXD 通过手机的蓝牙助手可以完成亮灭LED1和LED2的操作 当发送A时 xff0c LED1亮 发送B时 xff0c LED1灭 当发送C时 xff0c LED2亮 xff0c 当发送D时 xff0c
  • 计算机网络笔记

    文章目录 计算机网络课程笔记第一章 概述1 计算机网络的定义2 网络分类3 网络分层及协议3 1 网络分层的原因3 2 协议 xff1a 对等通信双方的通信规则3 3 网络服务类型 xff1a 面向连接和面向非连接3 4 服务原语 xff1
  • 关于OSPF区域划分

    区域划分的好处 背景 随着网络规模不断扩大 xff0c 结构也日趋复杂 xff0c 路由器完成路由计算所消耗的内存 CPU资源也越来越多网络发生故障的可能性也随之增加 xff0c 如果区域内某处发生故障 xff0c 整个区域内的路由器都要重
  • 多目标多角度的快速模板匹配算法(基于NCC,效果无限接近Halcon中........)

    多目标多角度的快速模板匹配算法 xff08 基于NCC xff0c 效果无限接近Halcon中 工程应用一 多目标多角度的快速模板匹配算法 xff08 基于NCC xff0c 效果无限接近Halcon中 Imageshop 博客园 主要是我
  • 蓝桥杯嵌入式第十三届模拟题做题笔记

    这届的蓝桥杯电子类延期了 xff0c 最近就很无聊 xff0c 想做点东西但是又什么啥也不会 xff0c five一个 在小破站寻求各路大佬的帮助 不求大家的赞了 xff0c 只希望大家能够分享知识 xff0c 帮助一下迷茫的人 首先第一眼
  • Code::Blocks

    Code Blocks出现A debugging check in this application has failed xff1f 虽然不懂 xff0c 但好像有一个灰常easy的解决方法 xff1a Settings gt Edito
  • Logidim中异或的符号表示

    logisim中的表达式以 代表异或
  • 本人开发环境基本配置一览 ~/.bashrc

    系统 xff1a ubuntu18 04 xff0c bashrc环境文件 1 配置CUDA路径 xff1b cudnn用deb包安装的 xff0c 会直接被装到系统相应路径 xff0c 不需要手动添加路径引用 2 ROS CUDA exp
  • QT笔记(一)

    学习目标 xff1a 总结学习的QT 学习内容 xff1a 1 QT的一些固定格式 2 控件和事件 3 信号和槽 记录内容 xff1a 1 QT的固定格式 1 引用头文件 自己创建的头文件用 34 34 括起 xff0c eg 96 inc
  • 17 C++11常用语法

    文章目录 一 C 43 43 11简介二 列表初始化2 1 容器如何支持花括号初始化 三 变量类型的推导3 1 编译时类型推导 xff1a auto3 2 decltype类型推导3 3 运行时类型推导 typeid 四 final ove
  • Git小乌龟(TortoiseGit)使用详情

    项目可能大概也许maybe要用到Git小乌龟 xff0c 正好水篇文章 下载及安装 首先没有下载Git的先下载 xff0c 官网下载地址 xff0c 安装时直接一直next就行 然后是小乌龟的下载 xff0c 官网下载地址 xff0c 不知
  • 一张图阐述UML状态图的画法【软件工程】

    文章目录 I 介绍状态图II 一图搞定状态图画法 I 介绍状态图 状态图展示了一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态间的转移 它有两大特征 xff1a 1 所有的变化都是针对某一个特定的对象 xff0c 这个对象会触发

随机推荐

  • 虚拟机中Ubuntu与主机共享文件夹

    虚拟机中Ubuntu与主机共享文件夹 xff0c 以及 mnt目录为空 xff0c 没有共享文件夹时的解决方案 1 启用共享文件夹 首先将虚拟机关机 xff0c 在虚拟机设置中 xff0c 选择选项面板 xff0c 选择共享文件夹 xff0
  • 【ROS】中级操作学习整理-TF坐标变换

    系列文章目录 ROS 中级操作学习整理 gazebo机器人仿真 ROS 中级操作学习整理 TF坐标变换 ROS 中级操作学习整理 传感器建模 ROS 中级操作学习整理 激光SLAM 文章目录 目录 目录 系列文章目录 文章目录 前言 一 R
  • STM32 芯片锁死无法烧录问题解决

    芯片锁死原因 xff1a 1 烧进去的工程对应器件与目标器件不一致 xff1b 2 烧进去的工程HSE VALUE与目标板上晶振频率不一致 xff1b 3 将烧录引脚烧录 本人在使用F411时犯下了 比较愚蠢的错误 xff0c 因为PB3引
  • 【TPMS】 - 发射端2

    TPMS项目 发射端SP370 目录章节介绍 一 SP370数据手册浏览二 源码学习三 SP370的RF的部分详解四 RF数据包的发送和数据包格式解析1 目录 章节介绍 1 SP370数据手册浏览 浏览SP370的数据手册 xff0c 看一
  • 【TPMS】 -接收端1

    TPMS项目 接受端TDA5235 目录章节介绍 一 TPMS接收板概况介绍二 TDA5235的专业知识1三 寄存器配置工具 目录 章节介绍 1 TPMS接收板概况介绍 本节开始接收板部分的课程 xff0c 先对接收板的整体情况 xff0c
  • ST_link突然不能使用了

    一 发现问题 今天 xff0c 我使用st link烧写程序时突然不能用了 xff0c 我昨天都还可以正常使用 我用手摸仿真器时很热 我意识到可能坏了 二 解决过程 xff08 1 xff09 用keil5查看debug设置时就能找到ST
  • OpenCV 读取视频并保存为另一个视频

    测试代码如下 xff1a 功能 xff1a 读取视频 xff0c 缩小处理后再存为另一个视频 方法1 include lt opencv2 opencv hpp gt include lt opencv2 highgui highgui c
  • XML和JSON

    XML 简介 xml是什么 XML是一种可扩展标记语言 Extensible Markup Language xff0c 它是一种用于在计算机网络上进行数据传输的标准格式 XML使用标记来标识数据 xff0c 并且可以自定义标记 xff0c
  • STM32单片机蜂鸣器实验

    蜂鸣器可以分为两种 xff1a 有源蜂鸣器与无源蜂鸣器 xff0c 这里的 源 指的是有没有自带震荡电路 xff0c 有源的蜂鸣器自带有震荡电路 xff0c 通电的瞬间就会发出声音 xff1b 而无源的蜂鸣器 xff0c 需要提供一个2 5
  • JVM虚拟机

    JVM 1 JVM 概述 x1f6b4 x1f6b4 x1f6b2 x1f6b4 虚拟机 xff08 Virtual Machine xff09 是一台虚拟的计算机 VMware属于系统虚拟机 xff0c 是对物理计算机的仿真 Java虚拟
  • 树莓派桌面WIFI图标消失,树莓派黑屏can‘t currently show the desktop

    方法一 xff1a 重装镜像 方法二 xff1a 找个树莓派显示器终端输入这行代码 sudo apt install wpasupplicant wpagui libengine pkcs11 openssl 转载B站视频 xff1a 完美
  • cuda10.1+cudnn10.1+tensorflow2.2.0+pytorch1.7.1下载安装及配置

    一 cuda及cudnn下载 1 查看自己电脑是否支持GPU 方法 xff1a 鼠标移动到此电脑 xff0c 点击鼠标右键 xff0c 依次选择属性 设备管理器 显示适配器有以下图标 xff08 NVIDIA xff09 即可安装GPU x
  • C语言:strtok()函数简单用法

    strtok函数 切割字符串 第一个参数指定一个字符串 xff0c 它包含了0个或者多个由第二个参数 xff08 字符串 xff09 中的一个或多个分隔符分割的标记 strtok函数找到第一个参数中的下一个标记 xff0c 并将其用 39
  • ESP32之FreeRTOS--任务的创建和运行

    文章目录 前言一 创建任务和删除函数1 xTaskCreate 2 xTaskCreateStatic 3 xTaskCreateRestricted 4 vTaskDelete 二 任务函数和任务控制块TCB1 任务函数模板2 TCB 三
  • 如何将本地项目上传到gitee

    如何将本地项目上传到gitee 第一步 xff1a 首先你要有一个gitee仓库 新建仓库 填写仓库信息 xff1a 如图 第二步 xff1a 将创建好的仓库 xff0c pull xff08 拉取 xff09 到本地 通过git 命令 把
  • go语言操作es

    目录 go语言操作es解决golang使用elastic连接elasticsearch时自动转换连接地址初始化数据创建结构体方式字符串方式 xff1a 查找修改删除查找 集群搭建配置文件修改 go语言操作es go get github c
  • Context介绍

    目录 Context设计原理默认上下文取消信号传值方法小结 Context 上下文 context Context Go 语言中用来设置截止日期 同步信号 xff0c 传递请求相关值的结构体 上下文与 Goroutine 有比较密切的关系
  • 将视频转成ROS的bag包

    执行转化命令 python2 mp4 2 bag py lane video3 mp4 out camera bag 循环播放图片 xff0c 并重命名成自己需要的话题名 rosbag play l out camera bag camer
  • beego介绍(一)

    目录 beego 的 MVC 架构介绍参数配置默认配置解析不同级别的配置多个配置文件支持环境变量配置系统默认参数基础配置App 配置Web配置监听配置Session配置Log配置 路由设置基础路由基本 GET 路由基本 POST 路由注册一
  • TCP如何保证可靠性?

    TCP如何保证可靠性 xff1f TCP协议保证数据传输可靠性的方式主要有 xff1a 校验和 序列号 确认应答 超时重传 连接管理 流量控制 拥塞控制 1 校验和 计算方式 xff1a 在数据传输的过程中 xff0c 将发送的数据段都当做