数据包分析笔记(一)

前言

最近看了一个wireshark数据包分析的系列网课,算是……重温一下计网网络协议的一些知识。简单记录一下知识点,写给自己看的可能比较杂乱,访客(别做梦了你哪来的访客hhh)就见谅了。

第一章 基础篇

1.认识wireshark的界面

packet detail中需注意的几个字段
  • 物理层帧的结构:
    • Protocols in frame:包含该帧中各层次协议。
    • Coloring Rule Name:着色规则名称(?)
  • 数据链路层结构:
    • Destination/Source:目的/源MAC地址(前三个字节为厂商信息)
  • 物理层数据帧的情况
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Frame 3934: 310 bytes on wire (2480 bits), 310 bytes captured (2480 bits) on interface 0
# 3934号帧,线路上有310个字节,实际捕获310个字节
Interface id: 0 (\Device\NPF_{EF10E4D3-713B-4239-8786-300C825A9D3F})
# 接口id
Encapsulation type: Ethernet (1)
# 封装类型
Arrival Time: Nov 26, 2015 11:54:10.987177000 中国标准时间
# 捕获日期和时间
[Time shift for this packet: 0.000000000 seconds]
Epoch Time: 1448510050.987177000 seconds
[Time delta from previous captured frame: 0.014178000 seconds]
# 当前数据包与前一个数据包的时间间隔
[Time delta from previous displayed frame: 0.311034000 seconds]
[Time since reference or first frame: 10.449670000 seconds]
# 当前数据包与第一个数据包的时间间隔
Frame Number: 3934
# 帧序号
Frame Length: 310 bytes (2480 bits)
# 帧长度
Capture Length: 310 bytes (2480 bits)
# 捕获长度
[Frame is marked: False]
# 此帧是否做了标记:否
[Frame is ignored: False]
# 此帧是否被忽略:否
[Protocols in frame: eth:ethertype:ip:tcp:http:image-gif]
# 帧内封装的协议层次结构
[Number of per-protocol-data: 1]
[Hypertext Transfer Protocol, key 0]
[Coloring Rule Name: HTTP]
# 着色标记的协议名称
[Coloring Rule String: http || tcp.port == 80 || http2]
着色规则显示的字符串
  • 数据链路层以太网帧头部的信息
1
2
3
4
5
6
7
Ethernet II, Src: Qihoo360_61:0b:0c (d0:fa:1d:61:0b:0c), Dst: Giga-Byt_d4:be:c9 (94:de:80:d4:be:c9)
Destination: Giga-Byt_d4:be:c9 (94:de:80:d4:be:c9)
# 目标MAC地址
Source: Qihoo360_61:0b:0c (d0:fa:1d:61:0b:0c)
# 源MAC地址
Type: IP (0x0800)
# 需要说明的是,为什么上述的源MAC地址以及目标MAC地址的开头明明是“d0:fa:1d”以及“94:de:80”,但是Wireshark上显示出来的却是“Qihoo360”以及“Giga-Byt”呢?这是因为MAC地址的前3个字节表示厂商。而“d0:fa:1d”以及“94:de:80”被分配给了奇虎以及技嘉公司。这是全球统一标准,所以Wireshark干脆显示出厂商名称了。
  • 网络层IP包的头部信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Internet Protocol Version 4, Src: 220.181.7.190 (220.181.7.190), Dst: 192.168.0.14 (192.168.0.14)
Version: 4
# 互联网协议IPv4
Header Length: 20 bytes
# IP包头部的长度
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00:
Not-ECT (Not ECN-Capable Transport))
# 差分服务字段
Total Length: 296
# IP包的总长度
Identification: 0x2863 (10339)
# 标志字段
Flags: 0x02 (Don't Fragment)
# 标记字段
Fragment offset: 0
# 分片偏移
Time to live: 49
# 生存期
Protocol: TCP (6)
# 当前数据包所封装的上层协议为TCP协议
Header checksum: 0x7b43 [validation disabled]
# 头部数据的校验和
Source: 220.181.7.190 (220.181.7.190)
# 源IP地址
Destination: 192.168.0.14 (192.168.0.14)
# 目标IP地址
  • 传输层TCP数据段的头部信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Transmission Control Protocol, Src Port: 80 (80), Dst Port: 2488 (2488), Seq: 422, Ack: 3024, Len: 256
Source Port: 80 (80)
# 源端口号
Destination Port: 2488 (2488)
# 目标端口号
[Stream index: 16]
[TCP Segment Len: 256]
Sequence number: 422 (relative sequence number)
# 序列号(相对序列号)
[Next sequence number: 678 (relative sequence number)]
# 下一个序列号(相对序列号)
Acknowledgment number: 3024 (relative ack number)
# 确认序列号
Header Length: 20 bytes
# 头部长度
.... 0000 0001 1000 = Flags: 0x018 (PSH, ACK)
# TCP标记字段
Window size value: 162
# 流量控制的窗口大小
Checksum: 0x6fc4 [validation disabled]
# TCP数据段的校验和

2.Wireshark的实用表格

  • 常用统计功能
    • 各层通信均需要相应的端点,从statistics菜单——>endpoints中可以查看各层的端点。
    • statistics——>conversion可以查看数据包中的会话信息。
    • statistics ——>Protocol Hierarchy可以查看协议的分层统计信息。从协议种类及占比中可以分析用户特征。
  • GeoLiteCity插件可以在endpoint 中解析出IP地址的地理位置,并可以绘制地点图。
  • 最活跃的通信端点不一定包含了流量最大的会话。

3.Wireshark的图形显示

​ 图形能够直观地显示数据通信特征,和表格共同使用,有效辅助分析,以下功能在statistics菜单中。

  • IO Graphs:分析网络吞吐量,可以利用filter来获取不同特征的吞吐量信息。
    • 巧妙选择filter可以分析网络中的很多问题。例如:
      • tcp.analysis.duplicate_ack:tcp重发确认包
      • tcp.analysis.lost_segment:tcp丢失的包
      • tcp.analysis.retransmission:tcp重发包
  • Round Trip Time Graph:分析数据包的往返时间,可用于分析网络中延迟等问题。
  • Flow Graph:数据流图,将连接可视化,并且将一段时间中的数据流显示出来。数据流图一般以列的方式将主机之间的连接显示出来,并将数据组织到一起——如直观分析三次握手。

4.Wireshark的高级特性

协议解析与重新解码

​ Wireshark会根据数据包特征自动选择协议解析器,但当数据包采用了与标准不同的协议格式时,可能会导致解析错误。例如:若某ftp数据包使用了HTTPS常用的443端口,则易被误解析为SSL协议。

​ 此时需要右击数据包,设置decode as为合适解析器,从而重新解码分析。

​ Decode as——>Show current 可以显示最近的解析记录。

TCP流的跟踪

​ 右键——>跟踪TCP流,可以看到tcp连接两端的通信详情。

分析数据包长度

​ 统计——>数据包长度——>create state可以查看数据包长度分布。

​ 可通过分析数据包长度分布判断网络中的行为(如数据传输)

  • 常见数据包长度范围及其特征:
    • 1280-2559:包含应用层数据传输等。
    • 40-79:TCP控制数据包。
专家分析

​ Analyze——>Expert Infos 专家信息,可以直观地看到数据通信中的错误特征等。

  • 包含Error、Warning、Notes、Chats、Details等等分类:

    • Error:数据包里面或者解析器解析时出现的错误。
    • Warnings:不正常通信中的异常数据包。
    • Notes:正常通信中的异常数据包。
    • Chats:网络通信的基本信息。
    • Details:显示数据包的详细信息。
    • Packet Comments:数据包的描述信息。

5.Wireshark的命令行模式

命令行模式优势
  • 可以使用辅助工具(awk,grep等)
  • 常用工具:tshark、capinfos
利用命令行模式进行调优分析

​ 进行性能调优主要是对Summary(概述信息)、Service Response Time(服务响应时间)以及Expert Info Composite(专家信息整合)的内容进行分析。

命令行工具的常用命令
命令行工具与第三方辅助工具的使用方法

第二章 协议篇

6.ARP协议的数据包分析

ARP基本概念
  • RFC-826文档记录了ARP协议的标准。
  • ARP数据包分为请求(Request,广播)和响应(Reply,单播)两种。
  • 每一个主机都有一个ARP缓存表,在接收到请求和响应包时更新。
ARP数据包分析
  • 需注意的字段:
    • Opcode:操作码,1-请求;2-响应
    • Target MAC address:请求中为全0(未知),响应中为响应主机的MAC地址。
  • 免费ARP(?是Gratuitous ARP的翻译,私以为应翻译为无由(不经请求的)ARP?)
    • 当某主机的IP地址发生变化,则会主动(不经过请求)向网络中广播(链路层Dst:ff:ff:ff:ff:ff:ff)新的地址映射以便其他主机更新缓存表。
    • 数据包特征:
      • Sender MAC address:本机MAC地址
      • Sender IP address 和Target IP address:相同,均为本机目前的IP地址
      • Target MAC address:为全0

7.Wireshark眼中的IP协议

TTL与IP分片概念及其分析
  • TTL:数据包被丢弃前能经过的最大路由数目。在数据包创建时确定,一般每经过一个路由-1,为0时丢弃数据包。
  • IP数据包分片:将数据流分为更小片段,使其可以在跨越不同类型的网络时可靠传输。由第二层使用的网络类型的MTU决定。
    • Flag字段为1(more fragments)时为首个或中间的分片。
    • fragment offset为分片偏移字段。
    • Flag为0时表示不分片或是最后一个分片。
    • 同一个数据流的几个分片,其Identification字段相同。
捕获IP数据包
  • 在Capture菜单——>options中可以设置Capture Filter来为捕获数据包添加过滤器。

8.TCP与UDP协议详解

TCP、UDP基本概念
  • TCP——Transmission Control Protocol
TCP三次握手、断开及重置
  • 三次握手:略
  • 断开:略
  • 重置:正常情况下连接会正常断开,但由于某些原因出现连接意外中断或连接被拒绝时,发送RST标志位为1的数据包可以表示连接终止
TCP与UDP数据包分析
  • Edit——>Preferences——>User Interface——>Name Resolution,启用Resolve transport names项,可以解析常用端口及相应服务。
  • Edit——>Preferences——>Protocols——>TCP, 启用Analyze TCP sequence numbers项,可以将TCP的数据包的seq值解析为从0开始的相对值;关闭则为绝对值。
  • Edit——>Find Packet可以对特定数据包进行搜索和过滤。
  • 右击数据包——>Colorize Conversation,可以对相关联(如同一TCP连接)的数据包进行着色。

9.TCP中也有一个窗口

Ack、Seq、Len的概念及关系
  • 两端发送数据包的Seq值分别计算,下一个包的Seq = 上一个包Seq+上一个包Len
  • 接收方回复的Ack值 = 其接收到的上一个包的Seq+其接收到的上一个包的Len = 发送方的下一个Seq值
TCP滑动窗口
TCP零窗口的概念及用途
  • 当服务器因为某些原因不能接收数据时,会在ack包中更新窗口大小为0,客户端收到后会停止传输数据,只定期发送保活的数据包,等待服务器再次更新窗口大小。
TCP滑动窗口数据包分析
  • TCP数据包中window size value(win)字段为窗口大小。
  • 窗口不断减小表示延迟不断增加。
  • 启用Analyze TCP sequence numbers项,可以解析出并标明zero window和keep-alive数据包。

10.TCP重传技术的研究

TCP重传原理
  • Retransmission Time Out(RTO)重传超时。
  • 重传极限次数:Windows——5次,Linux——15次。
快速重传(Fast Retransmission)流程
  • 当发送方累计收到3个相同seq的ack数据包时,触发快速重传机制,重新发送该seq号对应的数据包。
重传机制的分析
  • 当多个数据包丢失时如何重传?

    • 情景:1~8共8个包,其中2、5丢失,其余正常。
    • 方案:
    1. 收到三个ack2后,重传2及以后的所有数据包。简单但效率低。
    2. (NewReno——rfc2582、3782)数据包2被重传后,接收方再发送一个ack5,待5重传成功后,接收方发送ack9(即下一个要接收的数据包)。在丢包量大的时候会占用多个往返时间。
    3. SACK ——rfc2018)接收方在请求重传2号包时,附带已接收的所有包的序号。

11.用途广泛的ICMP协议

ICMP基本概念
  • Internet Control Message Protocol,因特网控制报文协议
  • 利用IP协议进行传输
  • 用于对网络的检测和诊断,亦可用于对网络的攻击(ICMP dos等)
ping及tracert数据包异同
  • ping
    • 分Echo request(Type=8,code=0) 和Echo reply(Type=0, code=0)
    • Identifier字段用于匹配对应的request和reply
    • Data数据域内为随机字符串,对应的一对request和reply,其data中内容相同。
    • 对于攻击者,Data内容可用于推断目标主机操作系统,亦可在此处放置用于反向连接的数据位。
  • tracert
    • 起始同样发送Echo request 数据包,但其TTL=1。
    • 上述数据包到达的第一个设备会返回TTL exceed响应(Type=11,code=0),且该响应数据包中还会包含上述请求包的ICMP头部信息,故称为ICMP双头包,在网络故障检修中很有用。
    • 将上述两过程重复数次后,发送方发送TTL+1的request数据包并获得响应。
    • 重复以上过程并递增TTL,直至数据包可以正常到达目的地。

(未完待续……)