zoukankan      html  css  js  c++  java
  • IP首部校验和的计算

    ip抓包结果
    0000: 00 e0 0f 7d 1e ba 00 13 8f 54 3b 70 08 00 45 00
    0010: 00 2e be 55 00 00 7a 11 51 ac de b7 7e e3 c0 a8
    0020: 12 7a

    45 00 00 2e----4表示ip版本号为ip第4版;5表示首部长度为5个32 bit字长,即为20字节;00 2e表示ip总长度为46字节,其中ip数据部分为
    26字节。
    be 55 00 00----be 55表示标识符;00 00表示3 bit标志及13 bit片偏移量;
    7a 11 51 ac----7a表示ttl值为122;11表示协议号为17的udp协议;51 ac表示16 bit首部检验和值;
    de b7 7e e3----表示32 bit 源ip地址为222.183.126.227
    c0 a8 12 7a----表示32 bit 目的ip地址为192.168.18.122

    校验和计算

    发送前
    1、先将校验和字段置为零
    2、对首部以16bit为单位求和
    0x4500 + 0x002e + 0xbe55 +0x0000 +...+0x127a = 0x3ae50
    对应的二进制: 11 1010 1110 0101 0000
    3、将产生的进位加到低四位,即checksum += (checksum >> 32)
    得到:1010 1110 0101 0011 即:0xae53
    将各位取反,得0101 0001 1010 1100

    校验和:0x51ac

    接收数据时
    1、对首部以16bit为单位求和
    0x4500 + 0x002e +...+0x51ac +...+0x127a = 0x3fffc
    (0x3 + 0xfffc) = 0xffff

    再取反,即得最终校验和:0x0000,结果为0说明IP首部合法。

  • 相关阅读:
    仿windows的嵌入式GUI系统(一)
    入群必看内容。
    嵌入式开发入门(2)
    仿windows消息机制的嵌入式GUI系统(二)(未完)
    使用硬件定时器软模拟多个定时器(8.15改进版)
    Python 文件目录操作
    C/C++ cast
    C/C++ basic
    C/C++ debug
    C++ 引用返回值
  • 原文地址:https://www.cnblogs.com/cgc0415/p/6097282.html
Copyright © 2011-2022 走看看