■ アプリケーション間通信
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・21 | FTP |
23 | telnet |
25 | SMTP |
53 | DNS |
67・68 | DHCP |
80 | HTTP |
110 | POP3 |
161・162 | SNMP |
[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番以降のランダムでユニークな番号を使う。
- 参考リンク
-
- IANA,ポート番号一覧http://www.iana.org/assignments/port-numbers▲