【网络原理】TCP协议如何实现可靠传输(确认应答机制)

🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。

🤼专栏收录于:计算机网络原理


本篇主要讲解:TCP协议段格式,TCP的序列号,SYN、ACK标志位,确认应答机制。

目录

1、TCP协议段格式

1.1 TCP格式段

1.2 TCP协议段格式

2、确认应答机制

2.1 后发先至

2.2 确认序号


1、TCP协议段格式

1.1 TCP格式段

TCP协议段(Segment)是在数据传输层中,用于实现两个进程之间可靠的数据传输。

源端口/目的端口:源端口为数据的发送者,目的端口为数据的接受者。

32位序号/确认号:TCP将每个字节的数据都进行了编号即为序列号。

TCP标志位:TCP的6位标志位默认为0,当返回相应的报文时,会把该报文位设置位1。

URG(Urgent):表示是否包含紧急数据。

ACK(Acknowledgment):表示确认号是否有效。

PSH(Push):表示是否立即推送。

RST(Reset):表示连接是否复位。携带RST标识的称为复位报文段。

SYN(Synchronize):表示同步请求/应答。携带SYN标识的称为同步报文段

FIN(Finish):表示传输结束。携带FIN标识的为结束报文段。

了解到 TCP 的协议格式段后,我们来模拟观察网络通信过程:

通过上图,我们观察到 主机A  向 主机B 传输数据时,提供了以 1000 为单位的编号。这些编号称为 序列号。

我们可认为 主机A 向 主机B 发送数据为一个请求 即 SYN。TCP给这个请求随机分配一个序列号。

并且 主机B 在收到 主机A 的数据后会作出回应,这个回应称之为 即 ACK。只有接收方返回 ACK 后,这样的通信才算完成。

确认序列号 的是序列号的下一个字节数。当 SYN 请求序列号为 1000,则 ACK 确认序列号为 1001,对照上图、下图进行理解。

注意,当ACK=1时,表示TCP报文段中确认号字段有效,因此需要对它进行确认应答。ACK的应答是 TCP 可靠传输 机制的关键。


1.2 TCP协议段格式

TCP协议段格式如下所示

16位源端口号   16位目的端口号
--------------------------------
32位序列号
--------------------------------
32位确认号
--------------------------------
4位数据偏移    6位保留    6位标志位
--------------------------------
16位窗口大小
--------------------------------
16位校验和    16位紧急指针
--------------------------------
选项(可选,长度不定)

源端口号和目的端口号:分别表示发送方和接收方的端口号。

序列号:表示发送方发送数据的序列号,用于接收方确认收到的数据是否完整。

确认号:表示期望接收到的下一个数据的序列号。

数据偏移:表示TCP头部长度占多少个32位字长。

保留:用于将头部填充到32位字长的长度。

标志位:包括6个标志位,分别为URG、ACK、PSH、RST、SYN和FIN,用于控制TCP连接的建立、维护和关闭等操作。

窗口大小:表示接收方缓存区的大小。

校验和:用于检查TCP头部和数据的完整性。

紧急指针:表示数据中包含的紧急数据在数据流中的位置。

选项:可选的TCP头部选项,用于支持一些额外的功能。


2、确认应答机制

TCP 在通信过程中,TCP认为发送方发送的数据为: SYN ,即发出一个请求。接受方返回的数据为:ACK,即确切请求有效。

当我们进行信息传输时,我发信息给张三:“你吃饭了吗?”,张三回复:“吃了,你呢?”。

网络应当是以下场景

但网络通信的过程中由于特殊情况难免会出差错,则会造成 先发后至 的情况,即先发的消息被后返回的消息回应。


2.1 后发先至

有以下通信场景

我:“一起吃个饭吗,我请客?”,张三回复:“好啊,好啊”。

我:“你借我 500 块钱”,张三回复:“滚蛋”。

正常情况如下所示

由于先发后置

由于先发后至,导致

我:“一起吃个饭,我请客?”,张三回复“滚蛋”。

我:“你借我 500 块钱”,张三回复“好啊,好啊”。

这样就会造成数据不可靠传输。因此,TCP协议在网络通信中会将信息传输的过程引入一个 确认序号 来保证数据传输可靠性。


2.2 确认序号

TCP 在网络通信过程中,会根据信息的发送顺序来引入相应的确认号。即发送方序列号,接受方为确认序列号,确认序列号为序列号下一个字节数。

在上图中,1000序列号对应的消息只会被1001确认序列号回复,2000序列号的消息只会被2001确认序列号回复。

注意,TCP在通信的过程中会 随机 给发送方提供序列号,接收方根据序列号来返回确认序列号这样在传输过程中就相对安全了。


以上TCP通信过程中,引入了序列号来保证数据可靠传输,但还有在网络通信中由于网络不好(丢包,网卡等)会造成数据传输不了,因此TCP还会通过 超时重传 机制来保证数据安全传输。在下期博文我会详细讲解。

 本编博文到这里就结束了,感谢点赞、评论、收藏、关注~

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

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

相关文章

【2023unity游戏制作-mango的冒险】-7.玩法实现

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

论文与专利查找和下载

例如我想查找和下载视频理解(video understanding)相关论文 路线大纲如下: 一、最主要方式: 大纲,蓝色都是有超级链接的可以直接打开: 第一步 谷歌搜索(英文) 学校的知网(中文)第二步 下载论文(谷歌学术--英文 学校的知网--中文)下载不了…

对话人工智能 |新时代AI如何“落地“

前言: Comate代码助手推出,现场生成了贪吃蛇游戏,我们距离AI自动编程还有多远? 文章目录 序章正文背景基础坚实文心大模型飞浆深度学习框架 Comate的出现优质的智能助理和伙伴多场景适用优势特征Demo演示视频: 总结 序…

Anacoda3中成功配置Tesseract-OCR超详细教程!!(win7、win10)

Anacoda3中成功配置Tesseract-OCR Tesseract-OCR简介安装及配置环境步骤1、在Anaconda虚拟环境中安装pytesseract第三方库2、下载tesseract-ocr安装包并安装3、环境配置检验是否安装成功修改pytesseract.py文件(很重要!) Tesseract-OCR简介 …

H5学习(二)-- 常用标签

标签内容 一、标题标签二、表单标签啊三、段落标签四、插入图片标签五、换行标签六、列表标签七、超链接标签八、容器标签九、结构性标签十、级块性标签十一、行内语义性标签 HTML中的常用的标签 一、标题标签 <body><!--标题标签--><h1>h1标签</h1>&…

使用matplotlib制作动态图

使用matplotlib制作动态图 一、简介二、模块简介1. **FuncAnimation**类介绍2. 定义动画更新函数 三、使用matplotlib制作动画1.一步法制作动态图片2. 两步法制作动态图片 一、简介 matplotlib(https://matplotlib.org/)是一个著名的python绘图库&#xff0c;由于其灵活强大的…

NOSQL——redis的安装,配置与简单操作

目录 一、缓存的相关知识 1&#xff09;缓存的概念 2&#xff09;系统缓存 buffer与cache&#xff1a; 3&#xff09;缓存保存位置及分层结构 DNS缓存 应用层缓存 数据层缓存 分布式缓存服务&#xff1a; 数据库&#xff1a; 硬件缓存 二、关系型数据与非关系型数据…

day1-若依项目前后端分离的初步使用

响应式布局: 做好的产品能在pc端,手机,平板都能正常浏览 开发项目两种方式 1.自己从0开始写代码 2.在若依中下载拥有基础功能的源码 若依使用的mysql版本 mysql5.7 导入别人的项目如何操作 若依项目下载地址**:https://gitee.com/y_project/RuoYi-Vue.git** 可以使用揉…

【elementplus】body设置zoom后,el-table开启show-overflow-tooltip后,表格的tooltip显示会错位的解决方案

由于我的项目是无法避免使用zoom&#xff0c;所以只记录zoom后的解决方案 示例&#xff1a;明明划过的是第一行&#xff0c;tooltip却显示到了第四行的位置&#xff1b; 正确显示&#xff1a;划过第一行&#xff0c;tooltip显示在第一行的位置 代码&#xff1a;使用transfor…

Linux--用户身份切换: su

①普通用户切换成超级用户且更改路径&#xff1a;su - ②普通用户切换成超级用户且不更改路径&#xff1a;su root 或者 su ③(由普通用户切换来的)超级用户切换回普通用户&#xff1a;Ctrld ④超级用户切换成普通用户&#xff1a;su 普通用户名 ⑤普通用户a切换成普通用户b…

Java框架学习(二)SSM体系:Spring、SpringMVC、MybatisPlus

文章目录 SpringIoC控制反转DI 依赖注入BeanBean基础配置namescope Bean实例化方式Bean的生命周期 依赖注入方式依赖自动装配 Mybatis-Plus配置BaseMapper通用Service常用注解TableNameTableId雪花算法 TableFieldTableLogic 条件构造器和常用接口QueryWrapperUpdateWrapper 插…

第五节 利用Ogre 2.3实现雨,雪,爆炸,飞机喷气尾焰等粒子效果

本节主要学习如何使用Ogre2.3加载粒子效果。为了学习方便&#xff0c;直接将官方粒子模块Sample_ParticleFX单独拿出来编译&#xff0c;学习如何实现粒子效果。 一. 前提须知 如果参考官方示例建议用最新版的Ogre 2.3.1。否则找不到有粒子效果的示例。不要用官网Ogre2.3 scri…