Skip to content

Instantly share code, notes, and snippets.

@gtaiyou24
Last active May 4, 2017 11:29
Show Gist options
  • Save gtaiyou24/5eb62aa8cc3d48f014eac0c37a2cbc85 to your computer and use it in GitHub Desktop.
Save gtaiyou24/5eb62aa8cc3d48f014eac0c37a2cbc85 to your computer and use it in GitHub Desktop.
ネットワークの基礎知識をまとめたもの

ネットワーク

ネットワークとは、ハードウェア、ソフトウェア、データなどの情報資源を共有する目的で、コンピュータを結び付けた状態のこと

LAN

インターネットが普及するまでは、特定のエリア内だけで接続された小さなネットワークが世界中に存在していた。この小さなネットワークをLAN(Local Area Net-work)と呼ぶ。LANは、自宅内・企業内・ビル内のみで完結している。

  • LAN内のPCが同じOSであるならば、同じ通信方式に従って接続すれば十分 => ネットワークの構築も容易
  • 現在では、インターネットが普及して多くのOSが混在している。これらのOSの間には、共通した取り決め(=プロトコル[protocol])によってデータのやり取りを行う

WAN

会社内や学校内でLANを組むことができると、他の遠くの場所のPCともデータ送信したいと考えました。その際インターネットではなく独自のネットワークで2つのLANを繋げることもできる。これらを実現したのがWAN(Wide Area Network)。

  • WANとは、電気通信事業者が提供する広範囲な地域を結んだネットワーク

IPアドレス

ネットワークに接続されたコンピュータは、それぞれを識別するために、NICと呼ばれるネットワークカードごとに固有のIPアドレスをつける必要がある。

IPアドレスの確認方法

~ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
	options=3<RXCSUM,TXCSUM>
	inet6 ::1 prefixlen 128
	inet 127.0.0.1 netmask 0xff000000
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
	nd6 options=1<PERFORMNUD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=27<RXCSUM,TXCSUM,VLAN_MTU,TSO4>
	ether 00:26:4a:0f:12:08
	nd6 options=1<PERFORMNUD>
	media: autoselect
	status: inactive
fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 4078
	lladdr 00:26:4a:ff:fe:0f:12:08
	nd6 options=1<PERFORMNUD>
	media: autoselect <full-duplex>
	status: inactive
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether 00:26:08:e1:42:d0
	inet6 fe80::226:8ff:fee1:42d0%en1 prefixlen 64 scopeid 0x6
	inet 192.168.10.242 netmask 0xffffff00 broadcast 192.168.10.255
	nd6 options=1<PERFORMNUD>
	media: autoselect
	status: active
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
	ether 02:26:08:e1:42:d0
	media: autoselect
	status: inactive

プライベートIPアドレスとグローバルIPアドレス

IPアドレスを大別すると、プライベートIPアドレスとグローバルIPアドレスに分類できる

プライベートIPアドレス

  • LAN内で割り当てるためのIPアドレスのこと
  • プライベートIPアドレスはインターネット上では使用できない
  • インターネット上のルーターは宛先がプライベートIPアドレスのIPパケットを受け取っても、転送せずにすぐに捨てる。そのため、誰かが誤ってプライベートIPアドレスをインターネットに接続しても他のインターネットユーザーに悪影響を与えることはない

グローバルIPアドレス

  • インターネット上で唯一つ割り当てられるIPアドレスのこと

ループバックアドレス

自分自身を示す仮想的なアドレス。

  • 一般的にループバックアドレスのIPアドレスとして「127.0.0.1」(ホスト名:localhost)が用いられる。

ブロードキャストアドレス

当該ネットワークに所属するホスト全体を示す特殊なアドレス

  • ブロードキャストアドレスに対して通信を行うことで、ネットワークに所属するホスト全体に対して通信を行うことができる

サブネットマスク


MACアドレス

プロトコル(protocol)

ネットワーク上でデータを通信するための手順や規約の集合のこと。 プロトコルといっても、様々なものがる。

  • 通信プロトコル: 通信に置けるプロトコル
  • サービスプロトコル: サービスにおけるプロトコル

コンピュータをネットワークえ通信するときに送られるデータは、パケットと呼ばれるひとまとまりのデータに小分けして送られる。このとき、送り出されるパケットには、それぞれ受信者を示す識別子が付けられており、正しく受信者に届くようになっている。

  • 通信プロトコル: そのパケットの構成方法や通信手順を決めるもの
  • サービスプロトコル: パケットから取り出したデータの使い方を決めるもの

ポート番号

ポート番号は、ネットワーク上で通信する際に用いる出入口の番号。サーバ側では、サービスプロトコルを識別するために、ポート番号を使用している。

ポート番号の種類

ポート番号は値の大きさによって、次の2種類に分類できる

  • ウェルノウンポート番号
  • エフェメラルポート番号

ウェルノウンポート番号

1〜1023のポート番号はサーバーアプリケーション用に予約されている。この範囲のポート番号を特別にウェルノウンポート番号(well-known port number)と呼ぶ。

エフェメラルポート番号

1024〜65535のポート番号はクライアントアプリケーションに動的に割り当てられる。この範囲のポート番号をエフェメラルポート番号(ephemeral port number)と呼ぶ。

代表的なサービスプロトコルとポート番号

ポート番号 プロトコル名 サービス内容
7       ECHO   入力された文字列をそのまま出力に返す
21     FTP     ファイルを転送する
22     SSH     セキュアなファイル転送、ログイン、ポート転送を行う
23     TELNET サーバーを端末から操作する
25     SMTP   リモートからサーバーを操作する
79     FINGER サーバー上にある個人情報を提供する       
80     HTTP   Webページを転送する
110     POP3   メールを受信する
443     SSH(HTTPS) Webページを転送する。ただし、通信は暗号化される

HTTP(Hyper Text Transfer Protocol)

Webサーバーとクライアントでデータの送受信をするためのプロトコル。

  • HTTP自体はリクエストとレスポンスからなる単純なプロトコル。リクエストとレスポンスはそれぞれ独立した通信の単位となる。
  • ブラウザが、Webサーバーにリクエストを送信します。そのリクエストの中には閲覧したいWebページのURLが含まれています。すると、Webサーバーはブラウザにレスポンスを返します。このレスポンスには、HTTPステータスコードとWebページを構成するファイル(HTMLファイルや画像ファイルなど)の内容が含まれる。

FTP(File Transfer Protocol)

コンピュータ間でファイルを転送するためのプロトコル。ユーザーが触るコンピュータのことを端末という。

  • FTPクライアントを使って、サーバーとクライアント間でファイルの送受信を行う
  • ex)Webページをインターネットで公開するためには、ローカル環境でWebページを作成する。その後、FTPを使用してWebサーバーにWebページに関するファイル(HTMLファイルや画像など)をアップロードする

TELNET(TELetype NETwork)

リモートにあるサーバーを端末から操作できるようにするプロトコル。

  • TELNETではネットワーク仮想端末を通じることで、通信自体がTELNETの仕様に基づけば、サーバーのOSと端末のOSが異なっていても、自由に通信できる。
  • つまり、様々なOSが混在するようなネットワークでリモートのサーバーを操作にするのにうってつけであったわけです。

SMTP(Simple Mail Transfer Protocol)

メールを送信・配送するためのプロトコル。

  • メーラーでメールを送信したとする。
  • すると、SMTPサーバーは宛先のメールアドレスのドメイン(「@」以降の部分)を確認する
  • そのドメインのDNSサーバーに対して、MXレコードを問い合わせます。DNSサーバーは、MXレコードとAレコードをSMTPサーバーに返す。
  • SMTPサーバーは宛先のメールサーバーを特定できたので、そこに宛ててメールを送る
    上記のような仕組みにすることで、ユーザーがメールを送信する場合には、メールアドレスだけを意識するだけでよいことになる。

POP(Post Office Protocol)

メールを受信するためのプロトコル。POPにはPOPやPOP2などがあるが、一般にPOPといえばPOP3を示す。

  • メールはメールサーバーのメールボックス内に保存される。
    • POP3では認証後に、メールボックス内のメールを受信します。受信したメールはメーラー上に表示されて、ユーザーがメールの内容を読むことができる
  • POP3ではメールボックス内のメールをすべて一括で受信する
    • 「このメールは受信しない、このメールは受信する」といった選択はできないということ
  • POP3ではすべての通信が平文でやり取りする。認証時のIDやパスワード、メールの内容などがそうです。

IMAP

IMAP4はメールの操作・閲覧するためのプロトコル。

  • POP3のようにメールを一括して受信せずに、最初はサーバーにアクセスしてメール一覧を表示します。特定のメールを取得したり、サーバー上で操作したりできる。
  • サーバー上で閲覧や削除といった操作を行うため、ネットワークの通信が頻繁に行われるというデメリットがありますが、現在のようにネットワークの高速化や、無線LANやLTEなどのどこでもネット環境に接続できるには向いているプロトコル。

APOP

APOPは、従来のPOPを改良して、通信を暗号化したプロトコル。

  • 2007年に、情報処理推進機構(IPA)セキュリティセンターはAPOPのプロトコル自体にパスワード漏洩の脆弱性が存在することを発表。APOPはハッシュ関数のMID5を適切に用いていないことが原因です。そのため、現在ではセッション自体を暗号化するPOP over SSL(ポート番号: 995番)などを用いることが望ましい。

SSL(Secure Sockets Layer)

インターネット上で安全に情報をやり取りするための暗号化方式を規定したプロトコル。具体的には認証・暗号化・改ざん検出をの機能を提供。

  • HTTPに利用することを意識して作られているが、アプリケーション層の特定のプロトコルに依存しない。
  • URLが「https://」をなっていれば、HTTPにSSLが利用されていることがわかる。同時にInternet Explorerの場合は鍵マークが表示される。SSLが利用されている場合は、認証所を確認できる。

クライアントとサーバー

現在の多くのネットワークプログラムは、サーバーとクライアントで通信をやり取りします。実際、ネットワークにはサーバーやクライアントと呼ばれるコンピュータだけではなく、データを配送するハブやルーターと呼ばれるネットワーク機器が接続されています。

  • サーバー: ネットワークに接続されたコンピュータに対して、サービスを提供するソフトウェアまたはハードウェアのこと
  • クライアント: ネットワークに接続され、サーバーからサービスを受ける側のソフトウェアまたはハードウェアのこと

ネットワーク上における通信のやり取り

通常ソフトウェアがネットワーク上で通信を行う場合は、クライアントとサーバー間でのデータのやり取りにTCPやUDPのいずれかのプロトコルが用いられる。

  • TCPは長いデータを分割してやり取りするため、分割したものを受け取った側で元に戻す仕組みがあります。また、データを運ぶ途中でエラーが起こったとしても、自動的にそれを修復したり再送したりする機能を持ちます。
  • UDPはエラーの回復機能を持たない簡便なプロトコル。そのため、通信の処理を行うプロセッサの負担が軽く、ネットワークを流れるデータ量が少ないため、動作が速くなる。

UDPクライアントの動作

UDPを用いた場合におけるクライアントとサーバー間のデータのやり取りは、次の4つの動作によって実現化される。

  1. 名前解決
  2. ソケット・オブジェクトの作成
  3. データの送信
  4. レスポンスデータの受信

1.名前解決

データの送信相手のサーバー名は、プログラムの引数などで与えられますが、実際に通信をするためにはIPアドレスが必要。

なぜならば、ネットワーク中に存在するルーターやスイッチなどのネットワーク機器はサーバー名を理解できず、IPアドレスに従ってパケットを運ぶように作られているから。

  • つまり、IPアドレスを用いた方がネットワーク機器にとって中継処理時の負荷が軽くて済む。
  • しかし、人にとってはIPアドレスよりサーバー名の方が覚えやすいため、プログラムの引数にサーバー名を指定することも許容している。 そこで、通信プログラムはサーバー名からIPアドレスを検索する。これを名前解決をいう。

--名前解決の仕組み--

ファイルに登録する方式
ファイルに登録する方式では、名前とアドレスのセットをファイルに保存する方式。
  • TCP/IP系のネットワークでは*hostsファイル*を使用する。サーバー名とIPアドレスのセットが記録されている。
  • メリット: hostsファイルは単純なテキストファイルなので、簡単に変更を加えることができる    
  • デメリット: ネットワークに接続するすべてのサーバーの情報を記述するわけにはいかないので、接続台数が多く頻繁に追加・変更が起こる場合にはhostsファイルによる名前解決には向いていない。
 
 
全員に問い合わせる方式
  LANではブロードキャストに送信することで、全コンピュータに宛てて問い合わせできます。対象となるホストが、アドレス情報を含んだ応答を返してくるのを期待する方式。   
  • ブロードキャストを用いた名前解決を実現するには、まず名前登録という作業が必要になる。
  • 作業①: 名前を付ける場合に、すでにネットワーク上に同じ名前があっては困るので、自分の名前をブロードキャストでネットワーク内の全員に通知する。同じ名前を持つコンピュータは、名前の重複を返してくれるようにしておきます。一方、重複していなければ、何も返さないようにします。
  • 作業②:名前を付けたいコンピュータが全員に通知して、しばらく待機しても重複を知らせる返信がなければ、その名前は使用可能と判断して、自分の名前とする。これが名前登録になる。
  • メリット: 各PCがhostsファイルに類似するものを保持しなくてもよい
  • デメリット: 大規模なネットワークでは全員に問い合わせる方式は用いられません。なぜならば、ブロードキャストルーターを超えることができないから。そのため、この方式はインターネットでは使用しません。
 
 
サーバーに問い合わせる方式
 サーバーに名前とアドレスの情報をあらかじめ登録しておき、そのサーバーに問い合わせすることで指定した名前に対応するアドレスを教えてもらう方式。
 TCP/IP系のネットワークではDNS(Domain Name System)が使用されます。DNSサーバーに情報を登録しておき、そこに問い合わせを行います。  
名前解決の優先順位

名前解決の使い方はアプリケーション側ではなくOS側が担当する。
UNIXにおける名前解決の優先順位は、OSやバージョンによって異なるが、一般には次の優先順位が多い傾向にある。

  1. hostsファイルで名前解決する
  2. DNSサーバーに問い合わせる
  3. NISサーバーに問い合わせる
※Linuxであれば、`/etc/host.conf`ファイルで優先順位を変更できる。

2.ソケット・オブジェクトの作成

OSは通信状態を管理するためのテーブルが持っている。そのテーブルには次のような項目がある。

通信しているプログラム名 通信元(クライアント)のポート番号 通信先(サーバ)のIPアドレス 通信先(サーバ)のポート番号 プロトコルの種類(TCP/UDP) 通信状態
hogehoge hogehoge hogehoge hogehoge hogehoge hogehoge
  • この表の1レコードが1つのソケットに対応している。ソケットは端末内に置けるエンドポイントであり、電気器具でソケットにつなぐイメージとなる。
  • ただし、通信状態はTCPのみで使用する。また、UDPでソケットを生成したときは、通信先のIPアドレスポート番号は指定されない。つまり、空のソケットを作成すると同時に、OSが送信元のポート番号を自動的に割り当て、更新してくれる。
  • ソケットが存在しないと、ネットワークからパケットが届いたときに、OSはそれをどのアプリケーションに渡したらよいのかが判断できない。つまり、このようなことがないように、通信前に必ずソケットを作る決まりになっている。
  • ソケットはパケットの受信時だけでなく、送信時やエラー検出時にも使用される。

3.データの送信

送信用に送信バッファを確保して、そこに送信データを格納する。
送信動作を実際に行うのはOSの役目であり、プログラム側はOSに送信依頼を出すだけ。その際、送信先の情報としてIPアドレスとポート番号を指定する。IPアドレスは名前解決ですでに判明しており、ポート番号はサービスごとに決めっている。

送信内容のチェック
 
  1. OSは送信依頼を受けたならば、依頼内容に問題がないことを確認する。
  2. ソケットが存在するか、送信データを格納するバッファの長さが適切かどうかを調べる。
経路探索
 問題がなければ、ルーティングテーブルを参照して、通信相手のIPアドレスから、そのパケットを送信する相手を割り出す。なぜならば、「通信相手=パケットを送信する相手」とは限らないから。
MACアドレスの特定
パケットを渡す相手のIPアドレスが決まったら、IPアドレスに対応するMACアドレスを割り出す。
その際、ARPキャッシュでIPアドレスを検索する。該当するIPアドレスが見つかったらならば、対応するMACアドレスを採用する。もし見つからなければ、ARPプロトコルを用いる。ARPとは、IPアドレスからMACアドレスを特定するためのプロトコル。
ARP問い合わせを送信する。それに対してARP応答があれば、格納されているMACアドレスを採用する。さらに、そのMACアドレスをARPキャッシュに登録する。
パケットの作成
これで、送信先のIPアドレスとMACアドレス、送信データが揃った。
送信先のIPアドレスとMACアドレスから、Ethernetヘッダを作成する。その後ろに送信データを配置する。
UDPでは1パケットが最大64Kバイトのデータと決められている。送信データがこれより大きい場合、分割する。このとき、ヘッダ部分にデータの通し番号を追加する。これをフラグメンテーションと呼ぶ。
受信側はこの通し番号により、元の状態に組み立てることができるわけです。これをリアセンブリングと呼ぶ。
パケットの送信
作成したパケットはLANドライバに渡す。
LANドライバ: NICを制御するためのソフトウェア。
  1. LANドライバは受け取ったパケットをNIC内部にあるメモリにコピーする。
  2. NIC上にあるLANコントローラチップに送信コマンドを送る
  3. LANコントローラがLANの状態を確認する。送信可能であれば、パケットを先頭から順番に電気や光のアナログ信号に変換して、ケーブルを通じて送り出す。
以上がクライアントのパケットの送信動作

4.レスポンスデータの受信

受信側(サーバー側)がレスポンスデータを受信したとする。

  1. ケーブルを通じて電気や光の信号を受信する
  2. NICのLANコントローラチップは信号を受けったならば、信号の先頭から順番にデジタルデータに変換する
  3. ヘッダに記載された宛先MACアドレスを調べる
       
    • 宛先MACアドレスが自分のそれを一致する場合: 自分宛のパケットと判断し、それ以降のデジタルデータに変換する作業をそのまま続行する
    •  
    • 自分宛のパケットではない場合: 受信動作とデジタルデータの変換処理を中止し、残りの信号を無視する
  4. ヘッダに通し番号があれば、リアセンブリングで元のデータに復元する
  5. 元に戻すためのパケットがすべて揃っていない場合は、受信エラーとなる
  6. デジタルデータに変換したならばNIC内のメモリに格納する
  7. メモリにパケットを格納し終えたら、CPUに通知する。CPUはこのとき別の仕事をしている可能性が高く、LANコントローラチップの動作を常に監視しているわけではない。そこでCPUに割り込みを行い、パケットの到着を知らせる
  8. パケットの通知を受けたOSは、パケットのヘッダの正当性を確認する
  9. ヘッダのフォーマット、宛先IPアドレスに問題がないことを確認する。もし問題がなければ、ヘッダにある宛先ポート番号をソケットの表で検索する。  
       
    • ソケットの表にポート番号が見つからない場合: 宛先が不明として認識され、発信元にそれを知らせる。
    •  
    • ソケットの表にポート番号が見つかった場合: そこにプログラム名が記載されているので、そのプログラムに受信したデータを渡す
  10. プログラム側はデータを送信してから、その応答が返ってくるまで待機する。応答が返ってくれば、次の行に制御を移ります。

しかし、いつまで経っても応答が返ってこない場合もある。それでは困る場合は、ソケットの待ち時間を設定しておくのが一般的。

切断動作
プログラムを終了する場合などのように、もう通信をする必要がなくなったら、ソケットディスクリプタを閉じる。これにより、ソケットの表からソケットの行が削除される。

TCPクライアントの動作

UDPは1つのパケットで64Kバイトまでのデータを運ぶことができ、大きなデータであれば分割して送信できる。しかし、分割した結果の1つでも送信先に届かない場合は、すべてを送り直す必要がある。 一方、TCPでは分割したデータの一部が送信先い届かない場合は、その一部だけを送り直すことができる。よって、巨大なデータの場合、すなわち分割数が多い場合は、UDPは非効率であるため、一般にTCPが採用される。

TCPを用いたクライアントとサーバー間のデータのやり取りは、次の4つの動作によって実現化される

  1. 名前解決
  2. ソケット・オブジェクトの作成
  3. データの送信
  4. レスポンスデータの受信

1. 名前解決

この処理はUDPクライアントにおける名前解決とまったく同じ動作をする。

2. ソケット・オブジェクトの作成

ソケットのテーブルには次のような項目があることをUDPで述べた

通信しているプログラム名 通信元(クライアント)のポート番号 通信先(サーバ)のIPアドレス 通信先(サーバ)のポート番号 プロトコルの種類(TCP/UDP) 通信状態
hogehoge hogehoge hogehoge hogehoge hogehoge hogehoge

TCPではパケットが相手に届いたことを確認する。確認した結果、届いていなければ送信し直す。つまり、送ったパケットを一時的に保存しておかなければならない。しかし、コンピュータは同時に様々な通信を行っており、それらをすべて保存しておくならば、工夫して管理しておかないと仕組みが複雑になる。そこで、TCPではソケットごとに通信状態も保持する

UDP TCP
UDPでは接続という概念はなく、パケットを送信するだけ。つまり、UDPではソケットを生成するときに、接続相手を指定しない。 TCPで通信先のIPアドレスとポート番号を指定して、ソケットを生成する。IPアドレスは名前解決ですでに判明しており、ポート番号はサービスごとに決まっている。通信後、パケットの送受信の状態によって、ソケットの通信状態を更新していく

3. データの送信

送信用に送信バッファを確保して、そこに送信データを格納する。
送信動作を実際に行うのはOSの役目であり、プログラム側はOSに送信依頼を出すだけです。

詳細は「ハッカーの学校」 P.52を参照

4. レスポンスデータの受信

データは分割して送信され、相手がどこまで受信したかにより再送するものが変わってくる。
そこで、シーケンス番号とACK番号を用いて、受信側がどこまで受信したかを送信側が把握する。

  • シーケンス番号: 送信するデータの連番
  • ACK番号: 受信したデータの連番
  1. パケットを送信するときに、ヘッダ部にシーケンス番号を含めておく。これにより受信側は「何バイト目以降のデータを送っている」ことを知る。
  2. 受信側は「受け取ったシーケンス番号+受信データのバイト数」をACK番号として、応答を返す。 これにより、送信側は「受信側が何バイト目までデータを受信している」ということを知る

受信側から来たACK番号が、送信したデータよりも小さければ、その番号以降のデータは相手に届いていないと判断し、再配送する。

切断動作
プログラムを終了する場合などのように、もう通信する必要がなくなったら、切断動作を行うことを受信側に通知する。
このタイミングで、受信側はまだデータ送信の途中の可能性もあります。すでに送信動作に入ったものは送信しますが、それ以外のものについては停止します。

サーバの動作

サーバー: クライアントに対してサービスを提供する側

クライアントとサーバーの動作の違い

接続動作のパケットの到着を待機する
一般的にはクライアントからのリクエストに対して、適切な処理をしてレスポンスを返す。つまり、TCPであれば、クライアントは接続する側(接続動作を行う側)、サーバーは接続される側になる。
クライアント(接続する側)は、ソケットを生成したならば、接続動作のパケットを送信する。一方、サーバー(接続される側)では、ソケットを生成したならば、接続動作のパケットが到着するのを待たなければならない。
接続動作が終われば、その後はデータの送受信になり、クライアントとサーバーは同様の制御を行う。
複数のリクエストに対する処理
サーバーでは複数のクライアントを相手にする。
最初に接続動作をしたクライアントの通信が終わるまで、次の接続動作をしたクライアントを待たせてしまうわけにはいかない。 そこで、マルチスレッドにより、複数のクライアントのリクエストを並行処理する。一般的には、クライアントから接続動作が来たら、そのクライアントの処理を担当するスレッドを新たに生成する。OSの管理情報に対応するソケットを渡す。これで、生成したスレッドがクライアントと通信できるようになる。

プロトコルスタック

プロトコルスタック(protocol stack)・・・通信を行う際のいくつかのプロトコルが階層化されているという構造のこと。 レイヤー・・・プロトコルスタックのそれぞれの階層のこと

  • スタック構造の中に通信に必要なすべてのプロトコルを集めているため、**プロトコルスイート(protocol suite)**と呼ばれることもある
  • ネットワークや通信を巨大な建築物に例えて、ネットワークアーキテクチャ通信アーキテクチャと呼ぶ場合も 代表的なプロトコルスタックには、OSI参照モデルやTCP/IPモデルがる。

プロトコルスタックのレイヤー構造

レイヤー構造になっている理由 →レイヤーごとに独立性を持たせることができ、機能の追加や入れ替えが用意になるから →機器を設計する際に、対象とする範囲を明確に区分できるから

OSI参照モデル

このモデルでは、分割して統治するという方式を用いており、1つの課題をより小さくて自己完結的な7つの課題に分割している。

レイヤー 階層名 役割 対応するネットワーク機器
7 アプリケーション層 クライアントとサーバーという役割を決める -
6 プレゼンテーション層 データ表現形式を変換する -
5 セッション層 アプリケーション間のセッションを管理する -
4 トランスポート層 エラー検出と訂正により、エンド間の信頼性を保証する ゲートウェイ
3 ネットワーク層 異なるネットワーク間の通信を提供 ルーター
2 データリンク層 異なるデバイス間の仲立ちを提供 ブリッジ
1 物理層 物理的な電気や光の信号を担当する リピーター
  • レイヤー1~4: 下位層・・・データを届ける役割
  • レイヤー5~7: 上位層・・・下位層の機能によりアプリケーション別に届いたデータを処理する。

TCP/IPモデル

レイヤー 階層名 役割 プロトコル
4 アプリケーション層 ネットワークを使うプログラムやサービス DNS,FTP,HTTP,IMAP,POP,SMTP,SSH,TELNET
3 トランスポート層 両端のデータ配送サービス TCP,UDP,RSVP,SCTP,DCCP
2 インターネット層 データの経路制御とデータプログラムの種類の決定 IP(Ipv4,IPv6),ICMP,ICMPv6,IGMP,IPsec
1 ネットワークインターフェース層 物理ネットワークへのインターフェース ARP,Ethernet
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment