ネットワークって。。。#20(TCPとUDP)
今日は、ポート番号の話。。。
いや、これはポートタワー笑
ポート番号については、それだけを解説した専門書も出ているようです。
更に詳細を知りたい方は読んでみてください。
では、始めます。。。
ポート番号とは
ポート番号については、ネットワークって。。。#2及び、ネットワークって。。。#5でも触れました。
ネットワーク通信を行う上で、宛先は目印のIPアドレスと実際に通信を行う際のMACアドレスが必要ということは以前に述べました。
では、どうやって、つまりは、何のプロトコル、プログラムで通信するのか?。。。
これを決めるのがポート番号です。
例えば、大阪から東京に移動する際に、宛先(IPアドレス、MACアドレス)は東京。。。
で、交通手段は、飛行機、新幹線、はたまた、夜間高速バス。。。と色々とあります。
この交通手段が、ポート番号のイメージです。
ポート番号によるアプリケーションの識別
1つのコンピュータで色々な通信ができますよね。
皆様が、今このページを見ているのは、httpsという443番のポート番号で、電子メールのやりとりは、smtpという25番のポート番号、更にメールを自分のパソコンに受け取るのは、pop3(110番)とかimap4(143番)のポート番号で受信しています。
つまりは、TCP/IPでネットワーク通信するアプリケーションには必ず番号が付けられています。
この番号が、ポート番号です。
IPアドレスとポート番号とプロトコル番号による通信の識別
通信の識別は、宛先のIPアドレスと宛先ポート番号と送信元のIPアドレスだけで行われているわけではありません。
例えば、1台のパソコンで、Webブラウザの画面を2つ開いて、同じページを見たりクリックしたりしても、それぞれ独立して動作しますよね。
この場合、
なので、2つの通信を別の通信と識別はできませんよね。
通信の識別は、以下の5つで行われています。
- 送信元IPアドレス・・・上記例では、パソコンのIPアドレス
- 宛先IPアドレス・・・上記例では、参照するWebサーバのIPアドレス
- プロトコル番号・・・ICMP:1、TCP:6、UDP:17 で識別
- 送信元ポート番号・・・上記例では、パソコンがダイナミックに割り当てるポート番号
- 宛先ポート番号・・・上記例では、80番か443番
上記例では、パソコンが、送信元ポート番号に異なる番号を割り当てることにより、2つの通信を別の通信と識別することができます。
ポート番号の決め方
ポート番号には、静的に決定するものと動的に割り当てるものの2種類があります。
標準で決められている番号
アプリケーションでどのポート番号を使うかを固定的に決めます。
0〜1023番までは、ウェルノウンポート番号(Well-known Port Number)と呼ばれ、httpは80番、httpsは443番とか、smtpは25番のように、アプリケーションごとに使用するポート番号があらかじめ決められています。
ウェルノウンポート番号として登録されているポート番号の最新情報は、
https://www.iana.org/assignments/port-numbers
で確認できます。
1024〜49151番までは、自由に使って良いとされているポート番号です。
独自の通信プログラムを作る時なんかは、このポート番号を使います。
例えば。。。
学校の入学式や卒業式の体育館を思い浮かべてみてください。。。
生徒や先生の席はあらかじめ決められていますが(Well-known)、保護者の席は決まってなくて、保護者席であれば、自由にどこにでも座ることができますよね。
そんなイメージです。。。多分笑
ダイナミックな割り当て法
前述の、通信の識別のところで書いたように、宛先ポート番号(サーバのポート番号)は、決まっている必要がありますが、送信元ポート番号は、通信を識別するために、動的に割り当てます。
このポート番号を、ダイナミックポート番号と呼び、49152〜65535番までの番号が利用されます。
ポート番号とプロトコル
ここでいう、プロトコルっていうのは、トランスファープロトコル、つまりは、TCPかUDPかを意味します。
で、ポート番号は使用されるトランスファープロトコルごとに決定されるので、同じポート番号でも、TCPとUDPで別の目的で使用することが可能になります。
http(80番)やhttps(443番)は、今のところ、TCPしかありませんが、、、
例えば、ネットワークって。。。#14で述べた、DNS(53番)は、TCPもUDPも利用します。
ちなみに、前回も書きましたが、TCPは、信頼性のある通信を実現する必要がある場合に、UDPは、高速性やリアルタイム性を重視する通信で利用という目的で使い分けられます。
まとめ
- ポート番号は、何のプロトコル、プログラムで通信するのかを決める番号。
- TCP/IPでネットワーク通信するアプリケーションには必ずポート番号が付けられる。
- 通信の識別は、送信先IPアドレス、宛先IPアドレス、プロトコル番号、送信元ポート番号、宛先ポート番号の5つで行われる。
- ポート番号には、静的に決定するもの(サーバのポート番号)と動的に割り当てるもの(クライアントの送信元ポート番号)の2種類がある。
- 同じポート番号でも、TCPとUDPで別の目的で使用することが可能
今回は以上です。
最後まで読んで頂き、ありがとうございました。
【参考書籍】