基于 Wireshark 分析 TCP 协议

一、TCP 协议

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议。它在网络通信中扮演着重要的角色,用于保证数据的可靠传输。

TCP协议的特点如下:
1. 面向连接:在通信前需要先建立连接,通信结束后再关闭连接。连接的建立和关闭过程需要进行三次握手和四次挥手。
2. 可靠性:TCP提供可靠的数据传输,通过序列号、确认应答、超时重传、流量控制和拥塞控制等机制来确保数据的正确性和完整性。
3. 字节流传输:TCP将数据流划分为以字节为单位的数据段进行传输,保证了数据的顺序性。
4. 面向字节流:TCP把应用程序交给它的数据看成是一连串无结构的字节流,不关心具体的数据内容和格式。
5. 流量控制:TCP通过滑动窗口机制来控制发送方发送数据的速率,以防止接收方来不及处理过多的数据。
6. 拥塞控制:TCP通过拥塞窗口和慢启动等机制来控制网络拥塞,避免网络过载。
7. 支持全双工通信:TCP连接是全双工的,双方可以同时发送和接收数据。

TCP协议的工作流程如下:
1. 建立连接:客户端向服务器发送连接请求(SYN),服务器回复确认(SYN+ACK),客户端再回复确认(ACK),建立连接。
2. 数据传输:建立连接后,双方可以通过TCP连接进行数据传输。发送方将数据划分为适当大小的数据段,并添加序列号,接收方收到数据后进行确认应答。
3. 连接关闭:当数据传输完成时,任意一方可以发送连接关闭请求(FIN),对方回复确认,然后发送自己的连接关闭请求,对方再回复确认,完成连接关闭。

总结:TCP协议通过面向连接、可靠的数据传输、流量控制和拥塞控制等机制,保证了数据在网络中的可靠传输。它是应用层协议中最常用的一种,广泛应用于互联网中。

二、TCP 报头

以下是TCP报头的详细格式,按照表格形式列出:

字段名称长度(位)描述
源端口号16指示发送端口号
目的端口号16指示接收端口号
序列号32用于对数据进行排序和重组
确认号32用于确认接收到的数据
数据偏移4指示TCP报头的长度
保留6保留字段,暂未使用
控制位6用于控制TCP的各种功能,如SYN、ACK、FIN等
窗口大小16指示发送方的接收窗口大小
校验和16用于检验TCP报头和数据的完整性
紧急指针16指示紧急数据的位置
选项可变可用于在TCP报头中添加一些可选的功能
填充可变用于填充TCP报头,使其长度为32位的整数倍

三、TCP 端口

TCP端口是TCP协议中用于标识不同应用程序或服务的端口号。在TCP/IP协议栈中,每个主机都有65535个端口号可用,它们被分为三个范围:

1. 知名端口(Well-known Ports):范围从0到1023,用于标识一些常见的服务和应用程序。例如,HTTP使用端口号80,HTTPS使用端口号443,FTP使用端口号21等。这些端口号在大多数操作系统中都有预定义的用途。

2. 注册端口(Registered Ports):范围从1024到49151,用于用户注册的应用程序或服务。这些端口号可以被开发人员用于自定义应用程序或服务。

3. 动态/私有端口(Dynamic/Private Ports):范围从49152到65535,用于临时分配给客户端应用程序。当客户端应用程序与服务器建立TCP连接时,操作系统会自动分配一个可用的动态端口。

TCP端口号是一个16位的无符号整数(0到65535),客户端应用程序使用源端口号,服务器应用程序使用目的端口号。通过源和目的端口号的组合,TCP协议可以将接收到的数据包传递给正确的应用程序或服务。

在通信过程中,当客户端向服务器发起连接请求时,客户端应用程序会选择一个空闲的源端口号,并将其包含在请求中。服务器收到连接请求后,会将目的端口号设置为客户端发送的源端口号,以便建立双向通信。

TCP端口号的分配需要遵循相关的规范和标准,以确保端口号的唯一性和正确性。

所有基于 TCP 的通信都是以相同的方式工作:选择一个随机的源端口与一个已知的目的端口通信 

四、TCP 三次握手

TCP三次握手是建立TCP连接的过程,用于确保双方能够正常通信。以下是TCP三次握手的详细步骤:

   Client                    Server|                         ||---- SYN (X) ---------->||                         ||<--- SYN-ACK (Y, X+1) ---||                         ||---- ACK (Y+1) --------->||                         |
  1. 第一次握手 (SYN):

    • 客户端发送一个 SYN (同步) 报文段to服务器,报文段中指定了客户端的初始序号 X。
    • 客户端进入 SYN_SENT 状态,等待服务器确认。
  2. 第二次握手 (SYN-ACK):

    • 服务器收到客户端的 SYN 报文段后,如果同意连接,就会发送一个 SYN-ACK 报文段,
    • 报文段中包含了服务器的初始序号 Y,同时将客户端的序号 X+1 放在确认号(ACK)字段中。
    • 服务器进入 SYN_RCVD 状态。
  3. 第三次握手 (ACK):

    • 客户端收到服务器的 SYN-ACK 报文段后,再发送一个确认报文段(ACK),
    • 报文段中把服务器的序号 Y+1 放在确认号(ACK)字段中。
    • 此时,TCP 连接建立,客户端进入 ESTABLISHED 状态,服务器也进入 ESTABLISHED 状态。

TCP三次握手过程的目的是确保双方都能收到对方的请求和确认,并建立起可靠的双向通信。通过握手过程,双方交换了初始序列号和窗口大小等重要信息,以便后续的数据传输能够正确进行。

值得注意的是,TCP三次握手是双向的,即客户端向服务器发起握手请求,服务器响应后再向客户端发送确认,确保双方都能同步建立连接。这样的握手过程可以防止已失效的连接请求报文段突然又传到了服务器,导致服务器错误地打开连接。

初始 SYN 数据包

SYN/ACK 响应

最后的 ACK 包

五、TCP 连接断开

TCP 连接的断开是一个四次挥手的过程,用于正常关闭连接。

 客户端                 服务器|                      ||---- SYN 报文 -------->||<--- SYN-ACK 报文 -----||---- ACK 报文 -------->||          |           ||---- 数据报文 -------->||<---- ACK 报文 --------||          |           ||---- FIN 报文 -------->||<---- ACK 报文 --------||<---- FIN 报文 --------||---- ACK 报文 -------->||          |           |
  1. 客户端发起连接请求:

    • 客户端选择一个随机的源端口号(通常为大于 1024 的数字)。
    • 客户端向服务器的目标端口号发送一个 SYN 报文,表示请求建立连接。
  2. 服务器响应连接请求:

    • 服务器接收到客户端的 SYN 报文后,会分配一个端口号来作为此次连接的目标端口。
    • 服务器发送一个 SYN-ACK 报文,表示接受了客户端的连接请求。
  3. 客户端确认连接建立:

    • 客户端收到服务器的 SYN-ACK 报文后,会发送一个 ACK 报文,表示确认连接建立。
  4. 数据传输:

    • 在连接建立后,客户端和服务器就可以开始传输数据了。
    • 数据传输过程中,双方会不断地发送 ACK 报文,确认对方发送的数据已经正确接收。
  5. 连接释放:

    • 当通信结束时,任意一方都可以发起连接释放请求。
    • 通常是客户端先发送 FIN 报文,表示自己已经没有数据要发送了。
    • 服务器收到 FIN 报文后,会发送 ACK 报文以确认,然后再发送自己的 FIN 报文。
    • 客户端收到服务器的 FIN 报文后,会发送 ACK 报文以确认,至此连接就释放完毕了。

六、TCP 重置

TCP重置(TCP RST)是一种TCP协议中的控制消息,用于在通信过程中快速终止连接或重置连接状态。TCP重置消息可以由发送方或接收方发送,用于指示对方立即关闭连接。

TCP重置消息的常见用途包括以下几种情况:

1. 异常情况下的连接终止:当通信中发生了无法恢复的错误或异常时,TCP重置消息可以立即终止连接,避免继续传输数据。

2. 拒绝未建立的连接:当接收方收到一个未建立连接的TCP数据包时,可以发送TCP重置消息来拒绝该连接请求。

3. 处理网络拥塞:在网络拥塞情况下,TCP重置消息可以用于快速关闭连接,以减轻网络负载和恢复正常通信。

TCP重置消息的特点如下:

- TCP重置消息是一个独立的TCP数据包,它不承载任何应用数据。
- TCP重置消息中的标志位被设置为RST。
- TCP重置消息可以在连接建立前或连接建立后发送。
- TCP重置消息会立即中断连接,终止数据传输。
- TCP重置消息不需要等待对方的确认,可以单方面发送。

需要注意的是,TCP重置消息的使用应谨慎,不当的使用可能导致连接中断或通信中断。在正常情况下,应该使用TCP的正常关闭过程来终止连接,以确保数据的完整性和可靠性。

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

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

相关文章

Hunyuan-DiT环境搭建推理测试

引子 最近鹅厂竟然开源了一个多模态的大模型&#xff0c;之前分享福报厂的多模态视觉大模型&#xff08;Qwen-VL环境搭建&推理测试-CSDN博客&#xff09;感兴趣的可以移步。鹅厂开源的&#xff0c;我还是头一回部署。好的&#xff0c;那就让我们看看这个多模态视觉大模型有…

强化学习,第 3 部分:蒙特卡罗方法

文章目录 一、介绍二、关于此文章三、无模型方法与基于模型的方法四、V函数估计4.1 基本概念4.2 V-功能 五、Q 函数估计5.1 V函数概念5.2 优势5.3 Q函数 六、勘探与勘探的权衡七、结论 一、介绍 从赌场到人工智能&#xff1a;揭示蒙特卡罗方法在复杂环境中的强大功能    强化…

zstd库数据压缩与解压缩

在 Visual Studio 2019 中使用 C 的 zstd 库进行数据压缩与解压缩 在今天的博客中&#xff0c;我们将探讨如何在 Visual Studio 2019 中使用 zstd 库进行高效的数据压缩和解压缩。zstd&#xff08;也称为 Zstandard 或 zstd&#xff09;是由 Facebook 开发的开源压缩库&#x…

动手学深度学习22 池化层

动手学深度学习22 池化层 1. 池化层2. 实现3. QA 课本&#xff1a; https://zh-v2.d2l.ai/chapter_convolutional-neural-networks/pooling.html 视频&#xff1a; https://www.bilibili.com/video/BV1EV411j7nX/?spm_id_fromautoNext&vd_sourceeb04c9a33e87ceba9c9a2e5f0…

关于单元测试

关于单元测试的一些总结&#xff1a;

【408真题】2009-17

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

618值得买的东西有哪些?买什么最划算?超全品类大清单总结

平日里让许多人心动不已的收藏加购好物&#xff0c;是否常常因为价格昂贵而让人望而却步&#xff1f;然而&#xff0c;618活动期间的到来&#xff0c;恰恰为我们提供了一个难得的购物盛宴&#xff01;相信在第一波活动中&#xff0c;许多消费者已经跃跃欲试&#xff0c;开始享受…

SuperSocket 自定义AppServer、AppSession、CommandBase

1、预期效果如下图。 2、自定义AppServer&#xff0c;代码如下。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using SuperSocket.SocketBase; using SuperSocket.SocketBase.Config;namespace Co…

做抖音电商,可以没有货源和经验,但不能没有耐心

我是王路飞。 在抖音做电商这件事&#xff0c;不需要怀疑其可行性。 经过四五年的发展&#xff0c;平台和商家已经证明了抖音电商的前景&#xff0c;它就是我们普通人做抖音最适合的一个渠道。 想在抖音做电商的&#xff0c;再给你们一个经验之谈&#xff0c;你可以没有货源…

基于 Spring Boot 博客系统开发(十一)

基于 Spring Boot 博客系统开发&#xff08;十一&#xff09; 本系统是简易的个人博客系统开发&#xff0c;为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。&#x1f33f;&#x1f33f;&#x1f33f; 基于 Spring Boot 博客系统开发&#xff08;十&#xff09;&#x…

云上聚智——移动云云服务器进行后端的搭建及部署

什么是移动云 移动云是指将移动设备和云计算技术相结合&#xff0c;为移动应用提供强大的计算和存储能力的服务模式。传统的移动应用通常在本地设备上进行计算和存储&#xff0c;而移动云将这些任务转移到云端进行处理。通过移动云&#xff0c;移动设备可以利用云端的高性能计算…

基于Python+flask+echarts的气象数据采集与分析系统,可实现lstm算法进行预测

背景 基于PythonFlaskEcharts的气象数据采集与分析系统结合了强大的数据处理能力和可视化展示技术&#xff0c;旨在实现对气象数据的实时采集、存储和分析。通过Python编程语言实现数据采集模块&#xff0c;利用Flask框架搭建后端系统&#xff0c;实现数据处理、存储和分析功能…

ORB-SLAM2从理论到代码实现(六):Tracking程序详解(上)

1. Tracking框架 Tracking线程流程框图&#xff1a; 各流程对应的主要函数 2. Tracking整体流程图 上面这张图把Tracking.cc讲的特别明白。 tracking线程在获取图像数据后&#xff0c;会传给函数GrabImageStereo、GrabImageRGBD或GrabImageMonocular进行预处理&#xff0c;这…

【php开发系统性学习】——thinkphp框架的控制器和视图的精简详细的使用

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

[Android]联系人-删除修改

界面显示 添加按钮点击&#xff0c;holder.imgDelete.setlog();具体代码 public MyViewHolder onCreateViewHolder(NonNull ViewGroup parent, int viewType) {//映射布局文件&#xff0c;生成相应的组件View v LayoutInflater.from(parent.getContext()).inflate(R.layout.d…

胶原蛋白三肽能否深入皮肤?一场关于美丽的科学之旅

在追求美丽的道路上&#xff0c;我们总是对各种护肤成分充满好奇。今天&#xff0c;就让我们一起探讨一个热门话题——胶原蛋白三肽&#xff0c;它究竟能否深入我们的皮肤&#xff0c;为我们带来期待中的美丽改变呢&#xff1f; 首先&#xff0c;我们需要了解胶原蛋白肽是什么…

开发心电疾病分类的深度学习模型并部署运行于ARM虚拟硬件平台(AVH)

目录 一、ARM虚拟硬件平台介绍 二、心电疾病分类模型介绍 三、部署流程 3.1 基于百度云平台订阅虚拟硬件镜像 3.2 安装编译相关组件 3.1 数据加载 3.2 模型转换 方式一&#xff1a; tensorflow模型转换为onnx模型&#xff0c;onnx模型转换为TVM模型 方式二&#xff1…

注册表Windows兼容性设置(AppCompatFlags)

属性 - 兼容性 EXE文件属性中有兼容性标签&#xff0c;当有些老版本软件不能正常运行时经常会调整这里的设置。 image.png 上面的所有选项都写在注册表中&#xff0c;其中“更改所有用户的设置”保存在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppC…

html5各行各业官网模板源码下载(2)

文章目录 1.来源2.源码模板2.1 HTML5好看的旅行网站模板源码2.2 HTML5自适应医院叫号大屏模板源码2.3 HTML5好看的高科技登录页面模板源码2.4 HTML5宠物美容服务公司网站模板源码2.5 HTML5创意品牌广告设计公司网站模板源码2.6 HTML5实现室内设计模板源码2.7 HTML5黄金首饰网站…