サーバサイドエンジニアなら知っておきたい基礎知識まとめ


こんにちは。現在Standard Cognition( https://standard.ai )というSFにある会社でSoftware Engineerをやっている原健太です(Twitterアカウント)

普段はReact&React Nativeエンジニアをやっている僕ですが、ここ数年は変わらないだろうなというサーバサイドの知識くらい知っておきたいなと思い、
小悪魔女子大生のサーバエンジニア日記という本を読んだので、まとめてみます。

TCP/IP

  • TCP/IPは通信プロトコル
  • 通信プロトコルとは、ネットワーク上でデータの通信をするための手順や約束ごとの集まりの事
  • TCP(Transmission Control Protocol)とIP(Internet Protocol)の組み合わせでできている

TCP

  • データは パケットという小さな小包に分けられて送られる
  • パケットは1つずつ番号がついていて、受け取ったら順番通りに元の状態に戻す必要がある。
  • TCPは送られてきた物が全部届いているか、壊れていないか、などを確認して、データの受信を完了しましたよと連絡してくれる。
  • TCPはデータのやりとりを保証するためのプロトコル

IP

IPアドレスを書くことを定めているのがIPというプロトコル

IPアドレス

  • コンピューター毎に割り振られる番号で、コンピュータの住所のようなもの
  • 32bitの列で、8bit毎に4つに区切った10進数の形で表記されている(125.6.176.42など)
  • 全てのIPアドレスはICANN(Internet Corporation for Assigned Names and Numbers)という非営利法人によって管理されている
  • IPv6は128bitで、IPアドレスの枯渇問題解決のために生まれた

MACアドレス

  • NICごとに割り当てられた固有の番号で、個々のNICに対して48bitの番号が付けられている
  • NIC(Network Interface Card)はネットワークに必要な拡張カードの事。
  • NICはパケットを電気信号に変えて送ったり、電気信号をパケットに戻したりします。
  • 最近のノートパソコンには複数のNIC(LABケーブル用のNICと無線LANのNICなど)があるため、NICの数だけ、MACアドレスが付けられている
  • 16進数で書かれた48bitの番号(00:a8:7b:01:5d:8fなど)
  • MACアドレスは決してかぶらない
  • ベンダーコード(IEEEによって決められている販売会社の番号)と各販売会社が独自につけた

IPアドレスとMACアドレスの関係

  • MACアドレスだけでも通信はできる
  • IPアドレスはグルーピングするために用いられる

ARP(Adress Resolution Protocol)

  • IPアドレスからMACアドレスを調べるためのプロトコル
  • IPアドレスとMACアドレスの対応はARPテーブルに書かれる
  • ARP要求が同じグループ内のアドレスに送られ、自分のIPだった場合に、自分のMACアドレスを書き込んでARPレスポンスを返す

ルーティング

  • 同一ネットワーク内での通信はARPを使ってIPアドレスとMACアドレスの対応を付ければ可能
  • しかし、別ネットワークに対してブロードキャストを使って問い合わせを行うことはできないし、地球全体のすべてのネットワークの構造をすべての通信主体であるコンピュータが知っているという仮定には無理がある
  • そこで、複数のネットワークに接続しているコンピュータ(ゲートウェイ(gateway)、ルータ(router))に中継を依頼する
  • ゲートウェイは自分が接続しているネットワークに目標とするコンピュータがあればARPを使ってMACアドレスを求めデータを送りつける
  • ゲートウェイは自分が接続しているネットワークに目標とするコンピュータがなければ、さらに別のゲートウェイに中継を依頼する
  • 送信元から最終的な宛先までの最良の経路(中継ゲートウェイ列)を探す作業をルーティング(routing)と呼ぶ

DNS(Dmain Name System)

  • ドメイン名をIPアドレスに直してあげるシステムのこと
  • そのシステムを行うサーバやコンピュータをDNSサーバという

サーバ

ネットワークでサービスを提供するコンピュータのこと

クライアント

サービスを提供される側のコンピュータのこと

SMTP(Simple Mail Transfer Protocol)

  • メールを送信・転送するためのプロトコル
  • メールサーバは、DNSサーバに送り先のドメイン名(MXレコード)を聞き
  • そこのIPアドレス(Aレコード)を聞く
  • そのIPアドレスにメールを届ける
  • ここまでがSMTPの役割

POP(Post Office Protocol)とIMAP(Internet Message Access Protocol)

  • メール受信のためのプロトコル
  • POPはメールサーバから、メールをパソコンにダウンロードする方式。
  • IMAPはメールサーバにメールを置いたまま、メールボックスの一覧だけをパソコンに表示する方式。

WWW(World Wide Web)

  • インターネットで公開されているページをみるための仕組み
  • ページは、HTML(Hyper Text Markup Laguage)という言語で書かれている
  • このHTMLで書かれたドキュメントを公開しているのがWebサーバという
  • Webサーバで有名なのがApacheとIISとNginxなど

HTTP(Hyper Text Transfer Protocol)

  • WebブラウザとWebサーバの間でデータ通信する時に使われるプロトコル
  • HTTPリクエストには
    • リクエスト行
    • メッセージヘッダー
    • メッセージボディ

がある。

  • HTTPレスポンスでは、リクエスト行の部分がステータス行になっている。

ステータスコード

  • WebサーバとWebブラウザがお互いの状態をやり取りするためのコード
  • 100番台:情報提供のため
  • 200番台:成功を表す
  • 300番台:転送に関する
  • 400番台:クライアント側のエラー
  • 500番台:サーバ側のエラー

例)
- 200 : リクエスト成功
- 301 : リクエストしたページが別のページに移動している
- 403 : リクエストしたページを表示する権限なし
- 404 : リクエストしたページが存在しない

などなど

ポート番号

  • TCP/IPを利用したネットワーク通信のIPアドレスの下に設けられた補助アドレスのこと
  • コンピュータが通信に使用するプログラム(アプリケーション)を識別するための番号

バーチャルホスト

  • 1つのサーバで複数のドメインを運用する技術

SSL(Secure Sockets Layer)

  • インターネット上で情報を暗号化し、送受信できるプロトコル
  • 「https://」
  • ポートは443番
  • Webページを運営している人が証明書の種(Keypair)をつくる
  • 運営会社の情報に証明書の片割れをそえて認証局に申請
  • 認証局で申請内容と申請者の存在を確認
  • 種の片割れに認証済みマークを付け申請者に返却
  • 証明書をサーバにインストールする

SSH(Secure Shell)

  • 自分のパソコンから、ネットワークを介して自分以外のパソコンにログインできる
  • リモートホストのコマンド実行ができる
  • 通信を暗号化することで安全にしている

公開鍵暗号方式

  • 公開鍵と秘密鍵の2つの鍵を使用した接続方式
  • サーバーに公開鍵、クライアントに秘密鍵を置いて使用する
  • 公開鍵で暗号化したものは、秘密鍵でのみ復号化できる