オルタナティブ・ブログ > IT雑貨屋、日々のつづり > 【NET技術.005】TCPとUDPについて②

IT業界につとめる「雑貨屋(なんでも屋)」が、業界の事、情報セキュリティの事、趣味や日々雑感を綴っていきます。お暇な方はおつきあい下さい。

【NET技術.005】TCPとUDPについて②

»

 佐藤@IT雑貨屋です。
 TCPとUDPは通信仕様の中核でもあるので、概要を説明するにしてもそれなりに紙片をとってしまいますので、ご容赦下さい。

◆TCPヘッダについて
 TCPではフロー制御、順番制御、再送制御など様々な制御が機能しています。それらの制御により信頼性の高い通信を実現しています。TCPの機能はTCPヘッダの部分に詰め込まれています。以下にTCPヘッダのフォーマットを示します。

TCP.JPG

 ・送信元ポート番号
  16ビット超で送信元のポート番号を示します。
 ・宛先ポート番号
  16ビットで宛先ポート番号を示します。
 ・シーケンス番号
  32ビットでシーケンス番号(順序番号)を示します。このシーケンス番号では送信
  した順序を示しますが、これはコネクション確率時に初期値がランダムで決められ
  SYNパケットで宛先に伝えられます。この番号は初期値に送信したバイト数で決め
  られますが、SYNパケットやFINパケットもバイト数に数えられます。
 ・確認応答番号
  3ビット長で確認応答番号を示します。この番号は次に受信すべきデータのシーケ
  ンス番号です。確認応答番号から-1したシーケンス番号までのデータを正常に受信
  したことを知らせます。
 ・データオフセット
  4ビット長でTCPデータのデータがTCPパケットのどの部分から始まるかを示します。
  TCPヘッダの長さと同じく4オクテット単位でTCPヘッダ長を示します。オプション
  を含まないTCPヘッダの場合、TCPヘッダの長さは20オクテットなので、データ
  オフセットは5となります。
 ・予約
  将来の拡張のあめに用意されている4ビット長のフィールドです。デフォルトは0が
  設定されます。
 ・コントロールフラグ
  8ビット長で、ビット毎に意味をもつフラグです。
  0bit:CWR
   IPヘッダのECNフィールドと共に使用される。輻輳ウィンドウを小さくした事
   を通信相手に伝える。
  1bit:ECE
   IPヘッダのECNフィールドと共に使用される。相手側からこちら側に向かう
   ネットワークが輻輳していることを通信相手に伝える。
  2bit:URG
   このビットが1の場合、緊急に処理すべきデータが含まれている事を示す。その
   データの格納先は緊急ポインタを使用して示す。
  3bit:ACK
   このビットが1の場合、確認応答版ふぉうの数値が有効であるこおを示す。
   コネクション確率時の最初のSYNパケット以外は、必ず1でなければならない。
  4bit:PSH
   このビットが1の場合、受信したデータを直ぐに上位のアプリケーションに渡す
   必要がある。0の場合にはすぐ渡さずバッファリングする事が出来る。
  5bit:RST
   このビットが1の場合、コネクションが強制的に切断される。何らかの異常が検出
   された場合に利用する。
  6bit:SYN
   コネクションの確立に使われる。このビットが1の場合、コネクション確率を要求
   すると共に、シーケンス番号に格納されている数字でシーケンス番号を初期化
   する。
  7bit:FIN
   このビットが1の場合、以降送信するデータが無い事を示す。通信が終了し、
   コネクションを切断したい場合に使用する。
 ・ウィンドウサイズ
  16ビット長で、ウィンドウサイズを示します。ウィンドウサイズとは一度に受信
  できるデータ量です。確認応答番号で示した位置から、受信可能なオクテット数を
  示します。TCPでは、ここに示されているデータ量を超えて送る事は許されません。
 ・チェックサム
  16ビット長でTCPヘッダとデータが破壊することを保証するためのチェックサムを
  示します。チェックサム計算時には、IPアドレスを含むTCP疑似ヘッダを使用しま
  す。TCPではチェックサムは省略できません。
 ・緊急ポインタ
  コントロールフラグでURGフラグが1の場合に有効になる、緊急を要するデータの
  格納場所を示すポインタです。データ領域の先頭から、この緊急ポインタで示される
  数値分のオクテット数のデータが緊急を要するデータとなります。
 ・オプション
  TCPによる通信の性能を向上させるために設定します。最大セグメント長(MSS:
  Maximum Segment Size)を決定することや、セグメントが「歯抜け状態」で
  届いた時、複数の確認応答を返すことができる選択確認応答(SACK:Selective
  ACKnowledgement)を利用することなどが可能です。

◆TCPの管理
 TCPはコネクション型通信を行いますが、その為に必要なのは通信相手との間でコネクション確率を、通信が終わったらコネクション開放を行う事です。

 ①クライアントは、最初のパケットでコントロールフラグのSYNを立ててコネクション
  の確立をサーバー側に要求します。

 ②サーバはSYNに対して確認応答であるACKとSYNを立てた返信を行います。

 ➂クライアントはサーバからのSYNに対するACKを返し、コネクションが確立します。

 上記一覧のコネクションの手続きを3ウェイハンドシェイクと言います。またこねくしょの解放は以下の流れとなります。

 ①コネクションを切断する側で、相手先に対してFINフラグを立てたパケットを
  送ります。

 ②FINを受け取った相手側はACKを返送します。ただしFINを受け取った側では、直ぐに
  FINを送る必要はなく、自分側でも送るデータが無くなった時にFINを相手側に送り
  ます。

 ➂そしてそのFINを受け取った側がACKを返信した時点で、コネクションは開放
  されます。

 上記がコネクション開放の手続きですが、コネクション開放持には4パケットの通信が必要になります。
 またTCPでは信頼性を提供するために、パケットの喪失(パケットロス)や重複、順序の入れ替わりなどをシーケンス番号と確認応答番号で行い、ウィンドウ制御によいパケットの順序を管理します。具体的にはパケットロスが検知された時には、再送処理が行われます。

◆TCPコネクションの範囲
 TCPコネクションは、基本的に通信を行う相手との間で確立しますが、この「通信を行う相手」とは、最終的な目的の相手ではなく、中継転送される場合には、その為に通信する相手ホストとなります。例えばPCとインターネットを経由してサーバに接続に行く場合、PCからサーバにコネクションを確立するのではなく、PCの直上にあるルータ等の中継装置との間でコネクションは確立され、ルータはその先のネットワーク機器との間でコネクションを確立。その様にして最終的なサーバまでパケットは送信されていきます。

Comment(0)