「Linuxで動かしながら学ぶTCP/IPネットワーク入門」を読みました

読みました。

ネットワークの勉強をしようと思ったきっかけ

最近はデータベース周り担当のインフラエンジニア業をしているのですが、Docker や Kubernetes の台頭によりネットワーク周りの知識の不足が目立つようになってきたためです。具体的に以下のような点で危機感を感じることが増えてきました。

  • Docker を使っているときの ip addr show の読み方が分からない。veth や bridge って何?
  • Kubernetes のネットワーク周りの話についていけない。いつの間にみんな NAT や iptables に詳しくなっていたの??

特に、以下のページが理解できなかったことはネットワークの勉強をちゃんとやろうと思ったきっかけとなりました。

kubernetes.io

speakerdeck.com

この本に手を出してみた理由

Kindle の試し読みで以下の点が気に入ったからです。

  • Linux の Network Namespace を使って説明している
    実験用のネットワークを VM で構築する方法と比べて軽量という理由で Network Namespace が採用されたようですが、Docker のネットワークがよく分かっていなかった私にとっては Network Namespace での説明のほうが都合がよかったです。
  • 本当によく使われる基礎的なコマンドを利用している
    ip, ping, tcpdump といった実際よく使われる基礎的なコマンドで説明されているので、学習以外で使うことはないであろうよく分からないネットワークシミュレータの使い方の学習のために時間を割く必要がありません。

最後まで読んでみた感想

  • 知りたかった内容は一通り学べた
    L2, L3 と NAT まわりについて学びたかったのですが、それぞれ3章、4章、7章で学べたので満足しています。5章、6章、8章は L4, L7, ソケットプログラミング について扱っている章でしたが、これについてはだいたい知っている内容でした。
  • Network Namespace を使った説明は有用
    大学ではネットワークの講義で原理を勉強しただけでルーターのコンフィグを書いて実験してみるようなことはなかったので、あまり学習した内容が身についていなかった自覚がありました。Linux の Network Namespace ではホスト間を接続したりルーターを設置したりすることがコマンドだけで実現できるので学習用途にも便利だと思いました。
  • ネットワークまわりのトラブルシューティングの習得にも役に立つかも
    本書では何かを実装した後に必ず tcpdump での確認を行う流れを取っています。ARP のリクエストを tcpdump で確認してみるといったこともやっているので、下のレイヤーをブラックボックス扱いすることはありません。私はネットワーク周りのトラブルがあった時にはとりあえず設定を戻してみたりと、ネットワークをブラックボックス扱いしたトラブルシューティングをしていたのですが、今後はちゃんと tcpdump で状態を確認しながらトラブルシューティングをしていきたいと思います。

おわりに

「ネットワーク周りのことを詳しく知らなくても Kubernetes は使える」という意見について、どうも私にはそうとは思えず、今後は避けては通れないのではないかと焦りを感じていたところだったので、ちょうどよいタイミングで本書が発売されて助かりました。

本書の著者のブログにはたびたびお世話になっているので紹介記事を書いてみました。

blog.amedama.jp