開啟主選單
求真百科
搜尋
檢視 校验和 的原始碼
←
校验和
由於下列原因,您沒有權限進行 編輯此頁面 的動作:
您請求的操作只有這個群組的使用者能使用:
用戶
您可以檢視並複製此頁面的原始碼。
{| class="https://cn.bing.com/images/search?view=detailV2&ccid=GgIAKeup&id=C54EAEEF4D7F3862B63EAA18616F520DB69EC88B&thid=OIP.GgIAKeupO0yTawIQe_FVEwHaEK&mediaurl=https%3a%2f%2fimg.lingshunlab.com%2farduino-esp32-communication-verify-checksum-and-bcc-cover-s.png&exph=366&expw=650&q=%e6%a0%a1%e9%aa%8c%e5%92%8c&simid=608047518840155835&FORM=IRPRST&ck=FD7FFBED2B261D9F59D91505742F63BB&selectedIndex=5&itb=0&ajaxhist=0&ajaxserp=0" style="float:right; margin: -10px 0px 10px 20px; text-align:left" |<center>'''校验和'''<br><img src=" https://img.lingshunlab.com/arduino-esp32-communication-verify-checksum-and-bcc-cover-s.png" width="280"></center><small> 圖片來自优酷</small> |} 校验目的地数据项和的加密技术 检验和([[checksum]]),在数据处理和数据通信领域中,用于校验目的地一组[[数据项]]的和。它通常是以十六进制为数制表示的形式。如果校验和的数值超过十六进制的FF,也就是255. 就要求其补码作为校验和。通常用来在通信中,尤其是远距离通信中保证数据的完整性和准确性。 ==校验和简介== 这些数据项可以是数字或在计算检验的过程中看作数字的其它字符串。校验和(checksum)是指传输位数的累加,当传输结束时,接收者可以根据这个数值判断是否接到了所有的数据。如果数值匹配,那么说明传送已经完成。TCP和UDP传输层都提供了一个校验和与验证总数是否匹配的服务功能。 <ref>[https://baike.baidu.com/reference/7358071/533aYdO6cr3_z3kATKWOyP_2NyvHP92qvuLTB7FzzqIP0XOpX5nyFJs34cU89uRiFx7ZuYx7LtUam6apVFQCtqZUKK4qBepgyRn-UzXH1-aiogTechTarget安全 ,引用日期2015-08-19]</ref> 它通常是以[[十六进制]]为数制表示的形式,如: 十六进制串: 1 0102030405060708 的校验和是: 24 (十六进制) 如果校验和的数值超过十六进制的FF,也就是255,就要求其补码作为校验和。 通常用来在通信中,尤其是远距离通信中保证数据的完整性和准确性。 ==步骤== 发送方生成检验和 1.将发送的进行检验和运算的数据分成若干个16位的位串,每个位串看成一个[[二进制]]数,这里并不管字符串代表什么,是整数、浮点数还是位图都无所谓。 2.将IP、UDP或TCP的PDU首部中的检验和字段置为0,该字段也参与检验和运算。 3.对这些16位的二进制数进行1的补码和(one's complement sum)运算,累加的结果再取反码即生成了[[检验码]]。将检验码放入检验和字段中。 其中1的[[补码]]和运算,即带循环进位(end round carry)的加法,最高位有进位应循环进到最低位。反码即二进制各位取反,如0111的反码为1000。 '''接收方校验检验和''' 1.接收方将接收的数据(包括检验和字段)按发送方的同样的方法进行1的补码和运算,累加的结果再取反码。 2.校验,如果上步的结果为0,表示传输正确;否则,说明传输有差错。 检验和算法示例 图5.7所示为一个只包含4个16位二进制数进行检验和运算的简单例子。图5.7(a)所示为发送方的运算,①、②、③是3个数据,④是检验和,先置0,也参加检验和运算。⑤是它们的一的补码和,⑥是⑤的反码。发送方将⑥放到检验和字段和数据一起发出。图5.7(b)所示为接收方的运算,如果没有传输差错,最后结果应为0。 ==表示== 如: 十六进制串: 0102030405060708 的校验和是: 24 (十六进制) IP首部校验和计算 IP首部校验和字段是根据IP首部计算的校验和码,它不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据校验和码。 为了计算一份数据报的IP检验和,首先把检验和字段置为0。然后,对首部中每个16bit进行[[二进制反码求和]](整个首部看成是由一串16bit的字组成),结果存在检验和字段中。当收到一份[[IP数据]]报后,同样对首部中每个16bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。但是不生成差错[[报文]],由上层去发现丢失的数据报并进行重传。 '''TCP和UDP校验和计算''' 校验和还包含一个96位的伪首标,理论上它位于TCP首标的前面。这个伪首标包含了源地址、目的地址、协议和TCP长度等字段,这使得TCP能够防止出现[[路由选择]]错误的[[数据段]]。这些信息由[[网际协议]](IP)承载,通过TCP/网络接口,在IP上运行的TCP调用参数或者结果中传递。 [[伪首部]]并非UDP数据报中实际的有效成分。伪首部是一个虚拟的[[数据结构]],其中的信息是从数据报所在IP分组头的分组头中提取的,既不向下传送也不向上递交,而仅仅是为计算校验和。 这样的校验和,既校验了UDP用户数据的[[源端口号]]和目的端口号以及UDP用户数据报的数据部分,又检验了[[IP数据报]]的源IP地址和目的地址。(伪报头保证UDP和TCP数据单元到达正确的目的地址。因此,伪报头中包含[[IP地址]]并且作为计算校验和需要考虑的一部分。最终目的端根据伪报头和[[数据单元]]计算校验和以验证通信数据在传输过程中没有改变而且到达了正确的目的地址。) '''文件校验和''' 在Windows中,[[exe校验]]和是没有必要的,因为系统会负责检查,错误的exe将无法运行。但是[[sys文件]]和关键的dll文件是被要求要校验和的。 '''视频''' '''TCP和UDP校验和''' [https://www.bilibili.com/video/BV1F3411N7pr/哔哩哔哩] ==参考文献== {{Reflist}}
此頁面使用了以下模板:
Template:Main other
(
檢視原始碼
)
Template:Reflist
(
檢視原始碼
)
模块:Check for unknown parameters
(
檢視原始碼
)
返回「
校验和
」頁面