woshidan's blog

そんなことよりコードにダイブ。

インフラエンジニアの教科書2を読みました

DockerとかAWSとか色々勉強しなければいけない感じなのですが、DockerやAWSの説明に出てくる用語がわからないということで、その辺りの基本的なことが載ってそうだし、薄いし、ということで「インフラエンジニアの教科書2」を読みました。

さらっとわかりやすい文体で書いてあるのですが、内容は

  • TCP/IP入門
  • WebオペレーションのMySQLの章
  • UNIX OSのコードの本
  • セキュリティ入門

あたりから、使う順に引っ張ってきました、という感じで、やさしそうな顔して濃いです。濃さの割にすらすら読めるので、わかった気になってないだろうか、と1ページ1ページなかなか読み進められず2~3週間くらいかかってました。

個人的に、特にありがたかったのが2章のOSのところで、自分はこの本を読んで学んだのですが、短めにまとめたそれでさえかなり重たくて読み終わった後感覚としては結構手ごたえがあったんですが、自分が何に対して手ごたえを得たのかちょっと要領を得ない感じでもやもやしていたのが結構すっきりした気がします。

この本読んで、コード的にもうちょっとどうなってるの... って思ったらこの本をめくってみると楽しいかもです。

逆に4章は、ちょっとシャーディングがレプリケーションと同じノリで書かれていたことに対してやや驚いていて、検索で出てきてほしい結果がユーザやユーザの属する組織、みたいな単位を超えるかどうか、とか、11章の拠点間のデータ保存のところみたいな部分を検討してからでないとなんとも言えないのでは。。と思いました。

他には、6章のSSL通信の基本的なところの説明や8章のセキュリティ攻撃のところがわかりやすくて、SSL通信は長いことひっそり知ったかぶりしていたので、ほっとしたのでした。

以下、読書メモの中で印象的なところを置いておいて、現場からは以上です。

  • 経路情報
    • ルータがパケットを受け取るたびにそのルータが次の転送先を自動的に選んで送り出す
    • ルータには次の経路を決めるためのルールが登録されている必要がある
    • 各ルータが経路を決める手段
      • スタティックルーティング
      • ダイナミックルーティング
        • 周りのルータと経路情報を交換し合うことで動的にルーティングが更新される
        • IGPとEGPの2種類
  • IGP(Interier Gateway Protocol)
    • 自分が管理するLAN内部のルータ同士で経路情報を交換し合うプロトコル
    • 規模別: 小規模 RIPv2, IGRP 中規模以上 OSPF, IS-IS, EIGRP
    • RIPv2
      • 各ルータが30秒間隔でルーティングテーブルをUDPマルチキャストパケットを送信し合うことで経路情報を更新
      • RIPでは最適な経路情報の選択にホップ数(間のルータ数)を使う
      • RIPが到達できるホップ数は15ホップまで
    • OSPF(Open Shortest Path First)
      • RIPv2で弱点だった冗長化経路の制定やトポロジーを意識した経路選択などを解消
      • 隣接するルータとのリンク状態を他のルータとLSA(link-state advertisement)と呼ばれるリンクステート広告パケットをやり取り
      • 上からトポロジーマップを作り、それを元に最適な経路を判断
  • EGP(Exterior Gateway Protocol)
    • EGPは外部ASのルータと経路情報を交換しあうプロトコルのことを指す
    • EGPとして用いられるプロトコルにはBGP-4やEGPなどがありますが、現在のインターネットではBGP-4が標準的に使われる
    • BGP-4ではAS(Autonomous System)という用語が使われる
      • ASとは、インターネット内の各管理ネットワーク単位のことを指し、AS単位にAS番号が割り当てられる
      • 通常ISPや大規模コンテンツプロバイダーなどでAS番号を保有している
  • VLAN
    • 「 VLAN(Virtual LAN)とは、スイッチ内を論理的に分割する機能」
    • 上の前提として、L2スイッチにはデフォルトではVLAN1しかなく、すべてのポートがVLAN1のポートになっている(なので、すべてのポート間でイーサネットフレームの転送ができる)
      • VLAN1しかなく = 1つのネットワークアドレスしかなく
      • VLAN1つにローカルネットワークのネットワークアドレスを1つ割りふれる
    • 1つの(物理的な)スイッチの中で複数のVLANをもてたりすると何が嬉しい?
      • 物理的に機器を用意する制約が緩和
  • ポートVLAN
    • 1台のL2スイッチ中のポートをいくつかのVLANに割りふれる
    • 複数台のネットワークアドレスのために複数台のスイッチがいる ... でもスイッチ買う予算なんて ... う...
      • (1つ1つのVLANにつなぐぽーと数が少ない小規模なVLANなら)ポートVLANを使えば物理的なスイッチは1台でもいけるかも...?
    • タグVLAN
      • 1つのVLANがめっちゃでかくて、レイヤー2スイッチ1台だけでは扱えず、複数のレイヤー2スイッチを使いたい ... タグVLAN
  • ダーティリード、ファジーリード、ファントムリードとは、トランザクションの隔離が不十分な場合に発生する可能性のある三つの異常な読み込み現象のことを指す
    • ダーティリード
      • 別のトランザクションコミットされていない データが読み取れる
      • コミットされてない確定前のデータ = きれいでないデータ => ダーティリード
    • ファジーリード
      • 一つのトランザクションの中で、複数回読み込んだ同じはずのデータの結果が異なり、一貫性があるデータを得られない現象
      • ダーティリードは コミットされていないデータ が読み取れる現象だが、ファジーリードはコミットされているかいないかは気にしていない
        • ただ、ダーティリードの場合はファジーリードと言わないから、実質 同じタイミングで並行して走っている他のトランザクションでコミットされた更新結果が見える 、くらいか
    • ファントムリード
      • 別のトランザクションで挿入されたデータが見える
      • ファジーリードはカラムの更新だが、ファントムリードは行単位で増えたり減ったりが見える、ということ
  • SSL通信
    • WEBブラウザからWEBサーバに対して安全に共通鍵を送付するために公開暗号方式を使う
      • 公開鍵は通信開始時にクライアントがサーバからDLするSSL証明書の中にある
      • クライアントはDLしたSSL証明書が有効かCAに問いあわせる、と書いたが、SSLではCAのルート証明書という体裁の鍵を使ってSSLサーバ証明書を復号
      • SSLサーバ証明書を復号した中身がWEBサーバの公開鍵
      • その公開鍵で通信用のクライアント側が用意した共通鍵を送る
      • 以降はWEBサーバ <=> クライアント間でクライアント側が用意した共通鍵でやりとり
      • SSLサーバ証明書が復号できなかった時はサーバが間にあわせの公開鍵を送るが、その公開鍵はサーバ以外の誰かでも復号できるかも(警告の意味)
  • Java SEとJava EE
    • Java SE
    • Java EE
      • エンタープライズエディションという名前の通り、企業向けのシステムを構築する際、有用なサーバ関係のライブラリを中心に機能がまとめられている
  • ポートスキャン
    • ポートスキャンとは、クライアントからサーバ(もしくはロードバランサーが待ち受けている場合もある)に対してTCPもしくはUDPの広い範囲のポートにリクエストを送り、どのポートでどんなサービス用デーモンが待ち受けている(Listen)かを探し出す手法
    • 攻撃者がポートスキャンを使う主な目的は、セキュリティ脆弱性のあるサーバソフトウェアが使われているポートを見つけること
  • DoS攻撃DDoS攻撃
    • DoS攻撃(Denial of Services attack)とは、ネットワーク上のコンピュータから特定のサーバに接続要求を行うことで、サーバの応答を遅くしたりダウンさせたりする攻撃手法
      • コマンドの引数によって受信した相手を停止させたり、大量のファイルを送って停止させたり、プロトコルの仕様のバグっぽいところをついたり。(感想: たくさんコンピュータ動いてるわけじゃない時点で迷惑なことしてんだな...)
  • オープンリレー
    • MTAが外部からアクセスできる状態だと、スパムメールの転送のために利用される(ふつうは自社ネットワーク内など信用できる送信元のみ転送するように設定)