当前位置: 首页 > news >正文

TCP/IP协议分析实验:通过一次下载任务抓包分析

TCP/IP协议分析

一、实验简介

本实验主要讲解TCP/IP协议的应用,通过一次下载任务,抓取TCP/IP数据报文,对TCP连接和断开的过程进行分析,查看TCP“三次握手”和“四次挥手”的数据报文,并对其进行简单的分析。

二、实验目标

1.了解运输层TCP协议基本概念、报文结构;
2.分析TCP报文头部;
3.分析TCP连接建立过程、TCP连接释放;
4.掌握使用wireshark进行tcp协议分析技术。

三、实验环境

实验主机:centos7和本地Windows
实验工具:Wireshark

**四、**实验步骤
  1. 在本地Windows上打开Wireshark,选择要抓取的网卡,我们虚拟机使用的是VMnet8,所以这里选择这个网卡。

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


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

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

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

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

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

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

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

  1. 过滤出来的TCP会话数据包

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


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

  1. 我们接着看本次连接的第二条数据包,也就是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。

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


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

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


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

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


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

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


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

  1. 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

直接上代码&#xff0c;有一部分是GPT直接生成的&#xff1a; #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 接口电路可以适应从站与主站之间的电压差&#xff0c;总 线的连接没有极性要求&#xff0c;电路由主站通过总线供电&#xff0c;这样从站 电池就不会增加额外的负载&#xff0c;同时还集成电源失效功…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...