TCP (Transmission Control Protocol)
【ティー・シー・ピー】
TCP/IPプロトコルにおいて、全二重で信頼性があり、フロー制御のあるセッション指向(ストリーム型)の通信を行なうためのプロトコル。TCP/IPの中核ともいえるプロトコルである。OSI参照モデルでは、トランスポート層の機能に相当する。ネットワークアプリケーションではTCPの機能を使うことにより、ネットワークの物理的な構成やその特性なとに左右されることなく、常に確実な通信を行えることが保証される。telnetやftp、httpなど、非常に多くのアプリケーションでTCPが使われている。
TCPで提供される「信頼性のある通信」とは、通信路の一方から送ったバイトデータ列が、相手側へ正しく元の順番通りに届けられ、途中でデータの順番が入れ替わったり、データの欠落や改変(誤り)が起こったりしない、ということを意味している。TCPの下位層であるIP層では、2つのノード間でのパケット送信機能は提供されているが、そのデータが常に相手に正しく届くという保証はない。ネットワークが混雑していれば途中でデータが消失したり、遅延によってデータの順番が入れ替わったりすることがある。このようなIPプロトコルの特性を考慮しつつ、信頼性のある通信機能を提供するのがTCPの役割である。具体的には、以下のような手法を使って信頼性を確保している。
まず、データが相手に確実に届くことを保証するために、データを受け取った側では、必ず受信確認(アクノレッジ)を返すことにする。送信するデータには、あらかじめシーケンス番号という連続する番号を付けておき、受信確認としては、このシーケンス番号を返している。送信側では、返ってきたシーケンス番号を調べることにより、データがどこまで正しく相手に届いたかを認識できる。もし受信確認が返ってこなければ、どこか途中でパケットが消失したか、破棄された、もしくは相手が受信しそこねたものとして、再度データを送信することにする。何回か繰り返しても相手から受信確認が返ってこなければ、相手がダウンしているか、通信路が切断されたものとして、アプリケーションにはエラーを返すことになる。
もし途中のネットワークが込んでいて遅延が大きくなっているとすると、この再送処理によって複数の同一パケットが受信側に届くことがあるが、その場合は、受信側ではすでに受信した分のデータ(これはシーケンス番号を調べれば分かる)は破棄される。
このほかTCPでは、パケットを1つ送るたびに1つずつ受信確認パケットを送っていては効率が悪いので(いちいちパケットが往復しなければならないから)、複数の受信パケットに対してまとめて1つの受信確認で済ませるという方法も使っている。これにより、無駄なトラフィックが抑えられる。
以上のような受信確認や再送処理はすべてTCP層の内部で行なわれ、アプリケーションからは隠蔽されている。そのため、アプリケーションでは、安心してデータを送受信できるが、その内部処理はかなり重いともいえる。そこでTCP/IPでは、UDPというデータグラム指向の通信機能も用意されており、用途によって使い分けられている。
Copyright (C) 2000-2007 Digital Advantage Corp.