A note of a person who is learning programming, SakaTaQ

ロック好きのプログラミング学習

通信、ネットワークの学習まとめ

情報処理においてはよく聞く言葉だけど、あんまり意味がよくわかってない言葉がある。
今回はそれについてザックリとまとめてみました。

サーバー

サービスを提供するコンピュータ、そのコンピュータにある様々な処理、機能。
処理をする為だけに特化したパソコンなどを指す。
自身のパソコンでもサーバー処理自体は行える。

必要な理由

  • バックアップとしてデータを保存しておけば、自身のPCが壊れてもデータを復旧できる。
  • 外部クライアントと接続する機能をサーバーに任せておくことで、自身のPCの負担を減らすことができる。
  • サーバーと開発するためのPCの役割を分けることによって開発に集中できる。

役割

以下のような色々な役割がある。

  • 様々なデータを保存、管理する → データベースサーバー
  • PC同士の通信を行う → WEBサーバー
  • SSHコマンドを受付ける → SSHサーバー
  • メールの送受信を行う → メールサーバー
  • ドメインIPアドレスの組み合わせの管理 → DNSサーバー

WEBサーバー

スマホやPCからのリクエストに対して、リクエストにあったレスポンスを返す仕組みを持ったハード(コンピュータなど)やソフトウェアを指す。
以下のような動作を1秒間に数千回行っている。

  1. 80ポートでHTTPリクエスト受付ける
  2. リクエストに応じた処理や、要求されたファイルを返す
  3. リクエストしたコンピュータに返送(レスポンス)する

IPアドレス

コンピュータやサーバーに設定された住所のようなもの。「123.456.789.000」みたいな形で表現され、全部で42億パターン存在する。
現在では世界の総人口がこの数を超えているため、16進数で表現でき、ほぼ無限に使用できるIPv6というバージョンに移行されている所。
また、これまでのIPv4では個数が限られていたため、利用者が好きに変えることができなかった。その為、ISP(インターネット•サービス•プロバイダ )から自動的に付与されていた。
接続をしていない場合は自動で変動してしまい、IPアドレスを利用する為には毎回ISPから利用許可を貰う必要であった為、企業や学校などでの利用においてコンピュータの数が変動する際に不便であった。
これを解決する為にIPアドレスとプライベートIPアドレスという仕組みが生まれた。

グローバルIPアドレス

インターネット接続する際に利用するアドレス。接続機器に割り振られている番号。家の住所や電話番号のイメージ。
WAN(Wide Area Network)とも呼ばれる。

プライベートIPアドレス

ISPから割り振られたグローバルIPアドレスからさらに細分化させたようなIPアドレス(ネストするようなイメージ)。
グローバルIPアドレスは住所の建物名までだとしたら、プライベートIPアドレスは○号室のイメージ。
LAN(Local Area Network)とも呼ばれ、規模によって3つに分けられる。

  • クラスA(大規模ネットワーク): 10.0.0.0 〜 10.255.255.255
  • クラスB(中規模ネットワーク): 172.16.0.0 〜 172.31.255.255
  • クラスC(小規模ネットワーク): 192.168.0.0 〜 192.168.255.255

ルーターはクラスCを使うのでプライベートIPアドレスは65535通り。
ルーターグローバルIPアドレスの併用では65535 x 42億通りのプライベートIPアドレスが存在できることになる。

ルーター

インターネットと家庭や学校などにある複数のPCを接続する際に必要になる機器。
ルーターを通した時点でグローバルIPからプライベートに切り替わるようになっている。
ルーターは必要に応じてプライベートアドレスを増減させることで接続できる人を固定化させないような仕組みがある。

DNS

Domein Name Systemの略。ドメインIPアドレスを文字列に変換したもの。IPアドレスのような数列を覚えるのが大変な為生み出された。
IPアドレスよりも簡単に取得でき、個人で購入することができる。
ドメインはアドレスバーにある . (ドット)の前後の文字列。 . の後にあるものをトップレベルドメインといい、ドメインを取得するにはトップレベルドメインがなければ取得できない。
. の前にあるものをセカンドレベルドメインという。特に決まりがなくどんな名前にするかは早い者勝ちで、同じ名前を使用することはできない。

DNSサーバー

IPアドレスドメインのそれぞれの組み合わせを管理しているサーバー。
DNSサーバーは様々な場所に存在し、身近なところではルーターの中に存在している場合もある。
IPアドレスを配布しているISP内にもある。

IPアドレスの調べ方

digコマンド

Domein Information Groperの略。ドメインを管理しているDNSサーバーに問い合わせて、ドメインからIPアドレスを取得することができる。

% dig xxxxx.xxxxxx.com

https://とかはいらないので注意。 ANSWER SECTIONの欄に表示されているのがドメインから取得できたIPアドレスとなる。
ネットワークの状況によってはエラーが出ることがある。エラー内容に従ってコマンドを実行する必要がある。+noednsというオプションで解決することがある。

ポート

複数のサーバ同士をつなげる役割を持つ。
それぞれのサーバーはサーバーごとに番号として管理されていて、リクエストに応じてそれぞれの番号(=サーバー)につなぐ橋渡しをする役割を持っている。
ポートの割り振り番号としては0から65535まで使うことができるが、0から1023まではよく使われるもので予約されているので自由に使うことはできない。

必要な理由

一般的なサーバーは1つのIPアドレスしか持ってないことが多いので、このIPアドレスをWEBで使用してしまうと他のサーバーとして動作することができなくなってしまう。
WEBサーバーは80、SSHサーバーは22、メールサーバーは3306などと既に決まっており、利用しようとするとエラーが出る。
Railsでサーバーを起動する時は3000で起動することが多い(寧ろ% rails sのデフォルトは3000)。
既に3000ポートが使用されている場合や、複数のサーバーを起動したい場合は

% rails s -p 3001

のように実行することで別のポートでサーバーを起動できる。
コンピュータが通信する場合は「どのIPアドレス」の「どのポート」に接続するか、というようにセットで考える。

HTTP

WEBページやページ内で必要なCSS, JavaScript、画像などのファイルをWEBサーバにリクエストするためのフォーマット。
http://〜や、https://〜で始まるURL/URIと言う形式で送られる。
ブラウザにURLを入力したり、リンクをクリックした際に、自動的にブラウザがHTTPフォーマット従ったリクエストを作成して、サーバに送信している。
https://はhttpと違ってデータを暗号化して送信する機能がついた通信プロトコル
個人情報を入力したりパスワードを入力するホームページでは、情報漏洩を防ぐために暗号化技術を使用するhttpsが使用される。

URL、URI

URL = Uniform Resource Locaterの略。
インターネット上の住所。ドメイン以外も含めた全てを指す。
同じような仕組みにURN(Uniform Resource Name)と言うものがある。

URI = Uniform Resource Identifierの略。
インターネット上の住所の識別をする書き方の総称。URLよりもこちらの方が広い概念。
https:という識別子はURLとして定められているのではなく、URIで定められている、スキームと呼ばれている。
httpsというプロトコルを使用したスキーム、みたいな言い方になるのかね。

分類というか関係性で言うと、URIが箱ならURLが道具箱、URNがゴミ箱みたいな。そんな感じ。

telnetコマンド

telnetコマンドを使って離れたところにあるホスト(サーバー、ネットワーク機器)に、手元の端末から遠隔操作するために接続することができる。
テキストベースの通信では簡単なものであればncというコマンドの方が簡単に実行できる。
telnetは遠隔ログインに特化しているが、セキュリティ上の理由でsshなどの大体プロトコルを使う場合が多い。
Mac OSのヴァージョンによってはtelnetをインストールする必要がある。

% brew install telnet

まずはdigコマンドでIPアドレスを調べる

% dig xxxa-xxxb.com +noedns

IPアドレスが表示されたら、それを利用してtelnetコマンドを入力、Webページを開くためのポートは80番を使用する。

% telnet 111.222.333.44 80

telnet <IPアドレス> 80のような形で入力する。
コンソール上でトップページが開けたら、GET / HTTP/1.0 と入力し、returnキーを2回押す。 実行することでターミナル上にトップページのHTMLが返ってくる。
<! DOCTYPE html>より上の部分がレスポンスヘッド(headタグ)の部分で、それ以降がメッセージボディ(bodyタグ)の部分になる。

  • HTTP/1.1 200 OK
    レスポンスが成功した際に表示される。200とか300とか400とか500とか種類がある。
    rails sした時のターミナルでの表示結果にもこの数字は表示されるし、JSのajax通信の際にもresponseで取得できる数字があるけど、これと一緒。
  • Content type
    HTMLファイルに使用している文字コードを示している。文字化けなどを誤動作を防ぐためにある。metaタグでよく見る。
  • X-Content-Type-Options:〜
    XSS(クロスサイトスクリプティング = スクリプトの埋め込みによる情報を盗む行為)などによってcookieの情報が盗まれないようにしている。
  • Vary:〜
    キャッシュ(メモリなどの記憶装置に複製されたデータ)を残すためのもの。キャッシュがあると次に同じページに接続する時に、キャッシュがある分は読み込まなくてもよくなるので、読み込み速度が上がる。

pingコマンド

通信したいホストに対して通信できるのかを確認したり、応答時間を調査できるコマンド。
第1引数にIPアドレスもしくはホスト名を書く。

% ping www.abcdefg.co.jp

表示された結果の中に time=6.78 ms などのように表示されているのが通信するまでにかかった時間(単位はミリ秒)。5ミリ秒以内であればかなり近いネットワークに相手のコンピュータがあることが分かるらしい。
なお、確認が済んだ後は Ctrl + Cで終了をする必要がある。


今回はここまで。まだまだ沢山あるけれどもまた学んだことをまとめられたらザァッと書き出していこうと思います。

したらな❗️ 👋