WireShark抓包分析TCP三次握手过程,TCP报文解析
「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》
使用WireShark工具抓取TCP协议三次握手的数据包,分析TCP三次握手过程,分析TCP报文中各个字段的作用。
- 第一步:访问百度
- 第二步:过滤TCP协议的数据包
- 第三步:数据包分析
- 第四步:数据报文分析
第一步:访问百度
1)打开wireshark,开启抓包,然后打开浏览器访问百度,触发TCP三次握手。
2)打开cmd,ping www.baidu.com
拿到百度的IP地址。
第二步:过滤TCP协议的数据包
1)显示过滤器输入:tcp and ip.addr==110.242.68.3
,过滤TCP协议的数据包。
最上面的三个包,就是TCP三次握手的数据包,每个包对应一次握手。
第三步:数据包分析
先分析一下三个握手的包都做了什么
1)先看第一个数据包,源地址(Source字段)是我
cmd执行 ifconfig
验证一下:
目的地址(Detintion字段)是百度的地址
Info字段,是请求的描述,可以看到里面有一个 SYN
总结一下第一个包做了什么:
我的电脑向百度的服务器发送了一个TCP请求,SYN表示这是一个建立连接的请求,这是第一次握手。
2)再看第二个数据包,源地址(Source字段)是百度的地址
目的地址(Detintion字段)是我的
Info字段是描述,可以看到有一个 SYN 和 ACK
总结一下这个包做了什么:
百度的服务器(收到我的链接请求以后)向我的电脑发送了一个TCP请求,SYN+ACK表示这是一个应答的请求,这是第二次握手。
3)再看第三个数据包,源地址(Source字段)是我
目的地址(Detintion字段)是百度的服务器
Info字段是描述,可以看到里面有一个 ACK
总结一下这个包做了什么:
我的电脑(收到百度服务器的响应请求后)向百度的服务器发送了一个TCP请求,ACK表示这是一个确认请求,这是第三次握手
发送完这个确认请求后,三次握手就完成了,客户端会打开到服务器的单向链接;服务器收到确认请求后,就会打开到客户端的单向链接;两个方向的连接都打开,就可以传输数据了。
第四步:数据报文分析
TCP协议数据报文格式如下图,接下来,我们根据抓到的数据包,分析各个字段的对应关系及作用。
1)点开TCP协议的数据包,第四行 Transmission Control Protocol 就是TCP协议的数据了。按照首字母区分协议。
- Source Port字段是源端口,客户端会使用一个随机端口向服务器发起TCP连接
- Destination Port字段是目的端口,因为我们是用https协议访问百度,所以这里是向服务器的443端口发起TCP连接
2)序号和确认号用来按顺序重组数据
- Sequence Number:表示本次传输数据的起始字节在整个数据流中的位置,是相对序号
- Sequence Number (Raw):原始序号
- Next Sequence Numvber:下一个包的序号
- Acknowledgment Number:期望收到下一个包的序号,相对序号
- Acknowledgment Number(Raw):原始序号
3)数据偏移表示数据到开始位置的距离,用来计算TCP报文的首部长度
4)标志位用来确认请求的作用,三次握手中需要注意的两个标志位是:Acknowledgment (ack)和 syn
- Reserved:保留位
- Nonce:显式拥塞通知,标明阻塞即将发生,让发送方降低传输速率
- CWR:减少拥塞窗口
- ECN-Echo:有两种意思,取决于SYN的值
- 紧急 URG(Urgent):为1表示高优先级数据包
- 确认 ACK(Acknowledgment ):为1表示确认号字段有效
- 推送 PSH(Push):为1表示接收方尽快将这个报文交给应用层而不用等待缓冲区装满
- 复位 RST(Reset):为1表示出现严重错误,需要重新建立连接
- 复位 SYN:建立连接时同步序号;SYN=1和ACK=0表示连接的请求,SYN=1和ACK=1表示接收连接的请求
- 终止 FIN:为1表示传输完成,请求释放链接
注意看第一次握手的数据包,因为标志位里只有Syn的值为1,所以Flags显示的是SYN,请求的Info字段也就显示 SYN
再看第二次请求的数据包,因为标志位里Syn和Acknowledgment的值都是1,所以Flags显示的是 SYN,ACK,请求的Info字段也就显示 SYN,ACK
5)最后就是窗口大小、校验和、紧急指针、选项、填充这几个字段
- window字段表示窗口大小,告诉对方自己所能接收的最大字节是多少,用于流量控制
- Checksum字段表示校验和,用来检验数据包的完整性
- Urgent Poiter字段表示紧急指针,在标志位URG为1的时候有效,代表一个偏移量,和序号字段值相加
- Options字段表示选项,长度可变
- Timestamps字段表示填充
相关文章:

WireShark抓包分析TCP三次握手过程,TCP报文解析
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 使用WireShark工具抓取TCP协议三次握手的数据包&am…...

【C语言】指针和数组笔试题解析
大家好,我是苏貝,本篇博客带大家了解指针和数组笔试题解析,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 1.前言2.一维数组2.字符数组2.12.22.32.42.52.6 1.前言 本篇文章是讲述在不同数…...

Vue的模板语法(下)
一.事件处理 事件修饰符 Vue通过由点(.)表示的指令后缀来调用修饰符, .stop, .prevent,.capture,.self,.once .stop:阻止事件冒泡。当一个元素触发了事件,并且该元素包含嵌套的父元素时&#…...
Zookeeper客户端——I0Itec-zkClient
dubbo使用了zkClient而不是使用zookeeper本身的客户端与zookeeper进行交互,为什么呢? 先看看zookeeper本身自带的客户端的问题。 1)ZooKeeper的Watcher是一次性的,用过了需要再注册; 2) session的超时后…...

火山引擎 ByteHouse:ClickHouse 如何保证海量数据一致性
背景 ClickHouse是一个开源的OLAP引擎,不仅被全球开发者广泛使用,在字节各个应用场景中也可以看到它的身影。基于高性能、分布式特点,ClickHouse可以满足大规模数据的分析和查询需求,因此字节研发团队以开源ClickHouse为基础&…...
hashmap使用
hashmap作为dao对象存储数据库数据 list是把每一个数据库的字段都映射了,而hashmap则是唯一id:数据库字段作为key hashmap遍历方式 public class Main {//使用迭代器(Iterator)EntrySetpublic static void main(String[] args) {// 创建并赋…...

Centos7配置国内yum源
目录 备份原系统中的repo文件配置国内开源镜像重新生成yum缓存 备份原系统中的repo文件 cd /etc/yum.repos.d/mkdir repo_bakmv *.repo repo_bak/配置国内开源镜像 到网易和阿里开源镜像站点下载系统对应版本的repo文件 curl -O http://mirrors.aliyun.com/repo/Centos-7.re…...

C#中async/await的线程ID变化情况
一、简单的起步 Console.WriteLine($"主线程开始ID:{Thread.CurrentThread.ManagedThreadId}");//aawait Task.Delay(100);//cConsole.WriteLine($"主线程结束ID:{Environment.CurrentManagedThreadId}");//b 结果: …...

网络安全—黑客技术—自学笔记
目录梗概 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来…...

功夫再高也怕菜刀。多年经验,会独立开发的机器视觉工程师,技术太强,但是找工作能力差劲
功夫再高也怕菜刀,专业的事情交给专业的人去做。 今年7月份中旬的时候,遇到一位老朋友,向我咨询某公司的信息,其实我根本不了解这家公司的情况与实力,向他说了,抱歉,我查下,等我晚上…...
numpy的多项式函数: `poly1d`
Python numpy.poly1d() numpy.poly1d()函数有助于定义一个多项式函数。它使得在多项式上应用 "自然操作 "变得容易。 语法: numpy.poly1d (arr, root, var) 参数 : arr : [array_like] 多项式系数按照幂的递减顺序给出。如果第二个参数(根)被…...

Python灰帽编程——错误异常处理和面向对象
文章目录 1. 错误和异常1.1 基本概念1.1.1 Python 异常 1.2 检测(捕获)异常1.2.1 try except 语句1.2.2 捕获多种异常1.2.3 捕获所有异常 1.3 处理异常1.4 特殊场景1.4.1 with 语句 2. 内网主机存活检测程序2.1 scapy 模块2.1.1 主要功能2.1.2 scapy 安装…...

【20230919】win11无法删除Chrome注册表项
win11无法删除Chrome注册表项 删除以下注册表项发生错误: 计算机\HKEY_LOCAL_MACHINE\SOFTWAR\Google计算机\HKEY_CURRENT_USER\Software\Google 尝试了很多删除注册表方法(例如:编辑remove.reg文件),都不行。 无法…...

TCP/IP客户端和服务器端建立通信过程
客户端和服务器端建立通信过程 使用Qt提供的类进行基于TCP的套接字通信需要用到两个类: QTcpServer:服务器类,用于监听客户端连接以及和客户端建立连接。 QTcpSocket:通信的套接字类,客户端、服务器端都需要使用。服务…...

Python ---使用Fake库向clickhouse造数据小案例
每次insert太麻烦了 先在clickhosue中建表 test_user表 CREATE TABLE dwh.test_user (name String,age Int32,address String,phone String,email String ) ENGINE MergeTree() ORDER BY name; 此时表中暂无数据 用Python脚本来造一些数据 from faker import Faker from c…...

09MyBatisX插件
MyBatisX插件 在真正开发过程中对于一些复杂的SQL和多表联查就需要我们自己去编写代码和SQL语句,这个时候可以使用MyBatisX插件帮助我们简化开发 安装MyBatisX插件: File -> Settings -> Plugins -> 搜索MyBatisx插件搜索安装然后重启IDEA 跳转文件功能 由于一个项…...
使用 Messenger 跨进程通信
什么是Messenger Messenger 也是IPC的方案之一,是基于消息的跨进程通信。基于消息是什么意思?Handler是我们最常用的消息机制,所以 Messenger 对于使用者来说就像是使用 Handler。实际上 Messenger 就是 AIDL 的上层封装而已,它们…...
Spring Cloud Gateway
路由谓词工厂 Route Predicate Factory 1. The After Route Predicate Factory spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After2017-01-20T17:42:47.789-07:00[America/Denver]# 用日期时间匹配 2. The Before Route Pr…...
JVM 优化技术
文章目录 JVM 优化技术概述方法内联优化说明优点内联条件 栈帧之间数据共享说明优点栈帧之间数据共享条件 JVM 优化技术 概述 JVM常见的优化技术: 方法内联优化。栈帧之间数据共享。 方法内联优化 说明 方法内联(Method Inlining)是JVM…...

【MySQL系列】- MySQL自动备份详解
【MySQL系列】- MySQL自动备份详解 文章目录 【MySQL系列】- MySQL自动备份详解一、需求背景二、Windows mysql自动备份方法2.1 复制date文件夹备份实验备份环境创建bat直接备份脚本 2 .2 mysqldump备份成sql文件创建mysqldump备份脚本 2 .3 利用WinRAR对MySQL数据库进行定时备…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...