テクノロジー

2022年7月22日

TCP/IPとは

目次

1. Webとは
2. Webを支えるクライアント / サーバとは
3. HTTPとは
4. URL / HTTPメソッドとは
5. Webアプリケーションとは
6. IPアドレスとは
7. TCP/IPとは
8. ドメイン / DNSサーバとは
9. ポート番号とは
10. 代表的なプロトコル
11. Webアプリケーションを支えるサーバの種類

*上記のリンクにアクセスすることで、続きをDIVER Learningsで確認できます。

ゴール

  • TCP/IPのはたらきを理解する
  • パケットによる送信のしくみと、メリットを理解する

TCP/IPとはなにか

あなたは、インターネットを通して世界中の人たちとつながることができます。そのために重要な役割を果たしているのが TCP/IP というプロトコルです。TCP/IP とは、 TCP(Transmission Control Protocol)IP(Internet Protocol) という二つのプロトコルを中心とした通信の仕組みです。

では、TCP/IP がなかった時代は、どのような状況だったのでしょう。
1980年代頃までは、コンピュータ同士が通信を行うには、同じメーカーのコンピュータである必要がありました。理由は、コンピュータ同士が通信するためのソフトウェア(一般的にはプロトコルといいます)が、コンピュータメーカーごとに異なっていたためです。

TCP/IPは、アメリカ国防総省の研究所を中心として、大学などともつなげるネットワークの仕組みとして開発されました。
それぞれの機関のコンピュータ同士がやり取りするためのTCP/IPという共通のルールを決め、そのルールに従ったコンピュータ同士が通信できる仕組みです。つまり、どのコンピュータメーカーもTCP/IPに従った通信ソフトを搭載していれば、お互いに通信ができることになります。

Image from Gyazo

TCP/IPはどのように機能するのか

Web、メール、チャット、ファイル転送、音声・動画配信などのさまざまなアプリケーションがあり、有線、無線、建物内通信、遠距離通信などのさまざまな通信手段があります。
TCP/IPはこれらをどのようにまとめているのでしょうか。

荷物や手紙を送る郵便・宅配システムを考えてみましょう。
手紙、あるいは小包を送るとき、コンビニの袋に入れて「これを届けてくれ」と言っても、誰も相手にしてくれません。おそらく、親切な知り合いでもない限り、自分で持って行くしかありません。つまり、郵便・宅配のシステムを通して届けてもらうためには、共通のルールに従ってお願いする必要がある、ということです。

これは、TCP/IP通信の世界でも同じです。
WebアプリケーションのHTTPリクエストのメッセージと電子メールでは、それぞれ形式が違います。そのままでは、共通のシステムで扱うことができません。そこで、共通に扱える封筒や小包のようなもので包んで、送ることになります。このことを カプセル化(カプセルに入れる) といいます。この決められた取り扱い荷物にすることで、共通の郵便や宅配システムのような仕組みを利用できるのです。この役割を果たすのがTCPやIPプロトコルです。例えていうなら、TCP/IPは、いろいろなアプリケーション(Web、メール、チャット、ファイル転送、音声・動画配信など)のデータを運ぶ、国際的な運送システムと考えてください。

TCP/IPでの流れを説明します。
まず送りたい情報(アプリケーションのデータ)を、TCPが扱える封筒に入れ、宛名と送り主がわかるようにします。次にTCPからIPへ役割を引き渡します。TCPの封筒をIPの封筒に入れて、宛先の住所と送り主の住所を書きます。
普通の郵便物では、宛名、宛先住所、送り主、送り主住所は同じ封筒に書きますが、TCP/IPでは、宛名、送り主はTCPが担当し、宛先住所、送り主住所はIPが担当します。

このようにして、TCPの封筒に入れられ、さらにIPの封筒に入れられたものが、郵便でいう荷物になります。TCP/IPでは、この封筒に入れられた荷物のことを パケット(IPパケット) といいます。パケットの表書き(ヘッダー)には宛先の住所と送り主の住所が書かれています。この住所に当たるものはIPアドレスであり、それぞれが宛先IPアドレスと送信元IPアドレスに相当します。IPパケットにつけるアドレスなので、IPアドレスといいます。
また、TCPの封筒( TCPセグメント という)に入れられるときに、その表書き(ヘッダー)に宛名と送り主が書かれます。これに相当するものを ポート番号 といい、IPアドレスと同じように、宛先ポート番号、送信元ポート番号になります。ポート番号については、後に学習します。

Image from Gyazo

IPは、宛先IPアドレスに従って、荷物であるパケットを目的地まで送り届ける役割を果たします。途中で該当の宛先が不明のときは、送信元IPアドレスに「送信できませんでした」と通知されることがあります。IPパケットは、郵便と同じように目的の地域(宛先のコンピュータの所属するネットワーク)まで届けられ、最終的にそこから該当のコンピュータへ届けられます。あなたが自分のスマートフォンやPCを使って、Webを閲覧したり、メールを送ったりする上では、そこまで知っていれば十分です。

しかし、せっかくですので、ここではさらに想像を働かせてください。
あなたが使用しているコンピュータは、Wi-Fi(無線LAN)やケーブル回線を通して、あなたが契約している通信会社(プロバイダ)と接続されているかもしれません。あなたが送ろうとするアプリケーションのデータ(パケット)は、どのようにして世界の隅々まで運ばれるのでしょう。あなたのコンピュータから目的のコンピュータまでは、物理的な銅線ケーブルや光回線のケーブル、無線など、さまざまな回線ケーブルを経由している可能性があります。郵便システムでいえば、陸上や海上や空を経由して輸送するさまざまな配送手段に相当します。
実際に目的地に届けるためには、さまざまな配送手段に対応する必要があります。TCP/IPは、実際の配送手段と連携してIPパケット(荷物)を運ぶことになります。

郵便の世界では、バイクやトラック、船や飛行機といったさまざまな配送手段があります。通信の世界では、狭い範囲で利用する有線や無線の LAN(ローカルエリアネットワーク) 、海外も含めた広域で利用する光ケーブルや銅線ケーブルを使った WAN(広域ネットワーク) などさまざまな配送手段や配送経路があります。TCP/IPは、このようなあらゆる配送手段・経路に対してもうまく適用することで、世界中の地域にメッセージを運ぶことができます。
TCP/IPがどのように適用しているかを簡単に説明します。TCP/IPは、それぞれの配送手段が用意しているコンテナのような入れ物にIPパケット(荷物)を積み込みます。このコンテナの役割をする入れ物を、TCP/IPのしくみではフレームといいます。これもカプセル化です。配送手段が異なるごとに専用のフレームに載せ替えられ、それぞれの中継所を経由して運ばれます。そのような中継所の役割を果たす機器がルータです。

IPがルータを経由しながら目的の地域(IPアドレスが所属するネットワーク)に届き、その地域内(該当ネットワーク内)の配送手段のフレームに載せられ、宛先IPアドレスのコンピュータに到着します。

これが、送信元から宛先へ情報を届ける一連の流れです。受け取ったコンピュータは、到着したパケットからTCPの封筒(セグメント)を取り出し、その宛名(ポート番号)をみて、該当のアプリケーションへ渡します。受け取ったアプリケーション専用のプロトコル(例えば、HTTP)はアプリケーションデータ(例えば、HTTPリクエストメッセージ)を取り出すことができます。このような封筒を開ける作業を非カプセル化といいます。

Image from Gyazo

TCP/IPの構成

ここまで学習したTCPプロトコルとIPプロトコルの役割は、いろいろなアプリケーションのメッセージ(HTTPリクエストメッセージなど)を共通の荷物とします。運ぶ経路や手段もさまざまなため、中継地であるルータを経由しながら、それぞれの通信手段のフレームに梱包し直して運びます。この仕組みが、どのような荷物でも、どのような場所へでも運べる理由です。
次の表は、それぞれの役割を階層的に引き渡すことで実現していることを表わしています。また、TCP/IPの階層名は、それぞれの役割を明確にするためにつけられています。

TCP/IPの階層 役割 対応するプロトコル
アプリケーション層 アプリケーションの目的を実現 HTTP(Web通信)、SMTP(メール送信)、POP(メール受信)、FTP(ファイル転送)、DNS(ドメイン名変換)など
トランスポート層 送信時の信頼性の実現や目的の荷物を該当のアプリケーションへ送り届ける(送信元、宛先ポート番号の指定) TCP、UDP(後述)
インターネット層 送信元から荷物としてのパケットを宛先へ送り届ける(送信元、宛先IPアドレスの指定) IP
ネットワークインターフェース層 配送手段を提供する 有線、Wi-Fiなどの無線によるLAN、光通信ケーブルなどによるWAN

TCP/IPのそれぞれの階層は、カプセル化の関係で連携します。
この関係によって、上位のカプセル化されるものは、下位のカプセル化するものの荷物としてブラックボックス化され、相互の関係が絡み合うことなく、シンプルになります。

TCP/IPの仕組みは、ISO(国際標準化機構)が策定した OSI(開放型システム間相互接続)参照モデル に準拠した形で組み立てられています。このモデルについての説明は省略しますが、通信の仕組みの理想的な形を提言しているものです。

UDPとはなにか

トランスポート層にあるUDPについて説明します。
今まで取り上げているWebアプリケーションや電子メールなどは、信頼性を必要とするアプリケーションです。
送ったHTTPリクエストやサーバから返信されるHTTPレスポンスの内容が、一部消えてしまったりしては困ります。送信元が送った内容が相手に確実に届かないと意味がありません。

TCPというプロトコルは、これを実現するために、送った情報に漏れがないかを相互に確認していきます。そのため、送る前に「今から送るよ」という意味の確認を行う3方向の握手(3wayハンドシェイク)を交わし、お互いの接続を確立します。さらに、お互いのやり取りの中で、受け取ったデータの内容や量を確認しあいます。送り終わったときも「これで終わり」といった確認をします。このような確認をしあうことで、通信が正確に終了したことを保証します。しかし、毎回やり取りの手間がかかり、余計な時間がかかるというデメリットがあります。

逆に、音楽配信や動画配信のようなアプリケーションでは、途中のデータが一部抜けたとしても、音の聞こえが悪かったり、動画が乱れただけと思うかもしれません。余計な確認のやり取りをして、動画が止まったり、音楽が止まったりするよりよっぽどよいでしょう。このようなアプリケーションには、一つ一つ確認をしながらやり取りするTCPは向いていないため、UDPというプロトコルを使います。
UDPは信頼性は高くありませんが、速度重視のプロトコルであり、音楽や動画配信のようなアプリケーションに適しているといえます。

このように、アプリケーションの用途によって、TCPとUDPを使い分けることになります。

Image from Gyazo

パケットによる送信

パケット(IPパケット)が実際に送信される仕組みは具体的にどうなっているのでしょうか。

あなたは、東京の渋谷区に住んでいるとします。そこで、ニューヨークにいる友達に手紙を送ることを考えてみましょう。
まず、手紙を書き、封筒に入れます。封筒には、アメリカ合衆国のニューヨーク州ニューヨーク市にある友達の住所と友達の名前を書きます。その手紙は、どのようにしてニューヨークにいる友達に届くのでしょうか。

まず、渋谷区を管轄する郵便局員がポストから手紙を収集し、渋谷区管轄の集配所に持っていきます。そこで、宛先を見るとアメリカ合衆国のニューヨーク州であるとわかります。その後、航空便だったら飛行機で運ばれます。もちろん、ルートはたくさんあるはずです。いずれにしろ、決められた最適なルートを通って、まずはアメリカのニューヨーク州のどこかに届けられるでしょう。その後、友達が住んでいるニューヨーク市の集配所に運ばれ、そこから友達の家へ配達されることになるでしょう。

郵便システムと同じように、TCP/IPのしくみによって運ばれるパケット(IPパケット)にも同じような運命があります。
送信元のコンピュータと、受信側のコンピュータが所属している管轄のネットワークが異なる場合は、それぞれのネットワークの中継所に一旦送られ、そこから配送されることになります。

また、TCP/IPで接続されたインターネットの世界は、多くのネットワークが複雑に接続されているため、経由するルートは必ずしも一つではありません。IPパケットは、それぞれの中継所を経由しながら、最も適切な(最も近い)ルートを選択しながら、次の中継所に送り出されます。この仕組みをルーティング(経路選択)といい、中継所の役割を果たすルータという中継装置が判断しています。

ルータは、届いた荷物であるパケットの宛先IPアドレスを見て、どのルートが最短かを判断し、次の中継所へ送り出します。TCP/IPにおけるルータの役割は重要で、このルーティングを担っているのがIPプロトコルであることから、IPルーティングといいます。

注記: ルーティングという言葉は、TCP/IPで使用されるときと、後々学習するRailsなどのアプリケーションで使用するときでは異なった意味になります。同じ言葉であっても、それぞれの分野で異なった意味を表現することに注意してください。

次の図は、各個別のネットワークをつなぐルータを介して、最適な経路をルーティングされる様子を示しています。

Image from Gyazo

IPプロトコルには、他にも重要な役割があります。そもそも、荷物であるアプリケーションの情報は、大きさがまちまちです。巨大な荷物もあれば、小さな荷物もあります。
実際にパケットを運ぶのは、配送手段である下位層(ネットワークインターフェース層)のフレームです。フレームという名前のコンテナに荷物が乗り切らなければ、いくつかの小分けにして運ぶしかありません。IPプロトコルは、送信時に、受け取り側が受信可能なフレームの大きさに合わせて、複数の小分けのパケットとして送り出します。受け取った側では、それをもとに再度組み立てられるように番号付けもされているのです。

Image from Gyazo

まとめ

  • TCP/IPとは、インターネットに実現されている、さまざまなコンピュータ同士を接続するためのTCPとIPを中心としたプロトコルの共通の仕組みである。
  • TCP/IPでは、TCPが相互のアプリケーション(送り主、宛名)に当たるポート番号を特定し、IPが相互の住所(送り主住所、宛先住所)に当たるIPアドレスを特定する。
  • TCP/IPは、OSIに準拠したカプセル化という手法によって、さまざまなアプリケーションを標準的な荷物にし、さまざまな配送手段で運べるようにする国際郵便システムのようなものである。
  • 送信される荷物としてのパケット(IPパケット)は、荷物の大きさに合わせて分割され、ルーティングという仕組みによって最適な経路を経由して送り届けられ、受信側で復元される。

関連記事

次回:8. ドメイン / DNSサーバとは
前回:6. IPアドレスとは

*上記のリンクにアクセスすることで、続きをDIVER Learningsで確認できます。

DIVE INTO CODEのことをもっと知ってみませんか?