月別アーカイブ 2020年11月19日

TCPチェックサムの計算方法.001

TCPチェックサム(TCP Checksum)の計算方法

今回はTCPチェックサムにの再計算方法について共有したいと思います!
まず、皆さんが使っているインターネット通信におけるパケットの内部にTCP(Trance Port Protocol)ヘッダと呼ばれる部分があります。
そのTCPヘッダの中にチェックサム(Checksum)と呼ばれるパケットが壊れていないかを確認する部分があります。
このチェックサムの計算方法について解説したいと思います。
5Gの成長とともにSDN(Software Defind Network)の需要も高まってきています。
また、P4 languageを用いたSwitchやProgrammable  Switchを学んでいる方には
チェックサムの再計算の知識は必要だと思います。
参考になれば幸いです!

TCPチェックサムとは?

TCPチェックサムとはTCPヘッダの内部にある、
「このパケットが壊れていないかどうか」を判定するためにある情報です。
まず、TCPとは通信の信頼性を担保する部分(プロトコル)で、現在のほとんどの通信で使われています。
TCPがあるからweb上で安全にメールのやりとりやサイトの閲覧ができると言っても過言ではありません。
もちろん、TCPヘッダの上にTLSやHTTPヘッダがのることが基本でそれらのおかげでもありますが、
それらはTCPヘッダがあるからこそ安全にセッションを張り通信可能な状態になるのです。

今回はそのTCPに欠かせないTCPチェックサムの計算方法について説明します。
現在研究をしている方や、ネットワーク機器を自分で作成している方、などのお役に立てたらと思います。
TCPについて詳しく知りたい方は下記リンクの記事を読んでみてください!(….すいませんまだ執筆中ですm(__)m)

TCPチェックサム計算方法

計算時に用意するもの

まず、TCPチェックサムの計算には用意するべき情報があります。それは疑似IPヘッダとTCPヘッダとペイロードであるデータ部分の3つです。
これらの情報をすべて足して補数をとったものがチェックサムの値となります。
詳細について下記に示します。
(ヘッダフォーマットについては↓下記リンクを参考にしてみてください)
https://www.infraexpert.com/study/tcpip8.html

疑似IPヘッダの用意

IPヘッダの一部の情報を用いて疑似IPヘッダを作成し計算に使います。
・送信元アドレス(IP)4bytes
・宛先アドレス(IP)4bytes
・プロトコルヘッダー(TCP、UDP、ICMPなどの気象情報と同様)1byte
・長さ(TCP / UDP)2bytes
・予約済み8ビット 1byte

TCPヘッダの用意

次に必要なのはTCPヘッダです。
・TCPヘッダはすべて使います。
・TCPヘッダのチェックサムの値は0にします。

データの用意

IPヘッダ、TCPヘッダに続くデータ部分はすべて使用します。

計算

実際に計算していきます。ExcelやGoogleスプレッドシートを用いて計算することをおすすめします!
まず、疑似IPヘッダが16進数である場合は10進数に変換します。
Excelなどのセルの中で =HEX2DEC() とすると16進数から10進数に変更できます。

16進数から10進数に変換するスプレッドシートの写真

16進数から10進数に変換するスプレッドシート図

 

そして10進数に変換した疑似IPヘッダをすべて足していきます。
計算結果は残しておきます。

次に用意したTCPヘッダを上記の疑似IPヘッダの計算と同様にすべて足していきます。

データ部分もすべて足していきます。

最後に疑似IPヘッダとTCPヘッダとデータ部分をすべて足していきます。
そして足した計算結果を今度は =DEC2HEX() で16進数に変換します。
このとき計算結果がFFE4Eのように4byte以上になった場合はF + FE4Eをします (これは電卓のがいいかも)
そのときの答えはFE5Dとなります。
そして1の補数をとるのですが=HEX2BIN() をして2進数の01のビットを反転させて=BIN2HEXする方法もありますが
電卓にてXOR ffff をするとでてくるのでこの方法のが簡単です!

まとめ

今回はTCPチェックサムの再計算方法について共有させて頂きました!
今後は具体的なパケットの見方などの記事も書いていきたいと思います!

また、TCP/IPについて詳しく勉強したい方はこちらの本がおすすめです!


この本で私は幅広くネットワークについての知識をつけることができました!
是非オススメです!(^^)

自己紹介はこちら