5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Webエンジニアのためのネットワーク基礎

Last updated at Posted at 2020-07-17

いろいろ削ぎ落とした必要最低限の基礎知識の紹介。

キーワード:
サーバー ヘッダー IPアドレス IPv4 IPv6 DHCP DNS ドメイン名 キャッシュ ポート番号

↑この辺りの語句を目/耳にしたことはあるけどよく分からない・・・という人には是非、読んでいただきたい内容!

ネットワークとは

クライアントサーバーデータのやりとりのこと。

  • クライアント: サービスを受けるコンピュータ(CLIやGUIで操作)
  • サーバー: サービスを提供するコンピュータ(CLIで操作)
例えば・・・
            http://hoge.com/
      ____                     ____
     /   /  --------------->  |=   |
____/___/   <===============  |____|
クライアント                      サーバー
               ページの情報

リクエストとレスポンス

クライアントからサーバーへの通信をリクエスト(上の例のhttp://hoge.com/
サーバーからクライアントへの通信をレスポンス(上の例のページの情報
という。

このリクエストとレスポンスの繰り返しでネットワークは成り立っている。

リクエストとレスポンスの繰り返し!
                リクエスト
      ____                     ____
     /   /  --------------->  |=   |
____/___/   <===============  |____|
クライアント                      サーバー
                レスポンス

データ

データにはヘッダートレーラーが付与されている。

  • ヘッダー: データの送受信に必要な情報
  • トレーラー: データが壊れずに届いたかを確認するために必要な情報
データ
               ┌─ JSON {...} など
 ______________⊥_______________
| ヘッダー | データの中身 | トレーラー |
 ‾‾‾T‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
    ├─ 自分の
    │   ├─ IPアドレス
    │   └─ ポート番号
    ├─ 相手の
    │   ├─ IPアドレス
    │   └─ ポート番号
    └─ 次の経由地の
        └─ MACアドレス
  • IPアドレス: コンピュータを特定するための識別子
  • ポート番号: アプリを特定するための識別子
  • MACアドレス: 機器を特定するための識別子(製造時に付けられる物理アドレス)
  • JSON: よく使われるデータ形式({key: value}のように表される)

郵便物をマンションの一室に届けるイメージで!

郵便物(データ)をマンション(コンピュータ)の一室(アプリ)に届けるイメージで考えると分かりやすい。

データのイメージ
              データの中身      トレーラー
                ______       _______
              /__//__/|─────┤ 納品書 |
             /‾‾//‾‾/‖|      ‾‾‾‾‾‾‾
  ヘッダー    |‾‾‾‖‾‾‾|‖|
 _______    |   ‖   |‖/
|  荷札  ├───|___‖___|/
 ‾‾‾T‾‾‾       小包
    ├─ 自分の
    │   ├─ IPアドレス: 住所
    │   └─ ポート番号: 部屋番号
    ├─ 相手の
    │   ├─ IPアドレス: 住所
    │   └─ ポート番号: 部屋番号
    └─ 次の経由地の
        └─ MACアドレス: 郵便局の住所など

IPアドレスとDHCP

こういうやつ…見たことありませんか?
110.67.242.89

IPアドレス*は32ビットのデータで、表記の際は8ビット毎に.(ドット)で区切り、10進数に変換する。ちなみに110.67.242.89を32ビットのデータに戻すと01101110010000111111001001011001となり、人間には分かりにくい💦。

*: これはIPv4の話。IPv4では2^32 = 4294967296 ~ 約43億通りのIPアドレスを表現できるが、インターネットの普及に伴い、インターネットに接続する機器が増加したため、IPアドレスが足りなくなってしまった。そこで登場したのがIPv6である。IPv6ではIPアドレスは128ビットのデータで、表記の際は16ビット毎に:(コロン)で区切り、16進数に変換する。IPv6では2^128 = 340282366920938463463374607431768211456通りのIPアドレスを表現できる。桁の単位すら分からない。毎秒1兆個のIPアドレスを消費したとしても、使い切るのに宇宙の歴史(約200億年)の5億倍以上の時間がかかるというのだから安心だ。(参考: 2の128乗


Q. IPアドレスは、いつ、誰が決めるの・・・?
A. DHCPによって動的かつ一意に割り当てられる。

DHCP
             IPアドレスください
      ____                     ____    (アドレスプールから選ぶ)
     /   /  --------------->  |=   ├───────────┘
____/___/   <===============  |____|
クライアント                    DHCPサーバー(ルーター)
            君のIPアドレス、コレね
             110.67.242.89

※割り当てられるIPアドレスは期限付き。(割り当てたのに使われていないIPアドレスがあるともったいないため。)

  • DHCP: IPアドレスを動的かつ一意に割り当てるプロトコル

ドメイン名とDNS

実は上の例のhttp://hoge.com/でのサーバーとの通信の図は「厳密には」間違っている。

上の例
            http://hoge.com/
      ____                     ____
     /   /  --------------->  |=   |
____/___/   <===============  |____|
クライアント                      サーバー
               ページの情報

http://hoge.com/ドメイン名といって、IPアドレスを人間に分かりやすくしたものである。そのため、通信の際にはhttp://hoge.com/をIPアドレスに変換してからサーバーと通信する必要がある。この「ドメイン名をIPアドレスに変換する仕組み」のことをDNSという。

我々がドメイン名をWebブラウザアプリのアドレスバーに入力するだけでページの情報が返ってくる(これを名前解決という。)のはこのDNSのおかげである。よく使われる名前解決としてhttp://localhost/が挙げられる。

DNS
            http://hoge.com/
      ____                     ____
     /   /  --------------->  |=   |
____/___/               ====  |____|
クライアント              //     DNSサーバー
                     //
                    //  この「ドメイン名」は「125.10.0.8」やな
\キャッシュとして保存/   //  いちいち聞かれると大変やから
      ____        //   保存しといてや
     /   /       //
____/___/   <====
クライアント
  • DNS: ドメイン名をIPアドレスに変換するプロトコル
  • キャッシュ: 1度尋ねたドメイン名とIPアドレスの対応関係はキャッシュとして保存される。

ポート番号

こういうやつ…といってもただの数字にしか見えないけど💦
http://localhost:8000/
                 ‾‾‾‾ この部分

Q. そもそも何のためにあるの・・・?
A.
通信が、どのアプリからどのアプリへの通信なのかを特定するため。
クライアントは1つのコンピュータでWebブラウザアプリやメールアプリを使用する。この場合、IPアドレスが変わらないため、ポート番号によってどのアプリなのかを区別する必要がある。

Q. ポート番号は、いつ、誰が決めるの・・・?
A.

  • クライアント側: 動的に割り当てられる。(動的/プライベートポート番号
  • サーバー側: 種類によって決まっている(ウェルノウンポート番号

ポート番号の種類

番号 種類 用途
0 ~ 1023 ウェルノウンポート番号 サーバーアプリが使用
1024 ~ 49151 予約済みポート番号 特定のアプリが使用(クライアント/サーバー問わず)
49152 ~ 65535 動的/プライベートポート番号 クライアントアプリが使用

代表的なウェルノウンポート番号

番号 用途
20 FTP(データ転送)
21 FTP(制御)
25 SMTP(メール)
53 DNS
67 DHCP
80 HTTP(Web)
110 POP3(メール)

参考

TCP/IPの4つのレイヤー

階層名 代表的なプロトコル 備考
アプリケーション層 DHCP、DNS ユーザーにサービスを提供する
トランスポート層 TCPUDP アプリを識別する(w/ポート番号)
インターネット層 IP 最終宛先を識別する(w/IPアドレス)
ネットワークインターフェイス層 イーサネット(LAN) 経由地を識別する(w/MACアドレス)
  • TCP: 確実にデータをやり取りする仕組み。「確認応答」「再送」「シーケンス番号」から成る。
  • UDP: 高速にデータをやり取りする仕組み。動画のリアルタイム配信等に用いられる。
  • イーサネット(LAN): 有線のネットワークで使われるプロトコル。
    • 凸 ← こういう端子がついている機器はイーサネット(LAN)に対応している。
    • 無線LANではIEEE 802.11というプロトコルが使われる。

IPに含まれる
IPアドレスCIDER表記
ルータールーティング ゲートウェイ
踏み台サーバー
等についてはTBE。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?