网络原理(TCP协议—协议格式,性质(上),状态)

目录

1.TCP协议段格式。

2.TCP协议传输时候的性质。

2.1确认应答。

2.2超时重传。

2.3连接管理。

2.3.1 三次握手。

2.3.2四次挥手。

3.TCP常见的状态。


 

1.TCP协议段格式。

TCP协议段是由首部和数据两部分构成的。首部包含了TCP通信所需要的各种控制信息,而数据部分则是实际要传输的应用层数据。

下面小编通过图片给大家进行描述:
 

 下面解释下上述协议段里面各部分的含义(下述所说的长度都是以比特为单位):


1.源端口号:16位。用于标识发送方应用程序使用的端口号。

2.目的端口号:16位。用于标识接收方应用程序使用的端口号。

3.序列号:32位。对字节流进行编号,用于保证数据的有序传输和检测数据丢失。第一个自己的序列号由发送方随机生成。

4.确认序列号:32位。接收方期望收到发送方下一个报文段的第一个数据字节的序列号。用于确认数据是否传输成功。

5.数据偏移:4位。表示该TCP头部有多少个32位bit(4字节为单位)

 6.保留位:6位。当前先保留着,防止后面要使用。

7.控制位:6位。

URG:紧急指针有效标志。

ACK:确认号是否有效。

PSH:提示接收方应尽快将数据交付给应用层。

RST:重置连接标志。

SYN:同步序列号标志,用于建立连接,我们把携带SYN标识的称为同步报⽂段。

FIN:结束标志,用于关闭连接,我们称携带FIN标识的为结束报⽂段

8.窗口大小:16位。表示发送方的接受窗口大小,用于流量控制。

9.校验和:16位。对传输的数据进行传输前后计算并进行对比,确保数据传输的完整性。

10.紧急指针:16位。当URG标志置为1时有效,指出紧急数据的末尾在报文段中的位置。

11.选项:可变。提供额外的功能,如:最大报文段长度,窗口扩大因子等。

2.TCP协议传输时候的性质。

2.1确认应答。

 我们观察下面的图:

我们每次从一个主机上面传输信息传给另外一个主机的时候,我们会先传输一次,之后接收方会给发送方返回自己收到了,并且下一次传输从哪里开始。

2.2超时重传。

 我们观察下面的图片:

图1:

我们观察图一,发现我们丢包的现象是在传输数据的时候丢失的,我们的TCP对等待一定自己设置的时间,要是发送方还是没有接受到接受方所返回的确认应答操作,就会让主机1再次发送信息,重新进行操作。

但是我们观察上述的流程,我们会发现还有一种可能,是应为确认应答没有返回回来。

图2:

上述图片展示的就是我们的第二种可能,是在接受方传输确认应答的时候,出现了问题。

我们会发现主机2会接收到重复的信息,TCP协议就会给我们识别出来重复的信息,之后将重复的丢弃掉。我们就通过我们前面所提到的序列号进行解决,很容易就达到去重的效果。

那么还有一个问题值得我们考虑,就是我们中间等待的时间?

我们等待的时间就是我们 单趟路程*2 的总时间,但是在实际情况中,TCP为了保证无论在任何环境下都能比较⾼性能的通信, 因此会动态计算这个最⼤超时时间。

2.3连接管理。

在连接管理的阶段,TCP会进行三次握手建立连接四次挥手断开连接,我们的的连接管理是虚拟的,只保存双方关键的信息。

2.3.1 三次握手。

下面我先通过TCP在代码中的运行过程给大家说明下:

我们观察上述的图片,我们可以轻易的看到客户端给服务器先发送了一次信息,之后服务器给客户端发送了两次信息,最后客户端给服务器再次发送了一条信息。

可能会有同学提出疑问,上述图片中我们明明传输了四次,为什么说的是三次握手?

之所以我们说的是三次握手,是因为我们中间的两次服务器给客户端发消息的过程,可以合并为一处,之所以可以合并为一处是因为SYN和ACK是内核控制的,和代码没有没有关系,所以可以合并。

这里呢我们进行的三次握手,是是能由客户端发起的。

握手的意义:

1.验证链路是否畅通。

2.发送和接受能力是否正常。

3.让通信双方协商关键信息。

我们所进行的握手和生活中是一样的。例子:当我们长时间不回家的话,我们过年回家的时候就会很大可能碰到我们的老朋友,我们见面了指定会进行一下寒暄的,当然了我们也是会进行握手的,我们进行握手就好比我们进行了双方信息的确认。还有就是为啥要进行验证链路是否正常,因为我们只有正常的话才会可能进行信息的正确传递。例子:相比大家都做过地铁,我们每天早上进行的第一趟地铁运行的话,都会进行一趟空车的跑动,就是为了防止后面要是在载着一车的顾客的情况下出现问题,我们跑一趟之后就知道是否可以正常运行,这样我们后面就可以进行及时的修改。

2.3.2四次挥手。

我们进行挥手的最终目的就是为了释放没有再运行的空间。

图片:

我们观察上图,大家可能观察到和之前的三次握手好像没有什么区别,无非就是将每次进行的控制位进行了更改,那这为什么就成了四次挥手了呢!

大家观察前面的三次握手,是因为中间的两次是可以进行合并的,那这叫做四次挥手,就是中间的两次不会每次都能进行合并。我们要想够清楚为什么是不一定能够进行合并的原因是什么?那是因为我们最后在进行挥手的时候进行的是Fin,这个主要是由我们在程序里面的代码进行控制的——close() ,当我们在主程序执行完了之后再finally里面,close()前面有大片的代码需要进行执行的时候,就会记性长时间的等待,所以中间两次的ACK(确认信息)首先进行返回,最后后面的Fin在记性返回,这就将中间的两次进行了分离。

前面我们说了我们为什么不能进行合并的原因,那么我们要是能进行合并的时候,办法也是非常显而易见的,就是Fin触发close()之间的时间是本身不长的并且ACK可以往后面拖一段时间,这样我们就可以将中间的两次进行合并,这就是我们的四次挥手。

3.TCP常见的状态。

1.CLOSE:默认状态。这是TCP连接的最初和最终的状态,意味着没有任何连接的存在。在JAVA里,当SOCKET对象还没有进行创建的时候,或者连接关闭的时候,就处于该状态。

2.LISTEN:随时可以进行连接。

3.ESTABLISHED:客户端和服务器的连接已经建立好。客户端收到服务器的SYN+ACK报文后,发送ACK报文,之后客户端和服务端都进入ESTABLISHED 状态,此时TCP连接成功建立,双方可以进行数据传输。在JAVA里面,当SOCKET连接成功后,就处于该状态。

4.CLOSE_WAIT:被动断开连接的一方的状态。接受Fin 报文的乙方接收到 Fin 报文后,发送 ACK 报文,然后进入 CLOSE_WAIT 状态。此时是关闭等待状态,需要调用close() 方法进行关闭连接,发送FIN 报文。

5.TIME_WAIT:等待连接彻底释放。发送 FIN 报文的一方收到对方的 ACK 报文后,进入 TIME_WAIT 状态,等待一段时间后,才会进入 CLOSED 状态。中间的等待时间是为了最后一个ACK 报文能够到达到达对方。

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

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

相关文章

XAML 标记扩展

# XAML 标记扩展详解 标记扩展(Markup Extensions)是XAML中一种特殊的语法结构,允许在XAML属性中嵌入动态值或引用,而不是简单的静态值。它们使用花括号{}作为标识,是XAML强大功能的核心组成部分。 ## 基本语法结构 所有标记扩展都遵循以下…

DeepSeek+Cursor+Devbox+Sealos项目实战

黑马程序员DeepSeekCursorDevboxSealos带你零代码搞定实战项目开发部署视频教程,基于AI完成项目的设计、开发、测试、联调、部署全流程 原视频地址视频选的项目非常基础,基本就是过了个web开发流程,但我在实际跟着操作时,ai依然会…

Ethan独立开发产品日报 | 2025-04-20

1. Checklist GG 基于人工智能的清单管理工具 checklist.gg是一个基于人工智能的清单管理工具,旨在帮助组织确保每次都能正确完成任务。 关键词:AI驱动, 检查清单, 管理工具, 任务管理, 效率提升, 组织管理, 工作流程, 自动化工具, 清单管理, 协作工具…

第十四届蓝桥杯 2023 C/C++组 冶炼金属

目录 题目: 题目描述: 题目链接: 思路: 核心思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: 蓝桥云课 冶炼金属 洛谷 P92…

【数字图像处理】彩色图像处理(1)

研究彩色图像处理的原因 1:利用颜色信息,可以简化目标物的区分,以及从场景中提取出目标物 2:人眼对颜色非常敏感,可以分辨出来几千种颜色色调和亮度,却只能分别出几十种灰度 彩色图像分类 伪彩色图像处理&…

pytest自动化中关于使用fixture是否影响用例的独立性

第一个问题:难道使用fixture 会影响用例独立吗? ✅ 简单回答: 使用 fixture ≠ 不独立。 只要你的 fixture 是每次测试都能自己运行、自己产生数据的,那么测试用例依然是“逻辑独立”的。 ✅ 怎么判断 fixture 是否影响独立性&a…

C++计算 n! 中末尾零的数量

* 详细说明* 给定一个整数作为输入。目标是找出该数的阶乘结果中末尾零的数量。 一个数 N 的阶乘是范围 [1, N] 内所有数的乘积。* * 我们知道,只有当一个数是 10 的倍数或者有因数对 (2, 5) 时,才会产生末尾零。 在任何大于 5 的数的阶乘中,…

推荐系统/业务,相关知识/概念2

一、漫画库更新大量新作品,如何融入推荐系统? 参考答案: 快速提取新作品特征:除基础属性外,利用自然语言处理技术提取漫画简介关键词等丰富特征向量,分析情节、角色设定等深层次特征结合物品画像体系分类…

# 手写数字识别:使用PyTorch构建MNIST分类器

手写数字识别:使用PyTorch构建MNIST分类器 在这篇文章中,我将引导你通过使用PyTorch框架构建一个简单的神经网络模型,用于识别MNIST数据集中的手写数字。MNIST数据集是一个经典的机器学习数据集,包含了60,000张训练图像和10,000张…

强化学习笔记(三)——表格型方法(蒙特卡洛、时序差分)

强化学习笔记(三)——表格型方法(蒙特卡洛、时序差分) 一、马尔可夫决策过程二、Q表格三、免模型预测1. 蒙特卡洛策略评估1) 动态规划方法和蒙特卡洛方法的差异 2. 时序差分2.1 时序差分误差2.2 时序差分方法的推广 3. 自举与采样…

c++_csp-j算法 (4)

迪克斯特拉() 介绍 迪克斯特拉算法(Dijkstra算法)是一种用于解决单源最短路径问题的经典算法,由荷兰计算机科学家艾兹赫尔迪克斯特拉(Edsger W. Dijkstra)于1956年提出。迪克斯特拉算法的基本思想是通过逐步扩展已经找到的最短路径集合,逐步更新节点到源节点的最短路…

(13)VTK C++开发示例 --- 透视变换

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 在VTK(Visualization Toolkit)中,vtkPerspectiveTransform 和 vtkTransform 都是…

深入探索Qt异步编程--从信号槽到Future

概述 在现代软件开发中,应用程序的响应速度和用户体验是至关重要的。尤其是在图形用户界面(GUI)应用中,长时间运行的任务如果直接在主线程执行会导致界面冻结,严重影响用户体验。 Qt提供了一系列工具和技术来帮助开发者实现异步编程,从而避免这些问题。本文将深入探讨Qt…

基于Python的图片/签名转CAD小工具开发方案

基于Python的图片/签名转CAD工具开发方案 一、项目背景 传统设计流程中,设计师常常需要将手写签名或扫描图纸转换为CAD格式。本文介绍如何利用Python快速开发图像矢量化工具,实现: 📷 图像自动预处理✏️ 轮廓精确提取⚙️ 参数…

【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(17):PlanReactExecutor

CangjieMagic框架:使用华为仓颉编程语言编写,专门用于开发AI Agent,支持鸿蒙、Windows、macOS、Linux等系统。 这篇文章剖析一下 CangjieMagic 框架中的 PlanReactExecutor。 1 PlanReactExecutor的工作原理 #mermaid-svg-OqJUCSoxZkzylbDY…

一文了解相位阵列天线中的真时延

本文要点 真时延是宽带带相位阵列天线的关键元素之一。 真时延透过在整个信号频谱上应用可变相移来消除波束斜视现象。 在相位阵列中使用时延单元或电路板,以提供波束控制和相移。 市场越来越需要更快、更可靠的通讯网络,而宽带通信系统正在努力满…

Java中 关于编译(Compilation)、类加载(Class Loading) 和 运行(Execution)的详细区别解析

以下是Java中 编译(Compilation)、类加载(Class Loading) 和 运行(Execution) 的详细区别解析: 1. 编译(Compilation) 定义 将Java源代码(.java文件&#x…

【KWDB 创作者计划】_深度学习篇---松科AI加速棒

文章目录 前言一、简介二、安装与配置硬件连接驱动安装软件环境配置三、使用步骤初始化设备调用SDK接口检测设备状态:集成到AI项目四、注意事项兼容性散热固件更新安全移除五、硬件架构与技术规格核心芯片专用AI处理器内存配置接口类型物理接口虚拟接口能效比散热设计六、软件…

如何清理Windows系统中已失效或已删除应用的默认打开方式设置

在使用Windows系统的过程中,我们可能会遇到一些问题:某些已卸载或失效的应用程序仍然出现在默认打开方式的列表中,这不仅显得杂乱,还可能影响我们快速找到正确的程序来打开文件。 如图,显示应用已经被geek强制删除&am…

NFC碰一碰发视频推广工具开发注意事项丨支持OEM搭建

随着线下门店短视频推广需求的爆发,基于NFC技术的“碰一碰发视频”推广工具成为商业热点。集星引擎在开发同类系统时,总结出六大核心开发注意事项,帮助技术团队与品牌方少走弯路,打造真正贴合商户需求的实用型工具: 一…