サーバー構築 セキュリティ TCP/IP基礎 TIPS 書籍 ブログ

Web全体 サイト内検索

 TCP/IPの基礎知識
TCP/IPとOSI参照モデル
必須:コンピュータの情報単位
IPアドレスとその仕組み
プリフィックス値とサブネットマスク
グローバル/プライベートアドレス
ブロードキャスト/マルチキャストアドレス
 プロトコル別解説編
ARPとRARP/MACアドレス
ポート番号とは?
TCPとUDP/両プロトコルの相違
ICMPとは?
DNSとは/DNSサーバーの仕組み
VPN(PPTP/L2TP)とは
 実践ネットワークコマンド
PINGコマンド/MTU値の調整
TRACERTコマンド
NETSTATコマンド
NSLOOKUPコマンド
ARPコマンド
IPCONFIGコマンド
 各関係組織・団体
JPNIC
Whoisデータベース(VeriSign)
IANA
 




ついにトランスポート層であるTCPとUDPについて解説していきます。当サイトのページを読んでくれている方は局所的に読んでいると思われますが、管理人的にはTCP/IPの流れをまとめるために最初から記述していっているため、ついにここまで来たのかといった感じです。あー疲れた。なんていってる場合ではありません。TCP/IPを理解するという意味では実はこのトランスポート層がひとつの山場です。ここを乗り越えるとある程度、TCP/IPのことを理解できるようになり、ネットワークそのものも理解しやすくなってくることと思います。それでは頑張って読み進めていってください。



■TCPの概要

TCP(Transmission Control Protocol)は2つの端末上のプロセス間で、信頼性のある通信を提供するためのプロトコルのことを指し、OSI参照モデルでいうトランスポート層に属しています。また、その仕様はRFC(Request For Comment)-793などで規定されています。では、信頼性のある通信を提供するとはどういうことかというと、コンピュータ通信においては、コンピュータとコンピュータがデータ処理をするためには、「パケットが損傷していないか」「消失(ロス)していないか」「重複や遅延がないか」「到着順序にズレは生じていないか」などを考慮しなくてはなりません。TCPはデータ通信時にこのような事柄を検証して確固たる信頼性、伝達保証性を提供しています。それでは以下に、TCPが担っている信頼性確保のための代表的なものを解説します。

◎TCPの役割

①コネクション管理

データがきちんと配送されるかどうかを、TCPが可能な限り面倒をみます。もし、どうしても確認がとれない場合はそのことについてアプリケーション側に通知します。具体的には、双方のコンピュータの接続が確立した時点で、仮想経路(バーチャルサーキット)と呼ばれる情報伝達のための通信路を実現し、実際の通信を開始します。そして、この仮想経路を維持するためにコネクションの確立や維持といった作業を行います。このように、セッションを確立してからデータを送信する形式のことを「コネクション型」と呼び、TCPが「コネクション型のプロトコル」と言われる所以はまさにここにあるのです。

◎仮想経路の確立



②応答確認によるエラー対処

データが相手に届かなかったり、途中で消失(ロス)したりといったエラーが発生した際に、それを検知して、エラーを修復する(データを配送する)仕組みをもっています。TCPではタイマーを利用して、送信後、ある一定の時間が経っても応答の確認がなければデータは消失したとみなし、データを配送することでこのような手順を実現しています。これによってプロセス側はエラーがないことを前提として通信を行うことができ、パケットの消失などによる通信不良を防ぐことができるのです。

③シーケンス番号による順序管理

遅延によるデータの再送処理を行った場合は、IPはパケットをどんどん送ってくるので、受信側では同じパケットを受信してしまうことがあります。ネットワークのトラフィック状況によってはそのパケットが順番どおり届くとは限りませんし、正しいパケット以外は破棄しなくてなりません。そこで「シーケンス番号」と呼ばれる、アプリケーションから渡された数値を送信側と受信側で管理して、送信側でデータを配送するたびに、受信側はデータを受信するたびにその数値をカウントしていくようになります。この結果として、同じシーケンス番号のパケットが届けば重複したと判断し、それを元通りの順番に組み立てなおすことで、データの順番が正しいことを保証しています。

④ウィンドウコントロール

パケットの受信にバッファ(送受信をする際に、一時的にデータを格納する場所や仕組み)を用いて複数のパケットをまとめて処理することを「ウィンドウコントロール」と呼び、これによって1つずつ送信する場合と比較して高速に転送を行うことができるようになります。

具体的にいうと、ある2つのパケットを同時に送信する場合は、送信側は応答確認を待つことなく、次のパケットを送信します。受信側もバッファがいっぱいになるまで処理することができるので順次、応答確認を返すことができます。このように同時に処理することのできるバッファの集団を「ウィンドウ」と呼び、バッファサイズを「RWIN(Receive Window Size」(ウィンドウサイズ)と呼びます。このサイズは各自で規定することができ、ADSLでもっと速い速度を体感したいと思った方は一度はいじった記憶があるでしょう。





■TCPセグメントフォーマット

TCPのパケット(これをTCPセグメントと呼びます)は、TCPヘッダとデータからなり、このTCPヘッダに上記で説明したTCPの信頼性確保のための仕組みが含まれていることになります(以下図参照)。


◎TCPセグメントフォーマット




①SRC PORT:送信元ポート番号(16bit) ②DST PORT:宛先ポート番号(16bit)

送信元と受信側でのポート番号を指定して、サービスを特定します。

③SEQ:送信シーケンス番号(32bit)

データの順番を保証する仕組みで、上述した「シーケンス番号による順序管理」に相当します。この値は、通信が確立された段階で初期化されます(つまり、0に戻される)。

④ACK:受信シーケンス番号(32bit)

相手先から送られてくる送信シーケンス番号がここに入ります。実際に送られてきたTCPセグメントの送信シーケンス番号と比較して、正しければこれを受け入れて、違っていれば破棄するような仕組みになっています。

⑤HLEN:ヘッダ長(4bit)

TCPヘッダの長さを32bit(4バイト)単位で指定し、オプションが指定されていない場合、TCPヘッダは20バイトなので「5」が入ります。

⑥Reserved:リザーブ(6bit)

予約されており、通常は未使用。値は全て「0」が入ります。

⑦Code Bit:コードビット(6bit)

各ビットごとに意味があり、送られてくるTCPセグメントの意味や処理方法について指示しています(以下後述)。

◎コードビット




⑧Window:ウィンドウ(16bit)

送信側は自分の都合でパケットを送信することができますが、受信側は他の処理によって送信側の都合にあわせて処理することができない場合があります。このとき、受信側はあとどれくらいのデータを受信できるのかを相手に通知するフローコントロール[流量制御]と呼ばれる制御を行います。単位はバイトで、最大値は65535バイトになります。

⑨Checksum:チェックサム(16bit)

TCPセグメントのヘッダとデータを一定の方式で計算した結果の値をここに書きこみます。受け取った側も同様の計算を行い、結果が一致していれば、セグメントが途中で壊れていないことを保証することができます。IPのチェックサムがヘッダが壊れていないことを示すだけなのに対し、TCPのチェックサムは、データが壊れていないことを含めて保証します。

⑩U-PTR:緊急ポインタ(16bit)

コードビットのURGフラグが「1」の場合、緊急処理を要するデータの位置を示します。

⑪Opt:オプション(任意)

TCPのオプションは通常は使われることがなく、使用するかどうかはアプリケーションメーカーにゆだねられています。セグメントの最大サイズを調整する場合などに利用されます。




■TCPの制御手順

下記の図はTCP/IPのシーケンスで①クライアントからSYN(Synchronize flag)パケットを送信、②サーバーからSYN+ACK(Acknowledgement flag)パケットを送信、③クライアントからACKパケットを送信、という3段階の手順を踏んだ3ウェイハンドシェイク(3Way Handshake)と呼ばれるものを表しています。TCP/IPではこのような手順を踏んで通信を確立するような仕組みとなっており、以下にその詳細について解説していきます。


◎3ウェイハンドシェイク





①接続を要求する

通信を行う側が、SYNフラグを「1」にしたセグメントを相手に送ります。受け取った側は通信できる状態にあれば同様に「1」のデータを返します。もし、通信できなければRST(Reset)フラグを「1」にしたセグメントを返します。


◎接続が成立する場合





◎接続が成立しない場合






②接続が確立される

双方の接続が確立された段階でバーチャルサーキットと呼ばれる通信路ができあがり、この回線は通信が終了するか、なんらかの理由で切断されるまでは維持され、以降はセグメントのやり取りに使用されます。




③データの転送

送信側は受信側が了解した量に見合ったサイズのセグメントを送り出します。

④受け取ったデータをチェックする

受信側は受け取ったセグメントのチェックサムからTCPヘッダのチェックサムの値と照合します(セグメントの破損の確認)。

⑤エラー対処(データの配送)

なんらかの原因によって受信側より一定時間、応答メッセージが返ってこない場合はもう一度データの再送を行います。





⑥フローコントロール[流量制御]

受信側はRWINの値で、受け入れるデータ量を送信側に示します。





⑦データ送信の終了

送信するデータがなくなったら、コードビットFINフラグを「1」にしたフラグを送ります。

⑧接続の切断(バーチャルサーキットの切断)

相手側も送信するデータがなければ、同様にFINフラグを「1」にしたセグメントを返してきます。その段階でバーチャルサーキットの接続が切断されます。この時に何度接続しようとも正常にデータが送れなかった場合は、RSTフラグを「1」にしたセグメントを相手に送信し、回線を強制的に切断します。








■UDPの概要

UDPはTCPとは違って、いたってシンプルなプロトコルです。TCPは伝達保証性を確保するという重要な機能を果たしているため、どうしてもエラーチェックや再送要求などのネゴシエーションが増え、高速にデータを届けるという点に関してはあまり得意ではありません。すなわち、動画や音声などをリアルタイムに転送するマルチメディアアプリケーションには不向きなプロトコルであるといえるのです。そこで、TCPの伝達保証性を省略するかわりに、高速性を重視したプロトコルとして利用されているのがUDP(User Datagram Protocol)なのです。

UDPは、コネクションを確立して通信状態を管理したり、誤り訂正のためにパケットを再送するといった信頼性を保証する機能がないため、TCPのような「コネクション型のプロトコル」に対して「コネクションレス型のプロトコル」と呼ばれています。当然、ACKやSYNのフラグもなく、UDP自身が持っているのは、データが壊れていないかどうかを確認するチェックサムの仕組みだけです。その分だけいささか信頼性は乏しくなりますが、より高速に相手にデータ転送できる仕組みを確立しているのです。そのため、UDPは主に、DNSでの名前解決要求やDHCPなどのレスポンス重視の通信サービスや、リアルタイム再生型のアプリケーション(Real PlayerやVDO Liveなど)などに有効なプロトコルであるといえます。UDPのパケットのヘッダ構成も以下のように非常にシンプルなものになっています。

◎UDPメッセージフォーマット

SRC PORT
送信元ポート番号
DST PORT
宛先ポート番号

Length
データ長
Checksum
チェックサム
Data
データ



■TCPとUDP/両プロトコルの相違

以上、説明してきたことをまとめると以下のようになります。

TCP UDP
①信頼性重視 ①高速性重視
②コネクション型のプロトコル   ②コネクションレス型のプロトコル
③誤り訂正(エラー補正)や再送の機能を搭載   ③プロトコルの処理が高速
④代表的なアプリケーション・プロトコル:HTTP、FTP、SMTP、POP、FTP、TELNETなど。   ④代表的なアプリケーション・プロトコル:DNS、DHCP、TFTP、NTPなど



 

Copyrights©KORO 2002-08 All Rights Reserved.Since 02/08/15 | サイトのプライバシーポリシー