こんにちは。現在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つの鍵を使用した接続方式
- サーバーに公開鍵、クライアントに秘密鍵を置いて使用する
- 公開鍵で暗号化したものは、秘密鍵でのみ復号化できる