現在、様々なコンピュータがインターネットに接続して、たくさんの情報を共有しています。インターネット上にはたくさんの情報が行きかっています。
これらの情報はどのような仕組みを使って送信、受信されているか知っていますか?
ほとんどのコンピュータはTCP/IPという共通のルールを使ってデータの送受信を行っています。
このWebページでは、TCP/IPを使った通信の仕組みをざっくりと紹介します。
通信のルールは必要?
コンピュータの話をする前にわれわれ人間の通信を考えてみましょう。
自分の考えを相手に話す場面で、相手に情報を伝えるために必要なルールや仕組みはいったい何でしょうか?
たとえば、同じ言語を使っている。同じような基礎知識を持っている。ということが考えられます。
また、遠く離れた場所にいる相手と通信する場合は、お互いにスマートフォンを持っている。など道具も大事でしょう。
相手と通信して、情報を伝えるためにはいくつかのルールや仕組みが必要で、それをお互いが守っていることが大事です。
コンピュータの場合も同じです。
何かしらのルールや仕組みをコンピュータ同士が守って使うことで、通信によって正しくデータのやり取りができます。
では、どのようなルールが必要でしょうか?
とてもたくさんのことが考えられます。
コンピュータ同士でデータをやり取りするには、データを転送する線が必要ですね。
どんなケーブルを使うのか?コネクタの形状は決めておくのか?データを電気信号に変えるルールは?
ネットワークにはたくさんのコンピュータが存在しています。
たくさんあるコンピュータの中から、一つのコンピュータと正確に通信するにはどうしたらいいでしょうか?
など、コンピュータとコンピュータが正しくデータ転送するには、決めておかなければいけないルールはとてもたくさんあります。
たくさんありすぎてややこしくなると、みんなが困ります。そこで、コンピュータが持つべき通信機能を分類したモデルが国際標準化機構によって策定されています。
OSI参照モデルと言います。
OSI参照モデルとTCP/IP
OSI参照モデルは7つに分かれています。下の図のとおりです。
こうしておくことと良いことがあります。
ネットワーク関係の機器やソフトウェアを作る会社は、全ての機能を含む商品を作る必要はありません。
各層に規定された仕事ができる商品を作ればOKです。すべての知識・技術を持っていなくても、ネットワーク製品を作ることができますね。
TCP/IPとは?
TCP/IPいう言葉を聞いたことがありますか?
現在使われているコンピュータのほとんどは、このTCP/IPと呼ばれるルールを守って通信を正しく行っています。
TCP/IPは1970年代に作られました。インターネットが一般市民に開放される前から、コンピュータ通信の標準ルールとして使われていたこともあり、今もそのままコンピュータ通信の標準ルールとして使われています。
TCP/IPと呼ぶのはなぜか?
TCPというルール(プロトコル)とIPというルール(プロトコル)の2つを使って通信を行うので、TCP/IPと呼ばれています。
TCPはトランスミッションコントロールプロトコルです。OSI参照モデルではトランスポート層と対応しています。
TCPという通信ルールをお互いのコンピュータが守って使うことで、
- 3ウェイハンドシェイクを使ったコネクションの確立
- ポート番号を使った通信
を行うことができます。それぞれについては後でもう少し説明します。
IPはインターネットプロトコルです。OSI参照モデルではネットワーク層と対応しています。
IPという通信ルールをお互いのコンピュータが守って使うことで、
- IPアドレスを使ったデータ配送
を行うことができます。
ちなみに、TCP/IPではトランスポート層、インターネット層以外の機能はありません。
なので、他の層は、他のソフトウェアや製品が担当しています。
例えば、データリンク層ではEthernetというルールを使った製品を良く見かけます。
IPを使った通信の仕組み
IP(インターネットプロトコル)によって、コンピュータは
- アドレス処理
- フラグメント処理(分割と再構成)
- IPパケットの配送
を行うことができます。
ネットワーク上に配置されたコンピュータはたくさんあります。それぞれを識別する番号がIPアドレスです。
「210.58.9.132」というような4つの数字がIPアドレスとしてよく使われています。
IPアドレスは、私たちの生活で例えると、郵便物を送る「宛先住所」、送信者の「送信元住所」がIPアドレスです。
送信したいデータが大きい場合はいくつかに分けて送信します。受け取った側で元のデータに再構成します。これをフラグメント処理と言います。
送信したいデータに、「宛先IPアドレス」「送信元IPアドレス」「フラグメント番号」を付けたものをIPパケットと言います。
送信したいデータに送信元アドレス、宛先アドレスを付けます。データが大きい場合は分割して、番号を付けておきます。
これを相手のコンピュータに送信します。
受け取った側は、番号順に並びなおせば元のデータを取り出すことができまS。
TCPを使った通信の仕組み
TCP(トランスミッションコントロールプロトコル)によって、コンピュータは
- 3ウェイハンドシェイクを使ったコネクションの確立
- ポート番号を使った通信
を行うことができます。
3ウェイハンドシェイクを使ったコネクションの確立
まずはコネクションの確立について、我々の場合を例にして考えてみましょう。
例えば、仕事で誰かに電話をします。最初の対応は以下のようになるでしょうか?
相手の状況を確認して、準備が良ければ自分の情報を伝えますね。
これと似たようなことをTCPを使うコンピュータ同士で行います。
コンピュータはうまく会話するために、自分の状態とメッセージの送受信を行います。
通信を始めるとき、コンピュータAは通信相手にSYNメッセージを送信します。
SYNは「通信してもいいですか?」というような意味です。
これから通信を始めたいので、Aは自分の状態をSYN_SENTにします。
受信側のコンピュータBは、もしも通信可能な状態(例えばLISTEN)ならば、ACK+SYNメッセージを返送します。
ACKは了承という意味です。つまり、ACK+SYNは「わかりました。私も通信していいですか?」という感じですかね。
そして、Bは自分の状態をSYN_RCVに変更します。
AはACK+SYNを受け取ったら、相手が通信可能であることが分かります。
「分かりました。それでは通信を始めましょう」ということでACKメッセージを送信します。
Aは自分の状態をESTABLISHED(コネクション確立)に変更します。
BはACKを受け取って、自分の状態をESTABLISHED(コネクション確立)に変更します。
コンピュータ間でメッセージのやり取りが3回行われて、通信可能な状態(コネクション確立)になるので、3ウェイハンドシェイクと呼ばれています。
ポート番号を使った通信
IPの機能である、アドレス処理を使うことでコンピュータからコンピュータへのデータ送信ができます。
(IPはOSI参照モデルの下から3つ目、インターネット層なので、レイヤ3とも言います。)
受け取ったデータは何のデータなのでしょうか?
メールデータとして処理すればよいでしょうか?Webページデータとして処理すればよいでしょうか?
どのソフトデータなのか?を判断しなければいけません。
これを解決するためにTCPでは送信データにポート番号と呼ばれる数字を付けています。
ポート番号はアプリケーションソフトの受付番号です。
この番号を見て、送信データがどのアプリケーションソフトのものか?を判断することができます。
例えば、メールデータの場合は110番を受付番号としましょう。
送信者はデータにポート番号110を付けて送信します。
受け取った側はポート番号110番を見て、あーメールの通信かぁ。
とわかるのです。
他にも、Webページの通信はポート番号80番を使ったりします。
通信をしたいアプリケーションソフトによって受付番号が決まっていれば、その番号を使えばOKです。
アプリケーションソフトの受付番号’ポート番号)は、受信側が自分で決めることができます。
では、通信相手のアプリケーション受付番号(ポート番号)はどうやって知ることができるでしょうか?
実は知る方法はありません。
なので送信者は、とりあえず皆が知っている共通の番号を使うことにしています。この共通の番号を
Well Known Portsと呼んでいます。
以下に、代表的なポート番号を載せておきます。
TCP/20 : FTP (データ)
TCP/21 : FTP (制御)
TCP/22 : SSH
TCP/23 : Telnet
TCP/25 : SMTP
UDP/53 : DNS
UDP/67 : DHCP(サーバ)
UDP/68 : DHCP(クライアント)
TCP/80 : HTTP
TCP/110 : POP3
TCP/143 : IMAP
TCP/443 : HTTPS
TCP/445 : ダイレクトホスティングSMBサービス
TCP/587 : Submission(メール送信)
Webページが欲しいけど、相手の受付番号(ポート番号)が分からない。そういうときにWell Known Portsを使います。
Webページは80番とされています。
相手のポート番号が分からないけど、とりあえず80番を使って通信するとWebページの通信であると判断されて、うまくいきます。
このような、皆が知っているポート番号があることで、知らないコンピュータ同士でもデータ通信を始めることができます。
まとめ
- TCP/IPにはOSI参照モデルのトランスポート層、インターネット層の機能のみあり、その他は存在しない。
- IPという共通ルールを使って、コンピュータA から コンピュータB というデータ配送を間違いなく行う。
- TCPという共通ルールでは、3ウェイハンドシェイクを使って、コネクションを確立したデータ通信を行うことができる。
- TCPという共通ルールでは、ポート番号を使って、送信データのアプリケーションソフトを特定することができる。