3 Minutes NetWorking
No.43

3Minutes NetWorking

第43回レイヤ4 ポート番号

■ アプリケーション間通信

インター博士

TCPの話は一応前回で終わりだ。

ネット助手

はい。

インター博士

さて、第38回で説明したレイヤ4の概要の中で、説明してないものが1つだけある。

ネット助手

概要で説明したもの…。
確認応答と、フロー制御と、セグメントと…。

インター博士

ふむふむ。

ネット助手

エンドツーエンド。

インター博士

よし。
わかりません、と言われたらどうしようかと思ったよ。

ネット助手

やだなぁ、博士。
僕だって成長してるんですから。

インター博士

そうだな。どんな動物だって学習はするものだからな。
例えネット君が標準的なホモサピエンスの記憶力を持っていないとしても、動物であることはかわりないからな。

ネット助手

うぅ〜。

インター博士

ネット君、概要で話したことを思い出すために質問だが。
データ通信は何が何とするものだ?

ネット助手

何が何とって、パソコンとパソコンでしょ?

インター博士

よし、そういうことにしておこう。
では、質問だ。

ブラウザとメーラ

[Figure43-01:ブラウザとメーラ]

インター博士

私が使っているパソコンの画面だ。
今、ブラウザメーラが開いているな。

ネット助手

はい。IEの6.0と、Outlook Expressですね。
博士、マイクロソフト派ですか? IEはともかくOEはいただけないですね。

インター博士

う、うむ。いや、慣れてしまって変えるのも面倒でな、OEは。
ゴ、ゴホン。ともかくだ。

ネット助手

あ〜あ、OE使いですか、博士。ちょっと幻滅です。

インター博士

う、うるさい。
この手間のかかる所が可愛いんじゃないか。

ネット助手

可愛いかなぁ。

インター博士

…。そうだな、手間のかかるものは確かに可愛くないかもしれん。
例えば、記憶力の悪い助手だとか。

ネット助手

あ、いや。
うん、博士の気持ちわかるな〜。可愛いですよね、手間がかかると。あはは。

インター博士

…。まあ、それはともかくだ。
ブラウザ、メーラ、両方とも使っている場合、それぞれに対して外部からデータが届くわけだ。

ネット助手

HTMLファイルや、電子メールですね。

インター博士

うむ。
では、パソコンとパソコンでデータ通信する場合、どっちのアプリケーション向けのデータなのかどこで識別するのだ?

ネット助手

え?
えぇ?

インター博士

今まで覚えたことで考えてみよう。
データにはIPアドレスやMACアドレスがつけられる。IPアドレスや、MACアドレスが識別するのはなんだ?

ネット助手

宛先のデバイスです。

インター博士

そうだ。IPアドレスやMACアドレスは、どのデバイス宛のデータかを識別する。
だが、それだけでは複数の通信アプリケーションが立ち上がっていた場合、どのアプリケーション宛のデータか、がわからない

どのアプリケーションが受け取る?

[Figure43-02:どのアプリケーションが受け取る?]

インター博士

確かに、IPアドレスがあれば、デバイスまでは届くだろう。それがレイヤ3以下の機能だからな。
では、そっから先はどうなるのだ?

ネット助手

う、う〜ん。

インター博士

電子メールが、間違ってブラウザに届いてしまったら、そのメールはせっかく届いたのに見ることができなくなってしまう。
なので、どのアプリケーション宛かを識別するものが必要だ。

送信元ポート番号(16)宛先ポート番号(16)
シーケンス番号(32)
確認応答番号(32)
データオフセット(4)予約(6)制御ビット(6)ウィンドウ(16)
チェックサム(16)緊急ポインタ(16)
オプション

[Table39-01:TCPヘッダ]

インター博士

おなじみTCPのヘッダを見てもらおう。
この中の、ポート番号がそれを識別する。

ネット助手

ぽーと番号…。

■ ポート番号

インター博士

ポート番号は16ビットの値だ。
まず、各デバイスの内部には、通信データを流すための架空の差込口があると思いたまえ。

ネット助手

架空の差込口?

インター博士

そうだ。
そして、各アプリケーションはその中の1つを選んでデータの送受信口とする

ネット助手

インター博士

そうだな。図にすると、下のような感じになる。

ポート概念図

[Figure43-03:ポート概念図]

ネット助手

え〜っと。
アプリケーションと、TCP/IP通信機能をつなぐ道ってことですか?

インター博士

そうだな、その考えでもいい。
このポートは16ビット分つまり65,536個あって、それぞれに0から番号が振られている。

ネット助手

ははぁ。
それがポート番号なんですね。

インター博士

そうだ。
通信中のアプリケーションはそれぞれこのポートと接続している。この仕組みをソケットという。

ネット助手

そけっと。

インター博士

簡単に言えば、OSがもつ「ソケットライブラリ」という機能が、TCP/IPとの道を作ってくれる、というわけだ。

ソケット

[Figure43-04:ソケット]

ネット助手

ははぁ。

インター博士

このソケットの仕組みにより、アプリケーションはポートというデータの受け渡し口を持つことになる。このポートにつけられたポート番号により、データを渡すアプリケーションを特定するというわけだ。

ネット助手

なるほど。IPアドレスとは別に、アプリケーション別の番号があるわけですね。
それで、「どのデバイスの、どのアプリケーション」かを特定する、と。

インター博士

そうだ。
ただ、注意しておいて欲しいのは、確かにポート番号はアプリケーション別に割り振るが、 正確に言えばプロセス別なのだよ。

ネット助手

プロセス別?

インター博士

うむ。
例えば、ブラウザを3つ開いているとしよう。そうすると、それぞれのブラウザが別にデータを要求するわけだ。

ネット助手

あ〜、なんとなくわかりました。
ブラウザという同じアプリケーションでも、受け取るデータはそれぞれ違うってことですね?

インター博士

そうだ。
例えば、以下の図を見ると。

タスクマネージャ

[Figure43-05:ソケット] 

インター博士

「IEXPLORE.EXE」がブラウザ(Internet Explorer)だ。3つ動いているだろう?
この場合は、それぞれが別々のポート番号を持つということだ。

ユニークなポート番号

[Figure43-06:ユニークなポート番号]

ネット助手

なるほど。
そうでないと、違うブラウザで要求したHTMLファイルが、別のブラウザで受け取っちゃうことになっちゃうわけですね。

■ ポート番号を使ったデータ転送

インター博士

では、実際にデータをどうやって送受信するかを見てもらおう。

[Figure43-07:ポート番号を使ったデータのやりとり]

ネット助手

ははぁ。
IPアドレスとポート番号を使って、「どのデバイスの、どのアプリケーション」を識別するんですねぇ。

インター博士

そうだ。
IPアドレスとポート番号はワンセットで考えるのがいいだろう。

ネット助手

なるほど。
ところで博士。アプリケーションによって、使用するポート番号って決まっているんですか?

インター博士

うむ、いい質問だ。
まず、知っておいて欲しいのは、宛先ポート番号がわからないと、データは送れないという点だ。

ネット助手

なんか、前にやった「4つのアドレス」みたいですね。
何故です?

インター博士

受け取るアプリケーションがポートと接続していないと、データが届かないのだよ。

受け取るアプリケーション

[Figure43-08:受け取るアプリケーション]

ネット助手

そりゃそうですね。
じゃ、どうやってデータを渡したいアプリケーションのポート番号を知るんですか?

インター博士

うむ。知る方法はない

ネット助手

ない?

インター博士

ないのだ。
なので、よく使われるサーバアプリケーションは、事前に決められた番号を使うことによって、サービスを提供できるようにしている

ネット助手

事前に決められた番号?

インター博士

そうだ。この番号のことをウェルノウンポートといい、0〜1023番までにあたる。▼ link
例えば、有名なところでは以下の番号が特定のサーバアプリケーションに使われている。

ポート番号アプリケーション
20・21FTP
23telnet
25SMTP
53DNS
67・68DHCP
80HTTP
110POP3
161・162SNMP

[Table43-01:Well-Knownポート]

インター博士

サービスを提供したいサーバは、これらの番号をアプリケーションに割り当てているわけだ。
そうすれば、送信元はこの決められたポートにデータを送る。
例えば、Webページを見たいと思ったら、80番ポートに送ればいいわけだ。

ネット助手

へぇ。
そういうルールが既にあるわけですね。

インター博士

そうだ。
もし、そのウェルノウンポート宛に送って駄目だった場合そのサーバは、そのサービスを提供していない、ということだ。

ネット助手

なるほど。
じゃあ、送信元のポート番号はどうやって決定されるんです?1024番以上でランダムとありましたけど。

インター博士

1023番以下は、ウェルノウンポートなので使ってはいけないことになっている。
それ以外でユニークな番号ならばどれでもよい。

ネット助手

どれでもよい、と言われても。

インター博士

いや、ほんとにどれでもよいのだ。
使っているアプリケーションさえ識別できればいいのだからな。

ネット助手

ははぁ。

■ まとめ

インター博士

ちょっとまとめてみよう。
まず、送信を希望する側(クライアント)は、通信するアプリケーションと1024番以上でユニークかつランダムなポートを接続する。

ネット助手

はい。

インター博士

そのアプリケーションがサービスを希望するポート番号を宛先ポート番号に入れる。

ネット助手

ふむふむ。

インター博士

その後、4つのアドレス(送信元・宛先のIPアドレス・MACアドレス)を付け足して、データを送る、というわけだ。

データの送信

[Figure43-09:データの送信]

ネット助手

カプセル化ですね。

インター博士

そう。
宛先のアプリケーション、宛先のデバイス、次に届けるデバイス、と順番に識別用の番号を付け足していくわけだな。

ネット助手

ポート番号、IPアドレス、MACアドレス、そして電気信号、っと。

インター博士

一方、データを受け取った側(サーバ)は、そのポートにアプリケーションが接続していればそのアプリケーションにデータを渡す。
ちなみに、接続しているのをポートが開いているという。

ネット助手

開いている、ですか。

インター博士

うむ、逆はポートが閉じている・閉まっているという。

ネット助手

扉みたいですね。

インター博士

そうだな。アプリケーションへの入り口の扉みたいなものだからな、ポートは。

ネット助手

そういわれれば、扉っぽいですね。

インター博士

そうだろう。
そして、サーバはクライアントへデータを送り返す。この場合、先ほどの宛先が送信元に、送信元が宛先になる。

ネット助手

送り返すわけですから、そうなりますよね。

インター博士

というわけで、今回はここまでだな。

ネット助手

はい。

インター博士

次回は、もうひとつのレイヤ4プロトコル、UDPについて説明する。

ネット助手

了解。
3分間ネットワーキングでした〜♪

ブラウザ
[browser]
Webページ閲覧用アプリケーション。
HTMLファイルをダウンロードし、解析し、表示する。
メーラ
[mailer]
電子メールソフトのこと。
電子メールの作成、送受信、保存などを行う。
IE
Microsoft社のInternet Explorerのこと。
現在(11/2002)での最新版はIE6.0SP1。
ちなみにRoads to Nodeを見てくださる皆さんの6割はIE6.0。
手間のかかる
パッチはこまめにね。
ソケット
[socket]
画像
Windows 2000のタスクマネージャ画面。
サーバアプリケーション
[server application]
なんらかの通信サービスを行うためのアプリケーションのこと。
例えばWebサイトの公開やメールの転送などを行う。
Webサーバや、メールサーバというのは、これらのアプリケーションを実行してサービスを行うコンピュータのことを指す。
ウェルノウンポート
[well-known port]
本文で紹介されている以外の番号は、IANAで公開されています。
参考リンクを参照のこと。
駄目だった場合
その場合、ICMP Type3(Destination Unreachable)のcode3(Port Unreachable)が返ってくることになります。
ネット助手ネット君の今日のポイント
  • 通信はアプリケーションとアプリケーションの間で行われる。
  • どのアプリケーションのデータかをポート番号で識別する。
  • ポートとアプリケーションを接続する機能をソケットという。
  • よく使われるサービスはウェルノウンポートを使う。
  • 送信元は1024番以降のランダムでユニークな番号を使う。

3 Minutes NetWorking No.43

管理人:aji-ssz(at)selene.is.dream.jp