关于IP数据包首部校验字段的理解
www.2cto.com

对上表的各个数据项就不一一解释了,这里具体关注以下几个数据项:
1、4位首部长度:这里的长度指的是4Bytes单元的个数,例如上图在“选项”字段不存在的情况下,IP包的首部是20Bytes,那么首部长度字段应该为5。另外根据首部长度的位数,也可以得知IP数据包的首部最长为:(2^4 - 1) * 4 = 60 Bytes,当然这个不常用,为了减少开销IP数据包的首部一般为20 Bytes.
2、16位总长度:整个IP数据包的长度,字节为单位,很显然可以利用总的数据包的长度减去数据包的首部长度可以得到IP数据数据包中数据内容的长度,同理可以得知IP数据包的MAX_LENGTH为65535 Bytes,这个字段是IP首部必要的内容。
3、16位首部校验和:
steve的书上是这样说的:
a、把校验和字段置零
b、对首部中每个16位进行二进制反码求和(整个首部看成是由一串16BIT的字组成),结果存在校验和字段中。
c、收到一份IP数据报后,同样对首部的每个16bit进行二进制反码求和(高位溢出添加到低位,与通常的补码运算直接丢弃溢出的高位不同)。
d、接收方在计算过程中包含了发送方存在的首部校验和,因此,首部在发送过程中如果没有任何差错,那么接收方计算的检验结果应该全为1(0xFFFF),否则表明数据包接收错误,丢弃该IP包。
注意:这里的二进制反码求和理解应该为对各个16Bbit进行求和后取反,关键是这些16bit的单元加在一起,如果没有整除16(size还存在不足16位),则应该加上剩余的部分,这是的结果应该会超出16位,所以要对高出16位的的和再次与低16位相加得到cksum,这是第一步。而第一步相加是很可能会再次产生进位,因此需要再次把进位移到低16位相加的到最终的cksum的反码,这是将结果取反即可。
下面还是通过TEST SOURCE CODE来仔细了解该过程:
通用的校验函数:
Main函数中调用:
从理论上判断,如果对接收的IP包中的校验值再次重新校验一次,在数据包准确无误的情况下,得出的新的校验值应该是0XFFFF(当然,计算机用补码在计算,可能显示的结果是0),其他的结果表示接收到的数据包有错误。故cksum 2应该为0, cksum 3应该与cksum 1相同。
这里验证过:
IP数据包中的首部校验字段的算法不采用循环冗余算法,是因为IP包在网络中传输时,其TTL字段的值经常会变化,故采用简单的叠加方法,就可以避开中间路由器重新计算其校验值,只是简单的增加1操作即可,这样可以明显提高传输效率。
关于IP数据包首部校验字段的理解的更多相关文章
- TCP/IP 数据包报文格式(IP包、TCP报头、UDP报头)(转)
reference:http://blog.51cto.com/lyhbwwk/2162568 https://blog.csdn.net/wangzhen209 ...
- IP数据包的校验和算法
1.算法思路: IP/ICMP/IGMP/TCP/UDP等协议的校验和算法都是相同的,算法如下: 在发送数据时,为了计算IP数据包的校验和.应该按如下步骤: (1)把IP数据包的校验和字段置为0: ( ...
- 计算机网络漫谈之IP数据包
网络层从 网络层 .IP与子网掩码 前前后后我们也说了两次了,IP 这个东西絮絮叨叨的也一直在提.今天我们来解开IP协议的面纱,还记得我们之前在数据链路层说的物理帧的结构吗?就是这样: 其中Head叫 ...
- IP报文解析及基于IP 数据包的洪水攻击
版本(4bit) 报头长度(4bit) 优先级和服务类型(8bit) 总长度(16bit) 标识(16bit) 标志(3bit) 分段偏移(13bit) 存活期(8bit) 协议(8bit) 报头校验 ...
- TCP/IP数据包结构具体解释
[关键词] TCP IP 数据包 结构 具体解释 网络 协议 一般来说,网络编程我们仅仅须要调用一些封装好的函数或者组件就能完毕大部分的工作,可是一些特殊的情况下,就须要深入的理解 网络数据包的结构, ...
- IP,TCP,UDP Checksum校验
IP数据报的校验: IP数据报只需要对数据头进行校验,步骤如下: 将接收到的数据的checksum字段设置为0 把需要校验的字段的所有位划分为16位(2字节)的字 把所有16位的字相加,如果遇到进位, ...
- [na]ip数据包格式
IP Datagram Structure 字段名 解释 版本 IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6. 首部长度 IP报头的长度.固定部分的长度(20字节)和可变部分的长 ...
- IP数据包格式
IP数据包格式 0 4 8 16 31 |4位版本 | 4位首部长度 | 8位服务类型 | 16位总长度(字节数)| |16位标识 | 3位标志 | 13位片偏移 | |8位生存时间| 8位协议 | ...
- IP报文格式及各字段意义
IP数据包由报头和数据两部分组成.报头的前一部分是固定长度,共20字节.在报头的固定部分的后面是可选部分——IP选项和填充域. 首部各字段的含义如下 1.版本 占4位,指IP协议的版本. 2 ...
随机推荐
- Notepad++如何编译、运行Java
首先要让Notepad++编译和运行Java,前提是电脑里已经配置好了Java的环境(这里可以参考我博客里关于Java环境配置的那篇随笔). 在Notepad++上面的选项栏中找到 插件---> ...
- Android与JS互相调用以及注意
近期项目中常常使用Html5而Android与JS调用常常会用到,这里记录一下,測试系统5.0以上. 这里先贴一下源代码 Activity: package jwzhangjie.com.webvie ...
- <LeetCode OJ> 326. Power of Three
326. Power of Three Question Total Accepted: 1159 Total Submissions: 3275 Difficulty: Easy 推断给定整数是否是 ...
- Linux - 理不清的权限chmod与chown区别
chmod是修改第一列内容的 ,chown是修改第3,4列内容的. [root@local ~]# chmod 777 -R add.sh [root@local ~]# chown jiqing:j ...
- DBS-PowerDesginer:PowerDesigner最基础的使用方法入门学习
ylbtech-DBS-PowerDesginer:PowerDesigner最基础的使用方法入门学习 1.返回顶部 1. 1:入门级使用PowerDesigner软件创建数据库(直接上图怎么创建,其 ...
- 18.29SSM基础整合开发
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/d ...
- Pop3协议详解
POP3全称为Post Office Protocol version3,即邮局协议第3版.它被用户代理用来邮件服务器取得邮件.POP3采用的也是C/S通信 模型 用户从邮件服务器上接收邮件的典型 ...
- BZOJ 1116 并查集
思路: 如果 每个联通块 边数>=点数 就OK 用并查集搞 //By SiriusRen #include <cstdio> #include <cstring> #in ...
- window下安装svn
下载 http://subversion.apache.org/ 注意:上边的黑窗口不要关闭! 如何校验svn服务有运行
- jquery选择器(可见对象,不可见对象) +判断,对象(逆序)
//可见对象: $("li:visible ") //可见对象下的 隐藏对象 $("li:visible [type='hidden']") //获得 可见 的 ...