公休假的工龄如何计算TCP的CHECKSUM

IPv4、TCP和UDP的校验和计算
IPv4、TCP和UDP的校验和计算
分组头的校验和(checksum)算法是16位累加和后的反码,TCP和UDP数据报头也使用相同的校验算法,但参与运算的数据与IP分组头不一样。
IPv4分组头的结构如下所示:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 01&
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type ofService| TotalLength |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | HeaderChecksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SourceAddress |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DestinationAddress |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
其中的&Header Checksum&域即为头校验和部分。当要计算IPv4分组头校验和时,发送方先将其置为0,然后按16位逐一累加至IPv4分组头结束,累加和保存于一个32位的数值中。如果总的字节数为奇数,则最后一个字节单独相加。累加完毕将结果中高16位再加到低16位上,重复这一过程直到高16位为全0。下面用实际截获的IPv4分组(数据连路层DLC的包)来演示整个计算过程:
0x 47 41 11 c900 09 6b 7a 5b 3b &
59 8f c0 a8 64 01 ab 46&
0x0020: 9c e9 0f 3a04 05 00 08 7f c5 00
0x 00 00 00 00 00 00 00 00 00 00
在上面的16进制采样中,起始为Ethernet帧(DLC包)的开头。IPv4分组头从地址偏移量0x000e开始,第一个字节为0x45,最后一个字节为0xe9,即IPv4分组头到目标IP地址为止。根据以上的算法描述,我们可以作如下计算:
(1) 0x4500 + 0x001c + 0x7468 + 0x0000 + 0x8011 + 0x0000(累加和位置先置0) + 0xc0a8 + 0x6401 + 0xab46 + 0x9ce9 = 0x3a66d
(2) 0xa66d + 0x3 = 0xa670
(3) 0xffff - 0xa670 = 0x598f
注意在第一步我们用0x0000设置头校验和部分。可以看出这一分组头的校验和与收到的值完全一致。以上的过程仅用于发送方计算初始的校验和,实际中对于中间转发的和最终接收方,可将收到的IPv4分组头校验和部分直接按同样算法相加,如果结果为0xffff,则校验正确。
对于TCP和UDP的数据报,其头部也包含16位的校验和,校验算法与IPv4分组头完全一致,但参与校验的数据不同。这时校验和不仅包含整个TCP/UDP数据报,还覆盖了一个虚头部。虚头部的定义如下:
+--------+--------+--------+--------+
| sourceaddress |
+--------+--------+--------+--------+
| destinationaddress |
+--------+--------+--------+--------+
| zero |protocol| TCP/UDP length |
+--------+--------+--------+--------+
其中有IP源地址,IP目的地址,协议号(TCP:6/UDP:17)及TCP或UDP数据报的总长度(头部+数据)。将虚头部加入校验的目的,是为了再次核对数据报是否到达正确的目的地,并防止IP欺骗攻击(spoofing)。上述报文在0x0018处的协议类型=十六进制11,即该报文是一个UDP报文,其长度存放在0x0027开始的两个字节(含源目端口地址4字节+UDP长度2字节+校验和2字节=8字节,以及UDP数据的长度:故本数据包UDP数据的长度实际为0字节),IP源目地址存放在0x0x1a到0x0x21共八个字节中,先将校验和0x002a处的两个字节置0,计算UDP包的校验和如下:
(1) 0xc0a8+0x6401(前为源IP)+0xab46+0x9ce9(前为目IP)+0x0011(即Zero和Protocol)+ 0x0008(UDP长度)+ 0x0f3a(源端口)+0x0405(目端口)+0x0008(UDP长度)+0x0000(校验和预置为0)+&(这里没有任何数据了:UDP数据的长度实际为0字节)=0x28038
(2) 0x28+0xA
(3) 0xFFFF-0x803A=0x7FC5
计算结果和0x0028处的结果相同,注意UDP长度出现了两次。请输入关键词:
  Checksum-检验和,校验和。在数据处理和数据通信领域中,用于校验目的的一组数据项的和。这些数据项可以是数字或在计算检验和过程中看作数字的其它字符串。
  它通常是以十六进制为数制表示的形式,如:
  十六进制串: 0708
  的效验和是: 24 (十六进制)
  如果效验和的数值超过十六进制的FF,也就是255. 就要求其补码作为效验和.
  通常用来在通信中,尤其是远距离通信中保证数据的完整性和准确性.  
法 CHECKSUM_AGG ( [ ALL | DISTINCT ] expression ) 备注 CHECKSUM_AGG
CHECKSUM_AGG 的结果。此外,CHECKSUM_AGG Get the checksum of the modified column. SELECT CHECKSUM_AGG(CAST(联机丛书 CHECKSUM_AGG -> checksum + agg...
来自: - 最后更新于:
_006,0)) From Inserted Where CheckSUM(INT_003,INT_004,ltrim(INT_005)) ) NOT IN (Select CheckSUM( STO_001, STO_002,ltrim可能出錯了。 CHECKSUM()是返回HASH值 from tb ...)? 这样的checksum应该还不是 ...我理解错误 checksum()生成的是一...
来自: - 最后更新于:
认。 那么使用CHECKSUM(GUID)来产生一前提下,那么CHECKSUM(GUID)是不是也呢? 在SQL 2005中Checksum(NewID())有时得出负数,那用ABS(CHECKSUM(NEWID()))会重复吗么不好. 单独checksum 可能存在问重复 但checksum是有风险的 checksum数学一直不了解CheckSum,因此有了此...
来自: - 最后更新于:
IP的checksum是有验证的,但tcp checksum显版的会显示checksum correct(good bad flag) 我和HTTP中的TCP checksum都是incorrect,呵,为: Checksum: 0xdbd2 [incorrect, should be 0x344c (maybe caused by "TCP checksum offload...
来自: - 最后更新于:
定网址的pagerank checksum//参数m_Version指 string CheckPR(string m_Url)Checksum 算法源代码 /// summary 6 /// Google PageRank的Checksum算法。7 /// 作者 11 class CheckSum12 {13 public CheckSum()14 {15 //16 // TODO: 在...
来自: - 最后更新于:
...... 66 22 这个是CheckSum
04 df这个包有TCP Checksum Incorrect的问题 这需要去计算CheckSum吗? 不是仅发吗? 如何涉及CheckSum? ding 顶 ,up 在Ethereal卡驱动的TCP checksum offloading功能打开...
来自: - 最后更新于:
个计算 Bin档 checksum 值的功能。 不高手解答 求checksum值 算法 求法说明出错了 Checksum-检验和,校验. C/C++ code USHORT CICMP::CheckSum(USHORT *buff,int Size) { unsigned...
来自: - 最后更新于:
asp的 New PageRank Checksum Algorithm .] ?php /* Written and $arr8; } // / - Checksum:
print(" b URL .... $urlto_parse)); // printf(" li u Checksum =2.0.114: /u ..... ...
来自: - 最后更新于:
系统 提示CMOS Checksum Error-defaults Loade 具体决。。 2出现CMOS Checksum Error-defaults Loade 原因...
来自: - 最后更新于:
我的电脑一开机提示 CMOS/GPNV checksum Bad 重启以后就没有这种提示了,是怎么回事? 1、清空BIOS,重新设置BIOS。 2、内存问题,重新插拭下金手指 3、换个BIOS电池 4、检查下看是不是键盘问题。换个键盘。 google搜索“GPNV checksum Bad”...
来自: - 最后更新于:
本词条对我有帮助0
积木知识库中的词条内容仅供参考,如果您需要解决实际问题,建议您咨询相关领域专业人士
如果您认为本词条还需进一步完善,欢迎您也来参与编辑词条&&&&让我们共同来完善IT领域的百科全书
浏览该词条的网友还浏览了
最新收录词条
热门脚本语言:用户名:chenhj_wo
文章数:30
访问量:2916
注册日期:
阅读量:1297
阅读量:3317
阅读量:445082
阅读量:1130814
51CTO推荐博文
这是 Google 对
的缓存。 这是该网页在 日 04:52:37 GMT 的快照。
了这篇文章
类别:未分类┆阅读(0)┆评论(0)

我要回帖

更多关于 公休假的工龄如何计算 的文章

 

随机推荐