假如我获得的数据包如下所示,这里有两个数据包,一个长度590,还有一个长度110。
Packet length : 590
005dba36:00 00 5a 42 40 86 00 10 7b 3b 90 f5 08 00 45 00
005dba46:02 40 d3 2a 40 00 7f 06 08 24 85 fc 09 70 85 fc
005dba56:09 01 04 72 00 14 02 00 d5 35 9b 93 3c 5f 50 10
005dba66:21 80 f2 b7 00 00 00 43 00 00 06 00
Packet length : 110
005dde62:ff ff ff ff ff ff 00 00 e8 e3 43 52 08 00 45 00
005dde72:00 60 ba 42 00 00 80 11 60 fb 85 fc 09 58 85 fc
005dde82:09 ff 00 89 00 89 00 4c 08 35 00 cc 30 10 00 01
005dde92:00 00 00 00 00 01 20 45 4b 45 4b 45 4c 43 41 43
005ddea2:41 43 41 43 41 43 41 43 41 43 41 43 41 43 41 43
下面的分析都是一个一个来的,大家可以对照着上面的一个一个看,从头开始是意思是这样:
先看第13和14个字节分别表示帧类型(Frame Type)和帧长度(Frame Length)
判断帧类型的话使用下述算法:
IF 帧类型/帧长度 <= 1500(十进制)
IF 帧类型/帧长度字段后续第一个WORD是FFFFh
此 PACKET 是raw Ethernet 802.3
ELSE
IF 帧类型/帧长度字段后续第一个WORD是AAAAh AND Control IS 03h
此 PACKET 是Enternet SNAP
ELSE
此 PACKET 是Enternet 802.3
ENDIF
ENDIF
ELSE
此 PACKET 是Enternet II
ENDIF
从第一个字节开始:
Packet length : 590
005dba36:00 00 5a 42 40 86 00 10 7b 3b 90 f5 08 00 45 00
005dba46:02 40 d3 2a 40 00 7f 06 08 24 85 fc 09 70 85 fc
005dba56:09 01 04 72 00 14 02 00 d5 35 9b 93 3c 5f 50 10
005dba66:21 80 f2 b7 00 00 00 43 00 00 06 00
Enternet Frame 部分:
报文1
目的地址:00 00 5a 42 40 86
源地址:00 10 7b 3b 90 f5
帧类型:08 00
(Enternet II Protocol Type:IP) 这里的获得采用的就是上面一开始提到的算法
Packet length : 110
005dde62:ff ff ff ff ff ff 00 00 e8 e3 43 52 08 00 45 00
005dde72:00 60 ba 42 00 00 80 11 60 fb 85 fc 09 58 85 fc
005dde82:09 ff 00 89 00 89 00 4c 08 35 00 cc 30 10 00 01
005dde92:00 00 00 00 00 01 20 45 4b 45 4b 45 4c 43 41 43
005ddea2:41 43 41 43 41 43 41 43 41 43 41 43 41 43 41 43
Enternet Frame 部分:
报文2
目的地址:ff ff ff ff ff ff
源地址:00 00 e8 e3 43 52
帧类型:08 00
(Enternet II Protocol Type:IP) 这里的获得采用的就是上面一开始提到的算法
IP报头部分:
报文1
Version: 4
国际报头长: 5
服务类型: 08
报文长度: 02 40(576)
报文标识: d3 2a
报文标志: 40 00
生存期: 7f(117)
协议号: 06(TCP)
报头校验: 08 24
源IP地址:85 fc 09 70 (133.252.9.112)
目的IP地址:85 fc 09 01 (133.252.9.112)
现面就不一样了,报文1是TCP的数据包,而报文2是UDP的数据包,所以各个字节意义不是一样
TCP报头部分:
源端口: 04 72(1138)
目的端口:00 14(20)
序列号: 02 00 d5 35
确认号: 9b 93 3c 5f
数据偏移: 5
保留和控制为:0 10
窗口:21 80
校验和: f2 b7
紧急指针:00 00
选项: 0020:41 43 41 43 41 43
填充: 00 43 00 00 06 00
UDP报头部分:
源端口:00 89
目的端口:00 89
长度:00 4c
校验和:08 35
数据:
0000:00 cc 30 10 00 01 005dde92:00 00 00 00 00 01 20 45 4b 45
0010: 4b 45 4c 43 41 43 005ddea2:41 43 41 43 41 43 41 43 41 43
这个介绍的比较简单,如果想知道详细的内容,请去看一本叫做《TCP/IP技术大全》的书,里面还有图和详细介绍。
Packet length : 590
005dba36:00 00 5a 42 40 86 00 10 7b 3b 90 f5 08 00 45 00
005dba46:02 40 d3 2a 40 00 7f 06 08 24 85 fc 09 70 85 fc
005dba56:09 01 04 72 00 14 02 00 d5 35 9b 93 3c 5f 50 10
005dba66:21 80 f2 b7 00 00 00 43 00 00 06 00
Packet length : 110
005dde62:ff ff ff ff ff ff 00 00 e8 e3 43 52 08 00 45 00
005dde72:00 60 ba 42 00 00 80 11 60 fb 85 fc 09 58 85 fc
005dde82:09 ff 00 89 00 89 00 4c 08 35 00 cc 30 10 00 01
005dde92:00 00 00 00 00 01 20 45 4b 45 4b 45 4c 43 41 43
005ddea2:41 43 41 43 41 43 41 43 41 43 41 43 41 43 41 43
下面的分析都是一个一个来的,大家可以对照着上面的一个一个看,从头开始是意思是这样:
先看第13和14个字节分别表示帧类型(Frame Type)和帧长度(Frame Length)
判断帧类型的话使用下述算法:
IF 帧类型/帧长度 <= 1500(十进制)
IF 帧类型/帧长度字段后续第一个WORD是FFFFh
此 PACKET 是raw Ethernet 802.3
ELSE
IF 帧类型/帧长度字段后续第一个WORD是AAAAh AND Control IS 03h
此 PACKET 是Enternet SNAP
ELSE
此 PACKET 是Enternet 802.3
ENDIF
ENDIF
ELSE
此 PACKET 是Enternet II
ENDIF
从第一个字节开始:
Packet length : 590
005dba36:00 00 5a 42 40 86 00 10 7b 3b 90 f5 08 00 45 00
005dba46:02 40 d3 2a 40 00 7f 06 08 24 85 fc 09 70 85 fc
005dba56:09 01 04 72 00 14 02 00 d5 35 9b 93 3c 5f 50 10
005dba66:21 80 f2 b7 00 00 00 43 00 00 06 00
Enternet Frame 部分:
报文1
目的地址:00 00 5a 42 40 86
源地址:00 10 7b 3b 90 f5
帧类型:08 00
(Enternet II Protocol Type:IP) 这里的获得采用的就是上面一开始提到的算法
Packet length : 110
005dde62:ff ff ff ff ff ff 00 00 e8 e3 43 52 08 00 45 00
005dde72:00 60 ba 42 00 00 80 11 60 fb 85 fc 09 58 85 fc
005dde82:09 ff 00 89 00 89 00 4c 08 35 00 cc 30 10 00 01
005dde92:00 00 00 00 00 01 20 45 4b 45 4b 45 4c 43 41 43
005ddea2:41 43 41 43 41 43 41 43 41 43 41 43 41 43 41 43
Enternet Frame 部分:
报文2
目的地址:ff ff ff ff ff ff
源地址:00 00 e8 e3 43 52
帧类型:08 00
(Enternet II Protocol Type:IP) 这里的获得采用的就是上面一开始提到的算法
IP报头部分:
报文1
Version: 4
国际报头长: 5
服务类型: 08
报文长度: 02 40(576)
报文标识: d3 2a
报文标志: 40 00
生存期: 7f(117)
协议号: 06(TCP)
报头校验: 08 24
源IP地址:85 fc 09 70 (133.252.9.112)
目的IP地址:85 fc 09 01 (133.252.9.112)
现面就不一样了,报文1是TCP的数据包,而报文2是UDP的数据包,所以各个字节意义不是一样
TCP报头部分:
源端口: 04 72(1138)
目的端口:00 14(20)
序列号: 02 00 d5 35
确认号: 9b 93 3c 5f
数据偏移: 5
保留和控制为:0 10
窗口:21 80
校验和: f2 b7
紧急指针:00 00
选项: 0020:41 43 41 43 41 43
填充: 00 43 00 00 06 00
UDP报头部分:
源端口:00 89
目的端口:00 89
长度:00 4c
校验和:08 35
数据:
0000:00 cc 30 10 00 01 005dde92:00 00 00 00 00 01 20 45 4b 45
0010: 4b 45 4c 43 41 43 005ddea2:41 43 41 43 41 43 41 43 41 43
这个介绍的比较简单,如果想知道详细的内容,请去看一本叫做《TCP/IP技术大全》的书,里面还有图和详细介绍。