TCP/UDP

TCPの信頼性〜再送時間(RTO)と再送回数、チェックサム〜

TCP の信頼性とは

TCP の信頼性は、以下の記事の通り、シーケンス番号 (Seq#) と応答確認番号 (Ack#) で実装されます。

【図解】TCPヘッダのフォーマット〜シーケンス,PSH,RST,URGの動作〜
TCP のフォーマット TCP の通信データ単位は セグメント と呼ぶことが多...

パケット送信側は Ack が戻ってこないパケットについては『パケットが欠けた』と判断し、再送をしますが、再送タイマのタイムアウト時間 (RTO) は RTT 値を元に計算されます。

RTT 値は、データを送ってから ACK が戻ってくるまでの時間のことで、Window サイズ毎に 1 パケットだけサンプリングされます。

さらにこの RTT 値は Smooth RTT (SRTT) 値の計算に用いられます。SRTT 値の計算式は以下の通りです。

SRTT(new) = α * SRTT(old) + (1-α) * RTT

α は 0.9 が推奨されています。

また、RTO は以下の式が利用されています。

RTO = SRTT + 4 * (平均偏差)

なお、Windows では TCP コネクション時の初期値として RTO = 3秒がセットされ、以降は上記サンプリングが完了したタイミングで RTO 値が更新されます。

また、Windows では TCP 再送回数はレジストリにより 5 回となっています。

変更したい場合は以下のように「TcpMaxDataRetransmissions」レジストリを修正します。

  1. Windowsキー+R
  2. regedit [Enter]
  3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters と辿る
  4. 右ペインで右クリックし、「新規」⇒「DWORD」で左クリック
  5. 名前を「TcpMaxDataRetransmissions」に設定する
  6. 再送回数を10回にしたい場合は16進数ならa、10進数なら10でセットする
  7. 下記のようになったら再起動

チェックサム

データが欠けるパターンとして、データが送られてこない、というパターンと、送られてきたデータが誤っている、というパターンがあります。

送られてきたデータの誤りを検出する仕組みがチェックサムです。

チェックサムの計算方法は、以下の擬似 IP ヘッダフォーマットを利用します。

チェックサムの対象は擬似 IP ヘッダと TCP ヘッダ (ただしチェックサムのフィールドを 0 に置き換える)、TCP データの 3 つです。

これらを 16 bit 単位に分割し、各々で "1 の補数" を計算し、それらを合計します。さらにその合計値の "1 の補数" を取ることで、チェックサムに入る 16 bit が決まります。

TCP であるにもかかわらず、レイヤーの低い IP ヘッダも一部ではありますがチェックしていることに注目して下さい。

IPv4 では、IP ヘッダ自身のチェックサムも行なっており、IP の上に TCP が使われる場合は IP ヘッダを重複してチェックをかけていることになります。

IPv6においては、TCP と一緒に使われる機会が多いことと、通信技術の向上により誤り率が低くなったことから、IPv6 ヘッダのチェックサムは無くなりました

その代わり、TCP 等のように、上位レイヤーでこれを実施することが望まれます。

nesukeの推薦図書

以下に該当する人なら熟読することを強く推奨します。

  • 周りのネットワークエンジニアよりも一歩抜き出た存在となり、価値を高めたい!
  • サーバエンジニアだけどネットワークも含めた総合的なセキュリティへの理解も深めていきたい!
本書は、ベストセラーの『マスタリングTCP/IP 入門編』を時代の変化に即したトピックを加え、内容を刷新した第6版として発行するものです。豊富な脚注と図版・イラストを用いたわかりやすい解説により、TCP/IPの基本をしっかりと学ぶことができます。プロトコル、インターネット、ネットワークについての理解を深める最初の一歩として活用ください。
本書は、日々更新されていくネットワークセキュリティ技術にキャッチアップしていくために必要となる基礎を体系的に網羅した「マスタリングTCP/IP シリーズ」の一冊です。基本的な暗号技術、それらのセキュリティプロトコルへの応用、認証技術、Web アプリケーションへの多様化する攻撃手法の理解と対策などを扱っています。

ブラウザにURLを入力してからWebページが表示されるまでの道筋をたどりながら、その裏側で働くTCP/IP、LAN、光ファイバなどの技術を説明していきます。インターネットを通ってサーバーまで行って帰ってくる道筋の途中には、今のネットワークの主要な技術要素が全部あります。そこでの機器やソフトウエアがどのように動き連携しているのかを探検すればネットワーク全体の動きがわかります。

コメント

タイトルとURLをコピーしました