クエリ: TCP/IPプロトコルスイートのメンバーの重要なプロトコル
文章: 電気通信 トランスポート層より上層では、セッション層とプレゼンテーション層に大まかに当てはまり、時々使われるプロトコルがある。例えば Secure Sockets Layer (SSL) や Transport Layer Security (TLS) がそれにあたる。これらのプロトコルは転送されるデータが秘匿されていることを保証する。ブラウザに南京錠のアイコンが表示されているとき、それらが使われている。最後にアプリケーション層にはインターネットユーザーがよく目にする多数のプロトコルがあり、HTTP(ウェブブラウジング)、POP3(電子メール)、FTP(ファイル転送)、IRC(チャット)、BitTorrent(ファイル共有)などがある。 Local Area Network(LAN、数km以内で機能するコンピュータネットワーク)の特徴は、インターネットとは別である。この程度の規模のネットワークは大規模ネットワークの特徴を全て備える必要はなく、それによってよりコストを低減させることができる。 1980年代中ごろ、OSI参照モデルのデータリンク層とアプリケーション層の間のギャップを埋めるプロトコルスイートがいくつか生まれた。例えば、AppleTalk、IPX、NetBIOSなどで、特にMS-DOSユーザーによく利用されたIPXが1990年代初期まで広く採用されていた。そのころには既にTCP/IPが存在していたが、主に政府機関や研究機関での利用に限られていた。インターネットが成長し、インターネット関連のトラフィックの割合が増えてくると、LANでもTCP/IPを採用することが多くなり、今ではTCP/IPがLAN上でも一般的になっている。TCP/IP化の動きを助けたテクノロジーとして、クライアントが自身のネットワークアドレスを探すのを助けるDHCPがある。同様の機能はAppleTalkやIPXやNetBIOSのプロトコルスイートにも標準で備わっていた。
文章: プロトコルスタック プロトコルスタックは、コンピュータネットワーク用のプロトコルの階層である。プロトコルスイートも同じ意味で使われることが多い。ただし「プロトコルスイート」は各種プロトコルの定義、「プロトコルスタック」はそれらのソフトウェアでの実装と、使い分けられることもある。 文章: トランスポート層 トランスポート・プロトコルは、トランスポート層(第四層)の通信プロトコルである。インターネットにおける2大トランスポート・プロトコルとして、コネクション型の「TCP」(Transmission Control Protocol)と、コネクションレス型の「UDP」(User Datagram Protocol)がある。その他、Datagram Congestion Control Protocol(DCCP)やStream Control Transmission Protocol(SCTP)が有る。 トランスポート層は通常はホストコンピュータのオペレーティングシステム上のプロセスに制御され、ルータやスイッチには制御されない。通常トランスポート層は、ネットワーク層(第三層)によって提供された信頼性が低く極めて基本的なサービスを、より強力な物へ転換する。 TCP/IPモデルでは、トランスポート層はホストコンピュータ上の適切なアプリケーションプロセスにデータを配送する責任が有る。これは異なったアプリケーション・プロセスからのデータの統計的多重化、すなわちデータのパケット化、およびトランスポート層の各データ・パケット・ヘッダへの送信元/送信先ポート番号の追加を伴う。送信元および送信先のIPアドレスと共に、そのポート番号はネットワーク・ソケット、すなわちプロセス間通信の識別アドレスを構成する。OSI参照モデルでは、この機能はセッション層が対応している。 文章: Serial Line Internet Protocol Serial Line Internet Protocol(シリアル回線IP)は、ほとんどのコンピュータに内蔵されていたシリアルポートからインターネットなどのTCP/IPネットワークに電話回線など(シリアル通信回線)の低速回線を通じて一時的に接続するためのプロトコルである。略称SLIP(スリップ)。 1984年にアメリカ3Comのリック・アダムスがBSD4.2に実装しRFC1055として標準化された。 しかしSLIPはチェックサム(イーサネットのCRCなど)などの誤り検出機構がないため、ノイズの発生しやすい回線で転送中のデータが破壊されてもリンク層で誤りを検出できない欠点があり、上位層での検出作業が必要となる。 かつては遠隔地からダイアルアップしてTelnetなどに多く使用されていたが、ネットワーク層にIPしか利用できず、上記の欠点などセキュリティも低いため、現在ではPPPに取って代わられている。 文章: Digital Transmission Content Protection DTCPは、USB、MOST、Bluetooth、IEEE1394 (FireWire,i.LINK)、WirelessHD(英語版)、IPの各種通信プロトコル上で実現されている。IP上で実現されているDTCPはDTCP-IPと表現される。暗号化方法としては、DTCP-IPでは128ビットAESが使用され、他のプロトコルにおいてはM6(英語版)が使用されている。 DTCP-IPはIPを使った通信すべてをカバーするものではなく、家庭内ネットワーク領域での用途に限定している。 そのためTTLとRTTに制約を設けている。TTLは3以下、RTTは7ms以下である。 TTLはルーターを経由する度にデクリメントされる値で0となったパケットはネットワーク上に現れることはない。TTLが3の場合ルータを2つしかまたぐことが出来ないことを意味する。 RTTは通信の往復にかかる時間であり、ルーターのホップ数や通信の距離などに制約をかける意味がある。 文章: Point-to-Point Protocol PPPはSLIP (Serial Line Internet Protocol) の後継として1992年に規定されたが、現在は1994年に規定された版 (RFC 1661) が使われている。PPPはSLIPと異なり、TCP/IP以外の通信プロトコル(NetBEUI、AppleTalkなど)とも接続できるように設計されているのが特長である。 ダイヤルアップPPPは、PPPにダイヤル発信や着信の機能を追加したものであり、遠隔地から電話回線を通じてネットワークにコンピュータを接続するためのプロトコルとして一般に広く利用されてきた。初期のIIJによる実装「iij-ppp」が有名である。 PPPの通信はリンク制御プロトコル (LCP, Link Control Protocol) とネットワーク制御プロトコル (NCP, Network Control Protocol) の2つの通信プロトコルを使用している。LCPによってパスワード認証プロトコル (PAP, Password Authentication Protocol) やCHAP (Challenge-Handshake Authentication Protocol) を使ってユーザ認証を行ってリンクを確立した後、NCPがそれぞれの通信プロトコルに必要な設定や認証を行って接続を確立する。 文章: リンク層 TCP/IPモデルのリンク層は、開放型システム間相互接続 (OSI) プロトコル(英語版)スタックにおけるデータリンク層と物理層を組み合わせたものと直接比較されることが多い。これらの層はプロトコルの技術的な範囲においてはある程度一致はしているが、同一ではない。TCP/IPのリンク層は、OSIスタックの各層とはより広い範囲や原理に渡って異なる分類の概念と用語である。このことは、Address Resolution Protocol (ARP) などのTCP/IPモデルのリンク層に限定された特定のプロトコルが、OSIのデータリンク層とネットワーク層の中間に相当すると言われることが多いことからも良く分かる。一般的に、直接の比較や厳密な比較は避けるべきである。なぜならTCP/IPにおける層分けは主要な設計基準ではなく、「有害である」とみなされることが多いからである (RFC 3439)。 時々遭遇する別の用語であるネットワークアクセス層は、物理ネットワークとリンク層との近さを示唆しようとしている。しかしながら、この使い方はミスリーディングで標準的ではない。なぜならリンク層は単なるネットワークアクセスよりも広い範囲の機能を示唆するからである。重要なリンク層プロトコルは、ローカルネットワークのトポロジーを証明したり、ルーターや近隣のホストを発見することのように、ネットワークへのアクセスを超えた機能のために使用される。 文章: ポート (コンピュータネットワーク) このように、ポート番号とはサーバ上のサービスを特定するための番号であるといえる。そのため、サーバ側のポート番号は重要であるが、クライアント側のポート番号は通常問題とされず、空いている番号を適当に自動で割り当てる。 なお、上記手順の3.で作成されるソケットは、待ち受け用のソケットと同じIPアドレス・ポート番号・プロトコル (TCP/UDP) を有する。 すなわち、1台のサーバ機に、同じIPアドレス・ポート番号・プロトコルのソケットが複数存在し得る(ポートとソケットは一対多の対応となり得る)ことに注意が必要である。 この様子は、同時に複数の相手と通信を行っているWebサーバなどで、netstatコマンド(ソケットの通信状況を表示するコマンド)を実行してみるとよくわかる(最近のGNU/Linuxではiproute2への移行が進んでいるため前述のコマンドよりも$ ss --resolve --tcp --udpなどとしたほうがいいであろう)。 ここでxxx.yyy.zzz.wwwはこのWebサーバ機のIPアドレス、80はWebサーバプログラムのポート番号、右側は各クライアントのIPアドレスおよびポート番号である。 文章: インターネット層 明確な一級参照文献と標準的な標準文書にもかかわらず、インターネット層はネットワーク層と不適切な呼ばれ方をされることが多い。なぜならTCP/IPモデルのインターネット層は、OSI参照モデルのネットワーク層(レイヤ3)と直接比較されやすいからである。 インターネット層とネットワーク層には重複しているところがあるが、OSIとTCP/IPの2つのモデルが表す分類方法はそれぞれ異なる。特にこれら2つの層に配置されたプロトコルで許容される特質は、それぞれのモデルで異なる。OSIのネットワーク層では、ネットワーク機能を手助けする全てのプロトコルに対する包括的な層である。他方、インターネット層は、具体的には Internet Protocol を利用してインターネットワーキングを手助けするプロトコルのスイートである。 文章: インターネット・プロトコル・スイート IETFは再三にわたりインターネット・プロトコルと構造の開発はOSIに準拠する事は意図しないという事を述べている。 文章: 下位層プロトコル 下位層プロトコルは、より抽象的で論理的にインターネット利用者やアプリケーションに近い機能を提供する上位層プロトコルに対して、より具体的で論理的に物理媒体に近い機能を提供する。 言い換えれば、下位層プロトコルは通信するデータを透過的に通信相手に送り届ける機能を上位層プロトコルに提供し、具体的にどのように転送するかという役割を担っている。そのデータがどういう意味の情報なのかという事については関知しない。 下位層プロトコルは、送信側では上位層プロトコルから渡されるデータをカプセル化(隠蔽)し、受信側ではカプセル化されたデータを元に戻して上位層プロトコルに渡す。従って、複数の上位層プロトコルから渡されるデータを多重化して同時に取扱い、多重化されたデータを分離して上位層プロトコルに渡す事ができる。上位層プロトコルから渡されたデータが下位層プロトコルで送信できる大きさを超える場合は小口に分割して送信し、受信側で元の形に組み立てる。逆に小さすぎる場合は一つにまとめてから送信し、受信側で元の形に分離する場合も有る。 現実の郵便に例えると、郵便ポストは手紙を入れた封筒の下位層プロトコルに相当すると言える。 インターネット・プロトコル・スイートでは、IPはUDPとTCPに対して下位層プロトコルにあたり、同様にUDPとTCPはIPに対して上位層プロトコルにあたる。 またOSI参照モデルでは、トランスポート層以下を下位層プロトコルと呼び、セッション層以上を上位層プロトコルと呼ぶ。 文章: IPマルチキャスト マルチキャストはその性質上、コネクション指向ではない。このため、TCPのように欠けたパケットを再送可能なプロトコルを使用するのは適切でない。オーディオ/ビデオストリーミングのようなアプリケーションで、たまにパケットをドロップしたとしても問題はないのである。しかし、重要なデータを配布する場合、再送要求のためのメカニズムが必要となってくる。 シスコシステムズが提案した再送スキームにPGMがある(もとはPretty Good Multicastingの略とされたが、商標上の理由でPragmatic General Multicastに改められた)。PGMはRFC 3208で文書化されている。このスキームでは、マルチキャストパケットはシーケンス番号を有する。パケットが欠けた場合、受信者は欠けたパケットを再びマルチキャストするよう要求できる。同一マルチキャストグループに所属する他のメンバーは、自分に必要なければ再送データを無視する。拡張バージョンであるPGM-CCは最も低い帯域幅の受信者に合わせてグループ全体の帯域を下げ、IPマルチキャストをより「TCPフレンドリ」にしようと試みている。 Internet Engineering Task Force (IETF)により文書化されたその他のスキームは以下の2つである: 文章: プロトコルスタック スタック(階層)やスイート(一組)内の、個々の通信プロトコルはある1つの目的のために設計されることが多い。このようなモジュール化によって設計や評価をより容易にする。各プロトコルモジュールは上下の他のモジュールと互いに通信するので、一般にこれをプロトコルが積み重ねられたものとして見ることになる。最下層のプロトコルはハードウェアとのやり取りを行う層である。より高い層はさらに様々な機能をそれに付与していく。ユーザーアプリケーションは最上層とだけやり取りする。(OSI参照モデルを参照) 実装では、プロトコルスタックは、メディア(媒体)層、トランスポート(転送)層、アプリケーション(応用)層の3層に分けられることが多い。オペレーティングシステムによっては、これらの層間のインタフェースを明確に定義していることもある。つまり、メディア層とトランスポート層のインタフェースと、トランスポート層とアプリケーション層のインタフェースである。 メディア・トランスポート層インタフェースは、トランスポートプロトコル・ソフトウェアからメディアやハードウェア(カードドライバ)をどう使うかを定義している。例えば、TCP/IPトランスポート・ソフトウェアとイーサネットハードウェアとのやり取りを定義している。この種のインタフェースの例として、ODI、Microsoft WindowsやMS-DOSのNDISがある。 文章: Serial Line Internet Protocol Serial Line Internet Protocol(シリアル回線IP)は、ほとんどのコンピュータに内蔵されていたシリアルポートからインターネットなどのTCP/IPネットワークに電話回線など(シリアル通信回線)の低速回線を通じて一時的に接続するためのプロトコルである。略称SLIP(スリップ)。 1984年にアメリカ3Comのリック・アダムスがBSD4.2に実装しRFC1055として標準化された。 しかしSLIPはチェックサム(イーサネットのCRCなど)などの誤り検出機構がないため、ノイズの発生しやすい回線で転送中のデータが破壊されてもリンク層で誤りを検出できない欠点があり、上位層での検出作業が必要となる。 文章: Winsock Windows Socket API 仕様は2つのインタフェースを定義している。1つはアプリケーションソフトウェア開発者が利用するAPIであり、もう1つはネットワークソフトウェア開発者が新たなプロトコルモジュールをシステムに追加する際に利用するSPIである。API は準拠アプリケーションが Winsock に準拠して実装された任意のプロトコルを使って動作可能であることを保証する。SPI は準拠プロトコルモジュールを Windows に追加可能であることと、任意のAPI準拠アプリケーションから利用可能となることを保証する。リリース当初、複数プロトコルサポートが必須だったため、このような保証は重要だったが、今では学問的興味から語られるだけである。Windows Socket version 2.0 には IPX/SPX で使われる機能も含まれているが、Winsock 2.0 リリース当時から既に廃れつつあるプロトコルであり、今ではこれを使うものはほとんどないだろう。マイクロソフトは最近の Windows には必ず高品質なTCP/IPスタックを実装しており、その代替となる有力な製品も存在しない。さらに言えば、TCP/IP 以外のプロトコルを実装しなければならない強い動機も存在しない。 Windows Sockets はバークレーのソケットに基づいているが、Windows の標準プログラミングモデルに対応するために機能を追加している。Winsock はソケットのほとんどの機能をカバーしているが、Windows と UNIX の根本的な違いからどうしても避けられない差異も生じている(とは言っても、STREAMSとの差異に比べれば、ずっとソケットに近い)。APIに含まれる全ての関数名の頭にはWSAが付く。例えばホスト名参照の WSAGetHostByName() などである。BSDソケットからの拡張で特筆すべきは、「非同期ソケット」およびオーバーラップI/Oを利用した「オーバーラップソケット」である。非同期バージョンの関数は、接頭辞として WSAAsync を付け、WSAAsyncGetHostByName() などという名前になっており、Windowsのウィンドウメッセージによって結果を通知する。非同期処理のキャンセルはWSACancelAsyncRequest()で実行する。オーバーラップソケットは完了通知にWSAEVENTオブジェクトとWSAOVERLAPPED構造体を使用する。なお、Winsockの非同期ソケットやオーバーラップソケットは、BSDのノンブロッキングソケットとは異なる概念である。ブロッキングモードのsend()およびrecv()のタイムアウト時間を設定するソケットオプションSO_SNDTIMEOおよびSO_RCVTIMEOを使用するには、ソケット作成時にWSA_FLAG_OVERLAPPED属性が設定されている必要がある。Winsock2では、ソケットは既定でブロッキングモードで作成される。またBSD互換のsocket()関数を使用して作成されたソケットは、既定でWSA_FLAG_OVERLAPPED属性を持つ。 設計目標は、UNIXから Windows へのソケットベースのアプリケーションの移植を容易にすることであった。新たに Windows 向けに書かれるプログラムにとって、そのAPIが十分かどうかはあまり考慮されなかった。このため、Winsock には移植のために設計された要素がいくつか含まれている。例えば、UNIXアプリケーションでは、ネットワークのエラーも標準Cライブラリの関数内のエラーも同じ errno で表される。これは Windows にはない機能であるため、Winsock はそのための関数 WSAGetLastError() でエラー情報が得られるようにした。このような機能は役立つものの、アプリケーションの移植はなかなか困難だった。多くのTCP/IPアプリケーションは、仮想端末とかforkシステムコールといったUNIXのシステム固有機能を使って実装されており、そのような機能を Windows で再現するのが困難だったのである。しかし、間もなく移植よりも Windows 独自のアプリケーション開発の方が主流となっていった。 文章: インターネット層 サービスの信頼性を提供する機能は、トランスポート層におけるTransmission Control Protocol (TCP) など、より高い層におけるプロトコルの義務である。 IPv4(IPv6ではない)においては、各データグラムのヘッダを保護するためにチェックサムが利用される。チェックサムは受信したヘッダの情報が正確であることを保証するが、IPは各パケット内のデータに発生した可能性のあるエラーの検出を試みることはしない。