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

目录

一、各协议数据包介绍

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。

客户端抓包:

有丢包

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

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于网络,你可以使用一些常用的工具和技术来诊断和解决问题。下面是一些可以使用的方法和docker镜像: 1. 检查容器网络设置:使用`docker inspect`命令查看容器的网络配置,确保容器的网络设置正确。 2. 检查网络连接:使用`ping`命令检查容器是否能够与其他主机或容器建立网络连接。你可以通过在容器中运行`ping`命令来测试网络连通性。 3. 检查端口访问:使用`telnet`或`nc`命令检查容器的端口是否能够被访问。例如,`telnet <容器IP> <端口号>`。 4. 检查网络配置:确保容器的网络配置正确,并且与主机网络配置相匹配。可以使用`ifconfig`或`ip addr`命令查看容器和主机的网络配置。 5. 使用网络诊断工具:像Wireshark这样的网络抓包工具可以帮助你分析网络流量,定位问题所在。 6. 使用专门的网络工具:有一些专门用于容器网络的工具,例如Weave Scope、Cilium等。你可以尝试使用这些工具来帮助诊断和解决问题。 对于docker镜像,你可以使用一些预先构建好的镜像来进行网络,例如: - `nicolaka/netshoot`镜像:这个镜像包含了许多常用的网络工具,如ping、telnet、dig、curl等,非常适合用于网络- `praqma/network-multitool`镜像:这个镜像也包含了一系列网络工具,可以帮助你进行网络和诊断。 以上是一些常见的方法和docker镜像,希望对你有所帮助。如果你有更具体的问题,请提供更多细节,我将尽力回答。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数通工程师小明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值