ネットワーク計算 用語集

ネットワーク計算コースで覚える考え方とコマンドの一覧です。端末の echo $(( )) と printf は最初から計算の確かめに使えます(2 進数は $((2#1010))、16 進数は $((0xff))、AND は $((a & b)))。

answer答えを提出(ゲーム用)いつでも使える

answer 答え

調べて分かった答えを提出します。本物の Linux にはないゲーム用のコマンドです。

$ answer 42

2 進数0 と 1 で数を表すLv1 で覚える

ビットの重み: 128 64 32 16 8 4 2 1
1 の桁の重みを足す: 1010 = 8 + 2 = 10

右の桁から 1・2・4・8… と重みが 2 倍になります。1 が立っている桁の重みを足すと 10 進数になります。8 ビットの最大は 11111111 = 255。

$ echo $((2#11000000))

10 進 → 2 進10 進数を 8 ビットに直すLv2 で覚える

大きい重みから引けるなら 1、引けないなら 0
8 桁に足りなければ左を 0 で埋める
2^n: 2 4 8 16 32 64 128 256 512 1024

200 なら 128 を引いて 72 → 64 を引いて 8 → 32 と 16 は引けない → 8 を引いて 0、で 11001000。2 で割った余りを下から並べる方法でも求められます。

$ echo $((2**10))

16 進数0〜9 と a〜f で数を表すLv3 で覚える

a=10 b=11 c=12 d=13 e=14 f=15
16 進 1 桁 = 4 ビット、2 桁 = 8 ビット(00〜ff)
MAC アドレス: 06:5a:3c:1e:8f:21(48 ビット)

4 ビットずつ区切ると、2 進数と 16 進数はすぐに行き来できます(1100 = c、1111 = f)。MAC アドレスや IPv6 アドレスは 16 進数で書きます。

$ printf '%x\n' 255
$ echo $((0xff))

ipIP アドレス・経路を表示・設定Lv4 で覚える

ip addr(ip a)  ip -4 a  ip -6 a  ip -br a
ip route(ip r)  ip route get 宛先
sudo ip addr add|del アドレス/長さ dev NIC
sudo ip route add|del 宛先/長さ via ゲートウェイ
ip link(MAC アドレス)

ip a でインターフェースとアドレス、ip r で経路を表示します。設定の変更には root が必要です(再起動すると消えます)。

$ ip -br a
$ sudo ip addr add 192.168.10.5/24 dev ens5

IPv4 アドレス32 ビットの番地Lv4 で覚える

8 ビット × 4 = 32 ビット
各オクテット 0〜255 をドットで区切る
192.168.1.10 = 11000000.10101000.00000001.00001010

IPv4 アドレスは 32 ビットの数です。8 ビットずつ 4 つ(オクテット)に分けて 10 進で書きます。256 以上の数はオクテットに入りません。

AND(論理積)両方 1 のときだけ 1Lv5 で覚える

1 AND 1 = 1、それ以外は 0
OR: どちらかが 1 なら 1
$((a & b))  $((a | b))

マスクと AND を取ると、マスクが 1 のビットだけが残り、0 のビットは消えます。ネットワークアドレスはこの計算で求めます。

$ echo $((200 & 240))

サブネットマスクネットワーク部とホスト部の区切りLv7 で覚える

/24 = 255.255.255.0
/25 = .128  /26 = .192  /27 = .224  /28 = .240  /29 = .248  /30 = .252
左から 1 が続き、途中から 0 だけになる

プレフィックス長(/24 など)は、左から何ビットがネットワーク部かを表します。マスクは 1 が途切れずに並ぶ形だけが正しく、255.0.255.0 のような値は使えません。

ネットワークアドレスそのネットワークの先頭の番地Lv8 で覚える

アドレス AND マスク
ブロックの大きさ = 256 - マスクの値(区切りのオクテット)
例: 192.168.1.100/26 → 192.168.1.64

ホスト部を全部 0 にしたアドレスです。区切りがオクテットの途中なら、ブロックの大きさ(/26 なら 64)の倍数に切り捨てます。CIDR 表記ではネットワークアドレス/プレフィックス長と書きます。

ブロードキャストそのネットワークの最後の番地Lv9 で覚える

ホスト部を全部 1 にしたアドレス
次のネットワークアドレス - 1
最初のホスト = ネットワーク + 1、最後のホスト = ブロードキャスト - 1

ネットワーク内の全員に送るためのアドレスで、機器には付けられません。ネットワークアドレスとブロードキャストの間が、機器に付けられる範囲です。

ホスト数機器に付けられるアドレスの数Lv10 で覚える

ホスト部 n ビット → アドレス 2^n 個
使えるホスト = 2^n - 2
/31 は 2 台(直結)、/32 は 1 台だけ

ネットワークアドレスとブロードキャストの 2 つは機器に付けられないので 2 を引きます。/24 は 254、/26 は 62、/30 は 2。

dnf / yumパッケージの管理Lv11 で覚える

dnf install -y パッケージ
dnf remove -y パッケージ
dnf list installed
dnf search 語
dnf provides コマンド

RHEL・Amazon Linux のパッケージ管理。-y で確認を省略します。yum は dnf の別名です。

$ sudo dnf install -y httpd
$ dnf provides dig

ipcalcネットワークを計算して表示Lv11 で覚える

ipcalc アドレス/プレフィックス
ipcalc アドレス マスク
-n ネットワーク -b ブロードキャスト -p プレフィックス -m マスク
-S プレフィックス(分割)  -d 開始-終了(CIDR に直す)

ipcalc パッケージ(dnf install ipcalc)のコマンドです。Network・Netmask・Broadcast・HostMin・HostMax・Hosts/Net を表示します。IPv6 も計算できます。

$ ipcalc 192.168.1.10/24
$ ipcalc -n -b 10.0.0.77/27
$ ipcalc -S 26 192.168.1.0/24

ping疎通確認Lv12 で覚える

ping -c 回数 ホスト
ping -6 ホスト(IPv6)

相手に届くかを確かめます。-c で回数を指定(指定しないと止まらない)。Destination Host Unreachable は同じネットワークに相手がいない、Network is unreachable は経路が無い、100% packet loss は返事が戻ってこないことを表します。

$ ping -c 3 10.0.1.50

アドレスの種類プライベート・グローバル・特別な範囲Lv14 で覚える

10.0.0.0/8  172.16.0.0/12  192.168.0.0/16(プライベート)
127.0.0.0/8 ループバック  169.254.0.0/16 リンクローカル  100.64.0.0/10 CGNAT
クラス A 0〜127  B 128〜191  C 192〜223  D 224〜239(マルチキャスト)

プライベートアドレスは組織の中で自由に使え、インターネットには直接出られません。クラスは昔の区切り方で、今は CIDR で好きな長さに区切ります。

サブネット分割1 つのネットワークを等しく分けるLv15 で覚える

n ビット借りると 2^n 個に分かれる
/24 → /26 は 2 ビット借りて 4 個(64 ずつ)
k 番目(0 から)= 先頭 + k × ブロックの大きさ

プレフィックス長を伸ばすと、ネットワークが細かく分かれます。1 つあたりのアドレス数は半分ずつになります。

$ ipcalc -S 26 192.168.1.0/24

大きさの決め方必要な台数からプレフィックスを決めるLv16 で覚える

2^n - 2 ≥ 必要な台数 になる最小の n
プレフィックス = 32 - n
例: 50 台 → n = 6(62 台)→ /26

必要なホスト数を入れられる最小のホスト部のビット数を探します。将来の増加も考えて少し余裕を持たせるのが実務のやり方です。

VLSM大きさの違うサブネットに分けるLv17 で覚える

大きいものから順に割り当てる
それぞれのブロックの大きさの倍数から始める
ルーター間のリンクは /30(または /31)

部署ごとに必要な台数が違うとき、全部を同じ大きさにせず、必要な分だけの大きさで分けます。大きい順に並べると隙間ができません。

VPC のサブネットAWS の町割りLv18 で覚える

VPC は /16〜/28、サブネットは VPC の範囲の中
AWS は各サブネットで 5 つ予約する(先頭 4 つと最後)
使えるアドレス = 2^n - 5

AWS ではネットワークアドレス・+1(VPC ルーター)・+2(DNS)・+3(予約)・ブロードキャストの 5 つが使えません。/24 なら 251 個です。AZ ごとにパブリックとプライベートのサブネットを作るのが定番です。

ゲートウェイと経路別のネットワークへの出口Lv20 で覚える

ip route(経路表を見る)
sudo ip route add 宛先/長さ via ゲートウェイ
sudo ip route add default via ゲートウェイ
ゲートウェイは自分と同じネットワークに置く

自分のネットワークの外へは、経路表に書かれたゲートウェイ(ルーター)に渡します。どの経路にも当てはまらない宛先は default の経路を使います。

$ ip route
$ sudo ip route add 10.0.2.0/24 via 10.0.1.254

traceroute宛先までの通り道を表示Lv20 で覚える

traceroute ホスト

パケットが通るルーターを順に表示します。* * * はその先から返事がないことを表します。traceroute パッケージに入っています。

$ traceroute 10.0.2.10

ロンゲストマッチいちばん長く一致する経路を選ぶLv21 で覚える

宛先に一致する経路のうち、プレフィックスがいちばん長いもの
default(0.0.0.0/0)は何にでも一致するがいちばん短い
ip route get 宛先(選ばれた経路を見る)

経路表に重なる経路があるとき、より詳しい(長い)経路が優先されます。

$ ip route get 10.0.2.10

経路集約連続したネットワークをまとめるLv22 で覚える

共通する先頭のビット数が新しいプレフィックス
192.168.0.0/24 〜 192.168.3.0/24 → 192.168.0.0/22
まとめた範囲の先頭がブロックの境界であること

ルーターの経路の数を減らすために、隣り合ったネットワークを 1 つの大きな範囲で表します。まとめすぎると持っていない範囲まで含んでしまいます。

$ ipcalc -d 10.0.0.0-10.0.3.255

ワイルドカードマスクサブネットマスクの裏返しLv23 で覚える

ワイルドカード = 255.255.255.255 - マスク
/24 → 0.0.0.255  /26 → 0.0.0.63
0 のビットは一致させる、1 のビットは問わない

Cisco の ACL や OSPF の network 文で使います。host 10.0.0.1 は 10.0.0.1 0.0.0.0、any は 0.0.0.0 255.255.255.255 と同じです。

範囲の重なりCIDR に入るか・重なるかLv24 で覚える

アドレス AND マスク = ネットワークアドレス なら範囲に入る
2 つの範囲は、小さい方のネットワークが大きい方に入れば重なる
0.0.0.0/0 はすべて、/32 は 1 つだけ

CIDR の範囲は、重なるときは必ず片方がもう片方を含みます。VPC ピアリングでは範囲が重なる VPC どうしはつなげません。

IPv6 アドレス128 ビットの番地Lv26 で覚える

16 ビット × 8 = 128 ビット
各グループを 16 進 4 桁で書き、: で区切る
2001:0db8:0000:0000:0000:0000:0000:0001

IPv6 のアドレスは 2^128 個あります。ブロードキャストは無く、マルチキャストを使います。ip -6 addr で見られます。

$ ip -6 addr

IPv6 の省略短く書くルールLv27 で覚える

各グループの先頭の 0 を省く(0db8 → db8)
0 のグループが 2 つ以上続くところを 1 回だけ :: にする
いちばん長い 0 の並びを省く・同じ長さなら前の方・小文字で書く

省略の書き方は RFC 5952 で 1 通りに決まっています。:: を 2 回使うと、何グループ省いたか分からなくなるので誤りです。

$ ipcalc 2001:db8:0:0:1:0:0:1/64

IPv6 のプレフィックス/48・/56・/64 の区切りLv28 で覚える

ふつうの LAN は /64(前半 64 ビットがネットワーク)
/48 から作れる /64 は 2^16 = 65536 個
/64 の 4 つ目のグループがサブネットの番号になる

IPv6 ではサブネットは基本的に /64 です。組織には /48 や /56 が割り当てられ、その中の /64 を順に使います。

IPv6 の種類と EUI-64先頭で種類が分かるLv29 で覚える

::1 ループバック  fe80::/10 リンクローカル  ff00::/8 マルチキャスト
2000::/3 グローバル  fc00::/7 ユニークローカル  2001:db8::/32 説明用
EUI-64: MAC の真ん中に fffe を挟み、先頭バイトの 7 ビット目(0x02)を反転

リンクローカルはどの NIC にも自動で付き、同じ線の中だけで使います。EUI-64 では MAC アドレス 06:5a:3c:1e:8f:21 から 045a:3cff:fe1e:8f21 というインターフェイス ID ができます。

$ ip -6 addr