TCP协议 配合 Wireshark 分析数据

news/2024/9/19 4:55:02/ 标签: tcp/ip, 网络, 服务器, 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.ppmy.cn/news/1520680.html

相关文章

【归纳总结】常见排序算法及其实现:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快排、归并排序

思维导图: 目录 思维导图: 一、插入排序 1.直接插入排序: a:基本思想: b:基本步骤: c:复杂度分析 d:Java代码实现: 2.希尔排序(缩小增量排序) a:基本思想: c…

VMware部署linux系统

前期准备 安装VMware的相关教程在我的另一篇博客。 VMware的安装教程-CSDN博客 CentOS7.6的安装包 链接:https://pan.baidu.com/s/1sl8COPAC_VEcRtKxvu2S1A?pwd84el 提取码:84el 如果觉得百度网盘速度太慢,可以去镜像下载也可以 阿里…

对同一文件夹下所有excel表进行相同操作(数据填充、删除、合并)

背景引入:如图所示,笔者需要对数十个表格的银行日记账工作簿合并成一个工作簿,以便与本月银行流水进行核对。 为了方便银行日记账与银行流水进行核对,需要再每个村或小组的表格中,将村或小组的名称放在J列。 clear c…

mongodb在Java中条件分组聚合查询并且分页(时间戳,按日期分组,年月日...)

废话不多说,先看效果图: SQL查询结果示例: 多种查询结果示例: 原SQL: db.getCollection("hbdd_order").aggregate([{// 把时间戳格式化$addFields: {orderDate: {"$dateToString": {"for…

51单片机-独立按键

时间&#xff1a;2024.8.28 作者&#xff1a;Whappy 目的&#xff1a;学习51单片机 代码&#xff1a; #include <REGX52.H> #include "intrins.h"void Delay1ms(unsigned int xms) //11.0592MHz {unsigned char i, j;while(xms--){_nop_();i 2;j 199;do{…

ORA-01186: file 201 failed verification tests

环境&#xff1a;oracle11.2.0.4RACASMred hat6.1x64 主库两节点RAC&#xff0c;备库也为两节点RAC。 备库启用为实时应用查询。日志应用等都是正常的。 主库asm group如下&#xff1a; ASMCMD> ls CRS/DATA/ FRA/ 备库asm group如下&#xff1a; ASMCMD> ls CRS/SDATA/ …

西北工业大学oj-打印杨辉三角

用函数编程计算并输出如图所示的杨辉三角&#xff0c;行数由用户输入。 这道题就很简单了知道杨辉三角的规律&#xff0c;前后都是1&#xff0c;中间数字等于左上加右上 杨辉三角可以通过递推公式计算&#xff1a;C(n, k) C(n-1, k-1) C(n-1, k)&#xff0c;其中 C(n, k) 表…

掌控安全CTF-2024年8月擂台赛-ez_misc

题解&#xff1a; 题目给了一个流量包和一个加密的zip文件&#xff0c;我们首先打开流量包&#xff0c;很多流量&#xff0c;查看一下http协议&#xff0c;发现是个sql靶场&#xff0c;找到关键字样flag&#xff0c;得到一串字符&#xff1a; LJWXQ2C2GN2DAYKHNR5FQMTMPJMDER…

STM32F103C8----GPIO(跟着江科大学STM32)

一&#xff0c;GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口 可配置为8种输入输出模式 引脚电平&#xff1a;0V~3.3V&#xff08;0V&#xff09;&#xff0c;部分引脚可容忍5V 输出模式下可控制端口输出高低电平&#xff0c;用以驱动…

【机器学习-随记】使用 Slack 和 Facebook Messenger 的消息机器人实现虚拟客服人员

使用 Slack 和 Facebook Messenger 的消息机器人实现虚拟客服人员 1. 平台选择与集成 2. 消息机器人开发 3. 自然语言处理 (NLP) 4. 虚拟助手功能实现 5. 语音助手集成 6. 安全与用户隐私 7. 测试与部署 &#x1f388;边走、边悟&#x1f388;迟早会好 实现一个虚拟客…

基于精益六西格玛管理方法进行生产线综合改善

生产线精益六西格玛改善是一个系统工程&#xff0c;只有对其进行系统的策划与组织&#xff0c;才能收到良好的改善效果。一般来说&#xff0c;需要成立一个专门的精益六西格玛推进组织&#xff0c;由其完成一系列的组织、准备工作。具体如下&#xff1a; &#xff08;1&#xf…

王立铭脑科学50讲后续1,自己从课程中提起自己所需的知识,安放到自己的知识体系中。

王立铭脑科学50讲后续1&#xff0c;自己从课程中提起自己所需的知识&#xff0c;安放到自己的知识体系中。 建立第一版——对人类智慧的框架&#xff0c;后期的所有相关知识都安装在这个框架里&#xff0c;不断修正这个框架。 最底层&#xff1a;感知输入系统和动作输出系统&a…

高效过滤器检漏过程中上游浓度过低过高什么原因?

洁净区高效过滤器检漏是确保洁净环境正常运行的重要环节&#xff0c;但是很多企业检测人员&#xff0c;在进行高效过滤器检漏过程中&#xff0c;经常会遇到一些突发问题无法解决&#xff0c;今天中邦兴业技术工程师团队给大家汇总了一些高效过滤器检漏过程中常见问题&#xff0…

【C++】STL学习——vector模拟实现

目录 vector介绍vector函数接口总览结构介绍默认成员函数构造函数1构造函数2构造函数3经典的深浅拷贝拷贝构造赋值重载析构函数 迭代器begin和end 容量相关函数sizecapacityemptyreserveresize 访问operator[] 修改相关函数insertpush_backerasepop_backclearswap 迭代器失效问…

DataGridView用法合集【精品】

目录 1.当前的单元格属性取得、变更 2.DataGridView编辑属性 3.DataGridView最下面一列新追加行非表示 4.判断当前选中行是否为新追加的行 5. DataGridView删除行可否设定 6. DataGridView行列不表示和删除 7. DataGridView行列宽度高度设置为不能编辑 8. DataGridView行…

62-java线程池的执行过程

Java线程池的执行过程主要包括以下几个步骤&#xff1a; 创建线程池&#xff1a;使用ThreadPoolExecutor类创建线程池&#xff0c;并设置核心线程数、最大线程数、队列容量、保持存活时间等参数。 提交任务&#xff1a;将任务&#xff08;通常实现Runnable或Callable接口&…

黑神话:悟空-配置推荐

显卡推荐&#xff08;按类别整理&#xff09; 1. GTX 10系列、GTX 16系列&#xff1a; 如果希望体验光线追踪&#xff0c;建议根据预算升级到RTX 40系列显卡。对于1080p分辨率&#xff0c;至少需要RTX 4060才能流畅运行。 2. RTX 20系列&#xff1a; RTX 2060、RTX 2070&#…

基于Transformer架构训练LLM大语言模型:Transformer架构工作原理

视频讲解&#xff1a;Transformer架构的工作原理讲解_哔哩哔哩_bilibili 一 Transformer架构总体架构 1 总体架构图 总体架构说明&#xff1a; 输入层 词嵌入&#xff08;Word Embeddings&#xff09;: 输入文本中的每个词都被映射到一个高维空间中的向量&#xff0c;这些向…

最新Python安装+PyCharm安装激活和使用教程(pycharm激活)

PyCharm激活 激活码&#xff1a; EUWT4EE9X2-eyJsaWNlbnNlSWQiOiJFVVdUNEVFOVgyIiwibGljZW5zZWVOYW1lIjoic2lnbnVwIHNjb290ZXIiLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiIiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7…

【mac】brew 更新

【mac】brew 更新 更新 Homebrew 要获取最新的包的列表&#xff0c;首先得更新 Homebrew 自己。这可以用 brew update 办到。 brew update完后会显示可以更新的包列表&#xff0c;其中打钩的是已经安装的包。输出类似下面这样&#xff1a; > Updating Homebrew... Updat…