カテゴリー : ネットワーク入門

ポート番号って??

「○番のポートを解放してください。」ってなんだろう?って思ったことある人いませんか?
P2Pソフトを使っていた人は、ポート解放をしていたと思いますが、ポートってなんでしょうか?

ポートとは

アプリケーション層のソフトウェアとトランスポート層(TCPとUDP)でデータをやりとりするための仮想的な通路の出入口ことです。
いろいろな出入口(ポート)がたくさんあるので、番号をつけて識別しています。

ネットでメールやウェブ閲覧などを同時に行えるのも、ポートが複数存在しているからです。
例えば、SMTP(メール)は25番だったり、HTTP(ウェブ)は80番といったふうに割り振られています。
主なポート番号はこちらを参照)

プログラムでポートを用いて通信するには、一般にソケットと呼ばれる仕組みを使います。
ソケットとは、通信の端点のことで、2台のコンピュータが通信しているとき、その通信路の両端、すなわちそれぞれのコンピュータにソケットが存在します。

「トランスポート層」の働きはこちらを参照してください。

サーバーとのデータのやり取りを考えてみましょう。
クライアント側からの要求(データ)をサーバーに送るときにTCPセグメントで、ヘッダを付け加えます。
この一連の流れは『TCP/IP「各レイヤの動き・カプセル化」』を参照)
このヘッダには、ポート番号の情報を宛先として加えています。
サーバーは、ヘッダをみて、どのポート番号に要求されたデータを送ればよいのかを判断しています。

普段何気なくインターネットを楽しんでいたりしますが、ネットワークだけみても裏では多くの処理がされているのですね。

TCP/IP「各レイヤの動き・カプセル化」

TCP/IPがどのように働いているのか、各レイヤごとにみてみよう。

「メールを送信」を例にしてみていきます。

各レイヤの動き

ユーザーがメーラーを使ってメールを作成します。
一般的なメーラーはアプリケーション層のプロトコルSMTPに対応していますので、SMTPの決まりごとに沿って「メール」に必要な情報をヘッダとして付けます。
下位のレイヤに渡されます。

アプリケーション層(SMTP)からトランスポート層(TCP)に渡され処理が行われます。
データを分割し、メール受信側のTCPが処理できるように必要な情報をヘッダに付けます。
このとき、「TCPセグメント」と呼ばれます。

さらに、下位のレイヤに渡されます。

トランスポート層(TCP)からインターネット層(IP)に渡され処理が行われます。
データを分割し、必要な情報をヘッダに付けます。
このとき、「IPデータグラム」と呼ばれます。

さらに、下位のレイヤに渡されます。

ネットワークインターフェイス層(イーサネット)で受け取ったIPデータグラムを処理が行われます。
イーサネットでは、ヘッダとトレーラが付けられます。
このとき「フレーム」と呼ばれます。
電気信号に変換されてネットワークへと送られます。

受信側は、この手順と逆にネットワークインターフェイス層から上位レイヤへ処理が行われます。

ヘッダには、データの宛先や送信元情報、エラーチェック情報といった管理用のデータが格納されます。

セグメント、データグラム、フレームなどの呼び分けは以下を参照してください。
TCP/IPの各層における一般的な呼び方

カプセル化

各レイヤで作成した「セグメント」や「データグラム」などは、ヘッダと本体データを1つのかたまりとして扱われ、上位層のデータを順々に下位層の情報で包み込んでいきます。
これを「カプセル化」と呼びます。

「パケット」の呼び分け

携帯電話が普及して「パケット」って名称は一般的になってきました。
「パケット」にも、細かく各階層(レイヤ)で呼び方が違うこと知っていますか?

TCP/IPとOSI参照モデルでも、パケットの呼び方が違います。
OSI参照モデルでは「PDU」と呼んでいます。

TCP/IP内でも、レイヤごとに作るパケットを呼び分けることもあります。
それぞれのレイヤごとに固有の呼び名があるのです。

TCP/IPプロトコル 取り扱われるデータの単位(PDU)
アプリケーション層 データ/メッセージ
トランスポート層 セグメント
インターネット層 パケット/データグラム
データリンク層 フレーム
物理層 ビット(電気信号)

また、「IPパケット」や「TCPパケット」とプロトコル名を最初に加える呼び方も使われたりします。

「パケット」にも、いろいろと呼び方が違っていたりしますが、「違う呼び方で呼ぶことがあるんだ。」程度に覚えておけばあまりこだわる必要はないかもしれません。

TCP/IPの各レイヤ識別子

ネットワークでデータをやり取りするときは、どの相手とデータをやり取りするのか特定する必要があります。
TCP/IPの各レイヤは、相手を特定するために識別子をつける仕組みを持っています。
レイヤによって識別方法が違います。

ネットワークインターフェイス層

ネットワークインターフェイス層のイーサネットは、MACアドレスを使って直接データをやり取りするPCなどを特定します。

インターネット層

インターネット層のIPプロトコルは、IPアドレスで相手を特定します。

トランスポート層

トランスポート層のTCPとUDPは、アプリケーション層を担当するソフトウェアとの間に階層的な通路を作りデータを受け渡します。
何本もある仮想的な通路を識別するためにポート番号を使っています。

1回のデータのやりとりに3つの識別子

各レイヤで別々の識別子を使うので、1回のデータのやりとりに、3つの識別子を使っています。

アプリケーション層

データをやり取りする相手のIPアドレスとポート番号は、アプリケーション層のソフトウェアが自動的に指定します。
MACアドレスは、IPアドレスと対応させるためのプロトコル「ARP」を使います。


TCP/IPの4つのレイヤの解説

HTTP「ウェブサービスの働き」

TCP/IPプロトコル「アプリケーション層」に属するプロトコル「HTTP」
(Hypertext Transfer Protocol)

ブラウザ(クライアント)がウェブサーバーにデータを要求すると、サーバーが要求されたデータを送るシンプルなものです。
HTTPを使用します。

ウェブサーバを構築するには「Apache」や「IIS」などウェブサーバーソフトを使います。

クライアントからサーバーに要求するデータをHTTPリクエストといいます。
HTTPリクエストのヘッダにはメソッド、URI、データ形式などが含まれています。

メソッドとは「何をするか」を表すコマンドで「GET」「POST」などがあります。
GETの場合は、URIで指定したファイルをサーバーがクライアントに送ります。
POSTの場合は、クライアントからサーバーにデータを送ります。

「GET」のHTTPリクエストを受け取ったサーバーは、HTTPリクエストで指定されたデータにヘッダを付加しHTTPレスポンスをクライアントに送ります。

HTTPリクエストを送り、HTTPレスポンスを返す。


Apacheとは、フリーソフトウェアとして無償で公開されており、世界中のプログラマたちがボランティアで長年に渡って開発を続けている。
現在、安定版の最新バージョンは2.2.16が公開されている。

TCP/IPプロトコル「ネットワークインターフェイス層」

TCP/IPのネットワークインターフェイス層の役割について。

OSI参照モデルでの、第1層「物理層」、第2層「データリンク層」にあたります。

ケーブルや端子の形状、信号の形式など物理的な決まり事を定めています。
さらに、機器間のデータのやり取りに関する決まり事も定めています。

なので、TCP/IPのネットワークインターフェイス層をデータリンク層と物理層に分けて考えることもあります。

ネットワークインターフェイス層の代表的なプロトコル

「イーサネット(Ethenet)」
「PPP」
などがあります。

「イーサネット(Ethernet)」は、イメージ的にケーブルなどの物理的な決まり事のように思えるかもしれませんが、データを処理する役割もあります。
データを処理する役割を「イーサネットプロトコル」と呼ぶこともあります。

「PPP」は、PCなどの機器が1対1で接続されている回線でデータのやり取りをするためのプロトコルです。
電話回線を使ってインターネット接続を行うときに使われました。
現在は、イーサネットが家庭にも普及しているため、使われなくなりました。

しかしパスワード認証機能があるので、会員の認証するときに使われます。
イーサネットとセットで使うPPPoE(PPP over Ethernet)というプロトコルが開発されました。
PPPoEを使えば、イーサネットを利用したネットワークでユーザー認証を行うことができます。
ADSLやFTTHで使われています。


TCP/IPの4つのレイヤの解説

TCP/IPプロトコル「インターネット層」

TCP/IPのインターネット層の役割について。

OSI参照モデルでは、第3層「ネットワーク層」にあたります。

データをやり取りする相手との通信に関する決まり事を定めています。
インターネット層はIP・トランスポート層はTCPとTCP/IPプロトコル群の基盤となるプロトコルです。

IPとルーティング

データをやり取りするには、「IPアドレス」が必要になります。
IPアドレスは、相手がどの場所に存在するのかを示す住所のようなものです。

IPアドレスがわかれば、次に「どのルートでデータを送るか」を決めます。
ルーティング」と呼びます。

IPの役割は、主に「IPアドレスの管理」と「ルーティング」になります。

インターネット層のプロトコル

ネットワーク層には、IPプロトコル以外にも、ARP、RARP、ICMPなどもあります。

ARP(Address Resolution Protoco)プロトコルとは、IPアドレスから物理層のネットワーク・アドレス(MACアドレス)を求めるために利用されるプロトコル。
RARP(Reverse Address Resolution Protocol)プロトコルとは、ARPとは逆の意味でMACアドレスからIPアドレスを取得するためのプロトコル。
ICMP(Internet Control Message Protocol)プロトコルとは、IPプロトコルがエラーした場合に対処するためのプロトコル。

[ping]コマンドには、ICMPプロトコルが使われています。


TCP/IPの4つのレイヤの解説

TCP/IPプロトコル「トランスポート層」

TCP/IPのトランスポート層の役割について。

OSI参照モデルの第4層「トランスポート層」と第5層「セッション層」にあたります。
トランスポート層の代表的なプロトコルは「TCP」と「UDP」です。

TCPとUDPの役割

役割は、通信プログラムがデータ通信を始めてから終わるまでの一連の流れ(セッション)を行う仮想的な通路を作ることです。
仮想的な通路は同時に複数つくることができ、どの通路を扱うデータかを区別するために各通信プログラムに「ポート番号」と呼ばれる識別子を付けます。

UDPの役割はここまでで、TCPはさらに確実にデータを届けるために「シーケンス番号」「確認応答」「再送」の機能を持っています。

「シーケンス番号」とは、データ1バイト毎に順番に付けた番号のこと。
「○番からデータを送る。」→「○番まで届きました。」→「□番からデータを送る。」・・・というやり取りをし、次に送るデータをどこから送れば良いかがわかるようにしています。

「確認応答」とは、データを受信した側が、送信側に「データを受け取った」と知らせる機能。送信側は、受信側からの知らせを受け次のデータ(TCPセグメント)を送ります。

「再送」とは、一定時間待っても応答がない場合に再度同じデータ(TCPセグメント)を送る機能。

TCPとUDPの使い分け

TCPはデータを確実に届けることができます。
しかし、データを送るときの手順がUDPよりも多く時間がかかります。
動画配信などは、確実にデータを届けるよりも、転送速度を重視しますので、UDPを使用しています。


TCP/IPの4つのレイヤの解説

TCP/IPプロトコル「アプリケーション層」

TCP/IPのアプリケーション層の役割について。

OSI参照モデルの第5層「セッション層」、第6層「プレゼンテーション層」、第7層「アプリケーション層」にあたります。

TCP/IPプロトコル「アプリケーション層」は、下位のトランスポート層にデータを整え渡す役割があります。
ユーザーとTCP/IPの間で働いてくれているのです。

TCP/IPプロトコル「アプリケーション層」の代表的なプロトコル

TCP/IPプロトコル「アプリケーション層」の代表的なプロトコルは、HTTP、SMTP、POP3、FTPなどがあります。
聞いたことのある名前も多いと思います。

これらのプロトコルに対応したソフトウェアが必要です。

HTTPはウェブサービスを提供します。ブラウザが必要です。
SMTP、POP3は、メールの送受信使われます。メーラーが必要です。
FTPは、ファイル転送に使われます。

ヘッダ

アプリケーション層のプロトコルは、ユーザーが入力したデータに受け取る相手のアプリケーション層が正しく処理するために、「ヘッダ」を付け加えます。
メールの「ヘッダ情報」は、SMTPがメール作成者メールソフトやSMTPサーバーが作成したものです。
ウェブサービスでも、HTTPがヘッダを付け加えられます。


TCP/IPの4つのレイヤの解説

ネットワーク標準のTCP/IPプロトコルとは

インターネットやイントラネットで標準的に使われるプロトコル。
OSI参照モデルと同じく、プロトコルがレイヤ構造をとり、それぞれのレイヤが処理をしていきます。

TCP/IPのプロトコル群は4つのレイヤに分かれています。

TCP/IPの4つのレイヤの解説

ネットワークインターフェイス層は、データリンク層と物理層に分けて考えられる場合もあります。