TCP协议的核心机制

news2025/1/19 7:54:41

TCP协议的核心机制

  • 一:确认应答机制
    • 1.2:超时重传
      • 接收缓冲区
    • 超时重传时间
    • 重置连接

一:确认应答机制

对于TCP协议来说,要解决的一个很重要的问题,就是可靠传输
可靠传输,不是指发送方能够100%的把数据发送给接收方,而是尽可能.
尤其是让发送方知道,接收方是否收到.

举个例子:
我去吃麻辣烫,和老板说: 少加辣椒,
此时老板就会回应: 好的好的(这样用于"应答的数据,就成为"应答报文")
在这里插入图片描述
确认应答机制,核心就是靠对方给你一个应答.
但如果批量发送数据的时候,可能会出现一些问题,
因为网络中传输的数据可能会出现"后发先至"的情况(后发先至是网络通信中,客观存在的,改变不了)
比如:
(考虑鸡腿卖完了的情况)
我向老板说:少加辣椒,加个鸡腿
如果老板先听到"加个鸡腿",回复"不行"
然后听到"少加辣椒",回复"好的".
此时明显是错的.
那么就需要能够对要传输的数据进行编号,并且让应答报文的编号和发送数据的编号能够对应起来,即使出现后发先至,也不会影响传输意思的理解.
我: 1) 少加辣椒
2)加个鸡腿
老板:针对1):好的好的
针对2):不行
但实际上,真实的TCP的序号不是按照"一条两条"方式来编号的,而是按照以字节为单位进行编号的,每个字节会分配一个编号.
比如:传输的数据含有1000个字节,编号可能就是1-1000,但发送方的报头中,序号中的数值就是载荷部分的第一个字节的编号:1;发送方的报头中,序号字段有效,而确认序号字段是无效的;
而接收方的确认序号就是数据最后一个字节的编号+1;接收方返回的ack,"确认序号"有效,"序号"字段是无效的.
也就是1001.

1.2:超时重传

确认应答机制:讨论的是发送方能否把数据发给接收方,发送成功,接收方就会给一个应答,没发送成功,接收方就没有应答,没发送成功就称为丢包了.
但如果发送成功,但接收方的应答报文出现丢包的情况,导致发送方接收不到应答呢?
超时重传机制就是应对网络中出现丢包情况(发送方丢,接收方丢)时的一种策略

超时:发送方发送数据之后,会等待一定的时间,如果等待时间超过某个"阈值",还没收到ACK,就认为是出现丢包了.出现丢包,就会重传 ,把刚才发送的数据在发送一遍.

发送方等待一定时间后,没有收到ACK,(ack回应晚了,超过了等待时间,也认为是没有收到ACK)就会触发超时重传机制.
ack丢了,也会触发超时重传机制,不就发送了两份重复的数据了吗??
想一个场景:对于转账这样的操作,触发重传就引起重复转账
所以在应用层一定要保证应用程序在read的时候不能读到重复的数据.
其实TCP接收方会根据序号字段进行去重.

接收缓冲区

接收方的操作系统内核中,存在一个数据结构,“接收缓冲区”,类似于PriorityBlockingQueue.

在这里插入图片描述如何知道队列中,之前存在过?
接收缓冲区,除了去重之外,还有一个很重要的功能,针对收到的数据进行排序.
A按照1 2 3 4 这样的顺序write ,B这边read 的时候,也是按照1 2 3 4 read出来
虽然网络传输的中间过程可能是后发先至,可能是乱序的,但在接收缓冲区里,会对收到的数据先排个序,让序号小的,在前面,序号大的,在后面.
在这里插入图片描述
在这里插入图片描述

超时重传时间

丢包,本身就是一个概率性事件:
假设,网络丢包率是0.1 (已经很大了)
触发一个重传,如果重传的包也丢了,概率就是 0.1*0.1 =0.01,
也就是两次传输数据都丢包的概率是0.01,也就是0.99的概率是至少传输成功一次.
随着重传的次数增加,成功一次概率继续变大,反之,如果连续重传几次,都丢包,说明当前本身丢包的概率就非常大了,网络应该是存在严重故障了.

超时时间,不是固定的,而是随着重传次数的增加,会变得越来越长.
假设,第一次传输数据,等待50ms ,触发重传
重传之后,可能就会等待100ms,没收到ACK,触发重传
重传之后,可能就会等待150ms…
超时时间间隔就会越来越长(不一定是线性增长,具体怎么增长,取决于系统的具体实现)
也就是重传的效率越来越低.
大概率重传一次就会成功,如果需要重传多次,大概率就是网络故障了,能成功的概率就比较低了;如果重传的越来越快,但成功的概率比较低,是非常浪费系统资源的.

重置连接

如果网络上确实出现严重故障了,重传若干次,还是不成功,达到一定次数阈值,就会尝试"重置连接".
在这里插入图片描述网络出现严重故障,RST报文也无法顺利完成,此时重置也失败了,就只能断开连接了.(释放掉保存对方信息的数据结构)
(重置连接可能有用)
TCP的可靠传输,全靠确认应答机制和超时重传机制.

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

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

相关文章

AI菜鸟向前飞 — LangChain系列之十六 - Agent系列:从现象看机制(下篇)一款“无需传递中间步骤“的Agent

前言 AI菜鸟向前飞 — LangChain系列之十四 - Agent系列:从现象看机制(上篇) AI菜鸟向前飞 — LangChain系列之十五 - Agent系列:从现象看机制(中篇)一个Agent的“旅行” 回顾前两篇文章,大家会…

QT 信号和槽教程,窗体和控件对象之间的沟通一般都使用信号和槽

Qt的信号和槽(Signals and Slots)机制是一种强大的对象间通信方式,它允许对象在完全解耦的情况下相互通信。以下是关于Qt信号和槽的简明教程: 基本概念 信号(Signal):信号是由Qt对象发出的通知…

Python leetcode239滑动窗口最大值,单调队列解题思路,单调栈的代码模板,单调队列代码实战

1 题目 239. 滑动窗口最大值 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums [1…

硕士课程可穿戴作业归档之三

代码运行 挑战赛要求 根据比赛要求, As in recent challenges, the data have been divided into three sets:- **Learning (training) set A**: includes noninvasive fetal ECG signals, as well as the reference annotations for them (for participants use…

2022.9.26DAY678

课程学习:《数据处理技术》讲了“数据查询”的语法格式,语法格式也算是简单,就是没能跟之前的内容联系起来,之前的内容没有及时回顾。 高等数学:“ 函数的概念”,讲了函数的概念,反函数&#…

C语言中 printf函数格式化输出

一. 简介 本文来简单学习一下,C语言中printf函数格式化输出时,因为我们的粗心没有 将数据类型与格式化参数对应,而导致的一些问题。 二. C语言中printf函数的格式化输出 在C语言中,printf函数是用于格式化输出的函数&#xff0…

Idea 的选择文件后定位瞄准器 “Select Opened File“ 的功能不见了

一、问题描述 使用Idea 时 “Select Opened File” 的功能不见了,一般是可以通过点击这个瞄准按钮,定位到文件的位置。 这个非常坑爹。 之前应该是有这个瞄准镜的。 二、解决方法 右键标题框,选择后点击Always Opened File,即…

[C][栈帧]详细讲解

目录 1.栈帧1.进程地址空间2.栈帧说明 2.认识相关寄存器3.认识相关汇编命令4.过程理解5.栈帧总结6.补充 1.栈帧 1.进程地址空间 .进程地址空间 2.栈帧说明 调用函数,形成栈帧函数返回,释放栈帧局部变量是存放在栈区上的栈区内存的使用习惯是&#xff…

阿里云语音合成TTS直播助手软件开发

阿里云的TTS比较便宜,效果比不了开源克隆的那种,比纯机器人效果好一点点 阿里云sambert https://help.aliyun.com/zh/dashscope/developer-reference/quick-start-13 Sambert系列模型 1万字1元 ,每主账号每模型每月3万字免费 创建API-KEY htt…

国产操作系统上Vim的详解03--使用Vundle插件管理器来安装和使用插件 _ 统信 _ 麒麟 _ 中科方德

原文链接:国产操作系统上Vim的详解03–使用Vundle插件管理器来安装和使用插件 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!今天给大家带来一篇在国产操作系统上使用Vundle插件管理器来安装和使用Vim插件的详解文章。Vundle是Vim的一款强大的插…

工业通讯现场中关于EtherCAT转TCPIP网关的现场应用

在当今工业自动化的浪潮中,EtherCAT技术以其高效、实时的特性成为了众多制造业的首选。然而,随着工业互联网的发展,对于数据的远程访问和云平台集成的需求日益增长,这就需要将EtherCAT协议转化为更为通用的TCP/IP协议。于是开疆智…

Day43 代码随想录打卡|二叉树篇---左叶子之和

题目(leecode T404): 给定二叉树的根节点 root ,返回所有左叶子之和。 方法: 迭代法:计算所有的左叶子节点,那我们就必然要找到所有的左叶子节点。那么怎么找呢?如何针对cur->l…

Java实现俄罗斯方块游戏源代码(启动即可玩)

这是一个用Java Swing实现的俄罗斯方块游戏,具有经典的游戏机制和图形界面。游戏中,玩家需要旋转和移动不断下落的方块,使其填满一行来消除该行并得分。 该项目适合学习Java GUI编程、游戏开发基础以及面向对象编程(OOP&#xff0…

【Qt】Qt Style Sheets (QSS) 指南:打造个性化用户界面

文章目录 前言:1. QSS 选择器2. 子控件选择器(Sub-Controls)2.1. 示例:给 QComboBox 给下拉按钮加上图标2.2. 示例:修改进度条颜色 3. 伪类选择器3.1. 代码示例: 设置按钮的伪类样式.3.2. 代码示例: 使用事件方式实现同…

想要成长就要持续地学习,而如何学习更有效率呢

为什么很多人学了知识,但是总感觉记不住,用不上呢? 在学习的过程中,为什么总感觉没什么进步呢? 看了很多书,为什么总感觉没什么用呢? 要说明这些问题,首先我们要知道一个好的、完整的…

语言模型测试系列【9】

语言模型 文心一言讯飞星火通义千问2.5豆包360智脑百小应腾讯元宝KimiC知道 好长时间没有做语言模型的测试了,一方面是没有好的素材,各模型都在升级优化,而且频率很高;另一方面近期在阅读和学习其他的知识,所以更的也…

阿里影业业绩大涨,除了沸腾的文娱市场还有什么原因?

影视文娱市场的火热仍在延续,新定档的电影和演出,不断引人关注这个行业的生机。而这个行业的支持者、受益者,就站在一线。 5月29日晚,阿里影业发布截至2024年3月31日的2024财年业绩公告。社会文娱消费的热情,对优质项…

怎么等比例缩小图片尺寸?这四种方法肯定可以帮到你!

怎么等比例缩小图片尺寸?在当今日常生活中,图片文件是我们不可或缺的一部分,它们以各种形式出现,从社交媒体上的照片到工作文档中的插图,然而,随之而来的问题是,有时这些图片文件的尺寸过大&…

Linux---用户及权限配置

文章目录 目录 文章目录 前言 一.基本概念 二.用户管理 创建用户 修改用户属性 用户组管理 用户授权 前言 用户在操作系统中是非常重要的,我们登录系统,访问共享文件夹等都需要用户进行验证。所以,掌握管理用户的知识非常有必要的 一.基…

Java Web学习笔记2——Web开发介绍

什么是Web? Web:全球广域网,也称为万维网(WWW World Wide Web),能够通过浏览器访问的网站。 1)淘宝、京东、唯品会等电商系统; 2)CRM、OA、ERP企业管理系统&#xff1…