TCP/IPプロトコルスイート
TCP/IPは最も歴史が長く、現在のネットワークにおいて広く使われています。
###TCP/IPプロトコルスイートは4層で成り立っている
各レイヤ(層)の代表的なプロトコルを書いています。ポート番号、プロトコル番号については後ほど記載します。
アプリケーション層
###受信したデータが何かをアプリケーション層のプロトコルで識別している
複数のアプリケーションを立ち上げていても、それぞれのアプリケーションに適切にデータが届いているのは、アプリケーション層のプロトコルのおかげです。(メールアプリ立ち上げながらWebブラウジングしてても、Webサイトの情報がメールに出てきてしまったりしないですよね。)
###使うアプリケーションによってPCの呼び方が変わる
これややこしいんですが、どんなアプリケーションを使うか、どんなデータを扱うかでPCの呼び方が変わります。
例えば、大学生Aくんが部活とバイトで立場が違うみたいなイメージです。部活では後輩として、塾のバイトでは先生として振る舞っていますよね、こんなイメージです。
トランスポート層
###セグメントヘッダ
トランスポート層のヘッダはUDPは8バイト、TCPは20バイトであり、トランスポート層のデータをセグメントと呼びます。
###ポート番号でどのアプリケーションで表すかを識別
ポート番号をヘッダに入れることで、カプセル化のとき、どのアプリケーションで作成されたものなのか、非カプセル化のときにはどのアプリケーションであらわせばいいのかを識別することができます。同じPCでたくさんアプリケーションを開いていても、正しく見えているのはこのポート番号のおかげです。
#ポート番号は0~65535番まである
ポート番号には予め決まっているもの、申請すればあとから確保できるもの、自由に使っていいものが決まっています。
###Well known Port Numbers
よく使われるアプリケーションのポート番号のことで、0~1023番を指します。
###Registered Port Numbers
予約済みポート。アプリケーション開発者の申請により、つかうことができる番号の範囲です。ポート番号1024~49151番を指します。
###Dynamic and/or Private Ports
動的/プライベートポートで、NATなどの使用時に動的に使えるものです。ポート番号49152~65535を指します。
TCP(コネクション型の特徴)
TCPはコネクション型(信頼性のある)、UDPはコネクションレス型(信頼性のない)と言われますが、コネクション型(信頼性のある)とはどういうことでしょうか。
スリーウェイハンドシェイク three-way handshaking
コネクション型と言われる所以の一つが、スリーウェイハンドシェイクです。送信元ホストは宛先ホストに対していきないデータを送るのではなく、問題なく通信が行えることを確認してから通信を開始します。その確認がスリーウェイハンドシェイクです。
①送信元ホストが宛先ホストにSYNを送り、通信したいことを伝えます。
②宛先ホスト側はSYNに対するACKと、通信する意思としてSYNを送り、送信元ホストは宛先からのACKとSYNをうけとります。
③送信元ホストは宛先ホストからのSYNに対するACKを送り、通信実施可能であることを確かめます。
シーケンス番号:SYNに対する動的な番号
確認応答番号:ACKに対する番号、受信したシーケンスに+1した数値
制御:送信しているセグメントがSYNなのかACKなのか、データの最後なのか
###再送制御 TCP Retransmission
コネクション型と言われる所以のもう一つが、再送制御です。シーケンス番号(seq)、確認応答番号(ack)を使います。
宛先ホストは送られてきたデータに問題がなければ、受信したデータのシーケンス番号に+1して確認応答番号に入れてACKを返します。
送信元ホストは受信したACKを見て、つぎに何を送るべきか決めます。
万が一、到達できなかったデータがある場合、宛先ホストは受け取れなかったセグメント番号をACKとして送ります。送信元ホストはこのACKで指定されたセグメント番号のデータを再送します。
#インターネット層
###代表的なプロトコルはIP(Internet Protocol)
IPヘッダは20バイトです。オプションフィールドは使われることはありません。
インターネット層で作られたデータをパケットと呼びます。
また、インターネットそうではプロトコル番号が使われます。
このプロトコル番号によってTCPのプロトコルか、UCPのプロトコルかまたはそれ以外かを示すことができます。
#IP (Internet Protocol)
###論理アドレスの代表例がIPアドレス
TCP/IPネットワークにおいて、ホストに割り当てる論理アドレスをIPアドレスといいます。
TCP/IPネットワークにおいてはこのIPアドレスを使って、他のネットワークのホストと通信することができます。
###他のネットワークへ送信するためにルーティングテーブルがある
ルーティングテーブルは、ネットワークとそのネットワークへの距離と方向(どのインターフェイスから出力するか)を管理するデータベースです。
レイヤ3(ネットワーク層)デバイスにはルーティングテーブルが存在します。レイヤ3デバイスは、送られてきたパケットのヘッダ内の送信先アドレスとルーティングテーブルを比べて、パケットを転送しています。
複数のレイヤ3デバイスを経由して転送されるデータは、それぞれのレイヤ3デバイスにより、このルーティングテーブルとパケットのヘッダの比較を繰り返し、次々にリレーされて、宛先ホストへ転送されます。
#ICMP ( Internet Control Message Protocol )
###ICMPはIPを助けるためのプロトコル
IPは"送信元と宛先が繋がっていれば、データを届けるよ"というプロトコルです。
ICMPは送信元と宛先が繋がっていることを確かめるためのプロトコルと言っていいでしょう。
Destination unreachable 宛先到達不可能
データが送れないときに、送信元ホストに返ってくるメッセージのことです。
このメッセージはデフォルトゲートウェイ(図ではルータ)から送られてきます。
デフォルトゲートウェイは他のネットワークへ繋がる口
ネットワークが分割されていて、自分のネットワークから他のネットワークへの出入り口がゲートウェイです。
今回はルータがGWになっていて、ルータはどのネットワークがどの方向(どのインターフェイスの先)にいるか知っています。
GWがどの方向に転送すればいいかわからないときDestination unreachableのメッセージを送信元ホストに返送します。
###Echo/Echo reply (エコー要求/エコー応答)
ネットワークエンジニアでトラブルシュートをするときに、まず宛先と繋がっているかを確認します。
そのときに使うのがPing (Packet INternet Groper)です。
ping <IPアドレス>
といった形で使います。宛先のホストは繋がっていれば返事します。
※Groperは手探りで捜すこと (痴漢の意味も...)
#ARP (Address Resolution Protocol)
###IPアドレスとMACアドレスのバインディングテーブルを作成
レイヤ2ではMACアドレスを使ってデータを届けるので、どのIPアドレスがどのMACアドレスに対応しているかを紐づける必要があります。したがって、通信を始めるときはまずARP(このIP持っている人だれ?)を使って、宛先のMACアドレスを取得します。
ARPはブロードキャストで送信
通信をする前はどこに宛先がいるかわからないので、全ホストに対して、ARP(このIP持っている人だれ?)を送ります。
該当しないホストはパケットのヘッダで自分のIPと違うことを確認するとデータを破棄します。
該当するホストだけが自分のMACアドレスをフレームの送信元MACアドレスフィールドに入れて、送信元ホストに送ります。
ARPテーブル
このやりとりにより、送信元ホストは宛先ホストのMACアドレスを利用して、通信を開始します。
同時に送信元ホストにはARPテーブルとういうIPアドレスとMACアドレスを紐づけたデータベースを作成します。