連載
» 2008年04月24日 00時00分 公開

ネットワークの基礎を学習する CCNA対策講座(7):TCPで、確実&効率よくデータを送受信しよう (1/2)

本連載では、シスコシステムズ(以下シスコ)が提供するシスコ技術者認定(Cisco Career Certification)から、ネットワーク技術者を認定する資格、CCNA(Cisco Certified Network Associate)を解説します。CCNAは、2007年12月に改訂されたばかりで、2008年1月現在、新試験の情報がまだ少ない状況です。よって本連載は、改訂前の試験(640-801J)で解説をしますが、新試験の解説が可能になり次第、新試験(640-802J)も含めて解説していきます。

[ゴールデンフォレスト株式会社,@IT]

 前回の「TCP/IPを制するものはネットワークを制す」では、TCP/IPのプロトコル群について学習しました。今回は、TCPでデータ接続を確立するための手順「3ウェイハンドシェイク」、TCP でデータを送受信する際に効率化を図る機能「TCPウィンドウ制御」について学習します。

TCPの3ウェイハンドシェイク

 TCPを使用する場合、TCPヘッダには「制御ビット」と呼ばれるいくつかのビットが含まれています。TCPでは、制御ビットを使用してデータを転送する前にあて先に接続(コネクション)の確立を確認し、あて先の了承を得て転送を開始します。このコネクションの確立に使用されるステップを「3ウェイハンドシェイク」と呼びます。

 TCPヘッダに含まれる制御ビットには次のものがあります。

構成要素(ビット) 説明
URG(Urgent) 緊急確認
ACK(Acknowledgement) 確認応答
PSH(Push) プッシュ
RST(Reset) リセット
SYN(Synchronize) 同期
FIN(Finish) 終了

 3ウェイハンドシェイクでは、接続の確立までに3つのフェイズを使用します(図1)。

図1 3ウェイハンドシェイクの3つのフェイズ 図1 3ウェイハンドシェイクの3つのフェイズ

 (1)送信元から送信先へ接続要求の送信

 送信元(ホストA)から送信先(ホストB)へ接続要求セグメントを送信します。制御ビットSYN(Synchronize)を1(ON)にし、シーケンス番号にランダムな値がセットされます(図1では100)。このようなSYNビットを1にセットしたセグメントを送信することからSYNと呼ばれることもあります。

 (2)送信先から送信元へ確認応答と接続要求の送信

 送信先(ホストB)から送信元(ホストA)へ確認応答を返信し、同時に送信先(ホストB)から送信元(ホストA)へ接続要求を送信します。確認応答では、制御ビットACK(Acknowledgement)を1(ON)にし、確認応答番号として受信したシーケンス番号に1を加算した値(図1では101)をセットします。接続要求では、制御ビットSYNを1(ON)にすると、シーケンス番号にランダムな値(図1では200)がセットされます。このようなACKとSYNビットを1にセットしたセグメントを送信することからSYN+ACKと呼ばれることもあります。

 (3)送信元から送信先へ確認応答の送信(接続確立)

 送信元(ホストA)から送信先(ホストB)へ確認応答を返信します。確認応答では、制御ビットACKを1(ON)にし、確認応答番号として受信したシーケンス番号に1を加算した値(図1では201)をセットします。シーケンス番号には受信した確認応答番号(図1では101)をセットします。確認応答が送信先(ホストB)に届くと互いに双方向のコネクションが確立されます。このようなACKビットを1にセットしたセグメントを送信することからACKと呼ばれることもあります。

 今後のデータ送信は、複数のセグメントを送信することになるため、送信側では送信バッファにTCPセグメントをためておき、受信側では受信バッファに受け取ったTCPセグメントをためつつ、シーケンス番号を使用してセグメントを並べ直してアプリケーションに渡すことになります。

確認問題1

問題

 TCPの3ウェイハンドシェイクで使用される流れとして正しいものを選択しなさい

a.SYN → SYN+ACK → ACK

b.SYN → SYN → FIN

c.SYN → ACK → SYN

d.SYN → SYN+ACK → ACK

e.ACK → SYN+ACK → SYN

f. ACK → ACK → SYN

正解

 a

解説

 3ウェイハンドシェイクは、送信元からSYNを1にセットしたセグメントを送信し、送信先は、SYNとACKの両方を1にセットしたセグメントを戻します。送信元から「ACK」を1にセットしたセグメントを送信して、接続が確立します。

確認問題2

問題

 図の(1)〜(3)に入る値を選択しなさい。

a.(1)200、(2)201、(3)300

b.(1)201、(2)201、(3)301

c.(1)200、(2)201、(3)301

d.(1)201、(2)301、(3)202

e.(1)200、(2)400、(3)300

f. (1)201、(2)400、(3)301

正解

 b

解説

 接続要求時のシーケンス番号はランダムな値ですが、3ウェイハンドシェイクが確立した後のデータ送信には、最初に決定したシーケンス番号を使用してセグメントの送信順序を表すことになります。つまり、受信側では確認応答番号に「受信したシーケンス番号+1」をセットし、確認応答を受け取った送信側では次に送信するデータを、受け取った確認応答番号から判断します。送信側が次のデータを送信するときは、確認応答番号に「受信したシーケンス番号+1」をセットし、確認応答番号で要求されたデータを送信します。結果として、送信側と受信側はどちらも最初のランダムに生成したシーケンス番号から1ずつ増分させながらデータを送信、確認していくことになります。

 データ転送中にセグメントを失った場合や確認応答が戻されない場合、対象となるシーケンス番号のセグメントを再送することになります。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。