实战!一次网络问题排查( 二 )


实战!一次网络问题排查

文章插图
 
Wireshark介绍
吐槽一下微信的截图,文字的样式都不能改,太难看!
2.2 Wireshark 过滤器过滤器单独拿出来说下,因为确实很有用,后面异常分析会用到 。
你导入的包可能内容很多,需要使用过滤器筛选一下,过滤器很多种过滤的规则,我列举一下常用的几种:
  • 协议过滤如果抓的包有很多种协议类型,可以输入 tcp 回车只看tcp 协议的包
  • IP 过滤例如 ip.src =https://www.isolves.com/it/wl/js/2020-05-31/= 192.168.1.23 (过滤发起地址ip)ip.dst == 12.8.0.1(过滤目标地址ip) ip == 12.0.0.1(过滤源或目的地址)
  • 端口过滤tcp.port == 4980,还可以 tcp.port == 4542 or tcp.port == 4528 加入表达式 and、or、in 等等例如:tcp.port in {80 443 8080}
  • HTTP 模式过滤http.request.method == "GET" 或者 http.request.method == "POST"
  • 报文内容过滤tcp.segment_data contains "202005190001" 过滤tcp 报文内容包括 202005190001 的报文
更多wireshark 过滤器可以参考:wireshark-filter
wireshark 的详细使用教程不是今天的重点,就介绍这二部分,后面分析数据包时会穿插着讲,安琪拉觉得大家有兴趣可以自己抽空玩一玩这个软件 。
2.3 三次握手初探安琪拉写的三次握手初探 这部分如果看不懂没关系,这里是为了介绍Wireshark写的三次握手,后面会详细解释,详细到直接从网络协议分层开始讲起,如果你这看不懂可以Diss 安琪拉 。
实战!一次网络问题排查

文章插图
 
三次握手
如果第一次看Wireshark 网络包,会一脸懵逼,看多了就会越看越喜欢 。重点看框出来的,前三行就是三次握手的过程:
  1. 上图第一行,客户端向服务端发送SYN 数据包,数据长度len 为0,Seq(随机生成包序列号)为2421858999;
  2. 上图第二行,服务端向客户端回应ACK 数据包,并且发送SYN 数据包,合并一起就是SYN + ACK 数据包,数据长度len 为0,Seq(随机生成包序列号)为1988635269,ack为2421859000 = 第一次握手Seq(2421858999)+1;
  3. 上图第三行,客户端回应客户端的SYN 数据包,发送ACK 确认数据包,Seq 为 二次握手的ack(2421859000),ack为 1988635270= 二次握手的seq(1988635269)+1;
公众号【安琪拉的博客】后面会更新一个网络系列:列举常见的网络问题,解决的思路,wireshark分析包方法等 。
3. 回顾网络协议分层、三次握手、四次挥手等网络基础知识3.1 网络协议分层在解决文章开头的异常,分析数据包之前,我们需要一些预备知识,需要一丢丢基础的网络知识 。
首先在直接看Wireshark 的包信息之前,需要来回顾一下计算机网络的知识,大家知道目前主流使用的TCP/IP 五层协议,而不是国际标准化组织(ISO)出的OSI(Open System Interconnection)七层协议 。TCP/IP协议栈如下图所示:
实战!一次网络问题排查

文章插图
 
TCP/IP五层协议
我们可以看到Wireshark 包详情就是TCP/IP 五层的信息,对比上面的图从下往上看(取每个英文单词首字母就是协议简称,例如 HTTP:Hypertext Transfer Protocol ),如下:
实战!一次网络问题排查

文章插图
 
image-20200515005055601
后面我们看 Wireshark 数据报文时,主要看TCP 所在的传输层报文 。
3.2 三次握手首先我们先看下TCP 报文的报文格式:
实战!一次网络问题排查

文章插图
 
TCP报文格式
下面把TCP 报文的各个部分做了详细说明,分析网络问题不用全看,把加重的部分关注一下就可以了 。好学的玩家可以把所有的都看了,不用记,有个概念就可以了 。
源端口号和目的端口号:各占2个字节(16位),分别写入源端口和目的端口;
序号:4字节(32位),TCP连接中字节流每个字节都按顺序编号,这个序号用于标识这个报文段 。
例如:一段报文序号seq 是201,而报文数据长度为100,下一个报文段的数据序号应该为301(201+100) 。
确认号 :4字节(32位),期望收到对方下一个报文的序号 。这个确认号是和序号seq 有点关系的,不要和ACK(状态标志位)混淆了 。
首部长度:4位,表示报文数据距离报文起始位置的长度 。保留:保留今后可以会用到 。
数据报状态标志位(非常重要),分为以下6种,二进制1 位表示一种(1代表开启 0 关闭)


推荐阅读