【探索Linux】P.37(传输层 —— TCP协议通信机制 | 确认应答(ACK)机制 | 超时重传机制)

在这里插入图片描述

阅读导航

  • 引言
  • 一、确认应答(ACK)机制
    • 1. 成功接收
    • 2. 过程中存在丢包
    • 3. 引入序列号
      • (1)序列号的定义
      • (2)序列号的作用
      • (3)序列号的工作原理
      • (4)序列号和确认应答号
  • 二、超时重传机制
    • 1. 超时重传机制的作用
    • 2. 超时重传机制的工作原理
    • 3. 超时重传机制的优化
    • 4. 超时重传机制的影响
  • 温馨提示

引言

在上一篇文章中,我们深入探讨了TCP协议的传输层,详细解析了TCP协议段的格式,包括它的头部结构和各字段的功能。通过这一过程,我们对TCP如何确保数据的可靠传输有了初步的了解。现在,让我们继续我们的探索之旅,进一步揭开TCP协议的神秘面纱,深入了解其通信机制。让我们一起走进TCP协议的通信世界,探索其背后的技术细节和实现原理。

一、确认应答(ACK)机制

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP中,确认应答(ACK)机制是确保数据可靠性的核心组成部分。

1. 成功接收

在这里插入图片描述
当主机A向主机B发送数据时,一旦数据到达主机B,主机B将向主机A发送一个确认应答,以表明数据已被成功接收。下面是这一过程的详细步骤:

  1. 数据发送:主机A将数据分割成TCP段,每个段都包含一个序列号,表示数据的顺序。

  2. 发送数据段:主机A将这些TCP段发送到主机B。

  3. 接收数据段:主机B接收到来自主机A的TCP段。

  4. 生成ACK:主机B生成一个ACK段,其中包含一个确认应答号。这个确认应答号通常等于主机B期望接收的下一个TCP段的序列号。

  5. 发送ACK:主机B将ACK段发送回主机A。

  6. 确认接收:主机A接收到来自主机B的ACK后,知道之前发送的数据已经被成功接收。

2. 过程中存在丢包

在TCP协议中,数据的可靠传输依赖于接收端发送的确认应答(ACK)。发送端在数据发出后,会进入等待状态,以期收到接收端的确认信号。一旦接收到确认,即表示数据已安全到达目的地。相反,如果在指定的等待时间内未收到任何确认,发送端将推断数据可能未被成功接收,从而触发重发机制
在这里插入图片描述
如果主机A发送的数据因网络拥堵等原因未能成功传输至主机B,导致数据丢失,主机A将无法接收到主机B的确认信号。在这种情况下,主机A会在设定的时间间隔内等待确认应答。若在这段时间内仍未收到任何确认,主机A将采取行动,重新发送丢失的数据

即使发送端未收到确认应答,这并不一定表示数据包丢失。有时数据可能已经到达接收端,但确认信号在返回过程中丢失。这会导致发送端在未收到及时的ACK时,误判数据未成功传输,并因此重新发送数据。

在这里插入图片描述
当主机B向主机A发送的确认应答因网络问题在途中丢失,主机A将无法收到这一信号。主机A会设定一个等待期,如果在这段时间内没有收到确认应答,它将认为数据未被成功接收,并重新发送数据。与此同时,主机B在实际接收到数据后,如果再次收到相同的数据包,它将识别出这是一次重复传输,并不会再发送确认应答,以避免不必要的通信

3. 引入序列号

为了解决上面的问题,确认应答(ACK)机制引入了序列号,它用于确保数据的有序传输和完整性。
在这里插入图片描述

(1)序列号的定义

序列号是TCP段中的一个重要字段,用于标识该段数据在字节流中的位置。每个TCP段的序列号都是唯一的,它从0开始,并且随着数据的发送而递增。

(2)序列号的作用

  1. 确保有序传输:序列号确保数据按照发送的顺序被接收方接收。接收方可以根据序列号将数据重新组装成原始的字节流。
  2. 允许数据重排:如果数据在传输过程中出现乱序,接收方可以根据序列号对数据进行重新排序。
  3. 检测丢失的数据:如果接收方收到的序列号不是期望的下一个序列号,它知道数据在传输过程中丢失了。
  4. 触发重传机制:发送方可以根据接收方的ACK报文中的确认号来确定哪些数据需要重传。

(3)序列号的工作原理

  1. 初始化序列号(ISN):当TCP连接建立时,发送方随机生成一个初始序列号(ISN),用于第一个数据段的序列号。
  2. 序列号递增:随着数据的发送,序列号会递增。例如,如果发送方发送了100字节的数据,那么下一个数据段的序列号将是100+1。
  3. 序列号回绕:序列号是一个32位的无符号整数,当序列号达到最大值(2^32-1)时,它会回绕到0,重新开始计数。
  4. 序列号与确认号的关系:接收方在发送ACK报文时,会将期望接收的下一个数据段的序列号作为确认号发送给发送方。

(4)序列号和确认应答号

在这里插入图片描述

序列号是TCP协议中确保数据有序传输和完整性的关键机制之一。通过序列号,TCP能够实现可靠的数据传输,即使在网络条件不理想的情况下也能保持数据的完整性。

二、超时重传机制

超时重传是指当TCP发送方在发送数据后,在预期的时间内没有收到接收方的确认应答(ACK),则会认为该数据段在传输过程中丢失或损坏,从而触发重新发送该数据段的过程。

1. 超时重传机制的作用

  1. 确保数据完整性:通过重传丢失或未被确认的数据,确保所有数据都能被接收方正确接收。
  2. 适应网络状况:网络状况可能随时变化,超时重传机制允许TCP根据当前的网络状况调整重传策略。

2. 超时重传机制的工作原理

  1. 设置超时时间(RTO, Retransmission Timeout):发送方为每个未被确认的数据段设置一个超时计时器。超时时间的确定通常基于往返时间(RTT, Round-Trip Time)的估计。
  2. 监控ACK:发送方持续监控接收方发回的ACK。如果收到的ACK确认了数据段,超时计时器会重置;如果没有收到预期的ACK,计时器继续倒计时。
  3. 超时触发重传:当超时计时器到达0时,如果相应的数据段仍未被确认,发送方会认为该数据段丢失,并重新发送该数据段。
  4. 调整超时时间:TCP会根据网络状况动态调整超时时间。例如,如果连续发生超时,TCP可能会增加超时时间,以减少不必要的重传。

3. 超时重传机制的优化

  1. 快速重传(Fast Retransmit):除了超时重传外,TCP还实现了快速重传机制。如果接收方收到一个数据段,但后续的数据段丢失,它会发送重复的ACK来指示发送方。发送方收到三个相同的ACK时,会立即重传丢失的数据段,而不必等待超时。
  2. 有限重传为了防止无限重传,TCP通常会限制重传次数。如果数据段在多次重传后仍未被确认,TCP可能会放弃重传,并报告错误给应用层
  3. 拥塞控制:超时重传是拥塞控制算法的一部分。当发生超时时,TCP可能会认为网络拥塞,并采取措施减少发送速率,以减轻网络负担。

4. 超时重传机制的影响

  • 性能:超时重传可能会影响TCP连接的性能,特别是在网络状况不佳时。重传会增加延迟和额外的网络负载。
  • 可靠性:尽管超时重传可能会影响性能,但它确保了数据的可靠传输,即使在网络条件不理想的情况下。

温馨提示

感谢您对博主文章的关注与支持!如果您喜欢这篇文章,可以点赞、评论和分享给您的同学,这将对我提供巨大的鼓励和支持。另外,我计划在未来的更新中持续探讨与本文相关的内容。我会为您带来更多关于Linux以及C++编程技术问题的深入解析、应用案例和趣味玩法等。如果感兴趣的话可以关注博主的更新,不要错过任何精彩内容!

再次感谢您的支持和关注。我们期待与您建立更紧密的互动,共同探索Linux、C++、算法和编程的奥秘。祝您生活愉快,排便顺畅!

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

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

相关文章

flask项目部署总结

这个部署的时候要用虚拟环境,cd进项目文件夹 python3 -m venv myenv source myenv/bin/activate激活 之后就安装一些库包之类的,(flask,requests,bs4,等等) 最重要的是要写.flaskenv文件并且pip install 一个能运行…

Android14之获取包名/类名/服务名(二百二十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

Java类和对象详解

1.类与对象的初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 JAVA是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 面向过…

底层软件 | 十分详细,为了学习设备树,我写了5w字笔记!

0、设备树是什么?1、DTS 1.1 dts简介1.2 dts例子 2、DTC(Device Tree Compiler)3、DTB(Device Tree Blob)4、绑定(Binding)5、Bootloader compatible属性 7、 #address-cells和#size-cells属性8…

Elasticsearch 使用误区之二——频繁更新文档

在使用 Elasticsearch 时,频繁更新文档是一种常见误区。这不仅影响性能,还可能导致系统资源的浪费。 理解 Elasticsearch 的文档更新机制对于优化性能至关重要。 关于 Elasticsearch 更新操作,常见问题如下: ——https://t.zsxq.c…

MySQL学习(5):SQL语句之数据查询语言:DQL

1.DQL语法 select 字段列表 from 表名列表 #DQL是可以进行多表查询的 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数 2.基本查询(select) 2.1查询多字段 select 字段1,字段2,字段3,......fro…

Linux/Ubuntu访问局域网共享文件夹

文件夹中找到“Other Location”,输入“smb:IP地址/共享文件夹名称”,然后点击connect后者直接回车即可! End!

【51单片机入门】矩阵键盘

文章目录 前言矩阵键盘介绍与检测原理原理图代码讲解总结 前言 在嵌入式系统设计中,键盘输入是一种常见的人机交互方式。其中,矩阵键盘因其简单、方便和易于扩展的特性,被广泛应用于各种设备中。本文将介绍如何使用51单片机来实现矩阵键盘的…

相机光学(二十四)——CRA角度

CRA角度 0.参考资料1.什么是CRA角度2.为什么 CRA 会导致luma shading3.为什么 CRA 会导致color shading4.CRA相差过大的具体表现5.CRA Matching6.怎样选择sensor的CRA 0.参考资料 1.芯片CRA角度与镜头的匹配关系(一)   2.芯片CRA角度与镜头选型的匹配关…

【MySQL系列】隐式转换

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

基于Java的壁纸网站设计与实现

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

【linux高级IO(一)】理解五种IO模型

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux高级IO 1. 前言2. 重谈对…

Redis基础教程(六):redis 哈希(Hash)

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

Windows 安装hadoop 3.4

目录 安装 下载 设置环境变量 配置 修改:hadoop-env.cmd 修改:core-sit.xml 修改:hdfs-site.xml 修改:mapred-site.xml 修改:yarn-site.xml 运行 格式化HDFS文件系统 启动:hadoop 启动&#xf…

CTF常用sql注入(二)报错注入(普通以及双查询)

0x05 报错注入 适用于页面无正常回显,但是有报错,那么就可以使用报错注入 基础函数 floor() 向下取整函数 返回小于或等于传入参数的最大整数。换句话说,它将数字向下取整到最接近的整数值。 示例: floor(3.7) 返回 3 floor(-2…

统计信号处理基础 习题解答11-12

题目 证明 的MAP估计量为 其中是一个的矢量, 是一个可逆的p*p的矩阵。也就是说,MAP估计量对可逆的线性变换是可以变换的。 解答 已知的联合概率密度 且: 现在知道: 那么为了获得变换后的MAP,首先需要根据求出 根据概率密度变换…

Linux系统部署MongoDB开源文档型数据库并实现无公网IP远程访问

文章目录 前言1. 安装Docker2. 使用Docker拉取MongoDB镜像3. 创建并启动MongoDB容器4. 本地连接测试5. 公网远程访问本地MongoDB容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 💡 推荐 前些天发现了一个巨牛的人工智能学习网站&am…

Springboot与xxl-job

一、下载xxl-job项目 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 从GitHub上面将项目clone下来,如果网络问题导致速度慢也可以从Gitee上面拉…

企业搭建知识库:解锁无限潜力的钥匙

在当今这个信息爆炸的时代,企业如何高效地管理、传播与利用知识,已成为衡量其竞争力的重要标尺。知识库,作为这一背景下的产物,正逐步成为企业不可或缺的数字资产。它不仅是一个自助式的数字门户,更是连接员工、客户与…

stm32定时器与pwm波

文章目录 4 TIM4.1 SysTick系统定时器4.2 TIM定时器中断与微秒级延时4.3 TIM使用PWM波4.3.1 PWM介绍4.3.2 无源蜂鸣器实现 4.4 TIM ,PWM常用函数 4 TIM 4.1 SysTick系统定时器 ​ Systick系统滴答,(同时他有属于自己的中断,可以利用它来做看…