网络问题排障专题-数据分析

news2024/10/5 6:51:21

目录

一、各协议数据包介绍

1、Ping、DNS数据包介绍(单包一来一回)

Ping

DNS

2、TCP数据包

在正常情况下,TCP连接确实是从三次握手开始的。三次握手是建立TCP连接的过程,它的目的是确保双方都能够正常通信。

为啥要四次挥手呢?

常见数据包介绍:

常见TCP头部字段介绍:

Telnet

TCP数据包:

3、HTTP、HTTPS数据包

有两种类型的消息:

常见的请求方法——增删改查:

常见的响应状态码:

SSL协商过程主要包括以下步骤:

二、tcpdump命令详解

1、tcpdump命令常用参数

2、AF“特殊”场景抓包汇总:

(1)、在透明或虚拟网线部署时,如遇数据包携带vlan头部(注:any口无法抓取带vlan头部的数据):

(2)、抓取聚合接口数据时:

(3)、抓取拨号口数据时:

三、wireshark使用详解

1、数据包常见字段及wireshark常用技巧

2、wireshark常见过滤条件

(1)、快捷过滤:无需在过滤器中手动输入条件,可以选择and/or selected。

(2)、快速过滤同一tcp、http数据流

(3)、统计会话情况,包含同一五元组数据包个数、字节总大小等信息,常用于查看抓取的数据包,流量占用情况。

使用wireshark可以很方便地对截获的数据包进行分析,包括该数据包的源地址、目的地址、所属协议等。下面列举一些常用显示过滤语法规则:

(1)、二层数据包过滤:

(2)、三层数据包过滤:

(3)、四层数据包过滤:

(4)、包长度过滤:

(5)、逻辑运算符 and、or、not

3、常见报错报文

(1)、【TCP Previous segment not captured】——丢包

(2)、【TCP 0ut-of-0rder】——乱序

(3)、【TCP DUP ACK】——期望ACK(告诉发起方我想要什么包!!!)

(4)、【TCP Retransmission】——超时重传

4、实战运用

(1)、客户反馈做了目的地址转换后测试不通,如何抓包分析?

(2)、客户反馈做了目的地址转换后,对应端口能通,但是业务无法访问,如何抓包分?

(3)、客户反馈内网电脑访问部分网站,经过AF后打不开?

(4)、客户反馈客户端访问服务器的一个HTTP业务打开的不全,打开慢,有些模块看不到?


一、各协议数据包介绍

1、Ping、DNS数据包介绍(单包一来一回)

Ping

ping 命令用于测试与目标主机之间的连接。它向目标主机发送一个ICMP请求,并等待它的回应。如果目标主机正常工作并且连接畅通,则会收到一个回显响应。如果没有收到响应,则说明有问题,需要进一步排除故障。

ping命令常用场景:测试连通性、测试时延、测试稳定性(是否丢包)、确认访问客户端源ip。

ping命令用法:

windows:ping XX.XX.XX.XX -t -l 500 (-t 长ping -l指定数据包长)

linux:ping XX.XX.XX.XX -s 500 (linux默认长ping -s指定数据包长)

正常没有人发固定长度的ping,这样很容易知道自己的源地址是多少。

DNS

DNS是Domain Name System的简称,即域名系统,是一个记录域名和IP地址相互映射的系统,主要作用是为了解决域名与IP之间的相互转换。DNS是一个网络服务,其端口为53号端口。

命令常用场景:某网站无法访问、ping的通外网,但网页打不开、僵尸网络触发测试

域名解析命令:nslookup baidu.com XX.XX.XX.XX(nslookup 域名 指定dns服务器)

查询ID:应答的ID和查询ID一致的话,可以根据这个ID去判断是不是回你请求的百度,而不是别人去请求百度。

2、TCP数据包

在正常情况下,TCP连接确实是从三次握手开始的。三次握手是建立TCP连接的过程,它的目的是确保双方都能够正常通信。

为啥要四次挥手呢?

(1)、因为TCP连接是双工传输,单次挥手只是会是本端不发包了,但是本端还能收包。

(2)、ack会比fin快,fin需要处理完数据才会触发,所以fin与ack不会在一起。

常见数据包介绍:

三次握手数据包:【SYN】【SYN ACK】【ACK】

复位数据包(俗称拒绝包):【RST】

四次挥手数据包:【FIN】【FIN ACK】

常见TCP头部字段介绍:

SEQ:序列号字段用于标识TCP报文段中数据部分的起始位置。它表示发送方发送的字节流中的第一个字节的序号。 确认同一方向数据流,客户端给服务器发的数据包里,SEQ要是连续的(第二个SEQ等于第一个SEQ加上传一个包的len)

ACK:确认号字段用于确认接收方期望接收的下一个字节的序号。它表示接收方期望从发送方接收的下一个字节的序号。

LEN:长度字段表示TCP报文段中数据部分的长度。

(1)、ack = 对方发来数据包seq + 数据长度len(如果是三次握手的话,是ack=seq+1)

(2)、seq = 对方发来数据包的ack  = 自己发出的上一个包的seq+len

Telnet

telnet命令常用场景:测试端口映射是否有效、测试业务端口连通性。

telnet命令: telnet XX.XX.XX.XX 443(telnet 目标端口)

TCP数据包:

以上数据包中,包含了 三次握手:SYN、SYNACK、ACK、FINACK、RST

序列号信息: 190给99的发包,第一个包的seq:2718458284    1en=0    那么下一个包的seq=2718458284+199给190的发包,第一个包的seq:3432837339    1en=0    ack=2718458285那么可以知道,下一个包的seq=3432837339+1 以及下一个收到190给99的发包的seq=2718458285

3、HTTP、HTTPS数据包

HTTP工作在 TCP协议上,是一个基于TCP/IP 通信协议来传递数据(HTML 文件、图片文件、查询结果等)HTTPS 经由 HTTP进行通信,但利用SSL/TLS来加密数据包,HTTPS开发的主要目的,是提供对网站服务器的身份认证保护交换资料的隐私与完整性。

HTTP报文,又称为HTTP消息,是服务器和客户端之间交换数据的方式。

有两种类型的消息:

(1)、请求:由客户端发送用来触发一个服务器上的动作。

(2)、响应:来自服务器的应答。

常见的请求方法——增删改查:

PUT:上传文件,向服务器添加数据,可以看作增。

DELETE:删除文件。

POST:传输数据,向服务器提交数据,对服务器数据进行更新。

GET:获取资源,查询服务器资源。

常见的响应状态码:

2xx:请求正常处理完毕。

3xx:需要进行附加操作以完成请求,比如重定向请求新的URL。

4xx:服务器无法处理请求。

5xx:服务器处理请求出错。

SSL协商过程主要包括以下步骤:

(1)、客户端发送一个HTTPS请求给服务器,请求建立安全连接。

(2)、服务器收到请求后,会返回一个包含公钥证书的响应给客户端。该证书包含了服务器的公钥和其他相关信息。

(3)、客户端收到服务器的证书后,会验证证书的合法性和有效性。这包括检查证书的签名是否有效、证书是否过期、证书是否与请求的域名匹配等。

(4)、客户端生成一个随机的对称密钥,称为“Pre-MasterSecret”,并使用服务器的公钥进行加密。客户端将加密后的"Pre-Master Secret"发送给服务器。

(5)、服务器使用自己的私钥解密客户端发送的"Pre-Master Secret",得到对称密钥。客户端和服务器使用这个对称密钥来加密和解密后续的通信数据

二、tcpdump命令详解

1、tcpdump命令常用参数

tcpdump是linux系统下强大的数据包分析工具,可用来抓取相关数据,或分析相关数据包:

(1)、tcpdump命令格式:

tcpdump+参数+表达式    tcpdump    -i    eth1    host     1.1.1.1 and port 80 -nne

(2)、tcpdump常用参数:

-i:指定监听的网络接口。

-e:在输出行打印出数据链路层的头部信息。

一般是看哪个接口发出去,或者是二层看MAC地址

-c:截取指定数目的数据包。

-n:不把网络地址转换成名字。

-nn:不把端口和网络地址转换成名称。

-s:截取指定大小的数据包,s0表示完整数据包。

-w:将抓包内容保存到指定到文件,并不打印出来。

-v:输出一个稍微详细的信息,如在ip包中包括tt1和服务类型的信息。

-vv:输出详细的报文信息。

tcpdump利用表达式作为报文的过滤条件,表达式有如下三种类型关键字和逻辑运算符组成:

(1)、表示类型的关键字:host、net、port等。

(3)、表示协议的关键字:arp、icmp、udp等。

(4)、逻辑运算符:and、or、not。

2、AF“特殊”场景抓包汇总:

(1)、在透明或虚拟网线部署时,如遇数据包携带vlan头部(注:any口无法抓取带vlan头部的数据):

tcpdump -i eth1 vlan and host 1.1.1.1 -nn -c 100

(2)、抓取聚合接口数据时:

老架构:tcpdump -i bond1 host 1.1.1.1 -nn -c 100(聚合接口是几口就抓bond几,比如aggr.1)

新架构:tcpdump -i aggr.1 host 1.1.1.1 -nn -c 100

(3)、抓取拨号口数据时:

tcpdump -i eth1 pppoes and host 1.1.1.1 -nn -c 100

AF8048,想抓取在聚合2口上的目的ip符合192.168.1.1,以及除去22345端口以外的所有数据?

tcpdump -i bond2 dst host 192.168.1.1 and not port 22345 -nn -c 100

三、wireshark使用详解

1、数据包常见字段及wireshark常用技巧

ip.id 是用于唯一标识IP数据包的字段注意:数据包的三层转发,一般都不会去修改数据包的ip.id,但如果是数据被分片、经过了DN代理(一般单纯nat不会更改ip.id),那么有可能ip.id会发生变化,且同一方向数据流,ipid一般按顺序+1,如过滤同一方向数据流ipid不连续,则可能存在丢包。

使用场景:一般用于对比两个接口数据包是否一致均被正常转发。

注:如果是AF拦截并代理回复了RST,则ipid固定为:0x7051、0x7052、0x5826(用于7.X版本AF以及AC)

2、wireshark常见过滤条件

(1)、快捷过滤:无需在过滤器中手动输入条件,可以选择and/or selected。

(2)、快速过滤同一tcp、http数据流

(3)、统计会话情况,包含同一五元组数据包个数、字节总大小等信息,常用于查看抓取的数据包,流量占用情况。

使用wireshark可以很方便地对截获的数据包进行分析,包括该数据包的源地址、目的地址、所属协议等。下面列举一些常用显示过滤语法规则:

(1)、二层数据包过滤:

(2)、三层数据包过滤:

(3)、四层数据包过滤:

(4)、包长度过滤:

(5)、逻辑运算符 and、or、not

3、常见报错报文

(1)、【TCP Previous segment not captured】——丢包

在TCP同一方向传输过程中,同一台主机发出的数据段应该是连续的,即后一个包的Seq号等于前一个包的SeqtLen(三次握手和四次挥手是例外)。如果Wireshark发现后一个包的Seq号大于前一个包的Seq+Len,就知道中间缺失了一段数据。假如:缺失的那段数据在整个网络包中都找不到(即排除了乱序),就会提示 【TCP Previous segment not captured】。比如在图中,6号包的Seq号1449大于5号包的Seq+Len=1+0=1,说明中间有个携带1448字节的包没被抓到,它就是“Seq=1,Len=1448”

丢的包在wireshark中是这样类型:

(2)、【TCP 0ut-of-0rder】——乱序

在TCP同一方向传输过程中(不包括三次握手和四次挥手),同一台主机发出的数据包应该是连续的,即后一个包的Seq号等于前一个包的Seq+Len。也可以说,后一个包的Seq会大于或等于前一个包的Seq。当wireshark发现后一个包的Seq号小于前一个包的Seq+Len时,就会认为是乱序了,因此提示【TCP 0ut-of-0rder】。如图中所示,3362号包的Seq=2685642小于3360号包的Seq=2712622,所以就是乱序。

大量的丢包和乱序会导致网页卡慢(虽然丢包和乱序会触发重传,但是量大了也会有影响)

(3)、【TCP DUP ACK】——期望ACK(告诉发起方我想要什么包!!!)

当乱序或者丢包发生时,接收方会收到一些Seq号比期望值大的包。它每收到一个这种包就会Ack一次期望的seq值,以此方式来提醒发送方,于是就产生了一些重复的Ack。Wireshark会在这种重复的Ack上标记【TCP Dup ACK】。

以下图为例,服务器收到的7号包为“Seq=29303,Len=1460”,所以它期望下一个包应该是Seq Len=29303+1460=30763,没想到实际收到的却是8号包Seq=32223,说明Seq=30763那个包可能丢失了。因此服务器立即在9号包发了Ack=30763,表示“我要的是Seq=30763“。由于接下来服务器收到的10号、12号、14号也都是大于Seq=30763的,因此它每收到一个就回复一次Ack=30763,从图中可见wireshark在这些回复上都标记了【TCP Dup ACK】。

(4)、【TCP Retransmission】——超时重传

如果一个包真的丢了,又没有后续包可以在接收方触发【Dup Ack】,就不会快速重传。这种情况下发送方只好等到超时了再重传,此类重传包就会被Wireshark标上【TCP Retransmission】。以下图为例,客户端发了原始包(包号1053)之后,一直等不到相应的Ack,于是只能在100多毫秒之后重传了(包号1225)。

4、实战运用

(1)、客户反馈做了目的地址转换后测试不通,如何抓包分析?

思路:抓包看数据有没有到防火墙,到了防火墙有没有正常匹配NAT出去,分别从出接口和入接口抓取数据,确认是否存在转换,判断不通的原因。

有SYN的,没有【S.】也就是SYN ACK的包。

(2)、客户反馈做了目的地址转换后,对应端口能通,但是业务无法访问,如何抓包分?

背景:客户做了一个目的地址转换,将目的113.26.248.201的8088端口转换为服务器172.22.160.164的80端口,但配置后发现能telnet通,但是访问web页面时,无法访问到。

外网口包:看IPID,有没有AC

数据包三次握手正常交互,所以客户te1net才通,而到http的get请求时,被AC(rst的ipid=0x5826)拦截导致无法访问:而怎么判断非AF发送的RST数据包,如果非AF拦截,而是AF未监听端口也会回复rst,所以可以从数据包源目来确认发送源,如果AF转发请求,但收到了目的ip的rst,那么一般就不是AF发送的,AF拦截的话,会以AF为源,向客户端与服务器都发送rst。

如果是防火墙的rst,它会同时向服务器和客户端都发送rst,并且会以对端的身份像本端发(比如客户端发给服务器的,冒充服务器发客户端,如果是服务器发客户端,那就冒充客户度发服务器)

(3)、客户反馈内网电脑访问部分网站,经过AF后打不开?

背景:进一步了解到,客户测试发现,如果使用AF做DNS代理的话,就无法访问网站,但如果改为用公网dns服务器的话,则访问正常,且测试发现解析的结果也不一致。

内网口抓包结果:这个解析防火墙给回了,并且可以得到正确的IP

网口抓包结果:内网口证明防火墙有回,还得证明防火墙代理正常,这个时候就看DNS的53端口,之前到防火墙解析的是A记录,但是防火墙给回的4A记录,那就是防火墙没有解析出,读的是缓存,解决方法就是防火墙研发在后台调整不读缓存。

内网口可以抓到对应域名的解析结果,但是在外网口未抓到此A记录的解析;说明AF直接读取了DNS缓存,而此缓存ip,PC无法访问。

(4)、客户反馈客户端访问服务器的一个HTTP业务打开的不全,打开慢,有些模块看不到?

背景:客户端源ip:10.206.19.100,目的服务器ip:10.60.137.34。

客户端抓包:

有丢包

综上可得,在服务器给客户端回包的过程中部分数据包丢失,导致业务访问异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1877114.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

14-7 为什么你的梦想职业可能会扼杀你的梦想

照片由Johnny Cohen在Unsplash拍摄 “做好工作的唯一方法就是热爱你所做的事情。如果你还没有找到,那就继续寻找。不要安于现状。”——史蒂夫乔布斯 等一下,什么? 这不是一篇关于无聊工作的文章吗?我为什么要用一句完全违背前提…

linux中的各种指令

按文件的大小进行查找 find / usr -size 100M 在home路径下创建txt文件 touch test.txt 查看test.txt文件中的内容: cat test.txt通过指令pwd可以查看当前所处路径。 切换超级用户的指令: su - root 离开时可以使用指令:exit grep指…

SiteSucker Pro for Mac:一键下载整站,轻松备份与离线浏览!

SiteSucker Pro for Mac是一款专为苹果电脑用户设计的网站下载与备份工具🕸️。它以其强大的整站下载能力和用户友好的界面,成为了众多Mac用户备份网站、离线浏览的得力助手💻。 这款软件允许用户一键下载整个网站,包括所有的网页…

Python功能制作之使用streamlit做一个简单的WebUI

使用Streamlit创建WebUI 1. 什么是Streamlit Streamlit 是一个开源的Python库,用于快速创建美观的Web应用。 它适合数据科学家和机器学习工程师,因为它能够以最小的代码量将数据应用程序带到浏览器中。通过简单的Python脚本,可以创建交互式…

RocketMQ源码学习笔记:Broker接受消息和发送消息

这是本人学习的总结,主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Overview2、技术亮点2.1、消息写入时的自旋锁和可重入锁2.2、堆外内存机制2.2.1、Overview2.2.2、源码2.2.2.1、开启堆外内存的条件2.2.2.2、堆外内存的初始化2.2.2.3、写消息到堆外内存2…

昇思25天学习打卡营第2天|数据集Dataset

学习目标:熟练掌握mindspore.dataset mindspore.dataset中有常用的视觉、文本、音频开源数据集供下载,点赞、关注收藏哦 了解mindspore.dataset mindspore.dataset应用实践 拓展自定义数据集 昇思平台学习时间记录: 一、关于mindspore.dataset minds…

华测视频RTK,AR实景导航

华测导航视频测量RTK技术,通过融合卫星导航、惯导与视频摄影测量算法,让“所见即所测”成为现实,让测量工作变得更加智能、高效。 视频测量RTK:智能测绘的新里程碑 华测RTK的性能和广泛应用,在市场中获得了用户的认可,平均每10位用户中即有6位推荐。其视频测量功能通过引入自动…

【硬件视界2】什么是CPU和GPU?有什么区别?

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 1、CPU (中央处理器)①主要作用②特点 2、 GPU (图形处理…

HarmonyOS Next开发学习手册——弹性布局 (Flex)

概述 弹性布局( Flex )提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。常用于页面头部导航栏的均匀分布、页面框架的搭建、多行数据的排列等。 容器默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴…

Workbench密码登录登录失败

Workbench密码登录登录失败操作系统禁用了密码登录方式,会导致使用了正确的用户名和密码仍无法登录 sudo vim /etc/ssh/sshd_config 输入O进入编辑 改完后重启 systemctl restart sshd.service 登录报错 有试了几遍登上了 可能是改完还要等一会儿

ros1仿真导航机器人 基础传感器数据读取

仅为学习记录和一些自己的思考&#xff0c;不具有参考意义。 1 仿真环境 gazebo、rviz、ros1 2 机器人模型 <?xml version"1.0"?> <robot name"wpb_home_gazebo"><link name"base_footprint"><visual><origin …

第6章_libmodbus使用

文章目录 第6章 libmodbus使用6.1 libmodbus开发库6.1.1 功能概要6.1.2 源码获取6.1.3 源码阅读1. 新建工程2. 同步文件3.打开工程4. 操作示例5. 快捷键 6.1.4 libmodbus与应用程序的关系 6.2 libmodbus源代码解析6.2.1 核心函数6.2.2 框架分析与数据结构6.2.3 情景分析1. 初始…

ASUS华硕A豆14笔记本电脑I421EAYB,I421EQYB_ADOL14EA工厂模式原厂Win11系统安装包下载

适用型号&#xff1a;ADOL14EA笔记本I421EAYB、I421EQYB 链接&#xff1a;https://pan.baidu.com/s/1krU8m_lbApyUfZQo5E4cCQ?pwd0ewl 提取码&#xff1a;0ewl 华硕原装WIN11系统工厂安装包&#xff0c;带有MyASUS WinRE RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系…

磁共振图像MRI重建实现

最近涉及到了磁共振图像MRI的重建&#xff0c;网络上相关的实现比较少&#xff0c;因此进行实现记录。 磁共振图像MRI重建实现 1.配置代码环境2.MRI数据集处理3.配置数据集以及模型文件5.训练 1.配置代码环境 这里介绍一个很好的开源项目&#xff0c;git为&#xff1a; https…

【SpringMVC】_SpringMVC实现留言墙

目录 1. 需求分析 2. 接口定义 2.1 提交留言 2.2 获取全部留言 3. 响应数据 4. 服务器代码 4.1 MessageInfo 文件 4.2 MessageController 文件 5. 前端页面代码 5. 运行测试 1. 需求分析 实现如下页面&#xff1a; 1、输入留言信息&#xff0c;点击提交后&#xff0…

京东618风云再起,极空间私有云蝉联销冠,AI NAS技术绘就行业新篇章

2023年极空间私有云占据京东618全周期网络存储成交额的榜首&#xff0c;而在今年618极空间延续了往年佳绩再次斩获销冠之位&#xff0c;这已是其连续两年在京东618中夺得销售冠军。自进军NAS行业以来&#xff0c;极空间不仅深耕于智能存储技术&#xff0c;更积极投身AI研发&…

6.27-6.29 旧c语言

#include<stdio.h> struct stu {int num;float score;struct stu *next; }; void main() {struct stu a,b,c,*head;//静态链表a.num 1;a.score 10;b.num 2;b.score 20;c.num 3;c.score 30;head &a;a.next &b;b.next &c;do{printf("%d,%5.1f\n&…

JeecgBoot中如何对敏感信息进行脱敏处理?

数据脱敏即将一些敏感信息通过加密、格式化等方式处理&#xff0c;展示给用户一个新的或是格式化后的信息&#xff0c;避免了敏感信息的暴露。 一、接口脱敏注解 针对接口数据实现脱敏加密&#xff0c;只加密&#xff0c;一般此方案用于数据加密展示。 1.1 注解介绍 注解作用域…

C语言 | Leetcode C语言题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; int countPrimes(int n) {if (n < 2) {return 0;}int isPrime[n];int primes[n], primesSize 0;memset(isPrime, 0, sizeof(isPrime));for (int i 2; i < n; i) {if (!isPrime[i]) {primes[primesSize] i;}for (int j 0; j < …

stm32学习笔记---ADC模数转换器(代码部分)AD单通道/多通道

目录 第一个代码&#xff1a;AD单通道 ADC初始化步骤 ADC相关的库函数 RCC_ADCCLKConfig 三个初始化相关函数 ADC_Cmd ADC_DMACmd ADC_ITConfig 四个校准相关函数 ADC_SoftwareStartConvCmd ADC_GetSoftwareStartConvStatus ADC_GetFlagStatus ADC_RegularChannel…