TCP/IP协议分析实验:通过一次下载任务抓包分析
TCP/IP协议分析
一、实验简介
本实验主要讲解TCP/IP协议的应用,通过一次下载任务,抓取TCP/IP数据报文,对TCP连接和断开的过程进行分析,查看TCP“三次握手”和“四次挥手”的数据报文,并对其进行简单的分析。
二、实验目标
1.了解运输层TCP协议基本概念、报文结构;
2.分析TCP报文头部;
3.分析TCP连接建立过程、TCP连接释放;
4.掌握使用wireshark进行tcp协议分析技术。
三、实验环境
实验主机:centos7和本地Windows
实验工具:Wireshark
**四、**实验步骤
- 在本地Windows上打开Wireshark,选择要抓取的网卡,我们虚拟机使用的是VMnet8,所以这里选择这个网卡。

- Wireshark默认是开启流量捕获的,可以看到在我们没有使用虚拟机的时候,其实也是有数据交互的,这是由于系统服务本身的特点决定的,比如最上面的两条数据是NTP协议数据,这个协议对应的是NTP服务,是用来同步系统时间的,所以系统会定时向NTP服务器发送数据包。

3. 打开centos7虚拟机,确保虚拟机可以上网

- 为了使用方便,我们可以使用远程连接工具连接虚拟机,这里使用的使用SecureCRT

- 准备一个下载连接,这里我们下载阿里云的centos7yum文件,文件比较小,下载起来方便,需要使用wget命令,没有这个命令的需要提前安装以下,下载命令:wgethttp://mirrors.aliyun.com/repo/Centos-7.repo
- 清空Wireshark抓取的数据包,因为打开软件之后默认是开启数据包抓取的。

- 将下载连接复制并粘贴到虚拟机,开始下载

- 将抓取到的数据包保存,方便后续查看

- 打开上一步保存的数据包文件

- 右键选中其中一条TCP数据包,选择对话过滤,再选择TCP数据,就可以单独查看这一次会话的数据包

- 过滤出来的TCP会话数据包

- 现在我们对TCP建立连接的数据包进行简单的分析,如图所示,第一条数据由虚拟机发送给服务器,是TCP建立连接的第一次“握手”,首先客户端会开启请求(SYN)控制位,向服务器发送SYN包,SYN是Synchronization同步的意思,SYN包的目的是请求与服务器进行数据同步,并携带随机的Seq(序号)一同发送给服务器。

同时我们可以看一下标志位,SYN=1,意味着开启同步,在页面找到TransmissionControlProtocol,这其实就是TCP的全称,传输控制协议;然后找到Flags就可以看到标志位的情况。

- 我们接着看本次连接的第二条数据包,也就是TCP建立连接的第二次“握手”,是由服务器发送给虚拟机的,服务器会开启SYN和ACK控制位,向客户端发送了SYN包和ACK包;SYN包的意思上面说过了,就是请求同步的作用,ACK是Acknowledgement确认的意思,表示服务器确认与客户端同步数据;然后我们看一下序号和确认号,这条数据包的序号是0,确认号是1,序号是随机的,但确认号不是,这里的确认号是上一条数据包的序号加1,也就是ACK=0+1,因为第一次“握手”时客户端向服务器发送的数据包中Seq(序号)是0,所以这里的ACK就是0+1。
这里有个问题,为什么要有序号的存在,答案是为了保证通道的唯一性,因为应用程序可能会发送多个序号给服务器,序号的存在可以让服务器精准的找到客户端发过来的请求同步信息,后续服务器拿到序号之后也是有用的,服务器向客户端发送SYN包和ACK包,会把这个序号加1,作为ACK(确认号)发给客户端,这样客户端才知道这条数据包是服务器请求同步的报文。

我们再看看第二次“握手”的标志位情况,这里服务器向客户群发送了SYN包和ACK包,标志位应该是SYN=1,ACK=1。

- 我们接着看TCP建立连接的第三次“握手”,是由客户端发送给服务器的,发送的是ACK包,表示确认同步的意思,这里客户端会将第二次“握手”时服务器发过来的确认号(ACK)作为第三次“握手”的序号,也就是1;将第二次“握手”时服务器发过来的序号(Seq)加1作为确认号,也就是1,一同发送给服务器,表示确认同步数据,TCP通道建立成功。

同样来看看标志位的情况,这次时ACK为1,表示开启确认的报文。

- TCP成功建立连接之后做什么呢?说明应用层可以使用这个TCP通道传输数据了,这个应用层协议我们后面再讲。
- 现在我们来看一下TCP关闭连接的过程,客户端和服务端都能主动发起关闭请求,我们这次实验是由客户端主动发起的关闭请求,这个时候客户端会在报文中开启FIN和ACK两个控制位,FIN就是Finish结束的意思,这里也就是确认要结束会话的意思,由于序号和确认号在HTTP传输过程被不同的叠加,这里客户端发送给服务器的请求结束会话的序号变成了135,ACK编号为3206;这是TCP关闭连接的第一次挥手。

看一下标志位的情况,ACK(确认)和FIN(完成)处于开启状态。

- TCP关闭连接的第二次挥手,由服务器发送给客户端,服务器收到客户端的关闭连接请求,然后服务端发送一个ACk报文,确认收到了客户端的请求,序号(Seq)使用的是第一次“挥手”时发过来的确认号,也就是Seq=3206,确认号为第一次“挥手”时发过来的序号加1,也就是135+1=136。这个时候连接还没有断开,我们继看第三次“挥手”。

看一下第二次“挥手”的标志位情况,确认位为开启状态。

- TCP关闭连接的第三次“挥手”,由服务器发送给客户端,第二次“挥手”只确认了客户端已经没有数据需要同步了,但服务端可能还有需要发送给客户端的数据,所以,服务端也需要向客户端确认没有数据需要发送了;即第三次“挥手”是服务端向客户端确认,自己也没有数据需要发送了,在服务端确认收到客户端的关闭连接请求之后,会给客户端发送结束请求。报文内容为FIN包和ACK包来进行最后的确认,此时序号和确认号不变,因为没有交互,只是多了一个控制位。

看一下第三次“挥手”的标志位情况,确认位和结束位开启。

- TCP关闭连接第四次“挥手”,客户端收到了服务器最终的结束确认会发送ACK包来进行确认,此时自己的序号需要用对方的确认号,自己的确认号为对方序号加1,也就是3206+1=3207。四次“挥手”完成,TCP连接关闭。

看一下第四次“挥手”的标志位情况,此时只有确认位开启。

五、实验总结
通过本实验,学习了TCP/IP协议的应用,并通过抓取TCP/IP数据报文,深入了解了TCP连接和断开的过程。在分析TCP报文头部的过程中,加深了对TCP协议基本概念和报文结构的理解。重点探讨了TCP连接建立过程中的三次握手和连接释放过程中的四次挥手,从中了解了TCP连接的建立与断开的细节。通过使用Wireshark工具,掌握了TCP协议分析技术,为进一步深入研究网络通信提供了基础。这个实验有助于加深对TCP/IP协议栈的理解,提高了对网络通信的认识和技能。
相关文章:
TCP/IP协议分析实验:通过一次下载任务抓包分析
TCP/IP协议分析 一、实验简介 本实验主要讲解TCP/IP协议的应用,通过一次下载任务,抓取TCP/IP数据报文,对TCP连接和断开的过程进行分析,查看TCP“三次握手”和“四次挥手”的数据报文,并对其进行简单的分析。 二、实…...
Python项目开发实战:企业QQ小程序(案例教程)
一、引言 在当今数字化快速发展的时代,企业对于线上服务的需求日益增长。企业QQ小程序作为一种轻量级的应用形态,因其无需下载安装、即开即用、占用内存少等优势,受到了越来越多企业的青睐。本文将以Python语言为基础,探讨如何开发一款企业QQ小程序,以满足企业的实际需求。…...
list模拟与实现(附源码)
文章目录 声明list的简单介绍list的简单使用list中sort效率测试list的简单模拟封装迭代器insert模拟erase模拟头插、尾插、头删、尾删模拟自定义类型迭代器遍历const迭代器clear和析构函数拷贝构造(传统写法)拷贝构造(现代写法) 源…...
Java应用中文件上传安全性分析与安全实践
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一. 文件上传的风险 二. 使用合适的框架和库 1. Spr…...
noVNC 小记
1. 怎么查看Ubuntu版本...
设置systemctl start kibana启动kibana
1、编辑kibana.service vi /etc/systemd/system/kibana.service [Unit] DescriptionKibana Server Manager [Service] Typesimple Useres ExecStart/home/es/kibana-7.10.2-linux-x86_64/bin/kibana PrivateTmptrue [Install] WantedBymulti-user.target 2、启动kibana # 刷…...
PostgreSQL:在CASE WHEN语句中使用SELECT语句
CASE WHEN语句是一种条件语句,用于多条件查询,相当于java的if/else。它允许我们根据不同的条件执行不同的操作。你甚至能在条件里面写子查询。而在一些情况下,我们可能需要在CASE WHEN语句中使用SELECT语句来检索数据或计算结果。下面是一些示…...
游戏心理学Day13
游戏成瘾 成瘾的概念来自于药物依赖,表现为为了感受药物带来的精神效应,或是为了避免由于断药所引起的不适和强迫性,连续定期使用该药的 行为现在成瘾除了药物成瘾外,还包括行为成瘾。成瘾的核心特征是不知道成瘾的概念来自于药…...
GitLab中用户权限
0 Preface/Foreword 1 权限介绍 包含5种权限: Guest(访客):可以创建issue、发表comment,不能读写版本库Reporter(报告者):可以克隆代码,不能提交。适合QA/PMDeveloper&…...
RunMe_About PreparationForDellBiosWUTTest
:: ***************************************************************************************************************************************************************** :: 20240613 :: 该脚本可以用作BIOS WU测试前的准备工作,包括:自动检测"C:\DellB…...
C++中变量的使用细节和命名方案
C中变量的使用细节和命名方案 C提倡使用有一定含义的变量名。如果变量表示差旅费,应将其命名为cost_of_trip或 costOfTrip,而不要将其命名为x或cot。必须遵循几种简单的 C命名规则。 在名称中只能使用字母字符、数字和下划线()。 名称的第一个字符不能是数字。 区分…...
[ACTF新生赛2020]SoulLike
两个文件 ubuntu运行 IDA打开 清晰的逻辑 很明显,我们要sub83a 返回ture 这里第一个知识点来了 你点开汇编会发现 这里一堆xor巨多 然后IDA初始化设置的函数,根本不能分析这么多 我们要去改IDA的设置 cfg 里面的 hexrays文件 在max_funsize这 修改为1024,默认是64 等待一…...
C#——析构函数详情
析构函数 C# 中的析构函数(也被称作“终结器”)同样是类中的一个特殊成员函数,主要用于在垃圾回收器回收类实例时执行一些必要的清理操作。 析构函数: 当一个对象被释放的时候执行 C# 中的析构函数具有以下特点: * 析构函数只…...
探索重要的无监督学习方法:K-means 聚类模型
在数据科学和机器学习领域,聚类分析是一种重要的无监督学习方法,用于将数据集中的对象分成多个组(簇),使得同一簇中的对象相似度较高,而不同簇中的对象相似度较低。K-means 聚类是最广泛使用的聚类算法之一,它以其简单、快速和易于理解的特点受到了广泛关注。本文将深入…...
将web项目打包成electron桌面端教程(二)vue3+vite+ts
说明:我用的demo项目是vue3vitets,如果是vue2/cli就不用往下看啦,建议找找其他教程哦~下依赖npm下载不下来的,基本换成cnpm/pnpm/yarn就可以了 一、项目准备 1、自己新创建一个,这里就不过多赘述了 2、将需要打包成…...
Linux下的/etc/resolv.conf
Linux下的/etc/resolv.conf 文件用于配置域名解析器的设置,告诉系统在解析域名时要查询哪些DNS服务器。nameserver:指定DNS服务器的IP地址。你可以列出多个nameserver,系统将按顺序尝试它们,直到找到可用的DNS服务器。 nameserve…...
大语言模型 (LLM) 红队测试:提前解决模型漏洞
大型语言模型 (LLM) 的兴起具有变革性,以其在自然语言处理和生成方面具有与人类相似的卓越能力,展现出巨大的潜力。然而,LLM 也被发现存在偏见、提供错误信息或幻觉、生成有害内容,甚至进行欺骗行为的情况。一些备受关注的事件包括…...
cocos入门11:生命周期
Cocos Creator 是一个强大的游戏开发工具,它基于 JavaScript 或 TypeScript,并使用 cc.Class 系统来组织游戏逻辑。在 Cocos Creator 中,每个组件(包括场景、节点和组件脚本)都有其生命周期,这些生命周期函…...
c++分辨读取的文件编码格式是utf-8还是GB2312
直接上代码,有一部分是GPT直接生成的: #include <QCoreApplication> #include <QFile> #include <QTextCodec> #include <QDebug>// 判断是否为UTF-8编码 bool isUtf8(const QByteArray &data) {int i 0;while (i < da…...
MS721仪表总线(M-Bus)从站收发电路
MS721 是为 M-Bus 标准 (EN1434-3) 的应用而开发的单片收发 电路。 MS721 接口电路可以适应从站与主站之间的电压差,总 线的连接没有极性要求,电路由主站通过总线供电,这样从站 电池就不会增加额外的负载,同时还集成电源失效功…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
