【Linux网络】详解TCP协议(1)

图片名称
🎉博主首页: 有趣的中国人

🎉专栏首页: Linux网络

🎉其它专栏: C++初阶 | C++进阶 | 初阶数据结构

在这里插入图片描述

小伙伴们大家好,本片文章将会讲解 TCP协议 的相关内容。


如果看到最后您觉得这篇文章写得不错,有所收获,麻烦点赞👍、收藏🌟、留下评论📝。您的支持是我最大的动力,让我们一起努力,共同成长!

文章目录

  • `1. TCP 协议简介`
    • ==<font color = blue><b>🎧1.1 TCP 协议段格式🎧==
    • ==<font color = blue><b>🎧1.2 TCP 解包和分用🎧==
  • `2. TCP 确认应答机制(ACK)和捎带应答`
    • ==<font color = blue><b>🎧2.1 什么是确认应答机制🎧==
    • ==<font color = blue><b>🎧2.2 TCP 通信模式🎧==
    • ==<font color = blue><b>🎧2.3 捎带应答🎧==
  • `3. 超时重传机制`
    • ==<font color = blue><b>🎧3.1 超时重传发生的 2种 情况🎧==
    • ==<font color = blue><b>🎧3.2 总结序号的 3个 作用🎧==



1. TCP 协议简介


TCP传输控制协议)是一个面向连接的协议,保证数据在网络中 可靠、顺序地传输 。它通过 建立连接、数据传输和断开连接 三个阶段来管理数据的传输过程。TCP 使用 确认机制、重传机制、流量控制和拥塞控制等技术,以确保数据包的完整性和顺序。

  • 连接建立:TCP 通过三次握手(SYN、SYN-ACK、ACK)建立连接,确保双方准备好数据传输。

  • 数据传输:数据被分割成段,每个段都有序号和确认号。接收方确认每个段的接收,确保数据完整性。

  • 流量控制:使用滑动窗口机制控制发送方的数据量,避免接收方溢出。

  • 拥塞控制:通过算法(如慢启动、拥塞避免)调节发送速率,防止网络拥堵。

  • 连接断开:通过四次挥手(FIN、ACK、FIN、ACK)关闭连接,确保数据传输完毕。

🎧1.1 TCP 协议段格式🎧


TCP 协议段格式简略图

在这里插入图片描述


TCP 协议段格式解释

  • 源/目的端口号:表示数据是从哪个进程来, 到哪个进程去;
  • 32 位序号/32 位确认号:后面详细讲;
  • 4 位 TCP 报头长度:表示该 TCP 头部有多少个 32 位 bit(有多少个 4 字节);
    • 每一位最大表示值为 权值 * 4
    • 所以TCP 头部最大长度是 15 ∗ 4 = 60 ( B y t e ) 15 * 4 = 60(Byte) 154=60(Byte)

  • 6 位标志位:
    • URG:紧急指针是否有效;
    • ACK:确认号是否有效;
    • PSH:提示接收端应用程序立刻从 TCP 缓冲区把数据读走;
    • RST:对方要求重新建立连接;我们把携带 RST 标识的称为复位报文段;
    • SYN:请求建立连接; 我们把携带 SYN 标识的称为同步报文段;
    • FIN:通知对方, 本端要关闭了, 我们称携带 FIN 标识的为结束报文段。

  • 16 位窗口大小:后面再说;
  • 16 位校验和:发送端填充, CRC 校验。接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含 TCP 首部, 也包含 TCP 数据部分。
  • 16 位紧急指针:标识哪部分数据是紧急数据;
  • 40 字节头部选项:暂时忽略。

🎧1.2 TCP 解包和分用🎧


我们可以从四位首部长度中知道 TCP 首部长度是多少:

  • 假设首部长度是 0011 表示的二进制位,即 3 3 3,那么首部长度就是 3 ∗ 4 = 12 ( B y t e ) 3 * 4 = 12 (Byte) 34=12(Byte)

  • 如果首部长度是 1111 表示的二进制位,即 15 15 15,那么首部长度就是 15 ∗ 4 = 60 ( B y t e ) 15 * 4 = 60(Byte) 154=60(Byte)

    • 如果总长度 大于 20Byte,说明要在选项中读取 首部长度 - 20 字节
  • 类似地,如何反向计算出对应的二进制位呢?假设头部长度是 28 Byte

    • x ∗ 4 = 28 x * 4 = 28 x4=28 解得 x = 7 x = 7 x=7
    • 7 有二进制表示解释 0111
    • 所以首部长度就是0111


2. TCP 确认应答机制(ACK)和捎带应答


🎧2.1 什么是确认应答机制🎧


在这里插入图片描述
在上图中,假如 主机A 要给 主机B 发送信息,那么怎么保证 主机B 收到了信息呢?

  • 那么 主机A 肯定是要收到 主机B 的应答,就表明 主机B 收到了信息;
  • 因此在报头中就存在一个标志位ACK表明我发送的这一条信息是应答。
  • 如果 主机A 没有收到消息就说明数据丢包了。
    • 这里没收到消息可能有两种情况,主机A 发送给 主机B 的时候就发生了丢包;
    • 还有一种情况就是 主机B 确实收到了 主机A 的消息并且发送了ACK给主机A,但是返回信息的过程中数据丢包了;
    • 这两种情况统一成 主机A 未收到ACK就为丢包。

32位序号和确认序号

在这里插入图片描述

当发送数据的时候,发送方会用到序号,当接收方接收到数据发送ACK的时候,会用到32位序号,那么什么是序号和确认序号呢?

  • 实际上我们可以将TCP的发送缓冲区和接收缓冲区假想成数组,这样就每个数据就天然有了一个下标,而发送方的序号就是要发送数据的最后一个下标;
  • 类似地,接收方发送ACK的时候也会有确认序号了,默认情况下确认序号等于序号加1;
    • 因为确认序号的定义是告诉发送方这个序号之前的所有数据我都已经接收到了;
    • 告诉发送方下一次发送要从哪个序号开始发送。

🎧2.2 TCP 通信模式🎧


通信方式1:

在这里插入图片描述


通信方式2:

在这里插入图片描述

  • 上面两种方式是 TCP 常见的通信方式,一个是每次发一条数据然后等待应答,收到应答之后再发送数据;
  • 另一种方式是一次发送多次数据,然后等待接收方发送多次应答(这种方式下一篇文章会详细说明)

🎧2.3 捎带应答🎧


为什么要有两个序号

很多人可能有一个问题,就是为什么报头种要同时拥有序号和确认序号,如果只有一个序号,不是同样可以告诉发送方某个序号之前的所有数据接收方都已经接收到了,并提醒发送方从下一次从哪个序号开始发送吗?

这里先说一点:

  • 首先因为 TCP是支持全双工 的,如果接收方除了想发送 ACK,还想发送正文数据,就需要序号和确认序号了。
    • 发送 ACK 需要确认序号;
    • 发送正文数据就需要序号了。

我们把这种应答方式叫做 捎带应答。


3. 超时重传机制


🎧3.1 超时重传发生的 2种 情况🎧


在这里插入图片描述

  • 主机 A 发送数据给 B 之后, 可能因为网络拥堵等原因, 数据无法到达 主机 B;
  • 如果 主机 A 在一个特定时间间隔内没有收到 B 发来的确认应答, 就会进行重发;

但是, 主机 A 未收到 B 发来的确认应答, 也可能是因为 ACK 丢失了:

在这里插入图片描述

  • 如果是这种情况,接收方就会接收到很多的重复数据,所以 TCP 就需要认识这些重复的数据,并且把重复的丢弃掉;
  • 这时候我们可以利用前面提到的序列号, 就可以很容易做到去重的效果;

那么, 如果超时的时间如何确定?

  • 最理想的情况下, 找到一个最小的时间, 保证 “确认应答一定能在这个时间内返
    回”;
  • 但是这个时间的长短, 随着网络环境的不同, 是有差异的;
  • 如果超时时间设的太长, 会影响整体的重传效率;
  • 如果超时时间设的太短, 有可能会频繁发送重复的包。

TCP 为了保证无论在任何环境下都能比较高性能的通信, 因此会动态计算这个最大超
时时间。

  • Linux 中(BSD UnixWindows 也是如此), 超时以 500ms 为一个单位进行控制, 每次判定超时重发的超时时间都是 500ms 的整数倍;
  • 如果重发一次之后, 仍然得不到应答, 等待 2*500ms 后再进行重传;
  • 如果仍然得不到应答, 等待 4*500ms 进行重传。 依次类推, 以指数形式递增;
  • 累计到一定的重传次数, TCP 认为网络或者对端主机出现异常, 强制关闭连接。

🎧3.2 总结序号的 3个 作用🎧


  1. 构建确定序号(一般是序号加1);
  2. 接收方的去重操作需要用到序号;
  3. 保证发送方的数据按需放到接收方的缓冲区中。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【大数据】深入浅出Hadoop,干货满满

【大数据】深入浅出Hadoop 文章脉络 Hadoop HDFS MapReduce YARN Hadoop集群硬件架构 假设现在有一个PB级别的数据库表要处理。 在单机情况下&#xff0c;只能升级你的内存、磁盘、CPU&#xff0c;那么这台机器就会变成 “超算”&#xff0c;成本太高&#xff0c;商业公司肯…

通过卷积神经网络(CNN)识别和预测手写数字

一&#xff1a;卷积神经网络&#xff08;CNN&#xff09;和手写数字识别MNIST数据集的介绍 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是一种深度学习模型&#xff0c;它在图像和视频识别、分类和分割任务中表现出色。CNN通过模仿…

8. GIS数据分析师岗位职责、技术要求和常见面试题

本系列文章目录&#xff1a; 1. GIS开发工程师岗位职责、技术要求和常见面试题 2. GIS数据工程师岗位职责、技术要求和常见面试题 3. GIS后端工程师岗位职责、技术要求和常见面试题 4. GIS前端工程师岗位职责、技术要求和常见面试题 5. GIS工程师岗位职责、技术要求和常见面试…

【高等代数笔记】线性空间(一到四)

3. 线性空间 令 K n : { ( a 1 , a 2 , . . . , a n ) ∣ a i ∈ K , i 1 , 2 , . . . , n } \textbf{K}^{n}:\{(a_{1},a_{2},...,a_{n})|a_{i}\in\textbf{K},i1,2,...,n\} Kn:{(a1​,a2​,...,an​)∣ai​∈K,i1,2,...,n}&#xff0c;称为 n n n维向量 规定&#xff08;规定…

【技术前沿】智能反向寻车解决方案:提升停车场用户体验与运营效率

亲爱的技术员及停车场管理者们&#xff0c;您是否曾遇到过车主在庞大的停车场中迷失方向&#xff0c;耗费大量时间寻找爱车的困境&#xff1f;这不仅影响了车主的停车体验&#xff0c;也无形中增加了停车场的管理难度和运营成本。本文专为解决这一痛点而生&#xff0c;介绍最新…

基于人工智能的手写数字识别系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 手写数字识别是一种经典的计算机视觉任务&#xff0c;目标是让机器能够识别手写数字。通过人工智能技术&#xff0c;特别是卷积神经网…

京东物流查询|开发者调用API接口实现

快递聚合查询的优势 1、高效整合多种快递信息。2、实时动态更新。3、自动化管理流程。 聚合国内外1500家快递公司的物流信息查询服务&#xff0c;使用API接口查询京东物流的便捷步骤&#xff0c;首先选择专业的数据平台的快递API接口&#xff1a;物流快递查询API接口-单号查询…

【论文分享】MyTEE: Own the Trusted Execution Environment on Embedded Devices 23‘NDSS

目录 AbstractINTRODUCTIONBACKGROUNDARMv8 ArchitectureSecurity statesTrustZone extensionsVirtualization Communication with Peripherals MOTIVATIONATTACK MODEL AND ASSUMPTIONSYSTEM DESIGNOverviewExecution Environments IsolationDMA FilterExternal DMA controlle…

flutter的入口和原生交互

从今天起&#xff0c;笔者要开始从flutter列表页面向原生页面跳转了 首先遇到了N个No such module "Flutter" 因为笔者的公司其实是从前往后改造Flutter的&#xff0c;所以也不需要引擎组&#xff0c;但是笔者搞不懂&#xff0c;只能照着葫芦画瓢&#xff0c;以后等…

【重学 MySQL】十六、算术运算符的使用

【重学 MySQL】十六、算术运算符的使用 加法 ()减法 (-)乘法 (*)除法 (/ 或 div )取模&#xff08;求余数&#xff09; (% 或 mod )注意事项 在 MySQL 中&#xff0c;算术运算符用于执行数学运算&#xff0c;如加法、减法、乘法、除法和取模&#xff08;求余数&#xff09;等。…

2024数学建模国赛选题建议+团队助攻资料(已更新完毕)

目录 一、题目特点和选题建议 二、模型选择 1、评价模型 2、预测模型 3、分类模型 4、优化模型 5、统计分析模型 三、white学长团队助攻资料 1、助攻代码 2、成品论文PDF版 3、成品论文word版 9月5日晚18&#xff1a;00就要公布题目了&#xff0c;根据历年竞赛题目…

自动化运维之WGCLOUD入门到掌握 - ubuntu服务器进行入侵检测分析

WGCLOUD监测平台&#xff0c;有个日志监控模块&#xff0c;我们本文就用它来进行ubuntu的入侵检测分析 准备&#xff1a;ubuntu 20&#xff0c;WGCLOUD v3.5.4 ubuntu的登录日志文件&#xff0c;用于分析用户登录行为&#xff1a;/var/log/auth.log&#xff0c;我们今天就用u…

AWS SES服务 Golang接入教程(排坑版)

因为刚来看的时候 也迷迷糊糊的 所以 先讲概念 再上代码 一 基础设置 这里需要完成两个最基础的设置任务 1 是验证至少一个收件电子邮箱 2 【很关键】是验证发送域。即身份里的域类型的身份。&#xff08;可以理解为配置你的域名邮箱服务器&#xff08;SMPT&#xff09;为亚马…

微软出品的一款管理多个远程桌面连接的工具

RDCMan&#xff08;Remote Desktop Connection Manager&#xff09;是微软官方出品的一款用于管理多个远程桌面连接的工具。它可以帮助用户集中管理和分类远程桌面&#xff0c;特别适用于需要同时管理大量服务器或在不同计算机间切换操作的场景。 RDCMan的主要功能包括&#x…

[深度学习][LLM]:浮点数怎么表示,什么是混合精度训练?

混合精度训练 混合精度训练1. 浮点表示法&#xff1a;[IEEE](https://zh.wikipedia.org/wiki/电气电子工程师协会)二进制浮点数算术标准&#xff08;IEEE 754&#xff09;1.1 浮点数剖析1.2 举例说明例子 1:例子 2: 1.3 浮点数比较1.4 浮点数的舍入 2. 混合精度训练2.1 为什么需…

继收购西门子物流自动化后,丰田又投资一家AGV公司,智能物流版图已极其夸张...

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 继成功将西门子物流自动化(机场物流业务)纳入麾下后&#xff0c;丰田并未停下其征伐的步伐&#xff0c;而是再度出手&#xff0c;与新兴科技巨头Gideon携手&#xff0c;共同绘制了一幅…

副本集 Election succeeded

目录 1. 分析mongo副本集 Election succeeded 的全过程&#xff1a;2. 从日志里面看到数据库一致性的对比吗&#xff1f;3. 模拟主备不同步&#xff0c;副本集切换步骤注意事项&#xff1a; not master and slaveOkfalse解释&#xff1a; 其他方案方法一&#xff1a;使用 rs.st…

时间同步服务

多主机协作工作时&#xff0c;各个主机的时间同步很重要&#xff0c;时间不一致会造成很多重要应用的故障&#xff0c;如&#xff1a;加密协 议&#xff0c;日志&#xff0c;集群等。 利用NTP&#xff08;Network Time Protocol&#xff09; 协议使网络中的各个计算机时间达到…

全英文地图/天地图和谷歌瓦片地图杂交/设备分布和轨迹回放/无需翻墙离线使用

一、前言说明 随着风云局势的剧烈变化&#xff0c;对我们搞软件开发的人员来说&#xff0c;影响也是越发明显&#xff0c;比如之前对美对欧的软件居多&#xff0c;现在慢慢的变成了对大鹅和中东以及非洲的居多&#xff0c;这两年明显问有没有俄语或者阿拉伯语的输入法的增多&a…

vmware用ghost镜像ios、esd格式装系统

1、需要下载一个pe.iso镜像&#xff0c;可以用大白菜&#xff0c;老毛桃什么的&#xff0c;vmware选择从光盘启动 然后在PE里面把磁盘分为两个区&#xff0c;C,D盘 然后修改ISO镜像&#xff0c;变成要恢复的ghost包 把iso里面文件拷贝到D盘&#xff0c;用桌面PE工具开始重…