【探索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.mzph.cn/web/40028.shtml

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

相关文章

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

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

nftables(1)基本原理

简介 nftables 是 Linux 内核中用于数据包分类的现代框架,用来替代旧的 iptables(包括 ip6tables, arptables, ebtables 等,统称为 xtables)架构。nftables 提供了更强大、更灵活以及更易于管理的规则集配置方式,使得…

【java计算机毕设】办公用品管理系统MySQL ssm JSP maven项目设计代码源码+文档 前后端一体

1项目功能 【java计算机毕设】办公用品管理系统MySQL ssm JSP maven项目设计代码源码文档 前后端一体 2项目介绍 系统功能: 办公用品管理系统包括管理员、用户俩种角色。 管理员功能包括个人中心模块用于修改个人信息和密码、用户管理、用品分类管理、用品信息管理…

springcloud+vue项目,controller层接口返回json数据,前端可以接收到数据,但浏览器“F12-->网络-->响应“显示为空的问题处理

1.显示为空的场景 SharetekR(access_tokeneyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJQQzoxODA1ODA4ODc1MjUwMTIyNzUyIiwicm5TdHIiOiJrZEoxV05CV3NBSUdYb05TbktSU3kzOGNuSnk3c3FRTSIsInVzZXJJZCI6MTgwNTgwODg3NTI1MDEyMjc1MiwidXNlck5h…

grpc-go客户端接口添加

【1】 proto相关文件同服务端,如已经生成,可以直接使用服务端的文件(包) 【2】新建一个目录“WHG_CLIENT”,目录下新建一个main.go文件 package mainimport ("context""log""grpc-go-maste…

STM32F1+HAL库+FreeTOTS学习5——内核中断管理及中断控制函数

STM32F1HAL库FreeTOTS学习5——中断管理和临界段代码保护 中断简介中断优先级寄存器拓展FreeRTOS中PendSV和Systick中断优先级配置三个中断屏蔽寄存器FreeRTOS中断管理函数代码验证 上一期我们学习了FreeRTOS中任务挂起与恢复,在中断服务程序中恢复任务过程中&#…

[Redis]哨兵机制

哨兵机制概念 在传统主从复制机制中,会存在一些问题: 1. 主节点发生故障时,进行主备切换的过程是复杂的,需要人工参与,导致故障恢复时间无法保障。 2. 主节点可以将读压力分散出去,但写压力/存储压力是无法…

印章谁在管、谁用了、用在哪?契约锁让您打开手机一看便知

“印章都交给谁在管”、“哪些人能用”、“都有哪些业务在用”…这些既是管理者最关心的印章问题也是影响印章安全的关键要素。但是公司旗下分子公司那么多,各类公章、法人章、财务章、合同章一大堆,想“问”明白很难。 契约锁电子签及印控平台推出“印章…

14-11 2024 年的 13 个 AI 趋势

2024 年的 13 个 AI 趋势 人工智能对环境的影响和平人工智能人工智能支持的问题解决和决策针对人工智能公司的诉讼2024 年美国总统大选与人工智能威胁人工智能、网络犯罪和社会工程威胁人工智能治疗孤独与对人工智能的情感依赖人工智能影响者中国争夺人工智能霸主地位人工智能…

YOLOv10全网最新创新点改进系列:融合GSConv+Slim Neck,双改进、双增强,替换特征融合层实现, 轻量化涨点改进策略,有效涨点神器!

YOLOv10全网最新创新点改进系列:融合GSConvSlim Neck,双改进、双增强,替换特征融合层实现, 轻量化涨点改进策略,有效涨点神器! 所有改进代码均经过实验测试跑通!截止发稿时YOLOv10已改进40&…

【数据结构】06.栈队列

一、栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈&#…

LangChain终极内幕指南,学会langchain就看它了

1.概述 在人工智能迅速演进的时代,诸如Open AI的ChatGPT和Google的Bard等大型语言模型(LLMs)正彻底改变我们与技术互动的方式。这些技术巨头和SaaS公司正在竞相利用LLMs的威力,创造更为智能和实用的应用程序。 然而,真正的变革并非仅仅停留…

Finding and exploting an unused API endpoint

Using 0$ account buy a piece of lether priced at $133 1、尝试访问api接口 大概率可能访问不到,但是可以尝试访问下 /api/swagger/v1 /openapi.json 2、页面功能点寻找 api send to Repeter 3、Find Supported HTTP请求 POST方法测试 通过测试得知支持GET方法和PATC…

系统管理(System Keeping):全新迭代,优化您的开发体验

随着科技的不断进步和用户需求的日益增长,系统管理(System Keeping)不断进行迭代更新,致力于为用户带来更加高效、便捷的开发体验。本次全新迭代,不仅在界面与交互上进行了革新,更在功能整合、个性化与安全…

Android --- Service

出自于此,写得很清楚。关于Android Service真正的完全详解,你需要知道的一切_android service-CSDN博客 出自【zejian的博客】 什么是Service? Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。 服务可由其他应用组件…

万字长文|关于 OpenAI 接口开发你应该知道的一切

这篇文章中个人结合自己的实践经验把 OpenAI 官方文档解读一遍。但是原文档涉及内容众多,包括微调,嵌入(Embeddings)等众多主题,我这里重点挑选自己开发高频使用到的,需要详细了解的可以自行前往官网阅读。…

2024科技文化节程序设计竞赛

补题链接 https://www.luogu.com.cn/contest/178895#problems A. 签到题 忽略掉大小为1的环&#xff0c;答案是剩下环的大小和减环的数量 #include<bits/stdc.h> #include<iostream> #include<cstdio> #include<vector> #include<map> #incl…

c进阶篇(四):内存函数

内存函数以字节为单位更改 1.memcpy memcpy 是 C/C 中的一个标准库函数&#xff0c;用于内存拷贝操作。它的原型通常定义在 <cstring> 头文件中&#xff0c;其作用是将一块内存中的数据复制到另一块内存中。 函数原型&#xff1a;void *memcpy(void *dest, const void…

多模态融合算法应用:CT + 临床文本数据 + pyradiomics提取到的图像特征

多模态融合算法应用 CT 临床文本数据 pyradiomics提取图像特征 单模态建模临床数据建模pyradiomics提取图像特征建模CT建模 多模态建模前融合为什么能直接合并在一起&#xff1f; 后融合Med-CLIP&#xff1a;深度学习 可解释性 单模态建模 临床数据建模 临床文本数据&…

WPF Menu实现快捷键操作

很多小伙伴说&#xff0c;在Menu中&#xff0c;实现单个快捷键操作很简单&#xff0c;怎么实现多个快捷键操作和&#xff0c;组合快捷键呢&#xff0c;今天他来了。 上代码和效果图 一、Ctrl Shift 任意子母键实现快捷键组合 <Window x:Class"XH.TemplateLesson.M…