TCP/IPとは(UDP)
サーバー上ではたくさんのプログラムが同時に実行されています。
そしてまた同時に複数のユーザーと通信しています。
これらの通信が混信しないようにデータを振り分ける仕組みが「ポート」です。
「保証された通信」と「保証されない通信」
インターネットで使われている「TCP/IP(Transmission Control Protocol/Internet Protocol)」というプロトコル(通信手段)には、相手に届くことを「保証する通信」と「保証しない通信」の2通りがあり、用途によって使い分けられます。前者を「TCP」「UDP」と呼びます。
IPアドレスについてはこの記事で紹介してください⇨IPアドレスとは
1.TCP(Transmission Control Protocol)
保証する通信です。相手にデータが届いたかどうかを確認しながら送信を行います。エラーが出た時には再送します
Webメール、FTPなどほとんどの通信にこのTCPが使われています。TCPでは「1対1」で通信します。
2.UDP(User Datagram Protocol)
保証されない通信です。相手にデータが届いたかどうかを確認せず送信します。エラーが発生しても再送しません。
データの到着順序も規定されておらず、後に送信したデータが先に送信したデータよりも前に到着することもあります。
エラーチェックがない分だけ効率が良く高速に通信ができるのが特徴です。
またUDPはTCPと違ってネットワークに接続されている全ホストに対してデータを送信する「1対多」の通信もできます。これを「ブロードキャスト(broadcast)送信」と言います。
UDPはDNSサーバーを使ってドメインやIPアドレスを問い合わせるときや、DHCPを使ってIPアドレスを取得する時など1部の通信にだけで使われています。
通信が混じらないようにする「ポート番号」
ほとんどの場合、サーバー上でもクライアント上でも複数のソフトが実行されています。
例えば私たちは普段メールソフトを起動しつつWebブラウザでは、複数のページを開くこともありその時には異なるページへの通信が同時に発生することもありえます。
同時に通信するアプリケーションを通信相手をうまく捌かないとデータが混信する恐れがあります。この問題を解決するのが「ポート」という仕組みです。
TCP/IPでは、TCPとUDPのそれぞれに1〜65535までの「データの出入り口」となる部分を構成しています。この出入り口のことを「ポート(port:港のこと。データを港に出入りする船に見立ててこう呼ぶ)」と呼び、割り当てられている連番のことを「ポート番号(port number)」と言います。
サーバーやクライアントで通信するアプリケーションは必ずどこかのポートを使って通信します。
あるアプリケーションが一旦そのポートを使って通信すると、他のアプリケーションは同じポートで通信できないように排他制御されます。
つまり「先に通信しようとした方」しか通信できないので。異なるアプリケーションでデータが混じることはありません。
ウェルノウンポートとエフェメラルポート
サーバー上のアプリケーションは、クライアントからの接続を受け付けるため、「どこのポート」を開いて接続待ち状態にします。
ここにクライアントが接続してくると、通信が始まります。
ウェルノウンポート
クライアントは、この待ち受けているポートへと接続するわけですが、そのためには「どのアプリケーションが、どのポート番号で待ち受けているのか」を知っている必要があります。
実はサービス(アプリケーション)の種類によって、TCP・UDPのどちらを使いポート番号は何番なのかがあらかじめ定められています。このような「定められたポート番号」を「ウェルノウンポート番号(well-known port number)」と言います。
例えば「メールの送信はTCPポート番号25番」「Webの通信はTCPポート80番」「Webの暗号化通信(SSL)はTCPポート443番」のように決まっています。
Webサーバーでは、80番とポート番号443番で待ち受けた状態で「Webサーバーソフト」が動作しています。
私たちがWebブラウザで「http://www.it-stepup.com」に接続したときには「www.it-stepup.com」という名前のサーバーのポート80番に接続します。
すると、サーバ側で待機しているWebサーバーソフトと上手く繋がったりWebページのデータが戻ってくるのです。
ポート番号 | TCP/UDP | 利用しているサービス(アプリケーション) |
20,21 | TCP | FTP(ファイルの転送) |
22 | TCP | SSH(暗号化されたシェル機能) |
25 | TCP | SMTP(メールの送信) |
53 | TCP/UDP | DNS |
67,68 | UDP | DHCP |
80 | TCP | HTTP(暗号化されていないWeb) |
110 | TCP | POP3(メール送信) |
143 | TCP | IMAP4(メール送信) |
443 | TCP | HTTPS(暗号化されていないWeb) |
465 | TCP | SMTP over SSL(暗号貸されたメール送信) |
587 | TCP | SMTP(メールの転送) |
989,990 | TCP | FTP over SSL(FRPS。暗号化されたFTP) |
993 | TCP | IMAP4 over SSL(暗号化されたIMAP4) |
995 | TCP | POP3 over SSL(暗号化されたPOP3) |
クライアント側はランダムなエフェメラルポートが使われる
ポートは、何もサーバ側だけのものではありません。クライアント側にもあります。
ただしクライアント側は、サーバー側と違って誰かから接続されるわけではないので、あらかじめポート番号を固定しておく必要がありません。
そこで決まった番号ではなく、未使用のランダムなポート番号が使われます。このランダムなポート番号のことを「エフェメラルポート(Ephemeral port。短命なポートという意味)」と呼びます。
まとめ
いかがでしたでしょうか、今回はとても重要なところです、セキュリティやWeb開発をする上で覚えておかないといけない知識です。
長くなってしまいましたがしっかりと覚えておいてください。
最近真面目に書いているので少し雑談を入れようかと思っている今日この頃です。
ではでは