ポート番号とは?
Ruby on Rails を勉強していると出てくるlocalhost:3000
やポートフォワーディングなど、ポート番号に触れる機会はありましたが、ポート番号って何?とずっと疑問でした。
ネットで調べても、「TCP/IP」だったり、「IPアドレス」だったりと、いまいち理解していない単語ばかりで説明されるので、結局よく分かりません。
今回『プロになるためのWeb技術入門』という本を読んで、ポート番号についてとても分かりやすく書いてあって納得できたので、その内容を参考にまとめてみます。
ポート番号ってなに?という方にお読みいただければと思います。
前提知識
TCP/IP
まず前提として、私たちが普段使っているインターネット通信では、主にTCP/IPと呼ばれるプロトコル体系を使用しています。
プロトコルというのは、ルールのことです。
例えば、AチームとBチームでサッカーをするとして、
- Aチーム:サッカー=ボールを触って良いのは足だけ
- Bチーム:サッカー=ボールは手で持ってもOK
のように、イメージしているルールが違ったら、ゲームにならないですよね?
そこで、お互いに同じ認識でゲームができるように、サッカーのルールブックというのが存在しています。
これと同じように、通信においても、通信をやりとりするコンピュータ同士が同じ認識で通信を行わないと上手くいきません。
そのためのルールがプロトコルと呼ばれていて、TCP/IPはプロトコルをいくつかまとめたものです。
ここでは、TCP/IPというルールに従って通信をしているんだということだけ理解していただければ大丈夫です。
TCP/IPについてもう少し詳しく知りたい方は、『TCP/IPの絵本』という本がとても読みやすく、かつ比較的詳しく書いてあり勉強になりました。
IPアドレス
IPアドレスとは、以下のようなものです。
10.34.215.8 192.168.0.15 221.186.146.26
IPアドレスというのは、インターネット上で相手のコンピュータを特定するための住所や電話番号のようなものです。
IPアドレスを使うことで、自分が通信を行いたい相手と確実に通信を行うことができます。
図:第2回 IPアドレスを理解してアクセス解析結果を“正しく”理解する(前編) (1/5):MarkeZine(マーケジン)
ポートとは
ポート番号
さて、ようやく本題です。
TCP/IPにおいてはIPアドレスを用いて通信を行う相手のコンピュータを指定しています。
ここで問題となるのは、IPアドレスで相手のコンピュータを指定したは良いが、そのコンピュータの中のどのアプリケーションにデータを届ければ良いのか分からないということです。
例えば、住所を例に出すと、マンションの部屋番号が分かりやすいでしょうか。
「東京都渋谷区○○1-1-1 △マンション」という住所で手紙を出すと、そのマンションの中の何号室の人に届けたら良いのか分からないですよね。
この問題を解決するには、「東京都渋谷区○○1-1-1 △マンション」のあとに「××号室」と部屋番号を書けば良さそうです。
これと同じようにインターネットでも、アプリケーションごとにポート番号と呼ばれる番号を振り、「IPアドレス+ポート番号」を使って通信を行うことで、正しいコンピュータの、正しいアプリケーションとやりとりを行うことができるのです。
ポート番号は、IPアドレスのあとに「:」をつけて、その後に続けて書きます。
10.34.215.8:3000 192.168.0.15:8080 221.186.146.26:80
以上がポート番号についての説明です。
ポート番号がないURLの不思議 - ウェルノウンポート -
上で「IPアドレス+ポート番号」を使って通信を行うことを学びました。
実は、私たちが普段使っているURL(https://www.google.co.jpなど)にも、IPアドレスが関わっています。
「www.google.co.jp」はホスト名と呼ばれますが、これはIPアドレスを人間にわかりやすいようにしただけのものです。
普段使っているURLも、「IPアドレス+ポート番号」による通信なのです。
URLにポート番号をつける際には、https://www.google.co.jp:443 のように書きます。
ここで下のURLにアクセスしてみましょう。
次にこちらにもアクセスしてください。
ポート番号を書いていなくてもどちらもGoogleのページに行きましたよね?
これはどういうことかというと、「http://」や「https://」で始まるURLなど、よく使うプロトコルで接続するサービスは、標準で使用するポート番号を決められているのです。こうして決められているポート番号を、「ウェルノウンポート」と呼びます。
そのため、ポート番号が書かれていなければ、プロトコルを見て、自動的に標準のポート番号を指定してくれます。
例えば、HTTPプロトコルのポート番号には80、HTTPSプロトコルのポート番号には443が割り当てられています。
そのため、「https://www.google.co.jp」は「https://www.google.co.jp:443」であると解釈して正しく通信を行ってもらうことができます。
だから私たちは、普段ポート番号をあまり意識せずにネットサーフィンをすることができるのですね。
図:ASCII.jp:Webサーバは80番ポート以外使ってはいけないの? (1/2)|ネットワークの常識・非常識
おわりに
よく分からなかった、もっと知りたい、という方は、『プロになるためのWeb技術入門』はかなり分かりやすいと感じたのでおすすめです。
参考
プロになるためのWeb技術入門
ASCII.jp:Webサーバは80番ポート以外使ってはいけないの? (1/2)|ネットワークの常識・非常識
第2回 IPアドレスを理解してアクセス解析結果を“正しく”理解する(前編) (1/5):MarkeZine(マーケジン)