网络数据包解析

TCP/IP协议数据包,一般由应用层、传输层、网络层、数据链路层封装而成。

四层协议各自的作用:

  数据链路层实现了网卡接口的驱动程序。

  网络层实现了数据包的选路和转发。

  传输层为两台主机上的应用程序提供端到端(end to end)的通信。

  应用层负责处理应用程序的逻辑。

#1先封装的协议头是传输层,传输层有TCP、UDP、TLS 、DCCP 、SCTP 、RSVP 、PPTP,常用的有TCP,UDP

TCP头的结构(tcp头总长度为 20个字节+options可选选项)

(1)TCP源端口(Source Port):16位的源端口包含初始化通信的端口号。源端口和IP地址的作用是标识报文的返回地址。

(2)TCP目的端口(Destination Port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。

(3)序列号(Sequence Number):32位 TCP连线发送方向接收方的封包顺序号。

(4)确认序号(Acknowledge Number):32位 接收方回发的应答顺序号。

(5)头长度(Header Length):偏移量(4bit)和保留(4bit)总共8位  。 表示TCP头的双四字节数,如果转化为字节个数需要乘以4。

(6)保留(2bit)和标记(6bit)总共8位

 标记位: 

  URG:是否使用紧急指针,0为不使用,1为使用。

  ACK:请求/应答状态。0为请求,1为应答。

  PSH:以最快的速度传输数据。  

  RST:连线复位,首先断开连接,然后重建。

  SYN:同步连线序号,用来建立连线。

  FIN:结束连线。如果FIN为0是结束连线请求,FIN为1表示结束连线。

(7)窗口大小(Window):16位  目的机使用16位的域告诉源主机,它想收到的每个TCP数据段大小。

(8)校验和(Check Sum):16位  这个校验和和IP的校验和有所不同,不仅对头数据进行校验还对封包内容校验。

(9)紧急指针(Urgent Pointer):16位  当URG为1的时候才有效。TCP的紧急方式是发送紧急数据的一种方式。

(10)可选选项(options)24位,类似IP,是可选选项。填充8位,使选项凑足32位

UDP头的结构

源端口(2字节)

目的端口(2字节)

封报长度(2字节)

校验和(2字节)

数据

(1)源端口(Source Port):16位的源端口域包含初始化通信的端口号。源端口和IP地址的作用是标识报文的返回地址。

(2)目的端口(Destination Port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。

(3)封包长度(Length):16位  UDP头和数据的总长度。

(4)校验和(Check Sum): 16位 和TCP和校验和一样,不仅对头数据进行校验,还对包的内容进行校验。

#2、然后封装的是网络层,网络层主要是IP协议,还有ICMP协议,IGMP协议等

IP协议头(ip头总长度根据IP头的头长来计算。一般IP没有可选选项,长度为20字节,也就是对应头长等于5):

 

1-1.版本4位,表示版本号,目前最广泛的是4=B1000,即常说的IPv4;相信IPv6以后会广泛应用,它能给世界上每个纽扣都分配

       一个IP地址。

1-2.头长4位,数据包头部长度。它表示数据包头部包括多少个32位长整型,也就是多少个4字节的数据。无选项则为5(红色部分)。

  这个字段表示了IP头部的总长度,但它不是直接表示,因为它只占了4比特,最大也就15,实际的IP头部长度等于首部长度字段表示的          值乘以4,单位是字节,也就是首部最长为15×4=60字节,一般IP数据报首部都没有选择项,长度为20字节,也就是对应头长等于5。

1-3.服务类型,包括8个二进制位,每个位的意义如下:

       过程字段:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~ 7(网络控制)

       延迟字段:1位,取值:0(正常)、1(期特低的延迟)

       流量字段:1位,取值:0(正常)、1(期特高的流量)

       可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)

       成本字段:1位,取值:0(正常)、1(期特最小成本)

       保留字段:1位 ,未使用

1-4.包裹总长16位,当前数据包的总长度,单位是字节。当然最大只能是65535,及64KB。

2-1.重组标识16位,发送主机赋予的标识,以便接收方进行分片重组。

2-2.标志3位,他们各自的意义如下:

       保留段位(2):1位,未使用

       不分段位(1):1位,取值:0(允许数据报分段)、1(数据报不能分段)

       更多段位(0):1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)

2-3.段偏移量13位,与更多段位组合,帮助接收方组合分段的报文,以字节为单位。

3-1.生存时间8位,经常ping命令看到的TTL(Time To Live)就是这个,每经过一个路由器,该值就减一,到零丢弃。

3-2.协议代码8位,表明使用该包裹的上层协议,如TCP=6,ICMP=1,UDP=17等。

3-3.头检验和16位,是IPv4数据包头部的校验和。由发送端填充,接收端对其使用CRC算法检验IP数据报头部在传输过程中是否损坏。

4-1.源始地址,32位4字节,我们常看到的IP是将每个字节用点(.)分开,如此而已。

5-1.目的地址,32位,同上。

6-1.可选选项,主要是给一些特殊的情况使用,往往安全路由会当作攻击而过滤掉,普联(TP_LINK)的TL-ER5110路由就能这么做。

ICMP协议头

ICMP报文就像是IP报文的小弟,总顶着IP报文的名头出来混。因为ICMP报文是在IP报文内部的:

 

 

ICMP所有报文的前4个字节都是一样的,但是剩下的其他字节不相同。

前四个字节统一的格式:类型(8位),代码(8位),校验和(16位)

类型和代码决定了ICMP报文的类型。常见的有:

  类型8, 代码0 ==> 表示回显请求(ping请求)

  类型0, 代码0 ==> 表示回显应答(ping应答)

  类型11,代码0 ==> 超时

检验和字段:包括数据在内的整个ICMP数据包的检验和;其计算方法和IP头部检验和的计算方法一样的。

 ICMP报文具体分为查询报文差错报文(对ICMP差错报文有时需要做特殊处理,因此要对其进行区分。如:对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文,否则会出现死循环)

#3、最后封装的是数据链路层,即以太网头和FCS

以太网头(总长度为14个字节)是由  6字节的目的MAC地址 + 6字节的源MAC地址 + 2字节的类型  组成。

以太的各种类型:

以太类型

协议

0x0800

Internet协议版本4(IPv4

0x0806

地址解析协议(ARP

0x8035

反向地址解析协议(RARP

三个数值

AppleTalk(Ethertalk)

0x80f3

AppleTalk地址解析协议(AARP)

为0x8100

IEEE 802.1Q标签帧

三个数值

Novell IPX(alt)

0x8138

Novell公司

0x86DD

Internet协议版本6(IPv6

0x8819

CobraNet技术

0x88a8

提供商桥接(IEEE 802.1ad

0x8847

MPLS单播

0x8848

MPLS多播

0x8863

PPPoE发现阶段

0x8864

PPPoE会话阶段

0x888E

EAP over LAN(IEEE 802.1X

0x889A

HyperSCSI(以太网SCSI)

0x88A2

以太网ATA

0x88A4

EtherCAT协议

0x88CD

SERCOS-III

0x88D8

以太网电路仿真服务(MEF-8

0x88E5

MAC安全(IEEE 802.1AE

0x8906

以太网光纤通道

0x8914

FCoE初始化协议

0x9100

Q-in-Q的

0xCAFE

Veritas低延迟传输(LLT)

在不定长的数据字段(以太网头后面的数据)后是4个字节的帧校验序列(FCS)

 

posted on 2017-11-23 22:11  Itsad  阅读(12073)  评论(0编辑  收藏  举报

导航