勉強前の理解度
- UDPヘッダというものが存在する
UDPヘッダの概要
送信元ポート番号(16bit)
送信元のポート番号。
返答を必要としない場合、この値を0にして送信することがある。
宛先ポート番号(16bit)
宛先のポート番号。
パケット長(16bit)
UDPヘッダとデータの長さの合計値をオクテット単位で示す。
チェックサム(16bit)
UDPヘッダとデータが破損していないかを示す。初期値は0。対象範囲の1の補数の和の合計値を16bit単位で求め、その1の補数を保持している。対象となる範囲は、UDPヘッダとUDPペイロード、UDP疑似ヘッダである、UDP疑似ヘッダはチェックサムの計算のためにUDPヘッダの前に疑似的に用意されるヘッダで、実際の通信には含まれない。
1の補数の和の1の補数をとる理由
チェックサムの計算で「1の補数」ではなく「1の補数の和の1の補数」を利用する理由の一つに、受信者側のチェックサムの確認が簡略化されることがあるらしい。受信者側が対象範囲の合計値の1の補数を計算して、それが0になるかを確かめるだけでよいからだ。
例えば、チェックサムが初期値の0の状態でチェックサムを計算して、その1の補数の和が「1001」であったとする。当然チェックサムは「0110」となる。(チェックサムとその計算単位を4bitに簡略化した)
そして、受信側が計算する1の補数は1001(チェックサム以外)+0110(チェックサム)=1111となり、チェックサムは「0000」となる。「1の補数の和の1の補数」を利用する場合は、チェックサムが0であることを確認するだけで良いのだ。
※受信者側が求めるチェックサムは、「16bitごとの合計値の1の補数」である(送信側と計算方法が異なる)。
一方、「1の補数」を利用する場合は、送信者側が計算してチェックサムを一旦保管して、受信者が計算したチェックサムと比較しなければならない。これだと受信者側の手間が増えてしまう。(みたいな感じだと思う)
参考
第13回 データグラム通信を実現するUDPプロトコル:基礎から学ぶWindowsネットワーク(3/4 ページ) - @IT
IP チェックサムの秘密
マスタリングTCCP/IP