読者です 読者をやめる 読者になる 読者になる

KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

IPv6とHTTPについて学ぶ

ネットワーク特論1の第8回目の授業内容まとめになります。

AIITのネットワーク特論1を受講しました - KATOエンジニヤリング開発日誌

TCP/IPモデルの役割と標準化を学ぶ - KATOエンジニヤリング開発日誌

レイヤ2のネットワーク機器と通信方式・データ配送方式 - KATOエンジニヤリング開発日誌

ネットワーク層の機器と技術について学ぶ - KATOエンジニヤリング開発日誌

ルーティングと経路制御表の集約計算について学ぶ - KATOエンジニヤリング開発日誌

LDAPとActive Directoryについて学ぶ - KATOエンジニヤリング開発日誌

第8回目の目標

  • 「IPv6誕生の背景」と「IPv6とIPV4との違い」を説明できる
  • ネットワークシステムの実装に必要な知識である下記項目について説明できる
    • ソケット
    • サーバ
    • ウェルノウンポート
  • HTTPプロトコルとFTPプロトコルの下記項目について説明できる
    • 定義
    • 使用ポート
    • 基本的な通信手順
    • HTTP or FTP 通信を使用する際の注意事項について説明できる

IPv6

IPv6誕生の背景

1991年の段階でIPv4アドレスの枯渇問題が危惧されたため、IPv6の基本仕様が1995年にRFC1883で標準化された。

しかし、現在のインターネットは広く普及しているため、IPv4からIPv6へのIPプロトコルの移行は膨大で手間の掛かる作業である。

IPv6ではIPアドレスの枯渇問題を解決するだけでなく、IPv4の不満点の多くを解決するようにしている。

さらに、IPv4とIPv6で相互に通信できるように互換性を持たせるように努力をしている。

  • IPv4
    • 4オクテット(32ビット)
  • IPv6
    • 8オクテット(128ビット)

IPv6の特徴とIPv4との違い

IPアドレスの拡大と経路制御表の集約
  • IPアドレスの構造をインターネットに適した階層構造にする
  • アドレス構造に適するようにIPアドレスを計算的に配布し、経路制御表ができるだけ大きくならないようにする
パフォーマンスの向上
  • ヘッダの構成を簡素化(ヘッダ長を40オクテットで固定)
    • ヘッダチェックサムを省ける
    • ルーターの負荷を減らす
  • ルーターに分割処理をさせない
    • 経路MTU探索*1を利用して送信元のホストが分割処理をする
プラグ&プレイ機能を必須にする

DHCPサーバが無い環境でもIPアドレスを自動的に割り当てる

認証機能や暗号化機能を採用する
  • IPアドレスの偽造に対するセキュリティ機能の提供を行う
  • 盗聴防止機能を提供する
1つのNICが複数のIPアドレスを使い分ける

IPv6でもIPv4のクラスのように、IPアドレス先頭のビットパターンでIPアドレスの種類を区別する。

  • インターネットを介した通信ではグローバルユニキャストアドレスが使われる
    • インターネット内で一意に決まるアドレスで、正式に割り当てられたIPアドレスを使用する
  • 直接インターネットと通信することを想定していないプライベートネットワークではユニークローカルアドレスが使われる
    • 制御系ネットワークなどで使われる
    • IPv4のプライベートアドレスと同じように使える
  • イーサネットの同一セグメント内だけで通信するときは、リンクローカルユニキャストアドレスが使われる
    • ルーターが無いネットワークなどで使われる

IPv6ではこれらのIPアドレスを1つのNICに複数同時に割り当てることができ、必要に応じて使い分けられる。

IPv6のIPアドレス表記方法

  • 16進数、8オクテットで表記する
  • 1つのオクテットごとに先頭の0の並びは省略可能
    • 例:08db -> 8db、0032 -> 32、05a0 -> 5a0
  • 1つのオクテットのビットが全て0の場合には、1つの0として表現できる
    • 例:0000 -> 0
  • 全て0のビットのオクテットが連続している場合は、その間の0を全て省略して2つのコロン(::)に省略可能
    • 例:2001:0000:0000:0000:abcd:bacb:cdca:1111 -> 2001::abcd:bacb:cdca:1111
  • 「::」はアドレス内で1箇所でしか使用できないので、下記のような省略はできない
    • (駄目な例):2001:0000:0000:0000:abcd:0000:0000:1111 -> 2001::abcd::1111
    • (良い例) :2001:0000:0000:0000:abcd:0000:0000:1111 -> 2001::abcd:0:0:1111

ネットワークシステムの実装

ネットワークシステム実装の基礎知識

  • プロトコルと階層構造(TCP/IPネットワーク)
    • コンピュータ同士が通信するためには、通信のルールが必須である
  • TCP/IPネットワーク
    • 複数の物理ネットワーク上に別の新しいプロトコルを被せることで物理ネットワークを跨る仮想ネットワークを作るための階層化プロトコル
      • データリンク層、インターネット層、トランスポート層、アプリケーション層の4つにまとめられ、通常はOSがTCP/IP機能を持つ
      • ソケット:インターネット層とトランスポート層の機能を統合し、アプリケーションがネットワークを使いやすくする
        • UNIX系ではSockets、Windows系ではWinSockと呼ばれる
        • アプリケーション側からみると、ソケットを通してネットワークが抽象化されるため、細かい制御を考える必要がなくなる

f:id:masayuki_kato:20170514115241p:plain

  • ネットワークにおけるサーバの役割
    • 各サービスに割り当てられているサービスポートを用いて通信を行う
    • サービスポートを監視し、クライアントからのリクエストを待つ
    • インターネットにサーバを設置する場合
      • サービスを提供するために必要最小限のポートだけを公開する
        • サーバを構築していく段階で公開する必要がでてきたポートを順次公開していく
      • 不正アクセスの被害を最小限にとどめ、負荷を分散するために、各サーバープログラムを別々のコンピュータで運用するのが理想

ウェルノウンポート

インターネットに接続されたコンピュータは、通信プロトコルであるTCPやUDPを使用する際に、0番から65535番の番号で識別される「ポート」と呼ばれる接続窓口を利用している。

そのうち0番から1023番のポートは特定のサービスやプロトコルが利用するということが広く知られており、インターネットで公開されるサーバはその番号を当該サービスやプロトコル利用することが推奨されている。

必ずしもウェルノウンポートを使用しなければ通信できないというわけではなく、HTTPのプロキシサーバなど、特殊用途のためにわざと別のポート番号を利用する場合もある。

サーバの構築(UNIXの場合)

  • 以前のUNIX環境(2000年くらいまでの話)
    • OSをインストールしただけでは必要な作業環境は充分に用意されていない
    • よく利用されるサーバープログラムはソースファイルで提供されるものが多く、Cコンパイラが必要であった
  • 現在のUNIX環境
    • サーバープログラム自体が当初からインストールされている
    • インストールされていなくてもパッケージとして容易に導入できる仕組みが用意されている
    • コンパイル環境も提供されている
  • 初期設定として下記の項目は行う必要がある(CentOSの場合で例示)
    • ファイアウォールの設定
      • Netfilterでパケットフィルタリングルールを定義する
      • 構築段階ではすべてのポートを閉じておく
    • SELinux
      • カーネルに組み込まれているセキュリティ強化機能の1つ
      • サーバやアプリケーションなどの実行プロセスごとにシステムリソールへのアクセスをきめ細かく制御可能
    • システムクロックの調整
      • イベントが発生した際に、ログに記載される時間と実際に発生した時間にズレが生じる
    • ユーザアカウントの作成(作業用の一般ユーザアカウント)
    • アップデートを適用してシステムを最新の状態にする

特定の機能を提供する一連のプログラムをまとめたものをパッケージと呼ぶ。

単一のアーカイブを介して配信される。

大抵のUNIXシステムにはパッケージを管理するユーティリティが備わっている。

これらのパッケージをアップデートすると今まで動作していたシステムに影響がでて、最悪動作しない場合もある。

アップデートする際には充分な調査が必要である。

HTTP

概要

  • WWWとは
    • World Wide Webの略
    • 情報の提供手段のひとつ
    • 世界中に張り巡らされたネットワーク上にある情報をクモの巣のように関連付ける
  • 歴史

    • 1989年にTim Berners Lee氏が研究所内の論文閲覧システムとして考案した
    • 1991年に仕様が公開される
    • 1993年に世界初のウェブブラウザであるMosaicが開発される
  • WWWサーバー(Webサーバー)とは

    • インターネットに公開された情報にアクセスする手段として利用されている
      • WWWサーバー:Webページのドキュメントを送信
      • WWWクライアント(ブラウザ):見たいWebページをリクエスト
    • 提供する情報は、テキストデータ、音声、静止画、動画など
    • クライアント / サーバーモデルのシステムを構築するためにWWWサーバーの仕組みを利用することがある

主な機能

  • 共有情報の作成方法
    • HTML(Hyper Text Markup Language)で記述
      • HTML:Webページを記述するためのマークアップ言語
    • W3Cが標準化を行う
      • W3C:WWW関連技術の標準化団体
    • ハイパーテキストのリンクを辿りながらWebページを表示するプログラムがWebブラウザ
  • 情報を提供するサーバ
    • HTML文書や画像などの情報を蓄積している
    • Webブラウザなどのクライアントの要求に応じて、蓄積している情報をインターネットを通じて送信する役割を持つ
  • 通信方法(HTTP)
    • WebブラウザとWebサーバの間でHTMLなどのコンテンツをやり取りする際に用いられる通信プロトコル
  • 情報の関連付けとしてのリンク機能(ハイパーリンク)
    • テキストファイルや画像データ、音声データ同士を文章中で相互に結び付ける仕組み
    • Webページに埋め込まれた、他のWebページのURLへジャンプする仕組みとしてよく用いられている
  • 情報場所の指定方法(URL)
    • インターネット上に存在する文書や画像などの情報資源の場所を特定・識別するための記述方式
    • URL(Uniform Resource Locator)は通称であり、正式な用語はURI(Identifier)である
    • 例:[プロトコル名]://[ホスト名]/[ファイル名]/

プロトコル

基本的な通信手順としては、TCPでWebサーバの80番ポートにコネクションを張り、Webブラウザが「要求メッセージ」を送るとサーバ側が「応答メッセージ」を返すこと。

Webブラウザ側、サーバ側の各メッセージは下記のように構成されている。

f:id:masayuki_kato:20170514134309p:plain

  • 要求メッセージ
    • 複数の行で構成されたテキストデータ
    • リクエスト行
      • Webサーバに何をしてほしいかを示す
      • メソッド、リクエストURI、使用するHTTPのバージョンが記載される
        • 例:GET /index.html HTTP/1.1
    • メッセージヘッダ
      • 付加情報、ブラウザ自身の情報など
    • メッセージボディ
      • 必要な場合に記載される
メソッド 内容
GET リクエストURIで示すリソースの取得
HEAD GETと同様だが、サーバ側にレスポンス行とヘッダのみを送信させる
POST メッセージボディのコンテンツをサーバに受け取らせる
PUT メッセージボディのコンテンツを格納(または置き換え)
DELETE リクエストURIで示すリソースの削除
  • 応答メッセージ
    • レスポンス行
      • 要求をサーバ側で処理した結果
      • HTTPの使用バージョン、状態コード、理由文字列が記載される
        • 例:HTTP/1.1 200 OK
    • メッセージヘッダ
      • Webサーバの情報、データのタイプなど
    • メッセージボディ
      • コンテンツ
状態コード 意味
1xx 要求が受信されて処理を継続中 100 Continue
2xx 動作が正しく受信・解釈・受諾された 200 OK
3xx 要求を完了するために別の動作が必要 301 Moved Permanently
4xx クライアント側のエラー 404 Not Found
5xx サーバ側のエラー 503 Service Unaveilable
  • 通信効率を上げる技術

    • キープアライブ
      • 応答メッセージを受け取った後に同じTCPコネクションで続けて別の要求メッセージを送ることができる
      • 要求メッセージのヘッダにヘッダフィールドを追加
    • パイプライン
      • 応答メッセージを待たずに次の要求メッセージを送る
    • データ圧縮
      • メッセージボディ部分を圧縮する
      • compress、gzipなどが利用できる
  • メッセージヘッダの役割(要求 / 応答メッセージに関する付加情報)

    • 一般ヘッダフィールド
      • メッセージボディに含まれるデータの実体には関連しないもの
    • リクエストヘッダフィールド
      • 要求メッセージに適用される情報
      • 主にWebブラウザの情報
    • レスポンスヘッダフィールド
      • サーバの情報や応答結果に関する情報が格納される
    • エンティティヘッダフィールド
      • コンテンツの実体についての情報を格納する
  • 状態管理

    • HTTPは基本的には、クライアントが要求メッセージを送り、サーバから応答メッセージを受け取るだけの仕組みである
    • 現在のWebサービスでは状態を把握したいことが多い
      • 通販サイトで商品をカートに入れ、決済画面に遷移したい など
      • クッキー(Cookie)を利用する
    • クッキーの仕組み
      • HTTPの拡張ヘッダフィールドの1つとしてやり取りされる

f:id:masayuki_kato:20170514142008p:plain

  • Cookie(クッキー)の応用と注意点
    • 応用
      • Webサイト内でのユーザの振る舞いを追跡できる
      • 広告ページがどれだけ参照されたかをチェックできる
    • 注意点
      • 通信経路の途中で情報が盗まれる可能性があるので、適切な暗号処理を行う
      • サードパーティクッキーを受け入れない、ブラウザ終了時に消去する
      • 重要な情報はサーバ側で保管し、クライアント側では保管しないようなWebサイト設計を行う

FTP

概要

  • FTPとは
    • ネットワーク上でファイルの転送を行うための通信プロトコル
    • OSに依存しないマルチプラットフォームでの動作が考慮されている
  • 歴史
    • 1970年頃、FTPの前身が実現される
    • 1973年:最初のFTP仕様である、RFC454が発表される
    • 1985年:現在のFTP仕様となる、RFC959が発表される、TCP/IPへの対応

主な機能

  • 制御コネクション(21/TCP)
    • コマンドとその応答をやりとりする通信経路
    • ユーザ認証、パスワード、リモートディレクトリ変更、ファイルのアップロード、ダウンロードを行う
    • セッション中は接続を継続する
  • データコネクション(20/TCP)
    • データ送受信のための接続経路
    • ファイルの転送ごとに新しく接続を行う

f:id:masayuki_kato:20170514142956p:plain

主な設定項目

  • PASV
    • プライベートIPアドレスから接続するための仕組み
      • プライベートIPアドレスではポートが閉じていて使えないことがあるため
    • データ転送のポートをクライアントが指定する
  • ポート
    • FTPで使用するポートは通常20番と21番であるが、セキュリティの観点から別のポート番号に割り当てることもある
  • データ転送モード
    • ストリームモード、ブロックモード、圧縮モード など
  • ファイルタイプ
    • 転送するファイルタイプ
      • ASCII(テキスト)、バイナリ(テキスト以外)
    • ファイルタイプを設定するのは昔の話

*1:通信用に細切れにされたデータが1回も分割されないで目的地に到着できる大きさを調べる