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の話です。



コメント