Wireshark网络抓包分析

目录

 1. 以太网协议头(数据链路层) -- 14byte

2. IP数据头(网络层) -- 20byte

3.  ARP抓包分析

3.1 ARP介绍

3.2 报文格式

3.3 抓包分析

3.3.1 先arp -d把arp表清空。

3.3.2 过滤ARP协议的数据包

3.3.3 Ping 目标IP

3.3.4 第一个数据包请求分析

3.3.5 第二个数据包应答分析

3.3.6 arp -a 查看ARP表

3.3.7 再次访问Ping 目标IP

4. ICMP抓包分析

4.1 ICMP介绍

4.2 报文格式

4.3 抓包分析

4.3.1 确定目标地址

4.3.2 第一个数据包进行分析

4.3.3 第二个数据包进行分析

4.3.4 错误诊断

5. UDP抓包分析

5.1 udp介绍

5.2 UDP协议的数据格式(传输层) -- 8byte

5.3 抓包分析

5.3.1 捕获到UDP数据包

5.3.2 物理层

5.3.3 数据链路层

5.3.4网络层

5.3.5 传输层

5.3.6 数据区

6. TCP抓包分析

6.1 tcp介绍

6.1.1 标志位

6.1.2 端口

6.1.3 TCP三次握手

6.1.4 TCP四次挥手

6.1.5 TCP概念

6.1.6 选项字段

6.1.7 过滤表达式

6.2 TCP头部结构

6.3 抓包分析

6.3.1 物理层

6.3.2 数据链路层

6.3.3 网络层

6.3.4 传输层


本文参考Wireshark网络抓包

推荐一个协议地图

1. 以太网协议头(数据链路层) -- 14byte

 

 

字段

长度

含义

DMAC

6字节

目的MAC地址,IPV4为6字节,该字段确定帧的接收者。

SMAC

6字节

源MAC地址,IPV4为6字节,该字段标识发送帧的工作站。

Type

2字节

协议类型。下表列出了链路直接封装的协议。IP协议=0x0800

Data

变长

数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输一字节信息也必须使用46字节的数据字段。

如果填入该字段的信息少于46字节,该字段的其余部分也必须进行填充。数据字段的最大长度为1500字节。

CRC

4字节

用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。

2. IP数据头(网络层) -- 20byte

 

 

字段

长度

含义

Version

4比特

4:表示为IPV4;

6:表示为IPV6。

IHL

4比特

首部长度,如果不带Option字段,则为20,最长为60,该值限制了记录路由选项。以4字节为一个单位。

Type of Service

8比特

服务类型。只有在有QoS差分服务要求时这个字段才起作用。

Total Length

16比特

总长度,整个IP数据报的长度,包括首部和数据之和,单位为字节,最长65535,总长度必须不超过最大传输单元MTU。

Identification

16比特

标识,主机每发一个报文,加1,分片重组时会用到该字段。

Flags

3比特

标志位:

图2 IP Flag字段格式

Bit 0: 保留位,必须为0。

Bit 1: DF(Don't Fragment),能否分片位,0表示可以分片,1表示不能分片。

Bit 2: MF(More Fragment),表示是否该报文为最后一片,0表示最后一片,1代表后面还有。

Fragment Offset

12比特

片偏移:分片重组时会用到该字段。表示较长的分组在分片后,某片在原分组中的相对位置。以8个字节为偏移单位。

Time to Live

8比特

生存时间:可经过的最多路由数,即数据包在网络中可通过的路由器数的最大值。

Protocol

8比特

协议:下一层协议。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。

常见值:

0: 保留Reserved

1: ICMP, Internet Control Message [RFC792]

2: IGMP, Internet Group Management [RFC1112]

3: GGP, Gateway-to-Gateway [RFC823]

4: IP in IP (encapsulation) [RFC2003]

6: TCP Transmission Control Protocol [RFC793]

17: UDP User Datagram Protocol [RFC768]

20: HMP Host Monitoring Protocol [RFC 869]

27: RDP Reliable Data Protocol [ RFC908 ]

46: RSVP (Reservation Protocol)

47: GRE (General Routing Encapsulation)

50: ESP Encap Security Payload [RFC2406]

51: AH (Authentication Header) [RFC2402]

54: NARP (NBMA Address Resolution Protocol) [RFC1735]

58: IPv6-ICMP (ICMP for IPv6) [RFC1883]

59: IPv6-NoNxt (No Next Header for IPv6) [RFC1883]

60: IPv6-Opts (Destination Options for IPv6) [RFC1883]

89: OSPF (OSPF Version 2) [RFC 1583]

112: VRRP (Virtual Router Redundancy Protocol) [RFC3768]

115: L2TP (Layer Two Tunneling Protocol)

124: ISIS over IPv4

126: CRTP (Combat Radio Transport Protocol)

127: CRUDP (Combat Radio User Protocol)

132: SCTP (Stream Control Transmission Protocol)

136: UDPLite [RFC 3828]

137: MPLS-in-IP [RFC 4023]

Header Checksum

16比特

首部检验和,只检验数据包的首部,不检验数据部分。这里不采用CRC检验码,而采用简单的计算方法。

Source Address

32比特

源IP地址。

Destination Address

32比特

目的IP地址。

3.  ARP抓包分析

3.1 ARP介绍

ARP(Address Resolution Protocol)地址解析协议,将IP地址解析成MAC地址。

ARP工作流程分请求和响应:

3.2 报文格式

arp协议是在网络层的,所以我们先解析ether,再解析arp

 

 

字段

长度(bit)

含义

Ethernet Address of destination

48比特

目的以太网地址。发送ARP请求时,为广播的MAC地址,0xFF.FF.FF.FF.FF.FF。

Ethernet Address of sender

48比特

源以太网地址。

Frame Type

16比特

表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。

Hardware Type

16比特

表示硬件地址的类型。对于以太网,该类型的值为“1”。

Protocol Type

16比特

表示发送方要映射的协议地址类型。对于IP地址,该值为0x0800。

Hardware Length

8比特

表示硬件地址的长度,单位是字节。对于ARP请求或应答来说,该值为6。

Protocol Length

8比特

表示协议地址的长度,单位是字节。对于ARP请求或应答来说,该值为4。

OP

16比特

操作类型:

1 ARP请求

2 ARP应答

3 RARP请求

4 RARP应答

Ethernet Address of sender

48比特

发送方以太网地址。这个字段和ARP报文首部的源以太网地址字段是重复信息。

IP Address of sender

32比特

发送方的IP地址。

Ethernet Address of destination

48比特

接收方的以太网地址。发送ARP请求时,该处填充值为0x00.00.00.00.00.00。

IP Address of destination

32比特

接收方的IP地址。

3.3 抓包分析

3.3.1 先arp -d把arp表清空。

arp -a查看ARP表已被清空。抓192.168.240.130的ip

3.3.2 过滤ARP协议的数据包

显示过滤器中输入:arp,过滤ARP协议的数据包。

3.3.3 Ping 目标IP

第一个包是ARP请求包,第二个包是ARP响应包。

3.3.4 第一个数据包请求分析

目标地址(Destination字段)是 Broadcast,就是广播的意思

第一处:ARP后面的括号里是 request,说明这是个请求包

第二处:源IP、源MAC、目标IP都有值,目标MAC却全是0,意思就是告诉他们:我不知道这个IP的MAC地址。

3.3.5 第二个数据包应答分析

第一处:ARP后面的括号里是 reply,说明这是个响应包

第二处:源IP、源MAC、目标IP、目标MAC都有值,接收方可以从这里获取IP对应的MAC地址。

3.3.6 arp -a 查看ARP表

ARP的学习能力:解析成功的MAC地址会被临时缓存,以节约资源。

3.3.7 再次访问Ping 目标IP

第二次访问,ARP表中已经缓存了MAC地址,所以这次ARP请求不再广播,而是直接从ARP表中获取。

4. ICMP抓包分析

4.1 ICMP介绍

        ICMP(Internet Control Message Protocol)网际报文控制协议,用于传输错误报告控制信息,对网络安全有极其重要的意义。

               例如请求的服务不可用、主机或路由不可达,ICMP协议依靠IP协议来完成任务,是IP协议的一个集成部分。

        通常不被用户网络程序直接使用,多用于ping和tracert等这样的诊断程序。

4.2 报文格式

ICMP协议是IP的一个组成部分,负责传递 。

 

字段

长度

含义

Type

1字节

消息类型:

0:回显应答报文

8:请求回显报文

Code

1字节

消息代码,此处值为0。

Checksum

2字节

检验和。

Identifier

2字节

标识符,发送端标示此发送的报文

Sequence Number

2字节

序列号,发送端发送的报文的顺序号。每发送一次顺序号就加1。

Data

可变

选项数据,是一个可变长的字段,其中包含要返回给发送者的数据。回显应答通常返回与所收到的数据完全相同的数据。

4.3 抓包分析

ping是用来测试网络连通性的命令。

一旦发出ping命令,主机会发出连续的测试数据包到网络中,在通常的情况下,主机会收到回应数据包,ping采用的是ICMP协议。

4.3.1 确定目标地址

选择192.168.240.130作为目标地址。

4.3.2 第一个数据包进行分析

报文由IP首部和ICMP报文组成。

4.3.3 第二个数据包进行分析

4.3.4 错误诊断

“Type:0,Code:0”表示报文类型为诊断报文类型请正常的包。ICMP提供多种类型的消息为源端节点提供网络额故障信息反馈,报文类型可归纳如下:

ICMP消息类型代码对应表

类型Type

代码Code

描述

0

0

回显应答(ping应答)

3

0

网络不可达

3

1

主机不可达

3

2

协议不可达

3

3

端口不可达

3

4

需要进行分片但设置不分片比特

3

5

源站选路失败

3

6

目的网络不认识

3

7

目的主机不认识

3

8

源主机被隔离(作废不用)

3

9

目的网络被强制禁止

3

10

目的主机被强制禁止

3

11

由于TOS,网络不可达

3

12

由于TOS,主机不可达

3

13

由于过滤,通信被强制禁止

3

14

主机越权

3

15

优先权中止生效

4

0

源端被关闭

5

0

对网络重定向

5

1

对主机重定向

5

2

对服务类型和网络重定向

5

3

对服务类型和主机重定向

8

0

请求回显(ping请求)

9

0

路由器通告

10

0

路由器请求告

11

0

传输期间生存时间为0

11

1

在数据报组装期间生存时间为0

12

0

坏的IP首部

12

1

缺少必须的选项

13

0

时间戳请求(作废不用)

14

0

时间戳应答(作废不用)

15

0

信息请求(作废不用)

16

0

信息应答(作废不用)

17

0

地址掩码请求

18

0

地址掩码应答

5. UDP抓包分析

5.1 udp介绍

UDP(User Datagram Protocol)用户数据报协议,提供面向事务的简单不可靠信息传送服务。

  1. 将网络数据流压缩成数据包的形式。每一个数据包的前8个字节保存包头信息,剩余的包含具体的传输数据。
  2. 虽然UDP是不可靠的传输协议,但它是分发信息的理想协议,例如在屏幕上报告股票市场、显示航空信息;
  3. 在路由信息协议RIP(Routing Information Protocol)中修改路由表、QQ聊天、迅雷、网络电话等。
  4. TCP的效率不一定比UDP低,只要窗口足够大,TCP也可以不受往返时间的约束而源源不断地传数据。

1)UDP的优势

1. UDP 协议的头长度不到TCP头的一半,所以同样大小的包里UDP携带的净数据比TCP包多。

2. 没有Seq和Ack等概念,省去了建立连接的开销,DNS解析就使用UDP协议。

2)UDP的劣势

1. 超过MTU的时候,发送方的网络层负责分片,接收方收到分片后再组装起来,这个过程会消耗资源,降低性能。

2. 没有重传机制,丢包由应用层处理,某个写操作有6个包,当有一个丢失的时候,就要将6个包重新发送。

3. 分片机制存在弱点,接收方是根据包中的“More fragments”的flag来判断是否包已接收完,1表示还有分片,0表示最后一个分片,可以组装了。

如果持续发送flag为1的UDP,接收方无法组装,就有可能耗尽内存。

5.2 UDP协议的数据格式(传输层) -- 8byte

字段

长度

描述

Source Port

2字节

标识哪个应用程序发送(发送进程)。

Destination Port

2字节

标识哪个应用程序接收(接收进程)。

Length

2字节

UDP首部加上UDP数据的字节数,最小为8。

Checksum

2字节

覆盖UDP首部和UDP数据,是可选的。

data octets

变长

UDP负载,可选的。

5.3 抓包分析

5.3.1 捕获到UDP数据包

5.3.2 物理层

表示这是第1262帧数据报的详细信息。其中包的大小为2528个字节

5.3.3 数据链路层

表示以太网帧头部信息。源MAC和目标MAC地址

5.3.4网络层

5.3.5 传输层

5.3.6 数据区

6. TCP抓包分析

6.1 tcp介绍

TCP(Transmission Control Protocol)传输控制协议,一种面向连接、可靠、基于IP的传输层协议,主要目的是为数据提供可靠的端到端传输。

在OSI模型的第四层工作,能够处理数据的顺序和错误恢复,最终保证数据能够到达其应到达的地方。

6.1.1 标志位

SYN: 同步,在建立连接时用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。

FIN: 终止,FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。

ACK: 确认,ACK = 1时代表这是一个确认的TCP包,取值0则不是确认包。

DUP ACK:重复,重复确认报文,有重复报文,一般是是丢包或延迟引起的,从这个报文看应该是丢包了。

URG:紧急,当URG=1时,表示报文段中有紧急数据,应尽快传送

PSH:推送,当发送端PSH=1时,接收端尽快的交付给应用进程

RST:复位,当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接

6.1.2 端口

客户端与不同服务器建立连接时,源端口和目标端口可不同。

6.1.3 TCP三次握手

 

6.1.4 TCP四次挥手

TCP四次断开,例如关闭页面的时候就会断开连接

 

6.1.5 TCP概念

1. 发送窗口

无法简单的看出发送窗口的大小,发送窗口会由网络因素决定。发送窗口定义了一次发的字节,而MSS定义了这些字节通过多少个包发送。

2. 拥塞窗口(cwnd)

描述源端在拥塞控制情况下一次最多能发送的数据包的数量。

在发送方维护一个虚拟的拥塞窗口,并利用各种算法使它尽可能接近真实的拥塞点。

网络对发送窗口的限制,就是通过拥塞窗口实现的。

3. 在途字节数(bytes in flight)

已经发送出去,但尚未被确认的字节数。

在途字节数 = Seq + Len - Ack

其中Seq和Len来自上一个数据发送方的包,而Ack来自上一个数据接收方的包。

4. 拥塞点(congestion point)

发生拥塞时候的在途字节数就是该时刻的网络拥塞点。

先从Wireshark中找到一连串重传包中的第一个,再根据该Seq找到原始包最后计算该原始包发送时刻的在途字节数。

5. 慢启动

RFC建议初始拥塞窗口发送2、3、或4个MSS,如果发出去的包都能得到确认,则表明还没到拥塞点,可以收到n个确认增加n个MSS

6. 拥塞避免

慢启动持续一段时间后,拥塞窗口达到一个较大的值,就得放慢RFC建议在每个往返时间增加1个MSS,比如发了16个MSS全部确认,那么就增加到17个MSS

7. 超时重传

发出去的包在等待一段时间(RTO)后,没有收到确认,就只能重传了

8. 快速重传(Fast Retransmit)

不以时间驱动,而以数据驱动重传。如果包没有连续到达,就ACK最后那个可能被丢了的包,如果发送方连续收到3次相同的ACK,就重传。

9. SACK(Selective Acknowledgment)

选择性确认重传,ACK还是Fast Retransmit的ACK,SACK则是汇报收到的数据,在发送端就可以根据回传的SACK来知道哪些数据到了,哪些没有到。

10. 延迟确认(Delayed ACK)

如果收到一个包后暂时没什么数据发给对方,那就延迟一段时间再确认。假如这段时间恰好有数据要发送,那数据和确认信息可以在一个包中发送。

11. LSO

LSO拯救CPU而出的创意,为了缓解CPU的压力,把它的一部分工作外包给了网卡,比如TCP的分段。

启用LSO之后,TCP层就可以把大于MSS的数据块直接传给网卡,让网卡负责分段。

比如“Seq=348586,Len=2776”,被网卡分为“Seq=348586,Len=1388”和“Seq=349974,Len=1388”两个包。

在发送端抓包相当于站在CPU角度,只看到一个分段前的大包,而接收端就可以看到两个包。

所以才会出现只见重传包,不见原始包的情况。

12. Nagle算法

在发出去的数据还没有被确认之前,假如又有小数据生成,那就把小数据收集起来,凑满一个MSS或等收到确认后再发送。

13. Vegas算法

通过监控网络状态来调整发包速度。

当网络状态良好时,数据包的RTT比较稳定,这时可以增大拥塞窗口;

当网络开始繁忙时,数据包开始排队,RTT就会变大,这时就减小拥塞窗口。

6.1.6 选项字段

PTR(Pointer Record):指针记录,PTR记录解析IP地址到域名

TTL(Time to live)

存活时间,限制数据包在网络中存在的时间,防止数据包不断的在IP互联网络上循环,初始值一般为64,每经过一个路由减去1。

通过TTL过滤运营商劫持包,假的包是抢先应答的,所以和真实包的TTL可能不同(例如ip.ttl == 54)

Seq:数据段的序号,当接收端收到乱序的包,就能根据此序号重新排序,当前Seq等上一个Seq号与长度相加获取到

Len:数据段的长度,这个长度不包括TCP头

Ack:确认号,接收方向发送方确认已经收到了哪些字节

RTT(Round Trip Time):也就是一个数据包从发出去到回来的时间

RTO(Retransmission TimeOut):超时重传计数器,描述数据包从发送到失效的时间间隔,是判断数据包丢失与否及网络是否拥塞的重要参数

MTU(Maximum Transmit Unit):最大传输单元

MSS(Maximum Segment Size):最长报文段,TCP包所能携带的最大数据量,不包含TCP头和Option。一般为MTU值减去IPv4头部(至少20字节)和TCP头部(至少20字节)得到。

Win(Window Size):声明自己的接收窗口

TCP Window Scale:窗口扩张,放在TCP头之外的Option,向对方声明一个shift count,作为2的指数,再乘以TCP定义的接收窗口,得到真正的TCP窗口

DF(Don't fragment):在网络层中,如果带了就丢弃没带就分片

MF(More fragments):0表示最后一个分片,1表示不是最后一片

6.1.7 过滤表达式

握手请求被对方拒绝:tcp.flags.reset === 1 && tcp.seq === 1

重传的握手请求:tcp.flags.syn === 1 && tcp.analysis.retransmission

过滤延迟确认:tcp.analysis.ack_rtt > 0.2 and tcp.len == 0

6.2 TCP头部结构

字段

长度

含义

Source Port

16比特

源端口,标识哪个应用程序发送。

Destination Port

16比特

目的端口,标识哪个应用程序接收。

Sequence Number

32比特

序号字段。TCP链接中传输的数据流中每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。

Acknowledgment Number

32比特

确认号,是期望收到对方的下一个报文段的数据的第1个字节的序号,即上次已成功接收到的数据字节序号加1。只有ACK标识为1,此字段有效。

Data Offset

4比特

数据偏移,即首部长度,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,以32比特(4字节)为计算单位。最多有60字节的首部,若无选项字段,正常为20字节。

Reserved

6比特

保留,必须填0。

URG

1比特

紧急指针有效标识。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

ACK

1比特

确认序号有效标识。只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。

PSH

1比特

标识接收方应该尽快将这个报文段交给应用层。接收到PSH = 1的TCP报文段,应尽快的交付接收应用进程,而不再等待整个缓存都填满了后再向上交付。

RST

1比特

重建连接标识。当RST=1时,表明TCP连接中出现严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立连接。

SYN

1比特

同步序号标识,用来发起一个连接。SYN=1表示这是一个连接请求或连接接受请求。

FIN

1比特

发端完成发送任务标识。用来释放一个连接。FIN=1表明此报文段的发送端的数据已经发送完毕,并要求释放连接。

Window

16比特

窗口:TCP的流量控制,窗口起始于确认序号字段指明的值,这个值是接收端正期望接收的字节数。窗口最大为65535字节。

Checksum

16比特

校验字段,包括TCP首部和TCP数据,是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。

Urgent Pointer

16比特

紧急指针,只有当URG标志置1时紧急指针才有效。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。

Options

可变

选项字段。TCP协议最初只规定了一种选项,即最长报文段长度(数据字段加上TCP首部),又称为MSS。MSS告诉对方TCP“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节”。

新的RFC规定有以下几种选型:选项表结束,无操作,最大报文段长度,窗口扩大因子,时间戳。

窗口扩大因子:3字节,其中一个字节表示偏移值S。新的窗口值等于TCP首部中的窗口位数增大到(16+S),相当于把窗口值向左移动S位后获得实际的窗口大小。

时间戳:10字节,其中最主要的字段是时间戳值(4字节)和时间戳回送应答字段(4字节)。

选项确认选项:

Padding

可变

填充字段,用来补位,使整个首部长度是4字节的整数倍。

data

可变

TCP负载。

6.3 抓包分析

6.3.1 物理层

表示这是第1300帧数据报的详细信息。其中包的大小为11472个字节

6.3.2 数据链路层

表示以太网帧头部信息。源MAC和目标MAC地址

6.3.3 网络层

6.3.4 传输层

 推荐一个不错的学习网站 C/C++后台高级服务器https://ke.qq.com/course/417774?flowToken=1010783

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值