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 接口电路可以适应从站与主站之间的电压差,总 线的连接没有极性要求,电路由主站通过总线供电,这样从站 电池就不会增加额外的负载,同时还集成电源失效功…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...

spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...