『体験しながら学ぶネットワーク技術入門』2章のメモ

概要

『体験しながら学ぶネットワーク技術入門』を読み進めながら学んだことをまとめるメモ
本ページは第2章の分。

座学

イーサーネット

  • プリアンブル
    • 「これからイーサーネットを送るぞ」という合図
    • 先頭に「10101010」 * 7 + 「10101011」 * 1
  • 送信先/送信元MACアドレス
    • 6バイト + 6バイト
  • タイプ
    • ネットワーク層でどんなプロトコルを使用しているか
      • IPv4なら 0x0800
      • IPv6なら0x86DD
  • イーサーネットペイロード
    • ネットワークそうのデータそのもの
  • FCS
    • イーサーネットフレームが壊れていないかを確認
    • 末尾4バイト
    • チェックサム的な値
  • MACアドレスの構成要素
    • OUI (Organizationally Unique Identifier)
      • IEEEが割り当てる
      • NICを製造しているベンダーのリスト
        • https://standards-oui.ieee.org/oui/oui.txt
      • 自分のmacbookのMACアドレスのOUIを確認すると、確かにApple, Inc.だった。
    • UAA (Universally Administered Address)
      • 各ベンダーがNICに割り当てる

<h1>実践編</h1>

ifconfig net0: macアドレス確認

root@cl1:/# ifconfig net0
net0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.1  netmask 255.255.255.0  broadcast 192.168.11.255
        ether 02:42:ac:01:10:01  txqueuelen 1000  (Ethernet)
        RX packets 342  bytes 86022 (86.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 467  bytes 56094 (56.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@cl2:/# ifconfig net0
net0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
                inet 192.168.11.2 netmask 255.255.255.0 broadcast 192.168.11.255
                ether 02:42:ac:01:10:02 txqueuelen 1000 (Ethernet)
                RX packets 81 bytes 16602 (16.6 KB)
                RX errors 0 dropped 0 overruns 0 frame 0
                TX packets 62 bytes 10104 (10.1 KB)
                TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

etherの値がmacアドレス

 

mac環境で実行しているので、公式の補足に従い、tcpdumpによる保存ファイルの拡張子を差し替える。

https://sbcr-dl-and-idea.s3.ap-northeast-1.amazonaws.com/2024-01-11-18599-%E4%BD%93%E9%A8%93%E3%81%97%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80/tinet_mac_m.pdf

# だめなコマンド
root@cl2:/# tcpdump -i net0 -w /tmp/tinet/ethernet.pcapng ether host 02:42:ac:01:10:01
tcpdump: Couldn't change ownership of savefile

# 有効なコマンド
root@cl2:/# tcpdump -i net0 -w /tmp/tinet/ethernet.pcap ether host 02:42:ac:01:10:01
tcpdump: listening on net0, link-type EN10MB (Ethernet), capture size 262144 bytes

 

pingで適当に2回パケットを送信してみる。

宛先はipアドレスで指定することになるので、ipconfig net0で確認した時のinetの値を指定する。

root@cl1:/# ping 192.168.11.2 -c 2
PING 192.168.11.2 (192.168.11.2) 56(84) bytes of data.
64 bytes from 192.168.11.2: icmp_seq=1 ttl=64 time=3.83 ms   # <- リプライパケットを受け取れていることがわかる
64 bytes from 192.168.11.2: icmp_seq=2 ttl=64 time=0.265 ms

--- 192.168.11.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1031ms
rtt min/avg/max/mdev = 0.265/2.046/3.828/1.781 ms

 

受信側のtcpdumpを停止。受信できたpacket数が確認できる。

root@cl2:/# tcpdump -i net0 -w /tmp/tinet/ethernet.pcap ether host 02:42:ac:01:10:01
tcpdump: listening on net0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C4 packets captured
4 packets received by filter
0 packets dropped by kernel

 

パケットをwiresharkで解析

これからわかること

  • パケットは4つ表示されている
    • cl1からcl2に送信したのは2つであり、残り2つは対応するリプライパケット。
    •  
  • Ethernet II, Src: 02:42:ac:01:10:01 (02:42:ac:01:10:01), Dst: 02:42:ac:01:10:02 (02:42:ac:01:10:02)
    • イーサーネットⅡを使っている
    • 送信元アドレス(Src) は02:42:ac:01:10:01
    • 送信先アドレス(Dst) は02:42:ac:01:10:02
    •  
  • ここからはわからないこと
    • プリアンブルの値
      • tcpdumpでキャプチャする前に取り外されるので。
    • FCS
      • デフォルトでは表示されないので。

Wiresharkのパケットダイアグラム機能

パケットの構造をビットの配列をフォーマット図風に表示することが可能。わかりやすい。

ARP (Address Resolution Protocol)

  • アドレスにはMACアドレスとIPアドレスしかない
    • MACアドレス:  NICに対するアドレス
    • IPアドレス: OSに設定するアドレス
  • ARPは、MACアドレスとIPアドレスを紐づけるもの
    • 宛先IPアドレスから宛先MACアドレスを求める

 

  • ARPテーブルを埋めるために、ARP requestを送信する。
    • ARP requestでは、目標Macアドレスはダミー(00:00:00:00:00:00)である
  • 目標IPが自分と同じネットワークの中に存在する事はどうやって判断するのか?
    • ARP replyが来ないこと…?
  • ARP requestはブロードキャストを使用する
  • ARP replyはユニキャストを使用する
  • IPアドレス・macアドレスを持つ要素ごとにARPテーブルを管理している
  • ARPテーブルの値はキャッシュされている。時々ユニキャストで疎通が取れるかを確認している

実践編

ARPテーブルのキャッシュ削除とレコード確認

# cl3のifconfigを確認
root@cl3:/# ifconfig net0
net0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.100  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 02:42:ac:01:11:00  txqueuelen 1000  (Ethernet)
        RX packets 12  bytes 1928 (1.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 560 (560.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@cl3:/# 
# rt1のifconfigを確認
root@rt1:/# ifconfig net1
net1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.254  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 02:42:ac:01:12:54  txqueuelen 1000  (Ethernet)
        RX packets 6  bytes 1452 (1.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6  bytes 1452 (1.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
# cl3のARPテーブルを確認
root@cl3:/# ip neigh flush all
root@cl3:/# ip neigh
# rt1のARPテーブルを確認
# なんかいた
root@rt1:/# ip neigh
192.168.11.2 dev net1 lladdr 02:42:ac:01:10:02 STALE
192.168.11.1 dev net1 lladdr 02:42:ac:01:10:01 STALE
root@rt1:/# ip neigh flush all
# 消せた
root@rt1:/# ip neigh
root@rt1:/# 
# cl3のARPテーブルを確認
root@cl3:/# ip neigh flush all
root@cl3:/# ip neigh
# rt1のARPテーブルを確認
# なんかいた
root@rt1:/# ip neigh
192.168.11.2 dev net1 lladdr 02:42:ac:01:10:02 STALE
192.168.11.1 dev net1 lladdr 02:42:ac:01:10:01 STALE
root@rt1:/# ip neigh flush all
# 消せた
root@rt1:/# ip neigh
root@rt1:/# 
# cl3のARPテーブルを確認すると、rt1のレコードが存在
root@cl3:/# ip neigh
192.168.11.254 dev net0 lladdr 02:42:ac:01:12:54 STALE
# rt1のARPテーブルを確認すると、cl3のレコードが存在
root@rt1:/# ip neigh
192.168.11.100 dev net1 lladdr 02:42:ac:01:11:00 STALE

ちなみに、書籍ではpingの送信回数は2としてあるが、 pingを10回投げたとしてもパケットの内容は変わらなかった。すなわちARPのrequest, replyは、pingの回数に関係なく1回ずつ実行されていることになる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


This site uses Akismet to reduce spam. Learn how your comment data is processed.