作者:i_dovelemon

日期:2016 / 04 / 05

来源:CSDN

主题:大小端,ICMP,校验码

引言

        最近在研究TCP/IP协议相关的内容,试着使用Wireshark抓取一些数据包,然后分析。在研究ICMP协议的时候,我需要自己构造一个发送到目的地址的ICMP Echo Request数据包。在这个数据包中,需要计算出IP协议的校验码和ICMP数据包的校验码。通过一番了解之后,特在此记录一些内容。

校验码计算方式

        数据包中的校验码的作用是为了保证在传输过程中,如果发生意外,导致数据破损的时候,我们有一种检测手段来检测数据是否损坏。不同的协议有不同的校验码计算方法。比如IP层,仅仅对IP首部的数据进行校验码的计算,而ICMP不仅需要对首部进行计算,还需要对ICMP中包含的用户数据进行计算。
        计算的方法,我们实际的捕获一个数据包,然后以实例的形式来进行讲解。
        下面是我通过Wireshark捕获到的ICMP Echo Request数据包:
图1
        上面就是一个ICMP Echo Request的数据包。我们从头开始一一分析下结构。
        数据帧:
                目标MAC地址:1C-FA-68-72-66-9E
                源MAC地址:20-68-9D-F7-7D-C1
                网络层协议:0x0800 (IP协议)
        IP首部:
                版本号:4
                首部长度:5 * 4bytes = 20 bytes
                TOS:00
                IP数据包总长度(不包括帧首部):00 3C = 60bytes
                id:0x15 A2
                标志和片位移:0x00 00
                TTL:0x40 = 60
                应用层协议类型:0x 01 (ICMP协议)
                校验码:0x E6 47
                源IP:C0 A8 01 64 == 192.168.1.100
                目标IP:7B 7D 41 4E == 123.125.65.78
ICMP首部:
                类型:0x 08 (Echo Request)
                代码:0x 00
                校验码: 0x 0A 4F
                id:0x 00 01
                序列号:0x 43 0C
        ICMP数据:
                数据:abcdefghijklmnopqrstuvwabcdefghi
        上面从头至尾,将整个数据包的结构分析了一遍。
        我们来详细的讲解下如何计算这里的ICMP中的校验码。
        从前面我们知道,计算ICMP的校验码,是要包含首部和数据的。首先将校验码置0,然后将需要计算的数据按顺序分成16bit的数据,如果不足的时候,末尾补0。然后,计算这一整串16bit数据的和。如果发生溢出,就将溢出的头部右移16bit,然后将该头部右移后的数据加上原先的尾部数据,获取一个16bit的数据;紧接着对这个结果进行二进制反码计算,得到最终的校验和。
        上面就是算法的全部,我们来实际计算下:
        08 00 + 00 00 + 00 01 + 43 0C + 61 62 + 63 64 + 65 66 + 67 68 + 69 6A + 6B 6C + 6D 6E + 6F 70 + 71 72 + 73 74 + 75 76 + 77 61 + 62 63 + 64 65 + 66 67 + 68 69 = 6F5AA (1)
        6 + F5AA = F5B0 (2)
        ~(F5B0) = 0A 4F
        然后,将上面的0A 4F填入即可。

在实际编程实现时的注意点

        由于Windows的机器的字节序为Little-endian,而在网络上传播数据的字节序为Big-endian,所以在实际编程的时候需要考虑这一点来构造16bit的值。
        如果你是构造结构体,然后转化为数据包的话,在转化的时候,需要将编译器为你自动对齐的部分过滤掉。

网络技术之数据包校验码的计算方法相关推荐

  1. 读书笔记 1.数据包分析技术与网络基础 Wireshark数据包分析实战 第3版

    1.数据包分析技术与网络基础 1.2.1 协议 发起连接 :是由客户端还是服务器发起连接?在真正通信之前必须要交换哪些信息? 协商连接参数 :通信需要进行协议加密吗?加密密钥如何在通信双方进行传输? ...

  2. 段路由SR(Segment Routing)是基于源路由理念而设计的在网络上转发数据包的一种技术架构

    一.SR背景 段路由SR(Segment Routing)是基于源路由理念而设计的在网络上转发数据包的一种技术架构. SR-MPLS可以通过多个MPLS形成路径(基于标签转发)     SRv6可以通 ...

  3. 使用perf监控Linux内核网络丢弃的数据包

    本文将使用perf监控Linux内核网络丢弃的数据包,如果还没有安装perf,请先按一下步骤安装: 根据提示,安装所需的依赖,要注意的是,内核版本不同,安装命令略有差异: sudo apt insta ...

  4. bcc校验位怎么算的_数据BCC校验码计算工具

    这是数据BCC校验码计算工具下载,获得数据BCC校验码工具,MFC开发,使用方便,输入数据16进制字符串,点击计算生成BCC码.. 软件介绍 数据BCC校验码计算工具,难免会发生错误.为了避免这种错误 ...

  5. 18位身份证号码最后一位校验码的计算方法

    介绍18位身份证号码最后一位校验码的计算方法 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. ...

  6. 利用WinPcap技术捕获数据包

    前言  随着网络入侵的不断发展,网络安全变得越来越重要,于是网络入侵取证系统的研究也变得日益重要.在网络入侵取证系统中,对网络上传送的数据包进行有效的监听即捕获包是目前取证的关键技术,只有进行高效的数 ...

  7. 网络基础:数据包,通信

    网络基础 TCP/IP四层模型 TCP/IP网路协议栈分为: 应用层(Application) 传输层(Transport) 网络层(Network) 链路层(Link) 一般在应用开发过程中,讨论最 ...

  8. java使用原始套接字技术进行数据包截获_Linux零拷贝技术,看完这篇文章就懂了...

    本文讲解 Linux 的零拷贝技术,云计算是一门很庞大的技术学科,融合了很多技术,Linux 算是比较基础的技术,所以,学好 Linux 对于云计算的学习会有比较大的帮助. 为什么需要零拷贝 传统的 ...

  9. 网络延迟和数据包丢失对网络性能的影响—Vecloud微云

    网络性能指标一般指的是延时,丢失和抖动.今天我们将探讨它们(特别是延时和数据包丢失)是如何影响应用程序性能. 几乎所有应用程序都使用TCP,即传输控制协议,将其数据从A传输到B.互联网流量的85%是T ...

最新文章

  1. Struts2和Struts1.x的全面比较
  2. 强大而优雅,API 研发管理 EOLINKER 新版正式发布!
  3. 三角形中的“叛徒”--莱洛三角形,一个神奇的存在!
  4. mysql索引原理剖析
  5. Mybatis_接口编程
  6. Mr.J---重拾Ajax(四)-- 跨域
  7. 将有格式的int解析成float
  8. gram矩阵的性质_第十七课:正交矩阵和GramSchmidt正交化——MIT线性代数课程学习笔记...
  9. How to live?
  10. hash算法总结收集
  11. 【Django 2021年最新版教程31】Jmeter安装 如何并发测试
  12. springsecurity登出的配置信息以及登出的认证效果
  13. 漫谈程序员系列:程序员到底是什么角色
  14. 功放限幅保护_功放限幅电路的制作方法
  15. Lebesgue可测函数
  16. Unity动画 代码加载动画,可复用
  17. 证明:1/n调和级数为何是发散的
  18. 爱,不留——陈光标裸捐之后
  19. SOM-TL665x核心板研发的一款TI C66x多核定点/浮点高性能DSP开发板 处理器/FLASH
  20. 【步进电机与Arduino使用教程】

热门文章

  1. 分享微信怎么做公众号报名系统_微信公众号报名链接怎么做
  2. 【java】java: -source 1.5 中不支持 diamond 运算符
  3. 数据链路层的封装-HDLC协议
  4. 常见的排序算法及java实现
  5. 万能的网格交易法你必须了解一下
  6. 前端页面几种常见的布局方式
  7. 软考-中级-网络工程师-笔记-第5章-无线通信
  8. IBC算法之SM9简介
  9. 树莓派文件服务器nas,如何使用树莓派DIY一个NAS存储服务器
  10. php 获取用户的IP