IP、ICMP、TCP和UDP校验和计算

这篇具有很好参考价值的文章主要介绍了IP、ICMP、TCP和UDP校验和计算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 前言

        计算网络数据包的校验和是机器自动完成,不需要手动计算。但是正因为如此,我们往往不会去深究校验和到底是怎么计算的,留下这一块盲区。虽然书上有大致介绍计算的方法,但是,“纸上得来终觉浅,绝知此事要躬行”,本文将详细演示IP、ICMP、TCP、UDP的校验和的计算步骤。

二. IP数据包头部校验和       

        我们知道,IP数据包头部的校验和只是计算头部的数据,所以,计算只需要关注IP头部,抓包示例如下:

icmp校验和计算,网络协议,Linux内核学习总结,tcp/ip,udp,网络

        如上图可知,IP头部的校验和是0xF89A,计算过程如下:

1. 取IP头部数据

45 04 00 34 f7 6a 40 00 33 06 f8 9a 6a 0b 2b 9e c0 a8 01 69

2. 将校验和部分先置为00 00

 45 04 00 34 f7 6a 40 00 33 06 00 00 6a 0b 2b 9e c0 a8 01 69

3. 将数据合并为16位一组并相加

4504+0034+f76a+4000+3306+0000+6a0b+2b9e+c0a8+0169=30762

4. 将结果的高16位与低16位相加

762 + 3 = 765

5. 将0xFFFF减上一步结果得到校验和

0xFFFF - 0x765 = 0xF89A

6. 与抓包的校验和比较是一致的 

三. ICMP数据包校验和

        ICMP的校验和是包括:ICMP头部和ICMP数据的,也就是ICMP的全部数据的校验和,抓包示例如下:

icmp校验和计算,网络协议,Linux内核学习总结,tcp/ip,udp,网络

        如上图可知,ICMP的校验和是0x2B7D,计算过程如下:

1. 取ICMP全部数据

08 00 2b 7d 08 83 00 00 f3 f2 d0 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

2. 将校验和部分置为00 00

08 00 00 00 08 83 00 00 f3 f2 d0 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

3. 将数据合并为16位一组并相加,后面的00忽略

0800+0000+0883+0000+f3f2+d00c=1d481

4. 将结果的高16位与低16位相加

d481 + 1 = d482

5. 将0xFFFF减上一步结果得到校验和

0xFFFF - 0xD482 = 0x2B7D

6. 与抓包的校验和比较是一致的 

四. TCP数据包校验和

        TCP的数据包的校验和计算的数据来源包括三部分:TCP伪首部和TCP首部和TCP数据。TCP计算校验和引入了伪首部,包括后面介绍的UDP。如下图所示,TCP伪首部包括:源地址(32 bit),目标地址(32 bit),Zeros(8 bit),Protocol(8 bit),TCP Length(16 bit)

icmp校验和计算,网络协议,Linux内核学习总结,tcp/ip,udp,网络

        TCP的伪首部的提取需要查看IP头部数据,例如,源地址,目标地址,TCP协议号(6),TCP数据长度,抓包示例如下:

icmp校验和计算,网络协议,Linux内核学习总结,tcp/ip,udp,网络

        由上图可知,源地址是106.11.43.158(6a 0b 2b 9e), 目标地址192.168.1.105(c0 a8 01 69),TCP的协议号是6,TCP数据长度是IP数据总长度减去IP头部52-20=32(0x20)。接下来是TCP头部和数据部分抓包示例:

icmp校验和计算,网络协议,Linux内核学习总结,tcp/ip,udp,网络

        由上图可知,TCP的校验和是0x755E,计算过程如下:

1. 取伪首部的数据

Source Address   Destination Address     Zeros   Protocol   TCP Length

6a 0b 2b 9e          c0 a8 01 69                   00          06              00 20

2. 将伪首部数据合并为16位一组并相加

6a0b+2b9e+c0a8+0169+0006+0020=157E0

3. 取TCP数据

01 bb de c0 d3 86 24 c6 0e 5f 8d 90 80 10 00 0e 75 5e 00 00 01 01 05 0a 0e 5f 8d 8f 0e 5f 8d 90

4. 将校验和部分置为00 00

01 bb de c0 d3 86 24 c6 0e 5f 8d 90 80 10 00 0e 00 00 00 00 01 01 05 0a 0e 5f 8d 8f 0e 5f 8d 90

5. 将TCP数据合并为16位一组并相加

01bb+dec0+d386+24c6+0e5f+8d90+8010+000e

+0000+0000+0101+050a+0e5f+8d8f+0e5f+8d90=432BC

6. 将伪首部和TCP数据的相加结果相加

157E0 + 432BC = 58A9C

7. 将上一步结果的高16位和低16位相加

8A9C + 5 = 8AA1

8. 将0xFFFF减8AA1得到校验和

0xFFFF - 0x8AA1 = 755E

9. 与抓包的校验和比较是一致的 

五. UDP数据包校验和

        UDP数据校验和和TCP数据的校验和计算的方法是一致的,包括:UDP伪首部,UDP头部和UDP数据

icmp校验和计算,网络协议,Linux内核学习总结,tcp/ip,udp,网络

        UDP的伪首部的提取需要查看IP头部数据,例如,源地址,目标地址,UDP协议号(17),UDP数据长度,抓包示例如下:

icmp校验和计算,网络协议,Linux内核学习总结,tcp/ip,udp,网络

        由上图可知,源地址是192.168.1.40(c0 a8 01 28), 目标地址111.230.189.174(6f e6 bd ae),UDP的协议号是17 (0x11),UDP数据长度是IP数据总长度减去IP头部76-20=56(0x38)。接下来是UDP头部和数据部分抓包示例:

icmp校验和计算,网络协议,Linux内核学习总结,tcp/ip,udp,网络

        由上图可知,UDP的校验和是0x3AF9,计算过程如下:

1. 取伪首部的数据

Source Address   Destination Address     Zeros   Protocol   TCP Length

c0 a8 01 28            6f e6 bd ae                   00          11            00 38

2. 将伪首部数据合并为16位一组并相加

c0a8+0128+6fe6+bdae+0011+0038=1EFAD

3. 取UDP头部和数据部分

89 34 00 7b 00 38 3a f9 23 00 08 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 76 0c e9 2c 37 38 89 de

4. 将校验和部分置为00 00

89 34 00 7b 00 38 00 00 23 00 08 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 76 0c e9 2c 37 38 89 de

5. 将UDP数据合并为16位一组并相加

8934+007b+0038+0000+2300+0820+0000+0000+0000+0000+0000+0000+0000

+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+760c+e92c

+3738+89de = 2D555

6. 将伪首部和UDP数据的相加结果相加

1EFAD + 2D555 4C502

7. 将上一步结果的高16位和低16位相加

C502 + 4 = C506

8. 将0xFFFF减C506得到校验和

0xFFFF - 0xC5063AF9

9. 与抓包的校验和比较是一致的 

六. 总结

        本文主要介绍了IP、ICMP、TCP和UDP的计算方式,并附带介绍了TCP和UDP的伪头部的概念和组成。文章来源地址https://www.toymoban.com/news/detail-694094.html

到了这里,关于IP、ICMP、TCP和UDP校验和计算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机网络】IP协议与ICMP协议分析

    1、分析IP协议与IP数据报; 2、分析ICMP协议。 与因特网连接的计算机,操作系统为Windows,安装有Wireshark、IE或其他浏览器。 (1)在命令提示符中,利用ipconfig -all查看自己主机的ip及MAC地址,查看自己的网关ip地址并 记录 。(物理地址 : C8-D9-D2-19-FC-4E,IPv4 地址: 10.0.132.12,默

    2024年02月05日
    浏览(30)
  • 第四天 ICMP、ARP、TCP、UDP协议

    ICMP用来传递差错、控制、查询等信息。 ICMP是TCP/IP协议簇的核心协议之一,它用于在IP网络设备之间发送控制报文,传递差错、控制、查询等信息。 ICMP Echo Request和ICMP Echo Reply分别用来查询和响应某些信息,进行差错检测。 ICMP Echo消息常用于诊断源和目的地之间的网络连通性

    2024年04月16日
    浏览(27)
  • 计算机网络——Wireshark软件使用与协议分析(ARP协议、IP与ICMP分析)

            一、实验目的   学习 Wireshark 的基本操作,抓取和分析有线局域网的数据包;掌握以太网 MAC帧的基本结构,掌握 ARP 协议的特点及工作过程。  二、实验内容 使用 Wireshark 抓取局域网的数据包并进行分析: 1. 学习 Wireshark 基本操作:重点掌握捕获过滤器和显示过滤器

    2024年02月05日
    浏览(35)
  • 以太网协议介绍(ARP、UDP、ICMP、IP)

    请求: 应答: ARP协议: 以太网ARP数据包格式: FCS:校验 在以太网帧头部分也包含了目的地址的mac和ip地址。 以太网通信是通过包的形式进行传输的,不像串口协议一样单位是byte。 帧间隙: TCP和UDP的区别 ​ osi 7层模型:实现通信的任务 对于fpga开发,只需要关注传输层,

    2024年02月03日
    浏览(39)
  • IP报文解析(TCP、UDP、 ICMP)及代码分享(C++)

    1.1 OSI 7层模型: 应用层: 功能:用户接口,文件传输、电子邮件、虚拟终端、文件服务 设备:网关 协议:HTTP、TFTP、SMTP、FTP、SNMP、DNS、Telnet 表示层: 功能:数据的表示,压缩和加密 设备:网关 协议:无 会话层: 功能:会话的建立和结束 设备:网关 协议:无 传输层:

    2024年02月09日
    浏览(32)
  • Linux云计算之网络基础4——ICMP协议和ARP协议

    目录 一、ICMP协议 ICMP报文被封装在IP数据报中发送 ICMP报文的种类 ICMP差错报告报文 ICMP询问报文 ICMP的典型应用 1.分组网间探测PING: 2.跟踪路由traceroute: ICMP报文结果统计 ping命令的使用 二、ARP地址解析协议 ARP:地址解析协议 ARP缓存表    ARP报文 ARP攻击与欺骗 ARP攻击 如何

    2024年04月14日
    浏览(47)
  • LwIP系列(3):以太网帧、IP、TCP、UDP、IGMP、ICMP帧格式详解

    TCP/IP 本质上是软件协议,而LwIP也是对软件协议进行解析处理,所以我们有必要了解下以太网帧、IP、TCP、UDP、IGMP、ICMP帧格式,这样在代码中,才能有的放矢。 以太网帧是最底层的原始数据,帧框架如下图所示: 其中【前同步码】和【以太网尾部】我们在抓包的时候,并不

    2024年02月14日
    浏览(35)
  • TCP/IP详解——ICMP协议,Ping程序,Traceroute程序,IP源站选路选项

    Internet 控制消息协议 ICMP(Internet Control Message Protocol)是 网络层 的一个重要协议 。ICMP协议用来在 网络设备间传递各种差错和控制信息 ,并对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。 ICMP通常被IP层或者更高层的协议(TCP/IP)使用 。一些

    2024年02月04日
    浏览(30)
  • 【计算机网络】网络层协议 -- ICMP协议

    ICMP(Internet Control Message Protocol,控制报文协议),用于在IP主机、路由器直接传递控制消息,是一个TCP/IP协议。 ICMP协议的定位 网络层的最典型的协议是IP协议,但是除了IP协议之外,还有ICMP协议和IGMP协议。 ICMP、IGMP和IP协议虽然都属于网络层的协议,但是ICMP协议和IGMP协议属

    2024年02月14日
    浏览(31)
  • 【计算机网络】ICMP协议

    实验目的 应用所学知识: 1.熟悉ICMP的协议格式。 2.理解ping的运作机制。 3.理解traceroute的运作机制。 4.理解VPN的运作机制。 实验步骤与结果 1.任务一: 使用ping命令向www.sdu.edu.cn发送消息: 在wireshark中捕获到数据包: (1) 你所使用的主机的IP地址是多少?目标主机的IP地址是多

    2023年04月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包