checksum的演算法
Ⅰ 校驗和是常見的沖突避免技術嗎
校驗和是常見的沖突避免技術。
校驗和(checksum)是指一類演算法,可以將任意位元組的數據(以下統稱為文件)轉換為一個簡短的值。我們通常也將其稱為文件的指紋(fingerprint)或者哈希值(hash)。這可以用於檢查兩個文件的內容是否相同。
通常來說,文件在儲存或傳輸的過程中有一定可能會被損壞,例如網路故障,黑客攻擊,或者儲存介質的個別位元組出現故障。如果我們知道文件原來的校驗和,就可以隨時重新做一次校驗和,如果結果和以前不一樣,就說明文件被改變了。這也是為什麼一些網站的提供文件下載時同時也會提供各種校驗和,以便用戶下載以後對照校驗和確保文件無誤。
Ⅱ 如何計算UDP/TCP檢驗和checksum
如何計算UDP/TCP檢驗和checksum
一、下面的圖是一個UDP的檢驗和所需要用到的所有信息,包括三個部分:
1.UDP偽首部
2.UDP首部
3.UDP的數據部分(切記不要遺漏該部分,否則就~吐血了~)
首先解釋下偽首部的概念,偽首部包含IP首部一些欄位。其目的是讓UDP兩次檢查數據是否已經正確到達目的地,只是單純為了做校驗用的。
還有一個概念十分重要,那就是16位UDP總長度,請注意該長度不是報文的總長度,而只是UDP(包括UDP頭和數據部分)的總長度(之前就是因為這個概念沒弄清楚,走了不少彎路,吐血~~)。
二、計算檢驗和(checksum)的過程很關鍵,主要分為以下幾個步驟:
1.把偽首部添加到UDP上;
2.計算初始時是需要將檢驗和欄位添零的;
3.把所有位劃分為16位(2位元組)的字
4.把所有16位的字相加,如果遇到進位,則將高於16位元組的進位部分的值加到最低位上,舉例,0xBB5E+0xFCED=0x1 B84B,則將1放到最低位,得到結果是0xB84C
5.將所有字相加得到的結果應該為一個16位的數,將該數取反則可以得到檢驗和checksum。
三、事實勝於雄辯,還是舉個例子來分析一下吧,該例子計算的是一個TCP的檢驗和(和UDP的演算法一致)
TCP計算檢驗和的報文結構如下所示:
抓包工具抓了一個TCP 的syn報文做研究,呵呵,下面就是整個報文:
1.首先將檢驗和部分添零;
2.然後將TCP偽首部部分,TCP首部部分,數據部分都劃分成16位的一個個16進制數;
3.將這些數逐個相加,記得溢出的部分加到最低位上,這是循環加法:
0xc0a8+ 0x0166+……+0x0402=0x9b49
4.最後將得到的結果取反,則可以得到檢驗和位0x64B6
按照上述步驟進行計算就可以得到檢驗和為0x64B6,大家也可以試試看
IP數據報只檢驗IP數據報的首部,但UDP檢驗的是把首部和數據部分一起都檢驗。
Ⅲ CAPL編程的進階應用——Checksum演算法的實現(一)
CRC與Checksum的區別在於存放位置與應用場景。CRC校驗是一種數據傳輸檢錯功能,存放在CRC場,而Checksum存放在數據場,一般在數據場的第一個位元組或最後一個位元組。在CAN報文幀中,CRC校驗保證數據從一個CAN收發器發送到另一個收發器的信號完整性,而Checksum校驗確保數據被正確打包與解包。Checksum的應用場景包括確保數據正確打包,實現數據加密和提高數據可信度。
對於Checksum而言,其應用場景有以下三點:確保數據正確打包,有些ECU內部變數在傳遞到CAN收發器前可能出現錯誤。報文中的信號和Checksum校驗在應用層完成,報文和Checksum一起發送,接收節點進行解析,確保數據鏈路完整和數據正確打包。實現數據加密,ECU傳輸的關鍵控制信號需加密,發送方和接收方使用相同的Checksum演算法作為數據加密密鑰,接收方對比密鑰,避免其他節點的數據影響。提高數據可信度,CRC校驗的錯誤率較低,通過Checksum校驗提高數據可信度。
Checksum常應用於車載乙太網中。在CAPL編程中,Checksum信號的實現是進階應用的一部分。接下來的內容將為您呈現CAPL編程的進階應用——Checksum演算法的實現(二)。
關於CAPL編程的更多信息,您可以通過訪問以下鏈接了解:
- CAPL編程語言快速入門(一) - 知乎
- CAPL編程語言快速入門(二) - 知乎
- 支持Python的新版vTESTstudio 7.0測試用例編寫方法大集合(上) - 知乎
- 支持Python的新版vTESTstudio 7.0測試用例編寫方法大集合(下) - 知乎
- LIN匯流排幀結構及各場干擾(上) - 知乎
- LIN匯流排幀結構及各場干擾(下) - 知乎
作者:北匯信息——北城舊巷
喜歡此篇文章歡迎贊同、評論、收藏、分享支持小編~
更多相關資訊及業務介紹,歡迎訪問上海北匯信息官方網站:上海北匯信息科技有限公司
商務合作資訊聯系方式:電話:021-34716271 郵箱:[email protected]
更多技術干貨,行業前沿動態,請關註上海北匯信息官方公眾號:Polelink_Info (北匯信息)
北匯信息成立於2010年,專注於汽車電子領域的新技術和新產品,為整車廠和零部件企業提供完整的研發、測試解決方案,從測試工具、專用測試設備、完整測試方案到實車測試服務,與客戶共同努力,推動中國汽車的安全、舒適和智能化。
Ⅳ UDP/IP硬體協議棧設計(三):校驗
在設計協議棧時,確保數據的完整性至關重要。校驗操作通過增加冗餘位來驗證數據的完整性。本文將深入探討乙太網幀中的兩種校驗方式:校驗和(Checksum)與幀校驗序列(FCS)。在分類數據幀的同時進行校驗計算,可以提高效率並降低延遲。
校驗和(Checksum)是一種通過累加數據完成的校驗計算方法。在乙太網幀中,Checksum用於驗證數據報文的完整性。舉個例子,考慮一組數據:{8'hf0, 8'hf1, 8'hf2, 8'hf3, 8'hf4, 8'hf5, 8'hf6, 8'hf7, 8'hf8, 8'hf9, 8'hfa},如何計算其Checksum?如果Checksum計算結果為16'h3d31,驗證方法如下:
設計支持的協議包括ARP、ICMP和UDP。在ARP中,Checksum欄位不存在。而在ICMP和UDP中,分別包含IP首部Checksum和ICMP首部Checksum,以及UDP首部Checksum。接下來將分步說明這些協議的Checksum計算過程。
IP首部的Checksum計算涉及首部的20位元組(若包含選項則更長,本文不考慮)的16位劃分。首先將Checksum欄位初始化為16'h0,然後按照之前說明的累加演算法進行計算。
在Wireshark中抓取一幀數據的IP首部,可以驗證Checksum的正確性。使用Verilog實現時,代碼結構與上述描述一致。
對於ICMP,Checksum計算包含首部和選項數據部分。計算時將Checksum欄位置零,按照相同方式累加計算。計算過程類似於IP首部,但涉及數據的額外部分。
UDP首部中的Checksum計算與TCP首部類似,需考慮偽首部的加入。偽首部包括源IP、目的IP、預留、協議和UDP長度欄位。同時,UDP首部的埠號和長度欄位也被納入計算。計算過程需要遵循偽首部的長度與實際長度一致的規則。
FCS(幀校驗序列)位於乙太網幀尾部,用於校驗幀的完整性。FCS通過CRC32演算法生成4位元組的校驗序列。CRC演算法的入門可參考相關文章或Xilinx官方手冊。實現FCS的硬體結構可以參考手冊提供的示例。論文詳細闡述了CRC32的硬體實現演算法。
Verilog或VHDL源碼可以直接生成,功能實現通過調用自定義函數。網頁工具提供多項式選擇並生成源碼,方便使用。有時,網頁工具可能不可用,但不影響整體流程。
在協議棧設計中,通過在數據分類時同步進行校驗計算,確保接收的數據幀准確無誤。對於發送的數據幀,在封裝過程中完成校驗計算,從而實現有效傳輸。若有不足之處,期待您的寶貴意見。