サーバーの基本をまとめた

エンジニア転職をして約半年が過ぎました。
以前、同期が開発の話をしていて上司に「私はプログラム以前にもっと大きな所から考えるけどなんだかわかる？」
と質問されていて横で聞いていた私も「？」、同期も「？？」になっていて
上司が「私はサーバーから考える」と言っていて、言っている意味がわからなかったのでサーバーの基本から勉強しようと思いました。

#あなたは誰ですか？
自社開発企業で主にサーバーサイドのエンジニアです。
PHPがメインです。
RPAやデータ・マーケティングもやっています。

#サーバーとは
######そもそもサーバーとは
ネットワーク上で他のコンピュータやソフト、すなわちクライアントにサービスを提供するコンピューターのこと
クライアントからのリクエスト（要求）を受けて、初めて処理を開始しサービスを提供する

①クライアントはサーバーになんらかのサービスを要求する
②サーバーは要求に応じた処理を行う
③サーバーは処理結果をクライアントに返す
④クライアントは処理結果を受け取る

サーバーとクライアントで構成されているシステムのことを「クライアント/サーバーシステム」という

######いろいろなサーバー
サービスによってサーバーの呼び名が違う
・暗号化した状態でWebを見るには「HTTPS」、暗号化せずにWebを見る場合は「HTTP」というプロトコルでサービスを行うため
→「HTTPサーバー」「HTTPSサーバー」

・メールの送信には「SMTP」、メールの受信には「POP」というプロトコルでサービスを行うため
→「SMTPサーバー」「POPサーバー」

#####サーバーソフトウェア
Webサーバーソフトウェアの場合代表的な製品
・Apache
・IIS
・nginx
サーバーソフトウェアをインストールすればサーバーになる

#####サーバーの運用管理
主に「設定変更」「トラブル対応」の２つの作業を行う

【設定変更】
サーバー管理者は、ユーザーの要求に合わせてサーバーの設定を変更して行く
＜設定変更例＞
・ユーザーの追加・削除
・管理コンピューターの追加
・運用ポリシーの変更
・ストレージ容量の割り当ての拡張

【トラブル対応】
トラブル対応には「事前対応」「事後対応」がある
「事前対応」
＜チェック項目＞
・CPU使用率
・メモリ使用率
・通信状態
・エラーログ

「事後対応」
＜調査項目例＞
・サーバー本体のLED
・NICのポートLED
・エラーログ

#ネットワークの基礎知識
#####OSI参照モデルとは
国際標準化機構（ISO）がコンピューターの通信機能を階層構造に分けて整理したモデルのこと
「通信するときのルール」　＝　「プロトコル」

OSI参照モデルでは7つの階層構造（レイヤー）に分かれている
「物理層(レイヤー１)」
「データリンク層(レイヤー２)」
「ネットワーク層(レイヤー３)」
「トランスポート層(レイヤー４)」
「セクション層（レイヤー５）」
「プレゼンテーション層（レイヤー６）」
「アプリケーション層（レイヤー７）」

それぞれのレイヤーは全く異なる役割を持ち、別々に動作するようになっている
また、レイヤーごとに分離したトラブルシューティングができるようにしている

######プロトコルの最大の役割はカプセル化/非カプセル化
サーバーアプリケーションから送信したいデータには通信機能で必要な各種のデータが付加されることを「カプセル化」
サーバーはレイヤーの上流から下流に向けてカプセル化の処理をおこない、転送用のデータを作る

データを受け取ったクライアントはカプセル化とは逆の処理を行い、アプリケーションデータを取り出すことを「非カプセル化」
クライアントはレイヤーの下流から上流へ向けて非カプセル化の処理を行い、オリジナルのアプリケーションデータに戻す

######イーサネットとは
イーサネットとはレイヤー１とレイヤー２の「規格」のことで、レイヤー３（ネットワーク層）から受け取ったデータ（パケット）に付加してフレームを作る

付加すること
「プリアンブル」　　　　　　　　　→フレームの最初に表す
「ヘッダー」　　　　　　　　　　　→あて先と送信元を表す
「FCS(Frame Check Sequence)」　 →ビットエラーのチェックに使用する

イーサネットでは通信する相手の識別にMACアドレスを使う
＜MACアドレス例＞
a8:67:6f:03:00:80 
00-50-56-c0-00-01

MACアドレスとはベンダーコード（OUI）とベンダー内コードで構成されており、8ビットずつ、16進数で表記する

上位の24ビットはIEEE(米国電気電子学会)が機械のベンダーごとに割り振られたコードでOUI(Origanizationally Unique Identifier)と呼ばれている

下位の24ビットはベンダー内で機械ごとに一意に割り当てているコード
コンピューターがデータ送信するときは、自分のMACアドレスを「送信元MACアドレス」、データを送る相手のMACアドレスを「あて先MACアドレス」として、ヘッダーに入れフレームを作る

######スイッチング
イーサネットではスイッチと呼ばれるネットワーク機械を中心にコンピューターを接続する、「スター型トポロジー」という接続形態を採用している

######MACアドレステーブルを使用してスイッチング
①フレームを受け取ったスイッチはフレームが入ってきたLANポートの番号と送信元MACアドレスをMACアドレステーブルに記録する
②あて先MACアドレスの情報がMACアドレステーブルに載っていれば、その情報に基づいてフレームを転送します。載っていなければコピーを送信し、該当するコンピューターだけがフレームを受け取り、それ以外はフレームを破棄する。
③以降、フレームが入ってくるたびにMACアドレステーブルの情報を更新し、使用しなくなった場合は一定時間経過すると削除する

######IP(Internet Protocol)とIPアドレス
IPは「IPアドレス」という３２ビットの識別番号を使用して、コンピューターを識別している
8ビットずつドットで区切って、10進数で表記する
＜IPアドレス例＞
192.168.1.1
172.16.25.345

IPアドレスはサブネットマスクとセットで使い、サブネットマスクで分割した「ネットワーク部」「ホスト部」の２つで構成している

######使用用途による分類
IPアドレスは使用用途によって分けられており、クラスA〜クラスEまでの５つのアドレスクラスになっている
一般的に使われるのはA〜Cで、クラスの違いはネットワークの規模の違い

使用場所応じて「グローバルIPアドレス」と「プライベートIPアドレス」に分類される
「グローバルIPアドレス」・・・インターネットにおいて一意なIPアドレス
「プライベートIPアドレス」・・・組織や家庭などのLANで自由に割り当てて良い

######ルーター
「ルーター」とはイーサネットで作ったネットワークとネットワークをつなぐ時に使用するネットワーク機器のこと
ルーターはあらかじめ作っておいた「ルーティングテーブル」を利用して、パケットを転送する

ルーティングテーブルを作る方法は２つある
「静的ルーティング」・・・手動でルーティングテーブルを作る方法
「動的ルーティング」・・・隣接するルーター間でルート情報を交換して、自動的にルーティングテーブルを作る方法

######ARP(Adress Resolution Protocol)
ARPは主にIPアドレスとMACアドレスの関連づけを行っている
MACアドレスはコンピューターのNIC（Network　Interface Card）に焼き付いている物理的なアドレス
IPアドレスはOSに設定する理論的なアドレス



######TCPとUDP
レイヤー４では「信頼性」と「即時性」のどちらをとるかでそれぞれにプロトコルを用意している

【TCP(Transmission Control Protocol)】
TCPは通信するコンピューター同士がお互いに確認のメッセージを送りながらデータをやりとりすることで信頼性を高めている
Webやメール、ファイル共有などTCPを使用している

【UDP(User Datagram Protocol)】
UDPはデータを送ったら送りっぱなしで、信頼性はないが確認応答を省くことによって即時性を高めている
VoIPや時刻同期、名前解決などで使用している

######ポート番号でサービスを識別している

ポート番号は「０〜65535」(16ビット分)までの数字で、範囲によって用途が決められている

0~   1023      「ウェルノウンポート」  一般的なサーバーソフトウェアで使用
1024~49151     「レジスタードポート」　メーカー独自サーバーソフトウェアで使用
49152~65535     「ダイナミックポート」　クライアント側でランダムに使用

######リクエストとレスポンスの流れ
【クライアントからサーバーに対する接続（リクエスト）】
①WebクライアントはWebブラウザが作ったリクエストデーターを受け取ると、送信元ポート番号にダイナミックポートの中からランダムに選択した数字を、あて先ポート番号にWebサービスを表す「８０」を入れてセグメントにする
↓
②WebクライアントはIPとイーサネットのカプセル化を行い、Webサーバーに転送する
↓
③WebサーバーはイーサネットとIPの非カプセル化を行い、あて先ポート番号をチェックする
Webサービスを提供するサーバーソフトウェアにリクエストデータを渡す。サーバーソフトウェアはクライアントに対する処理を行い、レスポンスデータを作る

【サーバーからクライアントに対する接続（レスポンス）】
①Webサーバーはサーバーソフトウェアからレスポンスデータを受け取ると、送信元ポート番号に「８０」を、あて先ポート番号に受け取ったセグメントの送信元ポート番号をいれて、セグメントにする
↓
②WebサーバーはIPとイーサネットのカプセル化を行い、Webクライアントに転送する
↓
③WebクライアントはイーサネットとIPの非カプセル化を行い、あて先ポート番号をチェックし、Webブラウザにデータを渡す



#参考元


イラスト図解式 この一冊で全部わかるサーバーの基本 （著）きはし まさひろ　
出版社　SBクリエイティブ　発売日　2016/3/29