- ホーム >
- 基礎知識 >
- インターネットの仕組み >
インターネットの標準プロトコル ~ TCP/IPとは ~
無数の異なる種類のコンピュータ(パソコン)が存在するインターネットでは、通信ルールであるプロトコルを共通にしなければ通信できないことを前項で学習しました。
その共通となるモデルがOSI参照モデルになります。
7つの階層に分けられ、それぞれに役割が規定されていますが、特にわかりにくいのは第2層と第3層で、同じネットワークと異なるネットワークの通信の違いではないでしょうか。
身近なところで言うと、多くの方が会社や学校でLANを利用されていることと思います。その中にセグメントの違いによって通信できないネットワークがあれば、異なるネットワークが存在していることになります。
現在、通信機器は非常に高性能になっており、同じケーブルを利用していてもVLAN(ブイラン)と呼ばれる技術で、セグメントを分離することができます。
こうしたネットワーク環境が一般的になってきているために、逆に身近なところに置き換えてL2通信とL3通信を理解するのが難しくなってきています。
ただ、初歩の理解としては、LANが同じネットワークで、インターネットが異なるネットワークという理解でかまいません。インターネットにアクセスするということは、異なるネットワークへアクセスするということをしっかり覚えておいてください。
そして、異なるネットワークにアクセスするためには、第3層のプロトコルでルーティングを行う必要があります。つまり、インターネットにアクセスするためにはルーティングを行うルータなどの装置が必要になります。ご自宅でインターネットを利用されている場合は必ず接続されていますので、装置を確認してみてください。
こうして、第3層の規定によってインターネットに接続することが可能になります。代表的な機器はルータですが、代表的なプロトコルも当然存在します。
それが、
IP(Internet Protocol:インターネットプロトコル)
です。
IPは文字どおり、インターネットの基本的なルールを定めたプロトコルになります。主な仕事はルーティングによってパケットを送り届けることであり、IPで通信することがインターネットでの共通ルールとなっています。
したがって、
IPプロトコルのネットワークがインターネットである
と言い換えることもできるほど重要なプロトコルです。
IPは、インターネットそのものとも言えるプロトコルなのです。
ただし、ベストエフォートであるインターネット環境では、IPだけでは通信の品質が確保できません。そこで、第4層のトランスポート層のプロトコルを併用して品質を確保しています。
前項で学習のとおり、第4層は通信の品質を確保するための手順を規定しています。
代表的はプロトコルは、
TCP(Transmission Control Protocol:ティーシーピー)
になります。
この2つのプロトコルは標準の組み合わせとなっており、
TCP/IP(ティーシーピー アイピー)
と総称して使われています。
まさにインターネットの標準プロトコルであり、インターネットに接続するためには、どんな機器でもこのTCP/IPをインストールしておく必要があります。(OSに標準でインストールされています)
では、この2つのプロトコルをより詳しく理解していきましょう。
まずIPについては、これまでの学習のとおり、データをパケットに分割して「IPアドレス」によってルーティングを行い、データを異なるネットワークへと送り届けます。
膨大なインターネットの中で、ルータがパケットのIPアドレスをみて次のネットワークへ中継していきます。IPアドレスについては、別途 IPアドレスとは(1) で詳しく学習するので割愛しますが、基本的にIPの概要はこれだけおさえておけば十分です。
そしてTCPは、IPの通信を補完します。
TCPの具体的な仕事はいくつかあり、どれも重要な仕事になっています。
データが届かない場合は再送する
届かないデータはあきらめ、もう一度送ることですべてのデータが届くようにして信頼性を担保しています。
このことは非常に理にかなっています。インターネットのネットワーク負荷を高めることはなく、ただデータを再送する仕組みによって、ある意味で完全なデータ伝送が保障されます。
ウェブページを閲覧しているときに、ページが開くのが遅いなどの経験は誰でもありますが、それはTCPによるデータの再送が大きな原因のひとつです。
TCPでは、パケット(第4層ではセグメントという単位)を送信すると、送信先の相手側から到着確認を受ける仕組みになっています。その到着確認を受けてから次のパケットを送信します。
そのため、到着確認が一定時間返ってこない場合はパケットを再送するのです。こうした仕組みは速度の低下につながりますが、確実に相手に届けることができるため、インターネットの標準プロトコルになっています。
通信先の「アプリケーションソフト」を指定して送り届ける
前項で学習のとおり、IPアドレスから最終的にはMACアドレスによって、データがパソコンの住所まで届きます。
そして、受け取ったデータは第1層から上位層へ渡されていきます。ここで問題となるのは、上位層のどのアプリケーションソフトに渡すのかということです。
取り扱うアプリケーションソフトが、メールソフトなのかブラウザなのかわからなければ処理することができません。小包の宛名が会社名だけで「部署」や「担当者」の名前がないのと同じです。1階の受付で止まってしまいます。
それと同じで、パソコンの住所も「部署名」や「担当者」であるアプリケーションソフトまで指定してやらなければならないのです。IPアドレスやMACアドレスでは、そのパソコンのアプリケーションソフトまでは指定できません。
そこで、TCPによってさらに細かい「部署」を指定します。
TCPが指定する部署名を、
ポート番号
と言います。
ポート番号を指定することによって、データを受け取った側がどのアプリケーションソフトなのかを特定することができます。
ポート番号は、16桁の2進数を10進数に置き換えて「25」「110」などと表されます。(進数の変換について詳しくは、2進数と10進数と16進数 を参照してください)
16桁の2進数ということは、2の16乗で「65,535」個のポートが存在します。アプリケーションソフトには十分な数です。
どのようにポート番号を指定するのかというと、ユーザー側(通信を開始する側)のポート番号は、基本的にアプリケーションソフトが起動するたびにOSが自動的に割り当てます。(メールソフトやブラウザなどのアプリケーションごとにポートが割り当てられます)
一方、サーバ側(通信を受ける側)のポート番号は固定の番号で、多くはあらかじめ予約された番号となっています。
例えば、メール送信のSMTPが「25」、メール受信のPOPが「110」、WWWのHTTPが「80」などで、このようなポート番号を「ウェルノウンポート」と言います。
必ずウェルノウンポートで通信させる必要はありませんが、その番号を使用することが慣例になっています。ウェルノウンポートは1023番以下に分布しており、ウェルノウンポートを持たないプロトコルを使用するアプリケーションソフトは、1024番以上を使用するということも慣例になっています。
少々ややこしいですが、サーバ側とユーザー側で分けてイメージするとよくわかります。これはサーバ側とユーザー側が同じポート番号で通信するという意味ではありません。
OSがユーザー側のアプリケーションソフトに割り当てるポート番号は、1024番以降(実際には49152番以降)で、この番号は通信のたびに変わります。しかし、サーバ側のポート番号は変わりません。このサーバ側のポート番号の多くがウェルノウンポートとして使われているのです。
ユーザー側のポート番号は変わるため、サーバにアクセスした時にポート番号が伝えられます。そのためユーザー側のポート番号は変わっても問題ありません。
しかし、サーバ側のポート番号は簡単に変えることができません。多くのユーザーがそのポート番号を指定してそれぞれのアプリケーションで通信してくるからです。
例えば、メールの通信を受け付けるポートや、Webの通信を受け付けるポートなどを公開して開けておかなければなりません。ここが変わってしまうと、ユーザー側から通信を行うことができなくなってしまいます。
そのため、セキュリティ上の脅威となることもあり、ポート番号を変更するサーバ管理者もいます。このように、サーバ側のポートは常に開いたまま誰でも届けることができますが、ユーザー側のポートは常に変更され、セキュリティが保たれています。
相手との仮想的な通信経路を確立してから通信を開始する
これはあくまで「仮想的」なので、回線交換方式のように回線を占領してしまうことはありません。
TCPでは、経路(コネクションという)が確立されてから本データを送信するので、比較的安全に大容量のデータをやり取りすることができます。
コネクション確立のため通信速度が遅いというデメリットがありますが、イーサネットの高速大容量化やパソコンの処理性能の向上によって、TCPでも高速化が実現できるようになっています。
一方、コネクションを確立せず、直接相手にパケットを送信するプロトコルもあります。
同じ第4層の「UDP」というプロトコルです。再送も行わないため信頼性はTCPに劣りますが、TCPより伝送速度は速くなります。(ポート番号はUDPも使用します)
UDPは、動画のストリーミング再生や一斉に送信するブロードキャスト通信などに利用されています。ストリーミングとはダウンロードの完了を待たない同時再生のことです。
TCPでは再送などを行うためデータがなかなか整わず、再生が追いつかない場合があります。また、TCPはコネクションを確立してから送信するという性質から、パケットを複数の宛先に送る1対多の通信では利用できません。
このように、用途によってTCPとUDPが使い分けられています。
下図は、前項と同じOSI参照モデルです。TCP/IPは、第3層と第4層にあたります。
階層 | 名称 | 特徴 |
---|---|---|
第7層 | アプリケーション層 | アプリケーションソフト間での通信を規定 |
第6層 | プレゼンテーション層 | データ形式に関する規定(文字コードや画像形式など) |
第5層 | セッション層 | 通信の開始/終了に関する規定(コンピュータ間のコネクションや切断など) |
第4層 | トランスポート層 | 通信の品質を確保するための通信手順を規定(エラー時の再送や到着確認など) |
第3層 | ネットワーク層 | 異なるネットワーク間の通信を規定(パケットのルーティングなど) |
第2層 | データリンク層 | 同じネットワーク内の通信を規定(フレームの送受信の規定など) |
第1層 | 物理層 | 接続のための物理的な規定 (ケーブルやインターフェース、伝送速度など) |
ただ、このOSI参照モデルは、7つの階層に細かく分類しているため、前項でも触れましたが、一部のプロトコルや規格に関しては、どの層に属するかについて異なる見解があったりします。
そのため、実際のところは順守されていないのが現状です。こう言ってしまっては身も蓋もないようですが、製品開発の現場では、7階層も明確に区分けする必要はなく、あくまで参考モデルとしてあるということなのです。
ではなぜじっくり学習してきたのかというと、ネットワークと通信の理解に非常に役立つモデルだからです。事実、コンピュータ関係の資格試験では必ず勉強します。そのために有名なのですが、現場レベルでは形骸化してしまっているということです。
このようにどっちつかずの状態になってしまった原因は、TCP/IPが一気にインターネットの主流となり、事実上の標準プロトコルになってしまったからです。
自然とTCP/IPを中心としたモデルが構築されるようになり、実際の運用に即した通信モデルができあがりました。
それが、
TCP/IPモデル(TCP/IPプロトコル群)
と呼ばれるモデルです。
TCP/IPモデルでは、7つから4つの階層に簡略化され、TCP/IPを中心に行われる通信の各プロトコルは「TCP/IPプロトコル群」として各階層に分類されています。
OSI参照モデル | TCP/IPモデル | TCP/IPプロトコル群 |
---|---|---|
アプリケーション層 | アプリケーション層 | HTTP、FTP、Telnet、SMTP、POP3 など |
プレゼンテーション層 | ||
セッション層 | ||
トランスポート層 | トランスポート層 | TCP、UDP など |
ネットワーク層 | ネットワーク層 | IP(IPv4、IPv6)など |
データリンク層 | ネットワーク インターフェース層 |
イーサネット、トークンリング、フレームリレー、PPP など |
物理層 | ハブ、無線、光ケーブル など |
上表のように、OSI参照モデルと比較してTCP/IPモデルはかなり簡略化されています。
OSI参照モデルが通信の仕組みや機器も含めて階層化しているのに対し、TCP/IPモデルはプロトコルに特化してモデル化されているため実用的なものになっています。
このように、インターネットでの通信は「TCP」と「IP」というプロトコルを中心に行われているので、TCP/IPがインターネットの標準的なプロトコルと言われるのです。
また前項で「上位層のすべてを1つのプロトコルで定めている場合が多い」と解説しましたが、上位層がアプリケーション層にまとめられており、まさにそれを表しています。
更新履歴
- 2008年7月25日
- ページを公開。
- 2009年5月6日
- ページをXHTML1.0とCSS2.1で、Web標準化。レイアウト変更。
- 2018年1月26日
- ページをSSL化によりHTTPSに対応。
- 2023年2月10日
- 内容修正。
参考文献・ウェブサイト
当ページの作成にあたり、以下の文献およびウェブサイトを参考にさせていただきました。
- 文献
- 図解入門 インターネットのしくみ
- ウェルノウンポート-IT基礎講座
- http://www.katch.ne.jp/~nirvana/edu/web_ed/web_ed38.htm
- 管理人のつぶやき
- Twitterのフォローお願いします!