TCP协议 配合 Wireshark 分析数据

        在TCP连接中,无论是客户端还是服务端,都有可能成为发送端或接收端,这是因为TCP是一个全双工协议,允许数据在同一连接中双向流动

  • 客户端(Client)通常是指主动发起连接请求的一方。例如,在Web浏览中,用户计算机上的浏览器软件(客户端)会主动向Web服务器(服务端)发送连接请求。
  • 服务端(Service)是指被动等待连接请求的一方。如上述例子中的Web服务器,它会在某个固定端口监听来自客户端的连接请求。

TCP通讯时讯 :

Wireshark抓包完整通讯:

        下面我们先分析一下TCP是如何建立连接的。 

一、专有名词解析

1.1 序列号(Seq)

         在TCP(传输控制协议)中,序列号是一个32位的数值,用于唯一标识每个数据段中第一个字节的位置。当两个主机之间建立TCP连接时,它们会协商一个初始序列号,这个序列号随着每个数据段的发送而递增。序列号的主要作用在于确保数据包能够按照正确的顺序被接收方接收,即使在网络传输过程中出现了数据包的乱序或丢失,接收端也能够依据序列号将数据重新排列成原始的顺序。此外,序列号还与确认应答(ACKnowledgment)机制紧密相关,接收方通过发送带有特定确认号(即期望接收的下一个字节的序列号)的ACK包来告知发送方哪些数据已被成功接收。这种机制不仅支持数据的可靠传输,还帮助实现流量控制和连接的建立与终止过程。

1.2 窗口大小(Win)

        在TCP(传输控制协议)中,窗口大小(Win)是一个重要的参数,位于TCP报头中,用于实现高效的流量控制。窗口大小是一个16位的字段,它代表接收端当前允许发送端连续发送而不必立即等待确认的最大字节数。这个机制的核心在于,接收端通过告知发送端其缓冲区中可用的空间大小,来控制发送端发送数据的速度。当接收端的缓冲区接近满载时,它可以减小窗口大小甚至将其设为零,指示发送端暂停发送数据,以防数据溢出。相反,当接收端有更大的缓冲区空间可用时,它可以增大窗口大小,允许发送端发送更多的数据。通过这种方式,窗口大小动态调整,确保了数据传输的平滑性和高效性,同时也避免了缓冲区溢出造成的潜在数据丢失问题。此外,窗口大小机制还有助于提高传输效率,因为它允许发送端连续发送多个数据段而不必为每个数据段单独等待确认,从而减少了不必要的等待时间和网络拥塞的可能性。

1.3 长度 Length 与 Len

  • Length这是Wireshark中显示的整个TCP数据段的长度,包括TCP报头和数据部分
  • Len这是TCP数据段中数据部分的长度,以字节为单位。 

        Length的值反映了整个TCP数据段的大小,包括TCP报头和数据部分。在TCP通信的不同阶段,Length的值会根据数据段中包含的数据量和TCP报头的长度(包括任何选项字段)而变化。

        Len的值反映了TCP数据段中实际的数据负载的大小,不包括TCP报头。在TCP通信的不同阶段,Len的值会根据实际传输的数据量而变化。例如,在三次握手阶段,Len的值为0,因为这些数据段中没有实际的数据负载;而在数据传输阶段,Len的值会根据实际传输的数据量而变化。 

二、TCP建立连接(三次握手) 

  • 客户端:192.168.0.2:5000
  • 服务端:192.168.0.30:2021

2.1 第一次握手(SYN) 

源地址:192.168.0.2           目的地址:192.168.0.30
TCP Port numbers reused] 5000 -> 2021 [SYN] Seq=0 Win=4096 Len=0 MSS=1460

        解释:源地址192.168.0.2向目的地址192.168.0.30发送一个SYN包,请求建立连接。源端口是5000,目的端口是2021。序列号(Seq)为0,窗口大小(Win)为4096,最大段大小(MSS)为1460。

2.2 第二次握手(SYN-ACK)

源地址:192.168.0.30           目的地址:192.168.0.2
TCP 2021 -> 5000 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460

        解释:目的地址192.168.0.30向源地址192.168.0.2发送一个SYN-ACK包,确认收到SYN包并同意建立连接。序列号(Seq)为0,确认号(Ack)为1,窗口大小(Win)为8192。

2.3 第三次握手(ACK)

源地址:192.168.0.2           目的地址:192.168.0.30
TCP 5000 -> 2021 [ACK] Seq=1 Ack=1 Win=4096 Len=0

        解释:源地址192.168.0.2向目的地址192.168.0.30发送一个ACK包,确认收到SYN-ACK包,完成三次握手。序列号(Seq)为1,确认号(Ack)为1,窗口大小(Win)为4096。

2.4 综合分析
2.4.1 序列号(Seq): 
  • 在TCP三次握手的第一阶段,客户端向服务器发送一个SYN包,并附带一个初始序列号(Seq=0),这表示客户端希望从序列号0开始发送数据。
  • 服务器接收到SYN包后,回应一个SYN-ACK包,其中包含了自己的初始序列号(Seq=0),并确认了客户端的序列号(Ack=1),表示它已接收到客户端的序列号0,并期待后续的数据从序列号1开始。
  • 最后,客户端发送一个ACK包,确认号(Ack=1)表明客户端收到了服务器的序列号0,并准备接收从序列号1开始的数据。
2.4.2 窗口大小(Win): 
  •         在第一次握手中,客户端(源地址为192.168.0.2)发起了连接请求,发送了一个SYN包,并设置了窗口大小为4096(Win=4096)。这意味着客户端告诉服务器,它目前可以接收最多4096字节的数据。
  •         第二次握手中,服务器(源地址为192.168.0.30)回应了一个SYN-ACK包,它的窗口大小为8192(Win=8192)。这表明服务器愿意接收客户端的数据,并且它的接收缓冲区当前可以容纳最多8192字节的数据。同时,这也意味着服务器向客户端表明它可以处理比客户端所提议的更大的数据量。
  •         最后一次握手中,客户端发送了一个ACK包来确认收到了服务器的SYN-ACK,并且其窗口大小保持为4096(Win=4096)。这表明客户端再次确认它可以接收最多4096字节的数据,并且它准备好了接收后续的数据流。

        通过三次握手过程中的窗口大小信息交换,客户端和服务器协商了彼此的接收能力,并且为后续的数据传输做好了准备。这些窗口大小的值反映了双方在连接建立初期的流量控制策略,确保了数据传输的平稳性和可靠性。在整个握手过程中,窗口大小的动态调整确保了数据传输的效率,同时也防止了由于一方接收能力不足而导致的数据溢出或丢失。 

2.4.3 长度(Len)
  •         在第一次握手中,客户端发起连接请求,发送了一个SYN包,并设置了序列号为0(Seq=0)。这意味着客户端希望从0开始发送数据。由于这是一个SYN包,它并没有携带任何应用层数据,因此Len=0,表明该数据段中没有实际的数据负载。
  •         第二次握手中,服务器回应了一个SYN-ACK包,它的序列号也是0(Seq=0),表示服务器愿意从0开始接收数据,并确认收到了客户端的SYN包,期望接下来接收的序列号为1(Ack=1)。同样地,由于这是一个SYN-ACK包,它也没有携带任何应用层数据,所以Len=0,表示该数据段中也没有实际的数据负载。
  •         最后一次握手中,客户端发送了一个ACK包来确认收到了服务器的SYN-ACK,并且确认号为1(Ack=1),表示客户端已经收到了服务器序列号为0的数据,准备接收序列号为1之后的数据。这个ACK包也没有携带任何应用层数据,因此Len=0,再次表明该数据段中没有实际的数据负载。

        在TCP三次握手过程中,Len字段均为0,这是因为SYN、SYN-ACK和ACK数据段的主要功能是同步序列号、确认号以及连接参数,而不是传输用户数据。因此,在这三个阶段中,Len=0表明这些数据段仅包含控制信息,而没有实际的数据负载。这样的设计使得TCP能够在正式的数据传输之前完成必要的连接建立和参数协商工作,确保后续的数据传输能够顺利进行。 

三、TCP 数据交换

四、TCP 终止连接(四次挥手) 

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

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

相关文章

Python脚本实现向飞书发送卡片消息

目录 1 先创建一个卡片消息2 Python脚本2.1 告警测试2.2 告警恢复 总结 1 先创建一个卡片消息 飞书卡片搭建工具 根据自己的需要创建一个消息卡片: 可以在 卡片源代码 中看到这个卡片的代码信息 2 Python脚本 2.1 告警测试 test.py 文件 ""&quo…

Table表格td之间有空隙?你少设了border-collapse

设置之前 设置之后 table {border:solid 1px #cccccc;border-collapse: collapse;border-spacing: 0; }

2024最新PyCharm下载安装激活汉化教程!(附激活码)

激活码(文末附带精品籽料): K384HW36OB-eyJsaWNlbnNlSWQiOiJLMzg0SFczNk9CIiwibGljZW5zZWVOYW1lIjoibWFvIHplZG9uZyIsImxpY2Vuc2VlVHlwZSI6IlBFUlNPTkFMIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6I…

TripoSR模型构建指南

一、介绍 TripoSR 是由 Tripo AI 和 Stability AI 合作开发的最先进的开源模型,用于从单个图像进行快速前馈 3D 重建。利用大型重建模型(LRM)的原理,TripoSR 带来了关键的进步,大大提高了 3D 重建的速度和质量。该模型…

【ISSCC】论文详解-34.6 28nm 72.12TFLOPS/W混合存内计算架构

本文介绍ISSCC34.6文章,题目是《A 28nm 72.12TFLOPS/W Hybrid-Domain Outer-Product Based Floating-Point SRAM Computing-in-Memory Macro with Logarithm Bit-Width Residual ADC》(一种28nm 72.12TFLOPS/W混合域外积浮点SRAM存内计算宏单元&#xff…

AI Dify + 大模型+ Agent 详细教程 从0-1教你构建小助手

前言 Dify 是一个易于使用的 LLMOps 平台,提供了多种应用程序类型和模板,包括 AI 聊天机器人、代码转换器、SQL 生成器、新闻内容编写、创意脚本等。团队使用 Dify,可以基于 GPT-4 等模型快速「开发部署」 AI 应用程序并进行可视化操作&…

python学习13:对excel格式文件进行读写操作

读取excel的话需要下载第三方库: 常用的库:xlrd(读),xlwt(写),xlutils,openpyxl[-----pip install xxx-------] 这里推荐openpyxl pip install openpyxl excel读取的基本操作 # 2)基本操作: # 2.1)打开文件,获取工作簿 filename rD:\stdutyZiLiao\pythoneProje…

面试总结1

1.数据库查询语句,找重复名字。有三列(名字、班级、姓名) 2.问3范式,字段类型,前两个是project_id:项目编号(可以包含字母和数字)project_name:项目名称(可以…

【C++】vector(下)--上篇

个人主页~ vector(上)~ vector 二、vector的模拟实现1、了解组成2、vector.h(1)为什么有了size_t参数的vector构造函数还要再写一个int参数的重载vector构造函数(2)为什么reserve不用memcpy(3&…

【C语言】零碎知识点(易忘 / 易错)总结回顾

一、数据类型 1、%p —— 以地址的形式打印 2、整型在内存中的存储 (1)原码、反码、补码 计算机中的有符号数有三种表示方法:原码、反码和补码。 三种表示方法均有符号位和数值位两部分,数值位三种表示方法各不相同。 原码&a…

Redis数据结构与连接

1 基本的数据结构 1.1 string string的实现有多种 int:字符串长度小于等于20且能转成整数raw:字符串长度大于44embstr:字符串长度小于等于44 字符串长度小于1M 时,加倍扩容;超过 1M 每次只多扩1M;字符串…

MySQL:表创建指南

前言 随着信息技术的飞速进步,数据库设计的优劣对系统性能产生了决定性影响。 一个精心设计的数据库不仅能显著提升应用效率,还能确保数据的安全和一致性。 本文将以一张具体的实体-关系图(E-R图)为基础,详细阐述如…

HarmonyOS NEXT开发:UI导航栏组件-NavigationBarView

NavigationBarView 是什么? NavigationBarView是ArkTS上的UI自定义导航栏组件,内置了导航栏的返回按钮、标题、搜索入口、右侧按钮等常用微功能。NavigationBarView结构展示 NavigationBarView ├── back │ ├── back_icon │ …

全倒装COB超微小间距LED显示屏比正装COB小间距的优势在哪些方面

在全倒装COB超微小间距LED显示屏与正装COB小间距显示屏的激烈对比中,我们不得不深入探讨其各自在技术创新、显示效果、以及应用领域的独特优势。 全倒装技术作为LED显示领域的一项重大突破,其核心在于将LED芯片直接倒装焊接在基板上,这一创新…

RFID光触发标签与端口自检功能新型光交箱哑资源管理方案

在通信行业的快速发展进程中,光交箱作为关键的网络节点,其哑资源的有效管理对于保障通信服务的质量和稳定性至关重要,传统的管理方式在面对日益庞大和复杂的光交箱哑资源时,逐渐显露出诸多弊端,如资源信息不准确、故障…

PDF转PPT,四款神器助你一臂之力!

亲爱的朋友们,你们在日常的工作和生活中有没有遇到过需要将PDF文件转换成PPT格式的情况呢?今天,我就来给大家推荐四款非常好用的工具,让你轻松应对PDF转PPT的难题! 一、福昕转换器 直通车(粘贴到浏览器打…

最新版php进销存系统源码 ERP进销存专业化管理 永久免费升级更新+完整图文搭建教程

在当今信息化时代,企业管理的高效性与精确性是企业竞争力的关键。分享一款最新版的PHP进销存系统源码,一款专为企业设计的ERP进销存管理工具,其丰富的功能、灵活的子账号设置、强大的权限控制、以及独家升级的合同管理和报价单打印功能&#…

数据仓库系列11:ETL的主要步骤是什么,它们分别有什么作用?

你是否曾经感觉被海量数据淹没?是否在寻找一种方法来有效地整合、转换和加载这些数据?如果是,那么你来对地方了。今天,我们将深入探讨ETL(Extract, Transform, Load)过程的三个关键步骤,这是每个大数据开发者都应该掌握的核心技能。准备好踏上成为数据整合大师的旅程了吗?让…

[B站大学]Zotero7教程

参考资料: https://www.bilibili.com/video/BV1PSvUetEQX 2. 账号注册与同步 本节内容参考zotero中文社区文档:https://zotero-chinese.com/user-guide/sync 2.1 数据同步 首先注册一个Zotero官方账户。登录账号密码。 2.2 文件同步 按照文档,推荐…

Kafka3.x 使用 KRaft 模式部署 不依赖 ZooKeeper

前言 Kafka 从 2.8.0 版本开始引入了 Kafka Raft Metadata Mode(KRaft 模式),这个模式允许 Kafka 在不依赖 ZooKeeper 的情况下进行元数据管理。KRaft 模式在 Kafka 3.0.0 中进入了稳定版本,本文部署的 Kafka_2.12-3.6.0 单机模式 环境 Ce…