CCNAの試験に向けて学習中。
復習に見返せるようにメモしていきます。
ほぼ自分の勉強メモです。
過度な期待はしないでください。
1.ネットワーク層のその他の機能
1-1.ICMP
ICMPは、Internet Control Message Protocolの略で、インターネット制御通知プロトコルとも言う。
ICMPは、ネットワーク上での通信状況の確認や発生した各種エラー情報を報告するために
用いられるプロトコルです。
通信エラー発生時には、その場所からパケットの送信元に対してICMPによってエラー情報が通知されます。その結果、パケットの送信元は発生した障害内容を知ることができるわけです。
1-2.pingコマンド
pingコマンドとは、PCやサーバからルータへの通信が可能かどうかを確認する、
要は、宛先までIPパケットが到達しているどうかを確認するために使うコマンドです。
pingコマンドは、ICMPメッセージを宛先の機器に送信し、応答の有無や内容によって
通信が可能かどうかを確認しています。
pingコマンドは、ICMPのエコー要求とエコー応答を利用して通信の可否を確認しています。

1-3.ICMPヘッダ
ICMPヘッダは、ICMPヘッダとICMPデータから構成されています。
ICMPヘッダの構成は以下の通りです。
※上記の画像らは、ICMPとはという記事参照
タイプ(Type)は、ICMPメッセージの種類の表します。
エコー応答は 0、 宛先到達不可能は 3、 エコー要求は 8、 時間切れは 11になります。
コード(Code)は、宛先到達不可能メッセージの場合にエラーの種類を示す値が入ります。
チェックサム(Checksum)は、エラーの有無をチェックする為のフィールドです。
1-4.ARP(アープ)
ARPは、Address Resolution Protocolの略で、アドレス解決プロトコルとも言う。
ARPは、IPアドレスからMACアドレスを調べる為のプロトコルです。
ARPは、ARP要求とARP応答という2種類のデータを送信し合ってMACアドレスを取得します。
■ARPでMACアドレスを取得する流れ
192.168.0.5のPCが、192.168.0.7のPCへ初めて通信する場合、
先ず、ARP要求を送信します。ARP要求で送られる内容は、
「IPアドレスが192.168.0.7のMACアドレスを教えて下さい。」
という問い合わせとなります。
対象の端末が分からない為、スイッチングハブは、ARP要求を受け取るとポートに繋がっている
全てのPCに問い合わせします。
これを、ブロードキャストといいます。
全端末は、ARP要求を確認し、自身のIPアドレスに対する問い合わせであった場合、
これに返答する為にARP応答を送信します。
該当の192.168.0.7のPCがARP応答で「私のMACアドレスはXXXです。」と返します。
対象でない端末はなにも応答しません。
取得した192.168.0.5のPCは、MACアドレスとIPアドレスをセットでARPテーブルに保存され、
以降はARPテーブルを参照して通信します。
ARPテーブルには保存期間があります。保存期間が過ぎると再度取得します。
■ルータを通るARPの流れ
異なるネットワークに通信する際は、出入り口となるルータを通る必要があります。
異なるネットワークの出入り口を、デフォルトゲートウェイといい、ここではルータがそれに
当たります。
PCには、このデフォルトゲートウェイのIPアドレスがあらかじめ登録されている必要があり、
登録されていなかった場合、他のネットワークとは通信出来ません。
その為に、ホストAは、先ずデフォルトゲートウェイのMACアドレスをARP要求で問い合わせます。
その際、MACアドレスを、ブロードキャストで問い合わせます。
ルーターは、ブロードキャストを通さない機器なので、このARP要求はセグメントB迄は届きませんが、
同じセグメント内の端末には届きます。
ルーター(デフォルトゲートウェイ)がルーター自身のMACアドレスをARP応答で返します。
これによってホストAは、セグメントBにあるホストに送信したい場合は、ルーターにデータを
送信すればよくなります。
この時のパケットの宛先は、
宛先IP:172.16.0.2
送信元IP:192.168.0.1
宛先MAC:0000.0000.aaaa
送信元MAC:aaaa.aaaa.aaaa
その後そのルーターは、宛先のIPアドレスを見て、宛先ネットワーク情報が登録されている
ルーティングテーブルを参照に、何処に転送すれば良いか調べます。
只、宛先となるホストEのMACアドレスがわからない為、ルーターはセグメントBにARP要求を流し、
宛先IPアドレスから宛先のMACアドレスを調べます。
ホストEは、自身のMACアドレスをARP応答で返します。
これによってルーターから目的のホストへデータを送信することができるようになりました。
この時のパケットの宛先IPと送信元IPは変わりませんが、
MACアドレスは変わります。
このようにルーターは、パケットを転送する際にMACアドレスの情報を書き換えます。
宛先IP:172.16.0.2
送信元IP:192.168.0.1
宛先MAC:eeee.eeee.eeee
送信元MAC:0000.0000.bbbb
2.トランスポート層の概要
2-1.トランスポート層の役割
トランスポート層の主な役割は、アプリケーション層で利用されているプロトコル間での通信を
制御する事です。
受信したデータを対象のアプリケーションに渡すと言いった橋渡しをするといった事を行います。
トランスポート層の代表的なプロトコルにTCPとUDPがあります。
2-2.TCP
TCPは、コネクション型のプロトコルです。
コネクション型とは、データの送信をする前に相手と通信出来るかどうかを確認し、
コネクション確立してからデータの送信を行います。
■TCPヘッダ
TCPでは、信頼性を確保する為、TCPヘッダに下記のような様々な情報を格納しています。
送信元ポート番号:送信元のアプリケーションを示すポート番号
宛先ポート番号:宛先のアプリケーションを示すポート番号
シーケンス番号:送信するデータの順序を管理する為のフィールド
ACK番号:どこまで受信したかを管理する為のフィールドで、次に送信されるデータの
シーケンス番号になる
■TCPの主な役割
- 接続の確立
TCPにおいては、通信を開始する前にデータの送信元と宛先のホスト間で接続を確立する
必要があります。
使用される接続確立方法を、3ウェイハンドシェイクといい、
以下の手順の通り “3回のやりとり" によって確立されます。
SYNフラグ:TCP接続の開始を要求する際に使うフラグで、
このフラグをつけて送信し、TCPでやり取りする端末間で同期します。
ACKフラグ:相手からの要求を承認して応答することを示す。
シーケンス番号:送信のデータの順番を示す
確認応答番号(ACK番号):どこまで受信したかを通知する為の数値。
①ホストAからホストBにコネクション確立の要求をします。
SYNフラグが「1」で、ACKフラグが「0」、ホストAからの送信データの起点となる
シーケンス番号(ここでは「0」)を設定したTCP接続要求セグメントをホストBに送信します。
②ホストBはホストAのコネクション要求に応えます。
そして、ホストBからもコネクション確立を要求します。
SYNフラグが「1」で、ACKフラグが「1」、ホストBからの送信データの起点となる
シーケンス番号(ここでも「0」)、ACK番号に受け取ったTCP接続要求に+1した値を
返します(ここでは「1」)。
③ホストAもホストBからのコネクション要求に応えます。
SYNフラグが「0」で、ACKフラグが「1」、
シーケンス番号は「相手から受信したACK番号」なので「1」、
ACK番号は②と同じ考え方で「相手から受信したシーケンス番号」に「+1」を加算した値となります。
つまり、今回の場合は「1」です。
- 送信データの順序確保
TCPでは、MSSに合わせてデータを分割してデータを送信します。
※MSSとは、1回に送信出来るデータの上限
シーケンス番号により、同じデータが届いてしまっていないか重複チェックやデータの並び替えを
行う事ができます。また、確認応答番号(ACK番号)によりどこまでデータが届いたかを知る事が
できます。TCPでは信頼性を確保する為に、必ず確認応答を返す仕組みになっています。
- ウィンドウ制御とフロー制御
ウィンドウ制御とは、ウィンドウというばバッファ領域を用意し、送信データがウィンドウサイズに
達する迄は確認応答を待たないで、データをまとめて送る事。
こうする事で、確認応答を待たずに転送出来るので、転送の効率は向上します。
フロー制御とは、データ通信状況に応じて送信停止や速度制限、データ量を制御などの
調整を行う機能のこと。
2-3.UDP
UDPとは、コネクションレス型のプロトコルであることから、
TCPに比べると信頼性がないものの高速に転送を行うことができます。
また、TCPはコネクションを確立して通信する為、1対1の通信となりますが、
UDPはコネクションを確立する必要性がない為、ブロードキャストやマルチキャストが可能です。
■UDPヘッダ
UDPでは、上位層(アプリケーション層)から渡されたデータにUDPヘッダを付加し、
それをUDPデータグラムとして下位層に渡します。
UDPヘッダは、ヘッダサイズ(8byte)が少ない事から、処理の付加が軽くなります。
■UDPヘッダの主な役割
UDPヘッダの役割は、出来るだけ早くデータを送信する事です。なので、TCPの主な役割の
ようなものはありませんが、上位層と下位層の橋渡しに適しています。
また、UDPヘッダは、TCPヘッダよりもヘッダサイズ(8byte)が少ない事から、
UDPヘッダは、その分アプリケーションのデータを多く送受信することができます。
ただし、パケットが到達する保証がないことから、パケットロスなどの場合アプリケーション側で
再送処理をして通信を成立させるかパケットロスが容認できるアプリである必要があります。
UDPヘッダは、信頼性の確保を行わないベストエフォートな通信となります。
2-4.ポート番号
ポート番号とは、アプリケーション層で利用されるプロトコルを識別する為の番号の事。
ネットワーク上では、IPアドレスを使ってホストを識別し、ホスト上で複数のアプリケーションを
利用している場合には、さらにポート番号を使ってアプリケーションを識別します。
①ウェルノウンポート番号はサーバのアプリケーションに割り当てられます。
②登録済みポート番号は独自に作成されたアプリケーションに割り当てられます。
③のダイナミックポート番号はサーバとのプロセスに応じクライアントのアプリケーションに動的に割り当てられます。
参考記事
※ARPという記事参照
※TCPとUDPの違いとは?という記事参照
※TCP three-way handshakingという記事参照
※ポート番号という記事参照
過去投稿記事 - [ネットワークの基礎(1)【接続形態と通信方法】](https://qiita.com/k-yasuhiro/items/38d643ec262a0309db06) [ネットワークの基礎(2)【プロトコル(OSI参照モデル)】](https://qiita.com/k-yasuhiro/items/0e5accf951223e2332e4) [ネットワークの基礎(3)【プロトコル(TCP/IPモデル)】](https://qiita.com/k-yasuhiro/items/401630a552221d19ac13) [イーサネットLAN(1)【LANケーブル】](https://qiita.com/k-yasuhiro/items/9c339643070d4db1e6ac) [イーサネットLAN(2)【LAN内の機器】](https://qiita.com/k-yasuhiro/items/199d108007c6e1c2dbfc) [イーサネットLAN(3)【ネットワーク層の機能と概要/IPアドレス】](https://qiita.com/k-yasuhiro/items/56598d2611b41762b8f3) [イーサネットLAN(4)【サブネット化】](https://qiita.com/k-yasuhiro/items/b62312bd60e6b275359e)