『おうちで学べるネットワークのきほん 第2版』を読んだ

Webエンジニアのみなさんは、親戚からどういう頼みごとを受けることが多いですか？
僕はPC・タブレットの選定、他業者に委託したHPのフォロー、ネットワークがつながらなくなったなどのトラブルをよく相談されます。
おそらくですが、Webエンジニアという職業が周りにいないので電気屋の店員かなんかと勘違いされているんじゃないかと思ってます。
でも、できないというのも癪だし役に立たねばという気持ちはあるので毎回調べています。

そこで今回は家庭で使うネットワークを知り、トラブルシューティングができるようになろう、という気持ちで『おうちで学べるネットワークの基本 第2版』を読んでみました。

https://www.shoeisha.co.jp/book/detail/9784798185156

下記は読書中のメモです。

## メモ
- 各階層でのデータの呼び方
  - アプリケーション層: メッセージ
  - トランスポート層: TCP -> セグメント, UDP -> データグラム
  - インターネット層: パケット、データグラム
  - ネットワークインターフェース層: フレーム

- フロー : ネットワークでデータ転送するときに分割されたデータのまとまり

- インターネットとは様々な組織のネットワーク(自律システム: Autonomous System)を相互に接続したもの
  - ASの例としてISPがある
  - 独立したASを運用するためにはAS番号を取得した上で、BGP(Boder Gateway Protocol)というルーティングプロトコルの設定も行う必要がある

- Wi-Fiルーターのメッシュなどのことをディストリビューションシステム(WDS)という
  - ESS(Extended Service Set),インフラストラクチャーモードとよぶ
    <-> 1台のときはBSS, IBSS, アドホックモード

- イーサネットーケーブル
  - 8本の銅線が2本ずつ撚られて4束になる
  - コネクタで接続すると4つの回路になる
  - コネクタの規格はRJ45
  - ポートはMDIとMDI-Xの２つがある。MDIはルータやPC, MDI-Xはハブやスイッチ
    - それぞれ送信、受信に使うピンが違うので、どれとどれをつなぐかによってストレートケーブル、クロスケーブルを使い分ける必要がある。
      - 違う種類ならストレート、同じならクロス

- クラスフルアドレスは先頭の8ビットの数値を見ればどのクラスかわかる
  - 1~126: A, 128 ~ 191: B, 192~223: C
  - 大体10.0.0.0, 172.16.0.0, 192.168.0.0が使われる
  - 127, 224~225はユニキャストIPとして予約ずみ

- プライベートアドレスには自由に利用できる範囲がある
  - 10.0.0.0 ~ 10.255.255.255
  - 172.16.0.0 ~ 172.31.255.255
  - 192.168.0.0 ~ 192.168.255.255

- IPv6だとネットワークアドレス、ホストアドレスはプレフィックスとインターフェースIDと呼ばれる
  - 両方64bitが主流

- IPv6にはグローバルユニキャストアドレス、ユニークローカルユニキャストアドレス、リンクローカルユニキャストアドレスがある
  - グローバルユニキャスト: 最初の3ビットが001で始まる2000::/3で表記でき、ISPから48bitのグローバルルーティングプレフィックスの割当をうけ、16bitのサブネットIDで各ネットワークを識別する
  - ユニークローカルユニキャストアドレス: プライベートネットワーク内で使用するIPv6アドレス。固定8bit(1111 1101)と40bitのランダム生成されたグローバル識別子でサイトを識別する。アドレス範囲は(FD00/::8)
  - リンクローカルユニキャストアドレス: 同じリンク(サブネット)内の通信で使用する。10bit(111 1110 10)のパターンで始まり、残りの54bitは0埋め。(FE80::/10)
    - Ipv6ホストは必ずこのアドレスをもち、同じリンク上のホスト間でアドレスの自動設定やレイヤー2アドレスのアドレス解決を行う

- Webブラウザのタブはそれぞれポート番号がアサインされている


- TCPのデータ転送ではデータを送るたびACKで受信確認を送る、という話だが、実際は一括で送って一括で返している
  - データが前後したり、かけた場合はTCPヘッダーのオプション部分を使って欠けた範囲のシーケンス番号を伝える(SACK)

- UDPは宛先、送信元、チェックサム、長さぐらいしかないが、例えばIP電話の場合はRTPを使って順番通りにデータが組み立てられるようにしている

- UDPとTCPの使い分け: データ量, ブロード(マルチ)キャストするかどうか

- あるイーサヘッダーは同じネットワーク内でのみ使用され、ネットワークが異なるときは違うイーサヘッダーが使われることになる

- インターネット上では宛先がプライベートIPのパケットは破棄される

- ネットワークがつながらないときのトラブルシューティング
  - コネクタ、電源
  - TCP/IPの設定
  - デフォルトゲートウェイとの疎通
  - 適当なドメインで名前解決できること
  - 著名サイトが見られること
  - アプリケーション側の設定

- HTTP/2とHTTP/3の違い(主にQUIC)
  - TCPとTLSハンドシェイクを同時にやる
  - UDPでやるのでヘッドオブラインブロッキングがない


- TLSでのクライアント側の公開鍵はセッションごと(各接続ごとに一時的)にTLSライブラリが動的に生成している

- CA自体の認証
  - OSとWebブラウザには主要な認証局からの信頼できるルート証明書のセットがプリインストールされている
  - 信頼チェーンをたどってルート証明書にたどり着ければ正当性が確認される

- クライアントが自身の公開鍵を送るのはサーバー証明書を確認してから

- レイヤ2スイッチは、送信元MACアドレスを覚えてMACアドレステーブルを作る
  - MACアドレステーブルにないときはUnknownユニキャストフレームとしてすべてのポートにフラッディングする
  - 1つのイーサネットネットワークのことをブロードキャストドメインともいう

- レイヤー3スイッチ
  - ルーターとレイヤー2スイッチどちらの働きもできる。ほぼルーターと同じようにネットワーク同士を接続できる
  - VLANとかできる

- ルーターはルーティングテーブルにない宛先IPのパケットは破棄する

- ルーターのARPテーブルはARPリクエスト、リプライによって定期的に更新されている
  - 同じネットワークにあるはずなのに、ARPテーブルにない…せや、ARPリクエストで確認したろ！みたいなこともある

- ルーティングプロトコルによってルータが情報をやりとすることをアドバタイズという

- インターネットとつながったルーターではスタティックルーティングでISPに向けたデフォルトルートを設定して、つながってない相互のネットワークを接続するルーターではルーティングプロトコルを使って自動で設定するのがよい

- ブロードバンドルーターはほぼレイヤー3スイッチ(VLAN機能はない)
  - LAN側のポートにはプライベートIPが割り振られているわけではない(あくまでスイッチのものなので)内部で仮想的にルーターにつながっているイメージ


- テザリングはスマホがアクセスポイント、DHCP、NATの機能を持つ
  - ユーザーネットワークのプライベートIPとキャリアのプライベートIPを変換している
    - キャリアはグローバルIPのポート番号をユーザーに割り当てて、接続台数を稼いでいる

- Linuxでのコマンド
  - `ip addr shouw`で色々見られる。ARPは`ip neigh show`
  - `netstat -n`(net-tools)で使用されているポート番号などがわかる
  - デフォルトゲートウェイの確認は `ip route show`で行う
  - DHCPの再設定は `sudo dhclient -r`

## おわりに
ネットワーク技術の基本といえばOSI参照モデルで、それをベースに説明されることが多い気ですが、TCP/IPベースで実際に目にする単語を使って解説されていたのが良かったです。
ネットワークの本はすでに何冊か読んでいたつもりなのですが、この本でようやく腹落ちした気がします。
特にテザリングはスマホがアクセスポイント、DHCPサーバ、NATの機能を持っていることがわかり、既存ネットワーク技術のミニチュアのように思えたのが面白かったです。

10月にAPを受けたので4月の高度試験に向けての基礎固めにもなりました。

章末に理解度チェックのための問題があるので、本屋で立ち読みしてわからないことがあった方は読んでみてはいかがでしょうか？