各种协议报头解析(以太网,IP,TCP,UDP报头)

各种协议报头解析(以太网,IP,TCP,UDP报头)

 

本篇我们将介绍各种协议的报头解析。其中包括以太网数据报头,IP数据报头,TCP数据报头,UDP数据报头。

工具/原料

  • wireshark抓包工具

方法/步骤

  1. 1

    首先我们介绍以太网数据报头的解析。其中以太网报头长度为14个字节。主要包括:目的地址占6个字节,源地址6个字节,类型2个字节。

    各种协议报头解析(以太网,IP,TCP,UDP报头)

  2. 2

    接下来我们通过wireshark进行抓包分析,进行验证以太网报头长度为14个字节。可以通过wireshark解析看到,为14个字节。

    各种协议报头解析(以太网,IP,TCP,UDP报头)

  3. 3

    下面我们介绍IP数据报头的解析。详细解析:

    版本(4位):用来标识IP协议的版本,最常见的就是4和6,分别代表IPv4和IPv6。

    首部长度(4位):长度4位。这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。该部分占4个bit位,单位为32bit(4个字节),即本区域值= IP头部长度(单位为bit)/(8*4),因此,一个IP包头的长度最长为“1111”,即15*4=60个字节。IP包头最小长度为20字节。

    服务类型(8位):长度8比特。8位 按位被如下定义 PPP DTRC0PPP:定义包的优先级,取值越大数据越重

    000 普通 (Routine)

    001 优先的 (Priority)

    010 立即的发送 (Immediate)011 闪电式的 (Flash)100 比闪电还闪电式的 (Flash Override)101 CRI/TIC/ECP(找不到这个词的翻译)110 网间控制 (Internetwork Control

    111 网络控制 (Network ControlD 时延: 0:普通 1:延迟尽量小T 吞吐量: 0:普通 1:流量尽量大R 可靠性: 0:普通 1:可靠性尽量大M 传输成本: 0:普通 1:成本尽量小0 最后一位被保留,恒定为0

    总长度(16位):此处的总长度是指首部长度和数据长度之和,单位仍然是字节。

    16bit可以表示的最大值为65535,所以IP数据报的最大长度可以到达65535字节。但由于以太网的MTU(Maximum Transmission Unit)最大为1500字节,所以如果IP协议是运行在以太网的话,就会遇到需要分片的情况。

    标志(3位):这3位中只有前2位有用,中间一位表示DF(don’t fragment),而最低位(最右侧的bit)表示MF(more fragment)。

    DF等于1的话,表示此IP数据报“不能分片”。只有在DF等于0时,才允许对其进行分片。

    MF等于1的话,表示此IP数据报后面还有分片的数据报,而MF等于0时,则表示当前的IP数据报是这一组中最后一个数据报。

    片偏移(13位):此域表示当IP数据报超过MTU而被分拆成多片后,每一片在原IP数据报中的位置。此偏移量的参照起点是原数据报的数据部分的起点。

    生存时间(8位):长度8比特。当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于路由环路而导致IP包在网络中不停被转发。

    协议(8位):标识了上层所使用的协议,以下是比较常用的协议号:

        1    ICMP    2    IGMP    6    TCP   17    UDP   88    IGRP   89    OSPF

    头部校验(16位):用来做IP头部的正确性检测,但不包含数据部分。 因为每个路由器要改变TTL的值,所以路由器会为每个通过的数据包重新计算这个值。

    源IP地址(16位):

    目的IP地址(16位):

    总共20个字节,构成了IP数据报的头部。

    各种协议报头解析(以太网,IP,TCP,UDP报头)

  4. 4

    接下来我们通过wireshark抓包,进行解析,并可以看到IP数据报头的长度为20个字节。

    各种协议报头解析(以太网,IP,TCP,UDP报头)

  5. 5

    下面我们介绍TCP协议的数据报头的解析,其长度为20个字节。详细解析:

    源端口(16位),目的端口(16位)。

    顺序号(32位),表明了发送的数据报的顺序。

    确认号(32位),希望收到的下一个数据报的***。

    TCP协议数据报头头长(4位),表明TCP头中包含多少个32位字。

    下面6位目前未用,

    ACK:ACK位置1表明确认号是合法的。如果ACK为0,那么数据报不包含确认信息,确认字段被省略。

    PSH:表示是带有PUSH标志的数据。接收方因此请求数据报一到便可送往应用程序而不必等到缓冲区装满时才传送。

    RST:用于复位由于主机崩溃或其它原因而出现的错误的连接。还可以用于拒绝非法的数据报或拒绝连接请求。

    SYN:用于建立连接。

    FIN:用于释放连接。

    窗口大小(16位),表示在确认了字节之后还可以发送多少个字节。

    检验和(16位),是为了确保高可靠性而设置的。它校验头部、数据和伪TCP头部之和。

    紧急指针(16位),它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。

    以上20个字节组成了TCP协议的基本报头。

    由此我们可以得出一个算法:普通TCP协议的总报头长度=以太网数据报头+IP数据报头+TCP协议数据报头。

    各种协议报头解析(以太网,IP,TCP,UDP报头)

  6. 6

    下面我们依然使用wireshark进行抓包分析并解析验证,可以看到TCP协议数据报头为20个字节。

    各种协议报头解析(以太网,IP,TCP,UDP报头)

  7. 7

    下面我们介绍UDP协议的数据报头。其共占8个字节。其中包括:

    源端口(2个字节),目的端口(2个字节)。

    长度(2个字节),UDP用户数据报的总长度,以字节为单位。

    检验和(2个字节)。

    由此我们可以得出结论,UDP协议的数据报总长度=以太网数据报长度+IP数据报头+UDP数据报头。

    各种协议报头解析(以太网,IP,TCP,UDP报头)

  8. 8

    下面我们再使用wireshark进行抓包验证,可以看到UDP数据报头的长度为8字节。

    各种协议报头解析(以太网,IP,TCP,UDP报头)