学習15日目:インターネットの基本をおさらい。

今日の学習時間。

  • Day:15
  • Today:3h
  • Total:97h

学習内容について。

Web用の通信プロトコル「HTTP通信」。

  • HTTPリクエスト
    • WebブラウザがWebサーバに対して出すリクエスト
      • HTTPリクエストメッセージをWebサーバに向けて送ること
  • HTTPレスポンス
    • WebサーバがWebブラウザのHTTPリクエストに対して返すレスポンス
HTTPリクエストメッセージの一般形式
メソッド URL HTTPのバージョン
ヘッダ部(付加情報)
(空行)
ボディ部
GET /docs/info/terms/ HTTP/1.1
Host: about.yahoo.co.jp
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: https://news.yahoo.co.jp/
Accept-Encoding: gzip, deflate, br
Accept-Language: ja,en-US;q=0.9,en;q=0.8
Cookie: ...=...; ...
  • GET:メソッド
    • 読み込みを意味するメソッド
  • GET /docs/info/terms/:URLのパス
    • 該当のパスを読み込む
  • HTTP/1.1:HTTPのバージョンが1.1

上記の形式でリクエストを出すことがHTTPという通信規約(プロトコル)で決まっている。

HTTPレスポンスメッセージの例
HTTPのバージョン ステータスコード ステータス
ヘッダ部(付加情報)
(空行)
ボディ部
HTTP/1.1 200 OK
Server: ATS
Date: Fri, 03 Aug 2018 05:24:43 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 5387
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p_jp.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Vary: Accept-Encoding
Content-Encoding: gzip

<!DOCTYPE html>

<html lang="ja">
<head>

<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
(以下、Webページのコンテンツが続くので省略)
  • HTTP/1.1:HTTPのバージョン
    • 以降のメッセージ形式を最初に知らせる
    • HTTPは、Web用の通信プロトコルを示している
  • 200:ステータスコード
    • リクエストに対してサーバがどう反応したかを示す番号
    • 今回の場合200は正常に動作したことを示す
  • OK:ステータス
    • ステータスコードと対応するステータスも文字列として返ってくる
    • 200の場合はOKの文字列
  • ヘッダ部
    • サーバ情報やレスポンスデータの情報
  • ボディ部
    • GETメソッド(読み込み用メソッド)に対するレスポンス
    • <!DOCTYPE html>)以降が実際のWebページ

インターネット上のリソースの住所「URL」。

  • Uniform Resource Locatorの略称
    • 統一資源位置指定子
  • インターネット上のリソース(資源)の位置を特定するために使用される文字列
    • 住所のようなもの
  • URLに似た用語としてURIがある
    • 意味はほぼ同じ
    • Uniform Resource Identifierの略称
    • 統一資源位置識別子
    • 公式にはURIと呼ぶ方が正しい
(httpなどのプロトコル名):(プロトコルごとに定められた形式)

上記がURLの一般形式。

プロトコル名
  • http
  • https
  • ftp
    • File Transfer Protocolの略称
    • ネットワーク上でファイル転送を行うためのもの
  • mailto
    • メールの宛先を表す
    • 通信プロトコルではないがURLの一種
  • file
    • 自分のコンピュータ内のファイルを表す
    • 通信プロトコルではないがURLの一種
HTTPのURLの構成
http://ホスト名.ドメイン名:ポート番号/パス
ホスト名ネットワーク上のコンピュータにつける識別用の名前
ドメイン名インターネット上のネットワークを特定するための住所
ポート番号通信する番号
HTTPのプロトコルは80番
ポート番号は省略できる場合がほとんど
パスコンピュータ内のファイルの位置を表したもの
/によってフォルダ名を区切る

インターネット上にあるコンピュータの住所「IP」。

  • Internet Protocolの略称
    • インターネットのための通信プロトコル
  • IPアドレスはインターネット上にあるコンピュータの住所を特定するもの
  • URLはIPアドレスへ変換される
    • HTTPリクエストメッセージはIPによって運ばれる
  • IPアドレスは、0~255(2の8乗=256通り、8ビット、1バイト)の数字が.区切りで4つ合わさった形
    • 例:172.217.161.35
    • 約43億通り
    • 上記はIPアドレスの中でもIPv4と呼ばれる仕様
    • 現在は約43億の住所パターンの空きが急速に減ってきたためIPv6という新しい仕様も登場
  • IPアドレスが重複することはない
  • ホスト名+ドメイン名は特定のIPアドレスに対応している
    • ホスト名+ドメイン名のことをFQDN(Fully Qualified Domain Name)と呼ぶ
  • FQDNのIPアドレスが判明するにはDNS(Domain Name System、ドメイン・ネーム・システム)が必要
  • FQDNからIPアドレスを取得する操作を名前解決と呼ぶ
  • DNSサーバがなければURLにアクセスできない
    • IPアドレスをURL欄に入力する必要がある
名前解決の手順
  1. WebブラウザのURL入力欄に入力してアクセス
  2. DNSサーバにリクエストを送信
  3. DNSサーバはその対応表を持っているのでレスポンスとして返す
具体的な名前解決(当サイト)
  1. ルートDNSサーバにリクエストを送り、レスポンスとしてmodaのDNSサーバのIPアドレスを受け取る
  2. 次はmodaのDNSサーバにリクエストを送り、レスポンスとしてkiki.modaのDNSサーバのIPアドレスを受け取る
  3. 最後にkiki.modaのDNSサーバにホスト名を聞いて、そのIPアドレスを受け取る
  4. Webサーバへアクセス

※実際の名前解決においては、キャッシュサーバが直接の問い合わせを行う。

グローバルIPアドレスとプライベートIPアドレス
  • IPアドレスはネットワーク上で個々のコンピュータを特定するための番号
  • しかし、厳密には1つの小さなネットワークに対して1つのIPアドレスが与えられている
    • グローバルIPアドレス
    • インターネット上では唯一のIPアドレス
  • 上記内、個々のコンピュータに与えられているIPアドレス
    • プライベートIPアドレス
    • インターネットに直接繋げることはできない
  • インターネット上から1つのコンピュータを特定するためには2つのアドレスが必要

プライベートIPアドレスはネットワークの外に出るとグローバルIPアドレスに書き換わるという欠点がある。これを解決するための方法が下記のポート番号。

ポート番号
  • NAPT(Network Address Port Translation)
    • IPマスカレードとも呼ぶ
  • ポート番号
    • 宛先ポート番号
      • HTTPの場合はある程度決まっている
    • 送信元ポート番号
      • 決まっていない
  • NAPTは、送信元ポート番号を利用してグローバルIPアドレスからコンピュータを特定する

利用頻度の高い通信プロトコル(HTTPとIP)のポート番号(ウェルノウンポート番号)は正しい使用目的で使う場合、その記述を省略できる。

階層構造の階層「TCP/IPモデル」。

  • TCP/IPモデル
    • 階層構造になっている、その階層
    • 現在のインターネットを介したアプリケーション間の通信を成り立たせている
    • 明確に役割が分担され、各通信プロトコル自身が責任を持つ範囲を小さくするメリット
      • 他の階層に影響を与えず改良できる
TCP/IPモデルの階層構造
  • アプリケーション層
    • アプリケーション同士がデータをやり取りするための通信プロトコル群
    • アプリケーション毎に送受信するデータの形式が違う
    • HTTPはWeb用データを送受信するためのプロトコル
    • SMTP, POP, IMAPはメール送受信のためのプロトコル
  • トランスポート層
    • アプリケーションがちゃんとデータを送れるように通信路を確保する(下記例)
  • インターネット層
    • 複数のネットワークを相互に接続した環境で、個々のコンピュータ間のデータ送受信を実現する(IP)
    • ルータを使用(下記例)
  • データリンク層
    • 物理層で直接接続された機器間の通信を可能にする
    • LANボードなどの機器を制御・識別し、そのための伝送路を確保
  • 物理層
    • 回線やケーブルなどで物理的に電気信号を送れるようにする
    • 光ファイバケーブルや海底ケーブル
トランスポート層
  • TCP(Transmission Control Protocol)
    • コネクション型の通信プロトコル
    • 信頼性が高い
    • 通信開始するまでに手間がかかる
    • 通常のインターネット通信で利用されている
  • UDP(User Datagram Protocol)
    • コネクションレス型の通信プロトコル
    • 高速通信が可能だが、信頼性は低い
    • 音声通話やビデオ通話などに利用されている
      • 途切れたりするのはUDPが原因
ルータ
  • ネットワークのIPアドレスは変更されることがある
    • 変更されるタイミングはインターネットサービスプロバイダ(ISP)による
  • ルータを使うことでIPアドレスが変更されても同じコンピュータへ通信できる
    • ネットワークとネットワークを繋ぐための機器
    • IPアドレスを利用して、データを目的のコンピュータまで届ける
      • ルーティングテーブルと呼ばれる情報を持っている
    • データをバケツリレー形式で運ぶ

もう一つの階層構造「OSI参照モデル」。

  • 国際規格の通信モデル
    • ネットワークのしくみを勉強するためのモデル
    • TCP/IPモデルによってインターネットが成立している
  • 理論的なアプローチで作られた
    • TCP/IPモデルは実践的なアプローチ
OSI参照モデルの階層構造
  • アプリケーション層
    • アプリケーションの種類やサービスに関する規定
  • プレゼンテーション層
    • データの種類・表現形式や送信ビット数に関する規定
  • セッション層
    • 通信モードや同期方式に関する規定
  • トランスポート層
    • 信頼性の確保やアプリケーション識別に関する規定
  • ネットワーク層
    • 通信経路や中継経路の選択、識別アドレスに関する規定
  • データリンク層
    • 通信路の確保や伝送制御手段、エラー訂正に関する規定
  • 物理層
    • 物理的な回線や機器類、電気信号に関する規定

「標準化団体」。

  • IETF
    • Internet Engineering Task Force
    • TCP/IPモデルや、HTTPなどのプロトコルの標準化を策定
      • これらはRFC(Request For Comments)という名前で文書化、保存
    • 誰もが議論に参加できる(英語)
    • TCP/IPモデルの策定
  • ISO
    • International Organization for Standardization
    • 国際標準化機構
    • 各国の代表機関が議論を繰り広げて標準を策定
    • OSI参照モデルの策定

設計方法の1つ「RESTアーキテクチャ」。

  • REST
    • REpresentational State Transferの略称
    • アプリケーションの設計方法(アーキテクチャ)の1つ
    • リソース(操作の対象)をURLを使って表す
    • HTTPメソッド(主にGET、POST)を使って操作を行う
  • RESTful
    • RESTにもとづいて設計されたWebアプリケーション
    • URLは、リソース名を用いる
RESTを構成するアクション
  • index
    • 登録済みのリソースを一覧表示する画面
  • show
    • リソースの詳細な情報を表示する画面
  • new
    • 新しいリソースの入力画面(フォーム)
  • create
    • 新規登録処理(INSERT)
  • edit
    • 既存のリソースの編集画面(フォーム)
  • update
    • 変更処理(UPDATE)
  • destroy
    • 削除処理(DELETE)

「MVCとルーティング」。

  • MVCパターン
    • Model – View – Controllerパターンの略称
    • 理想的なWebアプリケーションの構築構造
    • プロジェクトで複数の機能を別々に実装したり、複数人で共同作業したりすることが可能
    • 保守作業も容易
  • 設計パターン
    • Model
      • データを扱う部分
    • View
      • 表示を行う部分
    • Controller
      • リクエストを処理して結果を返す部分

今日の反省と明日の目標。

今日は知っているようで実は実態を掴めていなかったインターネットの基礎について学び直しました。改めて思うことは、この仕組みを作った人たちが凄すぎるということです。第一、インターネットがなければ、こうやってオンライン学習もできなかった訳で、今ごろ全く違ったことをしていたのだろうと思います。

そんな複雑な仕組みの中にも先人たちの苦悩や苦労が織り交ぜられていることを思えば、ただ覚えるだけの私が弱音を吐くことは許されない。まあ、実際は今日の学習内容は楽しかったのですが。この分野は突き詰めていけば、コンピュータサイエンスにどっぷりハマることになるので後回しにしますが、非常に興味深い分野なので趣味としてでも学習していきたいです。

ところで、明日から話題のGotoキャンペーンを利用して旅行に出かけるので、キリが良いところまでで終えました。移動時間を使って、Javaの本でも読み進める予定です。それからは遂にサーブレット / JSPに入っていくので楽しみ。

閉じる