close
checksum 是為了保證 header 或 data 不被破壞而發展出來的機制
它的計算方式是這樣的
將要計算的對象以 16 bits 為單位以一的補數作相加(計算前的 checksum 是設為零)
最後相加的結果再取一的補數填入 checksum 這個欄位
觀念非常簡單容易
不過 checksum 計算對象依照不同的協定仍然不太一樣
(以下以 IPv4 為準)
(一)IP
IP header 中的 checksum 計算對象只有 IP header
因此所保證的欄位也就只有 IP header
(二)ICMP
ICMP 的 header 也有 checksum
其計算對象除了 header 外,也包含了 ICMP data
(三)TCP/UDP
TCP/UDP header 中 checksum 的計算對象
除了直覺上的 header 和 data 外,還包含所謂的虛擬表頭(psuedo-header)
此 psuedo-header 包含了 L3 的 SrcIP 、 DstIP 、 Packet Length 及 Protocol Num
之所以要增加 psuedo header
目的在於
封包在傳輸過程中,目的 IP 可能會被更改,而傳到錯誤的 host
不過 IP 的 checksum 隨時都在改變
因此可能會把被改過的 IP 當成是對的計算進去因而檢查不出來
但是 L4 的 checksum 在傳輸過程中並不會被更改
因此算進去的目的 IP 就是原本 sender 要送的對象
當 receiver 端拆解封包檢查 L4 的 checksum 即可知送錯對象
不過有一點要注意的是
UDP 的 checksum 是 optional 的
它可以被寫為 0 而被 disable 掉
它的計算方式是這樣的
將要計算的對象以 16 bits 為單位以一的補數作相加(計算前的 checksum 是設為零)
最後相加的結果再取一的補數填入 checksum 這個欄位
觀念非常簡單容易
不過 checksum 計算對象依照不同的協定仍然不太一樣
(以下以 IPv4 為準)
(一)IP
IP header 中的 checksum 計算對象只有 IP header
因此所保證的欄位也就只有 IP header
(二)ICMP
ICMP 的 header 也有 checksum
其計算對象除了 header 外,也包含了 ICMP data
(三)TCP/UDP
TCP/UDP header 中 checksum 的計算對象
除了直覺上的 header 和 data 外,還包含所謂的虛擬表頭(psuedo-header)
此 psuedo-header 包含了 L3 的 SrcIP 、 DstIP 、 Packet Length 及 Protocol Num
之所以要增加 psuedo header
目的在於
封包在傳輸過程中,目的 IP 可能會被更改,而傳到錯誤的 host
不過 IP 的 checksum 隨時都在改變
因此可能會把被改過的 IP 當成是對的計算進去因而檢查不出來
但是 L4 的 checksum 在傳輸過程中並不會被更改
因此算進去的目的 IP 就是原本 sender 要送的對象
當 receiver 端拆解封包檢查 L4 的 checksum 即可知送錯對象
不過有一點要注意的是
UDP 的 checksum 是 optional 的
它可以被寫為 0 而被 disable 掉
全站熱搜
留言列表