7月15日(木)1コマ目

前回のテスト

イーサネット、ARP、IPのテストをしました。

解説です。


PCやルーターでの処理

1.IPがルーティング

次に送信する宛先が決まる。が、IPアドレスで知らされる。


2.ARPでIPアドレスをMACアドレスへ

イーサネットは送信先のMACアドレスが必要。

ARPがIPアドレスからMACアドレスへ。

①まず、ARPテーブルチェック

ここに対象データがあれば(IPアドレスとMACアドレスの組み合わせ)、そのMACアドレスを使う。

なければ、②へ。

② ARPリクエスト送信

ARPリクエストパケットの各ヘッダは以下のとおり。

イーサネットヘッダ 宛先MACアドレス FF:FF:FF:FF:FF:FF
送信元MACアドレス 送信元のMACアドレス
ARPヘッダ ターゲットIPアドレス MACアドレスを調べたい対象のIPアドレス


③ARPリクエストを受信したら

ARPヘッダ内のターゲットIPアドレスをチェック。もし自分が問い合わされている場合はARPレスポンス送信。ARPレスポンスパケットの各ヘッダは以下のとおり。

イーサネットヘッダ 宛先MACアドレス ARPリクエスト送信元のMACアドレス
送信元MACアドレス 送信元のMACアドレス
ARPヘッダ ターゲットMACアドレス 自分のMACアドレス(これを通知したい)


④ARPレスポンスを受信すると

調べたいMACアドレスの取得成功。

ARPテーブルに保存する。


3.イーサネットがパケット送信

データパケットを送信できる。

イーサネットヘッダ 宛先MACアドレス ARPで取得した宛先のMACアドレス
送信元MACアドレス 送信元のMACアドレス
IPヘッダ 宛先IPアドレス データを届けたい相手のIPアドレス
送信元IPアドレス データ送信元のIPアドレス


問題では

ホスト4からホスト1へデータを送信することになっています。


ホスト4にて

IPでルーティング

宛先IPアドレスはホスト1(172.16.10.100)、ホスト4のルーティングテーブルを使ってルーティングすると次に送る宛先は 172.16.30.1 に決定。

ARPでIPアドレスをMACアドレスへ

ルーティング結果の172.16.30.1のMACアドレスを調べる。

まず、ホスト4のARPテーブルチェック。残念ながらない。よって、ARPリクエスト送信。

パケットの各ヘッダは以下のとおり。

イーサネットヘッダ 宛先MACアドレス FF:FF:FF:FF:FF:FF
送信元MACアドレス ホスト4のMACアドレス
ARPヘッダ ターゲットIPアドレス 172.16.30.1

これがパケット①

172.16.30.1がARPレスポンス返信

ARPリクエストを受信した172.16.30.1はホスト4へARPレスポンスを送信してMACアドレスを伝える。

イーサネットヘッダ 宛先MACアドレス ホスト4のMACアドレス
送信元MACアドレス ルーターBのポート2のMACアドレス
ARPヘッダ ターゲットMACアドレス ルーターBのポート2のMACアドレス(これを通知したい)

これがパケット②

イーサネットがデータ送信

172.16.30.1(ルーターBのポート2)へデータを送信。パケットの各ヘッダは以下のとおり。

イーサネットヘッダ 宛先MACアドレス ルーターBのポート2のMACアドレス
送信元MACアドレス ホスト4のMACアドレス
IPヘッダ 宛先IPアドレス ホスト1のIPアドレス
送信元IPアドレス ホスト4のIPアドレス

これがパケット③

172.16.30.1(ルーターBのポート2)がパケット③を受信する。


ルーターBにて

IPがルーティング

受信パケットのIPヘッダの宛先IPアドレスは172.16.10.100。

ルーターBのルーティングテーブルでルーティングすると、172.16.20.254から 172.16.20.1 へ送信することに決定。

ARPがIPアドレスをMACアドレスへ

ルーティング結果の172.16.20.1のMACアドレスを調べる。

まず、ルーターBのARPテーブルチェック。対象があるため、MACアドレスが取得できる。

イーサネットがデータ送信

172.16.20.254(ポート1)から172.16.20.1(ルーターBのポート2)へデータを送信。パケットの各ヘッダは以下のとおり。

イーサネットヘッダ 宛先MACアドレス ルーターAのポート2のMACアドレス
送信元MACアドレス ルーターBのポート1のMACアドレス
IPヘッダ 宛先IPアドレス ホスト1のIPアドレス
送信元IPアドレス ホスト4のIPアドレス

これがパケット④

172.16.20.1(ルーターAのポート2)がパケット④を受信する。


ルーターAにて

IPがルーティング

受信パケットのIPヘッダの宛先IPアドレスは172.16.10.100。

ルーターAのルーティングテーブルでルーティングすると、172.16.10.1から 172.16.10.100 へ直接送信することに決定。

ARPがIPアドレスをMACアドレスへ

ルーティング結果の172.16.10.100のMACアドレスを調べる。

まず、ルーターAのARPテーブルチェック。残念ながらない。よって、ARPリクエスト送信。

パケットの各ヘッダは以下のとおり。

イーサネットヘッダ 宛先MACアドレス FF:FF:FF:FF:FF:FF
送信元MACアドレス ルーターAのポート1のMACアドレス
ARPヘッダ ターゲットIPアドレス 172.16.10.100

これがパケット⑤

172.16.10.100がARPレスポンス返信

ARPリクエストを受信した172.16.10.100はルーターAへARPレスポンスを送信してMACアドレスを伝える。

イーサネットヘッダ 宛先MACアドレス ルーターAのポート1のMACアドレス
送信元MACアドレス ホスト1のMACアドレス
ARPヘッダ ターゲットMACアドレス ホスト1のMACアドレス(これを通知したい)

これがパケット⑥

イーサネットがデータ送信

172.16.10.1(ポート1)から172.16.10.100(ホスト1)へデータを送信。パケットの各ヘッダは以下のとおり。

イーサネットヘッダ 宛先MACアドレス ホスト1のMACアドレス
送信元MACアドレス ルーターAのポート1のMACアドレス
IPヘッダ 宛先IPアドレス ホスト1のIPアドレス
送信元IPアドレス ホスト4のIPアドレス

これがパケット⑦

172.16.10.100(ホスト1)がパケット⑦受信して終わり。


以上です。

今日、やったこと

  • TCPのコネクション確立
  • TCPのシーケンス番号、確認応答番号

今日のホワイトボード

TCPは

UDPもやっている ポート番号を使った4階プロトコルの特定 以外に

  • 通信効率アップ
  • 通信信頼性向上

をやっています。

図 TCPとUDP


[TCP]コネクション確立

TCPはデータを送る前に コネクション確立 で相手が受信可能か確認します。

コネクション確立は3つのパケットのやり取りで行います。

図 コネクション確立のながれ


[TCP]シーケンス番号、確認応答番号

いずれもTCPヘッダ内のフィールドです。

シーケンス番号

データ送信側から受信側へ 何バイト目のデータか を伝えるためのフィールド。


確認応答番号

データ受信側が送信側へ 何バイト目まで受信できたか(次は何バイト目から送ってほしい) を伝えるためのフィールド。


この2つのフィールドを使って、

  • 分割されたデータを再構築する(シーケンス番号)
  • 受信確認(確認応答番号)

をしています。


シーケンス番号、確認応答番号の変化を理解するために演習をやりました。とりあえず問1の解答例です。

図 TCPのシーケンス番号、確認応答番号の変化


夏休みまで多分、TCPの話です。



コメント

このブログの人気の投稿

8月18日(水)1コマ目

6月7日(月)2コマ目

5月31日(月)2コマ目