这种文件可以直接用wireshark来分析,也可用16进制打开来分析
1、文件的前24字节,不要管
2、接下来的16字节是:8字节的时间戳(前4位高低位的互换再乘1000可得到当前的时间精确到秒,后4位是微妙),4字节的软件抓包帧长度,4字节的网络中实际数据长度(比如42 00 00 00 表示后面帧的长度为66字节)
3、具体的帧(也就是在wireshark中能看到的数据)
3.1、6字节的目的mac地址+6字节的源mac地址+2字节的协议类型(IP包为0x0800)
3.2、20~60字节的IP头
4bit的版本0100(IPv4),0110(IPv6),4bit的头长度(单位为4字节,比如0101是5,表示5*4=20字节)
服务类型(Type of Service):长度8比特。8位 按位被如下定义 PPP DTRC0
PPP:定义包的优先级,取值越大数据越重要
000 普通 (Routine)
001 优先的 (Priority)
010 立即的发送 (Immediate)
011 闪电式的 (Flash)
100 比闪电还闪电式的 (Flash Override)
101 CRI/TIC/ECP(找不到这个词的翻译)
110 网间控制 (Internetwork Control)
111 网络控制 (Network Control)
D 时延: 0:普通 1:延迟尽量小
T 吞吐量: 0:普通 1:流量尽量大
R 可靠性: 0:普通 1:可靠性尽量大
M 传输成本: 0:普通 1:成本尽量小
0 最后一位被保留,恒定为0
IP包总长(Total Length):长度16比特。 以字节为单位计算的IP包的长度 (包括头部和数据),所以IP包最大长度65535字节。
标识符(Identifier):长度16比特。该字段和Flags和Fragment Offest字段联合使用,对较大的上层数据包进行分段(fragment)操作。路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。
标记(Flags):长度3比特。该字段第一位不使用。第二位是DF(Don't Fragment)位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF(More Fragments)位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP包的包头中将MF位设为1。
片偏移(Fragment Offset):长度13比特。表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。
生存时间(TTL):长度8比特。当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于路由环路而导致IP包在网络中不停被转发。
协议(Protocol):长度8比特。标识了上层所使用的协议。
以下是比较常用的协议号:
1 ICMP
2 IGMP
6 TCP
17 UDP
88 IGRP
89 OSPF
头部校验(Header Checksum):长度16位。用来做IP头部的正确性检测,但不包含数据部分。 因为每个路由器要改变TTL的值,所以路由器会为每个通过的数据包重新计算这个值。
起源和目标地址(Source and Destination Addresses):这两个地段都是32比特。标识了这个IP包的起源和目标地址。要注意除非使用NAT,否则整个传输的过程中,这两个地址不会改变。
至此,IP包头基本的20字节已介绍完毕,此后部分属于可选项,不是必须的部分。
3.3、tcp包(属于IP包的数据部分):
2字节的源端口号
2字节的目的端口号
4字节的序列号
4字节的确认号
首部长度(4位,单位是4字节) 保留位(6位) URG ACK PSH RST SYN FIN(每个占1位,同6位)
窗口大小(16位)
检验和(16位) 紧急指针(16位)
选项+填充
数据区
3.4、UDP包
UDP源端口号(16位)
UDP目标端口号(16位)
UDP长度(16位)
UDP校验和(16位)
数据区