100日後にエンジニアになるキミ - 10日目 - インフラ - サーバーについて

## サーバーについて

昨日までのHTMLの話とはうって変わって
今日はサーバーのお話です。

サーバーとはなんでしょうか？

具体的なイメージが掴みにくいかと思いますが
基本的には私たちが使用するようなPCと大差はありません。

サーバーとはサービスを提供している
企業側のコンピュータを指す言葉です。

WEBサーバー(webサイト運用のためのソフトウェア)を搭載し
サーバー機能を有しています。

サーバー(server)とはその名の通りserveする側のことで
提供する側という意味合いです。

サーバーが担う役割(サービス)としては
・ホームページの提供
・メールの送受信
・ゲーム配信
・ECサイト
・SNS
など、様々な用途でサーバーが用いられています。

## サーバーとクライアント

サーバー関連の用語として
押さえておきたい言葉として

「サーバー」と「クライアント」

があります。

ネットワーク上でサービスを提供している側を「サーバー」
サービスをを利用している側を「クライアント」と呼びます。

WEBサイトを見るには
WEBブラウザーを通じてクライアント側から
サーバーへ問い合わせを行いデータ取得し
その結果をブラウザー側で描画しています。

問い合わせの際にはWEBサーバーとの間で通信が行われ
双方向でデータのやり取りをしています。

## リクエストとレスポンス

<img width="527" alt="スクリーンショット 2020-03-30 16.46.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/4c96627c-ad37-19f1-566b-4d4796b4e13b.png">

クライアントからサーバーへの問い合わせを「リクエスト」
サーバーからの応答を「レスポンス」と読んでいます。

私たちが普段Webサイトを見たりメールを送ったりする際には
クライアントからの要求に対して対応しサーバー側が返答を行います。

クライアントの要求に合わせて加工したファイルを送る
クライアントのデータを加工、保存したりすることなども
サーバーの役割の一つです。

WEBサイトの場合
通信は通常HTTPというプロトコル(通信規約)を用いて行われます。
HTMLファイル自体がハイパーテキストであるので
それをやり取りするための通信が行われています。

## アップロードとダウンロード

クライアントがサーバからデータを受け取ることを「ダウンロード」
クライアントからサーバーへデータを送りつけることを「アップロード」
と読んでいます。

動画投稿サイトやSNSなどでは
クライアントはサーバーに対して大量のファイルを送りつけることができ
サーバーからも大量の画像を閲覧するのにダウンロードを行なっています。

## サーバーの種類

サーバーにも色々な種類があります。
主には機能で別れることとなります。

**DNSサーバー**

DNS（Domain Name System）サーバーは
IPアドレスとドメインを結びつけるためのサーバーです。

このドメインとIPアドレスを紐付けて
互いに変換する処理を「名前解決」と呼びます。

IPアドレス(Internet Protocol Address)はWeb上の媒体の識別番号で
インターネット上に接続された機器が持つ12桁の数値のことです。
1～254の3桁までの数字を1組として、4つの組を「.」（ドット）で区切って表記します。

これに名前を付けたものがドメインと呼ばれるものです。

サイトのURL「 https://www. 」の後ろの部分です。
<img width="523" alt="スクリーンショット 2020-03-30 17.13.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/e7fe8a95-2e52-2e80-a764-092b328d30b7.png">

IPアドレス：
172.15.255.1

IPアドレスは、インターネット上での住所のようなもので
重複しないように割り当てられています。

IPアドレスをドメインに変換するDNSサーバーは
インターネットを利用する上で欠かせないものです。

DNSサーバーはその機能の重要性から
「DNSキャッシュサーバー」
「DNSルートサーバー」
に分かれます。

DNSキャッシュサーバーとは、DNSサーバーの情報を一時的に保管しておくサーバーです。
他のDNSサーバーからの問合せ結果のデータが一時的に蓄積されており
同じ問合せが来た場合は他のサーバーを介さずにユーザーへ応答します。

DNSルートサーバーは、DNSキャッシュサーバーが最初に問い合わせを行う場所で、
ドメイン名空間の頂点にある情報を保持しています。

また
DNSサーバーは、ツリー型の階層構造になっています。

1番上：トップレベルドメイン（「jp」や「com」など）
2番目：「co」や「ne」
3番目：企業名などの固有ドメイン

![alt](https://www.kagoya.jp/howto/wp-content/uploads/kagoya1610-3_2_2-1.jpg)
参考：kagoya

DNSサーバーがWebサイトを表示させるまでの流れは、以下のとおりです。

1.ブラウザに見たいWebサイトのアドレスを入力。
2.DNSキャッシュサーバーにドメイン名でアクセス。
3.DNSキャッシュサーバーがDNSルートサーバーに、ドメイン名に対応するIPアドレスを問い合わせ。
4.DNSルートサーバーがDNSキャッシュサーバーに、該当する情報のあるDNSサーバーの情報を返答。
5.DNSキャッシュサーバーがDNSサーバーに、ドメイン名に対応するIPアドレスを問い合わせ。
6.DNSキャッシュサーバーにIPアドレスを返却。
7.ブラウザ側へIPアドレスを返却。
8.取得したIPアドレスでWebサイトのWebサーバーにアクセス。
9.ブラウザにWebサイトを表示。

このようにWEBサイトを表示させる仕組みは
複雑になっています。

DNSサーバーが稼働していないとWEBサイトは表示されないので
WEBサイト運営ではサーバーの稼働状況をチェックしておく必要があります。

**WEBサーバー**

クライアントのウェブブラウザに対して
HTMLや画像なの表示を提供するサービスプログラム
またはそのサービスが動作するサーバーを指す言葉です。 

どちらかと言うと
サーバー上で動くソフトウェアのことを指すことが一般的かと思います。

WEBサイトを運営するのには必須の機能で
クライアントに要求された情報を元に
サーバーに格納されたWEBページのデータを
クライアントに送信します。

主なソフトウェアの種類として
・Apache HTTP Server
・nginx
などがあります。


**メールサーバー**

送信用と受信用でサーバーが分かれており
送信サーバーはSMTP（Simple Mail Transfer Protocol）サーバー
受信サーバーはPOP(Post Office Protocol)サーバー
が使われています。

![alt](https://www.kagoya.jp/howto/wp-content/uploads/kagoya1702-1_14_2.jpg)
参考:kagoya

SMTPサーバーはユーザーからメールを受け取った後
DNSサーバーに依頼して宛先のメールアドレスのドメイン部分から
配信先のメールサーバーを割り出した後
そのサーバーに対してメールを配送します。

SMTPサーバーによって配送されたメールは最終的にPOP3サーバーへ渡されます。

POP3サーバーの中には、1つ1つのメールアドレス毎に
メールボックスと呼ばれる郵便の私書箱にあたる機能が用意されており
そこに配送されたメールが保管されます。

ユーザーはこのPOP3サーバーにアクセスして
メールをダウンロードしているわけです。

IMAPについて:

IMAPは『Internet Message Access Protocol』の略で
サーバー上でメールを管理するという特徴があります。

受信したメールはメールソフトではなくサーバー上に保存されるので
どの端末からでも同じ内容のメールを閲覧することが可能となります。

最近ではgmailなどでIMAPを利用することも多くなりました。
メールクライアント側では
ここら辺のサーバー設定を使い分ける形になります。

**FTPサーバー**

FTP（File Transfer Protocol）サーバーは
FTPを使用してファイルの送受信を行うサーバのことです。

FTPとは「ファイル転送プロトコル」のことで
ファイル送受信のための通信方式のことです。

サイトのファイルはサーバーにあるわけですが
通常はネットワーク空間の中に存在するため
手元のPCにあるサイトを構成するファイルを
サーバーに配置しなければWEBサイトとして公開できません。

最初はサーバーに対して、クライアント側から
ファイル群を送ってあげる必要があります。

またサーバー側からファイル群をバックアップする際にも
FTPサーバーは用いられます。

![alt](https://www.kagoya.jp/howto/wp-content/uploads/kagoya1712-ftpts03.jpg)
参考:kagoya

サーバー用のFTPサーバーのアプリケーションとして有名なものには
・Vsftpd
・ProFTPD
などがあります。

よく使われるクライアント用のソフトウェアとして
・WinSCP
・FFFTP
・Cyberduck
などがあります。


**SSHサーバー**

SSH（Secure Shell）サーバーはクライアントの情報を暗号化するサーバーです。

パスワードや暗証番号などの個人情報等を送信する際に、SSHサーバーによって
暗号化してから安全にリモート送信できるようしています。。


## まとめ

サーバーは物理的なコンピューターを表すことと
それに搭載されているソフトウェアを表すことがある。

概念や用語を把握しておこう。

君がエンジニアになるまであと90日

## 作者の情報
乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython