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

news2024/11/16 9:31:27

🥊作者:一只爱打拳的程序猿,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.coloradmin.cn/o/642568.html

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

相关文章

操作系统(王道)

1.1_1_操作系统概念 裸机(硬件只听得懂二进制指令)——>操作系统(属于软件,提供良好交互界面)——>应用软件——>用户使用 操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织…

Python技术自学的方式

Python是一种高级编程语言,被广泛用于软件开发、数据分析、人工智能和科学计算等领域。它于1991年由Guido van Rossum创建,并且其简洁、易读的语法以及丰富的标准库使得它成为了初学者和专业开发人员的首选语言之一。 一、Python技术介绍 学习Python技术…

css响应式布局

这里写自定义目录标题 1.效果展示2.使用grid布局3.使用flex布局 1.效果展示 2.使用grid布局 <!DOCTYPE html> <html><head><meta name"viewport" content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalableno"…

ASEMI代理安森美MOS管FQL40N50参数,FQL40N50描述

编辑-Z FQL40N50参数描述&#xff1a; 型号&#xff1a;FQL40N50 漏源电压VDSS&#xff1a;500V 漏极电流ID&#xff1a;40A 漏极电流-脉冲IDM&#xff1a;160A 栅极-源极电压VGSS&#xff1a;30V 功耗PD&#xff1a;460W 操作和储存温度范围TJ, TSTG&#xff1a;-55 t…

Rust in Action笔记 第六章 内存

Option<T>类型在Rust中使用了空指针优化&#xff08;null pointer optimization&#xff09;来保证该类型在编译后的二进制文件中占用0个字节。None变量是通过一个空指针null pointer来表示&#xff1b;内存地址、指针、引用的区别&#xff0c;内存地址是指在内存中的一个…

SpringBatch从入门到实战(三):多步骤控制

一&#xff1a;if else案例 案例&#xff1a;如果开始步骤成功了就执行成功步骤&#xff0c;否则执行失败步骤。 // 伪代码 String exitStatus helloWorldJob(); if("FAILED".equals(exitStatus)){failStep(); }else{successStep(); }Configuration public class …

01 面向对象方法的概念

面向对象方法的概念 1、什么是面向对象? 面向对象不仅仅是一种程序开发方法 使用面向对象程序设计语言 使用对象、类、继承、封装、消息等基本概念进 行编程 面向对象是一种软件方法学 如何看待软件系统与现实世界的关系 以什么观点进行求解 如何进行系统构造 2、面向对象方…

chatgpt赋能python:Python导入自己写的包详解

Python导入自己写的包详解 在Python中&#xff0c;我们可以将代码封装成包来重复利用&#xff0c;也可以将自己写的包分享给其他人使用。但是&#xff0c;在使用自己写的包时&#xff0c;如何进行导入呢&#xff1f; 什么是包&#xff1f; 在Python中&#xff0c;包是一个有…

计算机网络(更新中)

本文是个人笔记&#xff0c;都是概念&#xff0c;没基础不建议看。 绪论 计算机网络的定义 最简单的定义&#xff1a;计算机网络是一些互相连接的、自治的计算机的集合因特网&#xff08;Internet&#xff09;是“网络的网络” 计算机网络的组成&#xff08;物理组成&#x…

git从http切换到ssh

git从http切换到ssh 之前项目代码git clone的http的git地址&#xff0c;后来禁用了http协议&#xff0c;只能用ssh协议。 1. 生成ssh公钥 进入Git Bash Here, 执行以下命令 ssh-keygen -m PEM -t rsa -b 4096 -C "your.emailemail.com"一直Enter直到完成。 2. 添加…

个人对几个IDE的看法

&#xff08;说明&#xff1a;本文仅表达个人看法&#xff0c;实际上文中的几个IDE功能不同&#xff0c;不能互相取代。截图上的程序均已发布&#xff09; 个人认为一款IDE在功能完整的前提下&#xff0c;应当做到操作简便。另外&#xff0c;对缩放的兼容性也会影响观感。以下…

微服务springcloud 01 sts环境,maven管理,和springcloud简介,通用模块commons

01.使用的环境是sts和maven。 02.介绍springcloud springcloud是一个大的微服务框架。 03.Spring cloud对比Dubbo Dubbo Dubbo只是一个远程调用(RPC)框架;默认基于长连接,支持多种序列化格式 Spring Cloud 框架集&#xff0c;提供了一整套微服务解决方案(全家桶);基于http调用…

【数据挖掘实战】——科大讯飞:跨境广告ROI预测

&#x1f935;‍♂️ 个人主页&#xff1a;Lingxw_w的个人主页 ✍&#x1f3fb;作者简介&#xff1a;计算机科学与技术研究生在读 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4a…

云服务器上使用Docker Compose创建Redis三主三从集群

一、环境 云服务器Ubuntu20.4Dokcer 24.0.2 二、步骤 目录结构是这样&#xff1a; 绿色的目录是用来存储容器中的文件&#xff0c;不需要我们手动创建&#xff0c;将路径配置在配置文件中即可。褐色的目录和文件需要自己手动创建。 我们一共创建7个容器&#xff1a; redis…

RabbitMq消息堆积问题及惰性队列

消息堆积问题 当生产者发送消息的速度超过了消费者处理的速度&#xff0c;就会导致队列的消息堆积&#xff0c;知道队列存储消息达到上限。最早接受的消息&#xff0c;可能就会成为死信&#xff0c;会被丢弃&#xff0c;这就是消息堆积问题。 解决消费对接问题 1.增加更多的消…

Hive执行计划之只有map阶段SQL性能分析和解读

文章目录 概述1.不带函数操作的select-from-where型简单SQL1.1执行示例1.2 运行逻辑分析1.3 伪代码解释 2.带普通函数和运行操作符的普通型SQL执行计划解读2.1 执行计划解读2.2 伪代码解释逻辑 概述 可能所有的SQLboy刚接触SQL语句的时候都是select xxx from xxx where xxx。在…

如何分析问题、找到性能瓶颈、掌握性能调优?一文讲懂性能测试

背景 当下云计算、大数据盛行的背景下&#xff0c;大并发和大吞吐量的需求已经是摆在企业面前的问题了&#xff0c;其中网络的性能要求尤为关键&#xff0c;除了软件本身需要考虑到性能方面的要求&#xff0c;一些硬件上面的优化也是必不可少的。 作为一名测试工作者&#xf…

Ubuntu18.04 离线安装gcc,g++,make依赖包

1. 离线安装背景 因为项目现场的服务器无法连接互联网&#xff0c;只有内网环境&#xff0c;但是需要安装redis和nginx&#xff0c;所以需要安装gcc,g,make等依赖包。 2. 如何获取依赖包 需要准备一台可以连接互联网的电脑&#xff08;如&#xff1a;个人电脑上的虚拟机安装一…

Java网络开发(Asynchronous异步)—— 从 Jsp 到 Ajax 的 axios 到 vue 同步请求 到 异步请求

目录 引出如果想做bilibili边看视频边评论怎么搞&#xff1f;Ajax是啥&#xff1f;& axios的语法1. Ajax&#xff08;Asynchronous JavaScript And XML&#xff09;简介2. axios语法 及其与 java后端交互&#xff08;1&#xff09;get请求&#xff08;2&#xff09;post请求…

海外社媒营销揭秘:品牌出海的关键策略与注意事项

在全球化的背景下&#xff0c;品牌出海已成为众多企业拓展市场的必然选择。而海外社媒营销作为一种有效的推广手段&#xff0c;不仅能够帮助品牌建立海外影响力&#xff0c;还可以增强品牌知名度、提高销售额。然而&#xff0c;要在海外社媒平台上实施成功的营销策略&#xff0…