マスタリングTCP/IP
23.2
大学の教科書
2012年刊行、第5版だが多分大体一緒だと思う
350Pくらいなので、1日12ページくらい読めば1ヶ月で読み切れる
序文
情報化社会で、日本国内であればどこでも情報をやり取りできる。
その通信を実現できる環境をネットワークと呼び、最も使われている通信手段(プロトコル)がTCP/IP
TCP/IPが登場する前まではコンピューターを接続して、限られた機器感でのみ通信ができた。
今では車やカメラ、家電製品もTCP/IPで接続ができる。
1 ネットワーク基礎知識
コンピューターの普及
ラップトップやスマホ、音楽製品など
スタンドアロンからネットワーク利用の形態になってきた
複数のコンピューターを互いに接続して使うコンピューターネットワークが考え出された
Wide Area Network 地理的に離れた広範囲のネットワーク
都市レベルのものなら、MAN(Metropolitan...)と呼ぶこともある
Local Area Network
フロア内など狭い範囲のネットワーク
初期のコンピューターネットワーク
特定のコンピューター同士を接続したものを指していた
コンピューター同士という狭い範囲だったものが、インターネットによってどの端末とも通信ができるようになった
コンピューターとネットワークの発展の7つの段階
バッチ処理の時代(1950~)
処理するプログラムやデータをまとめて一括で処理すること
昔はプログラムデータを記録し、それをコンピューターのあるデータセンターに持ち込んでいた
作業も専門家がやるとか、すぐに結果が出ない場合は後日出向くとか。
コンピューターは大規模な計算をするための機械で、便利というカテゴリではなかった
タイムシェアリングシステムTSS(1960~)
1つのコンピューターを複数端末に接続し、複数のユーザーが同じコンピューターを扱える
高価なものだったので、仮想的に1人1台使ってる感覚になれた
この頃から対話式のような操作ができるようになった
BASICという初学者向けプログラミング言語が開発された。
COBOL.FORTRANなどの言語はバッチ処理が前提だった
コンピュータ間通信(1970~)
PCの小型化が進み、価格も安くなっていった
研究機関だけでなく企業にも導入され始める
PCとPCを通信する技術が生み出された
これまでは記録媒体で輸送指定ものを、通信回線で接続できるようになった
安価になったおかげで、1台のPCで一括で処理していたものを複数のPCで分割して処理できるようになった
コンピューターネットワークの登場(1980~)
コンピューター間通信が進み、バケット交換や異なるメーカーでも相互通信ができるようになった
1980年代になると、色々な種類のコンピューターを相互接続できるコンピューターネットワークが誕生した。
ウインドウシステムが誕生した
画面上で複数のアプリ(窓)を開くことができる。
インターネットの普及(1990~)
情報処理系の企業や大学では個人ごとにPCが支給されるようになってきた。
ダウンサイジングが流行った
90年代後半のPCはこれまでの大規模なPCと同等のスペックを持った
大型のメインフレームで行われていた企業の業務をPCやUNIXに置き換える動きが活発になった。
メインフレームとは企業や政府などの組織で業務処理を行うコンピューター
マルチベンダ接続が流行った
色々なメーカの機器やソフトウェアを組み合わせてネットワークを構築すること
インターネットメール、WWWでの情報発信馬ブームになった
家庭にも普及し始めた
企業は各社独自のネットワーク技術をインターネット技術に対応させるようになった
一般家庭用のネットワーク機器が売られ始めた
インターネット技術中心の時代へ(2000~)
従来の通信を支えたのは電話網だったが、立場が逆転している
電話網の代わりにIP網が用意され、そこで電話やテレビ放送が実装されている
ネットワークに繋がる機器もコンピューターだけでなく、家電やゲーム機など広がっている
つなぐ時代から、安全につなぐ時代へ(2010~)
コンピューターウイルスによる被害や個人情報楼家などが問題になってくる
通信の仕組みを理解して自己防衛しよう
全ての鍵を握るTCP/IP
インターネットはさまざまな通信技術を組み合わせたものだが、それを実現する応用力があるのがTCP/IP
TCP/IPは通信プロトコルの総称。
プロトコル
IP, TCP, HTTPなど
体系的にまとめたものをネットワークアーキテクチャということもある
TCP/IPも、プロトコルの集合体
TCP/IP以外にも、IPX, AppleTalkとか色々ある
かつてMac OSに標準で搭載されていたネットワーク機能および通信プロトコル
なぜ必要か
プロトコルはPC間がネットワーク通信する際の約束事
メーカーが違うものでも、同じプロトコルなら通信できるので便利
言語のようなもの。人種(機器)が違っても言語(プロトコル)が分かれば対話できる。
コンピューターのプロトコル
人間なら身振り手振りである程度柔軟に対応できるが、機械はコードの形状など物理的なものからソフトウェアレベルまで約束事を決めないといけない
通信が途中で障害が起きた場合など、きめ細かく決める。これがプロトコル
パケット交換
大きなデータをパケット(小包)と呼ばれる単位に分割し送信する方法
データを分割したバケットに、送信元と宛先のコンピュータアドレスを書き込み送る
これがヘッダ
また分割した場合は元データのどの部分だったかの番号も振られる。
通信プロトコルがその情報を細かく処理してデータを正しく解読してくれる
プロトコルは誰が決める?
初めは特にプロトコルなどは意識されていなかった
利用者は同じメーカのものを買わないといけなかったので不便
これによってマルチベンダ化が進む。
プロトコルを標準化するため、ISO(国際標準化機構)はOSIと呼ばれる通信体系を標準化した。
OSIの定めるプロトコルは普及しなかったが、設計指針のOSI参照モデルはプロトコルを考える時に引き合いに出される。
ちなみにTCP/IPはISOの国際標準ではないが、デファクトスタンダードである
プロトコルの階層化
OSI参照モデルを提唱し、通信に必要な機能を7つの階層に分けた。
各階層は下位層からサービスを受け、上位層にサービスを提供する
サービスのやり取りをするときの約束事をインターフェース
通信相手の同じ階層とやり取りするときの約束事をプロトコルと呼ぶ
階層化することで、各階層を独立なものとして扱える
日本語を固定電話を通して会話する、という例の場合、日本語層と固定電話層があると仮定してみる
日本語を無線機を通して会話してもいいし、英語を固定電話を通して会話してもいいなど、自由に変えられる感じ
OSI参照モデル
パケット通信のプロトコルを階層化したモデル。
7. アプリケーション層
6. プレゼンテーション層
5. セッション層
4. トランスポート層
3. ネットワーク層
2. データリンク層
1. 物理層
OSI参照モデルは、各層で何をするかという役割を定義するもの
各層の役割を定義しているのがプロトコル
プロトコルは仕様であり、その仕様に準拠した製品・通信手段をユーザーは利用している
ただあくまでもモデルのため、詳細を決めるものではない
設計するときのガイドライン的なもの。
多くの通信プロトコルは、この7階層のどれかの層に当てはめて考えることができる
各層の役割について
7. アプリケーション層
特定のアプリに特化したプロトコル
ファイル転送や遠隔ログイン、電子メールを実現する
6. プレゼンテーション層
アプリが扱う情報を通信に適したデータ形式に変換したり、下位層から来たデータを上位層が処理できるデータに変換するための層
機器固有のデータフォーマットを、ネットワーク共通のデータ形式に変えたりと整合性を保つ
5. セッション層
通信の確率や切断、転送するデータの切れ目の設定など
データ転送に関する処理を行う
4. トランスポート層
宛先のアプリケーションにデータを確実に届ける。
データに抜けがないかの信頼性を上げる役割など。
3. ネットワーク層
宛先までデータを届ける役割。
ルーターなどを確認し、どの経路を使うかなど。
2. データリンク層
物理層で直接接続された機器間でのデータフレームの生成と転送を行う
01で書かれた数字の列を意味のある塊(フレーム)に分けて相手に伝える。
1. 物理層
ビット列(01)を電圧の工程や光の点滅に変換、もしくは光の点滅をビット列に変換する。
コネクタやケーブルの形状の規定を持つ。
実際の例
の前に
ホストという単語について
今回の例だとネットワークに接続されたコンピューターのこと
またOSIの用語では通信を行うコンピューターのことをノードと呼ぶ。
TCP/IPの用語ではホストと呼ぶ
7階層の通信
送信側は、7 -> 1の順でデータが伝えられる
ルーターが1 > 2 > 3 > 3 > 2 > 1という順で受信側へデータを送る
受信側は1 -> 7の順でデータを受信するイメージ
AさんがBさんに向かって「おはよう」と投げるメールの例
メールソフトでで宛先と送り主、メッセージが記入され送信された時
7層アプリケーションプロトコルの処理が始まる
送信側: 本文の情報や宛先の情報を示すヘッダが付与される
受信側: ヘッダとデータを解析し、メールを記憶媒体に保存する
容量が足りない場合はエラーを返すなど、こういった処理も7層の役目
6層
プレゼンテーション(表示・提示)という意味合いの通り、データの表現形式を意味する
コンピューターシステムの種類によってデータの表現形式は異なる
またソフトによっても異なる
excelで作ったファイルは、numbersだとちょっとズレたりするとか。
同じことがメールで起こったら同様に不便なので、この層で改善する
送信するデータをコンピューター固有の表現から、ネットワーク全体で共通の表現方式に変換する
受信側はネットワーク全体で共通のものを、再びコンピューター固有の表現に戻す
プレゼンテーション層はこれを相互に行い整合性をとる役目。
今回の例だと「おはよう」という文字を、UTF-8などいろいろなネットワーク共通方式に変換という感じ
いろいろな符号化形式があるので、正しくできないと文字化けする
データを識別するためにヘッダがつけられる。実際の転送はセッション層に任せる。
5層
両方のホストのセッション層間で、どうデータを送れば効率が良いかをやりとりする
電子メールが5通あったとして、
1件ずつコネクションを繋ぎ、遮断して2件目を送って...とか
1つコネクションを繋いで5件送るとか
一度に5件のコネクションを確立して送るとか
この層でも何らかのタグやヘッダが付けられ、階層にデータが渡される
4層
今までのおさらい
7層でデータが書かれ、6層で符号化され、5層で送信手順を決めた。
実際にデータ送信を行うのがトランスポート層
ホスト間ので通信経路を確保し、データ送信の準備をする
これがコネクションの確立
また、通信が終わった後に確立したコネクションを切断する
コネクションの確立や切断の処理を行い、ホスト間の論理的な通信手段を作る役割
なお確立や切断をいつするか、タイミングを決めるのはセッション層
またデータが確実に相手に届いたか、届かなかった場合再送するかどうかも決める
今回の例だと、Aが「おはよう」と送る
Bに「おは」までしか届いていなかったら、Aに向けてそれ以降は受け取っていないということを伝える
Aが「よう」をもう一度送り、また正しく送付できてるか確認するイメージ
3層
実際にデータを相手まで届ける処理の担当
ネットワークとネットワークが接続された環境で、送信ホストから受信ホストまでデータを配達する。
2層がどれだけ複雑でも(どれだけの機器が挟まっていても)、エンドツーエンドの通信を実現する
送る時には宛先の住所(アドレス)が必要
通信を行う全世界のネットワークで一意に決まる番号が使われる
アドレスをもとにして、ネットワーク層でパケットの配送処理が行われる
上位層から渡されたデータに、アドレス情報をつけてデータリンク層へ送られる
2層
通信を行う際は、物理的な通信媒体(ルーターなど)を介して行われる
通信媒体同士で直接接続された機器同士でデータのやり取りをできるようにする役割
ネットワーク層はエンドツーエンド(最終目的地)のデータ配達を担うが、データリンク層は1区間のデータ配達を担う。
1層
データの0/1を電圧・光のパルスに変換して物理的な通信媒体に流し込む
直接接続された機器間でもアドレスが利用されることがある
MACアドレス、物理アドレス、ハードウェアアドレスと呼ぶ
同じ通信媒体に接続された機器を識別するためのアドレス
MACアドレスの情報を含むヘッダがネットワーク層から渡されたデータにつけられ、実際のネットワークに流される
通信ネットワークに必要な機能は階層化して考えることができる
各階層の役割を担うプロトコルにはヘッダのデータフォーマット、ヘッダやデータの処理手順が定義されている
通信方式の種類
コネクション型
データのやり取りの前に、送信ホストと受信ホスト間で回線接続を行う
通信の前後にコネクションの確立と切断処理を行う必要があるが、相手が通信できない場合無駄なデータを送らずに済む
コネクションレス型
コネクションの確立と切断処理が無い。
送信したいコンピューターはいつでもデータを送信できる
パケット交換であることが多いので、このデータ=パケットと捉えて良い
受け取る側は、いつ誰からデータを受信するかわからない
受け取っていないかどうか常に意識しておく必要がある
郵便配達みたいなもの。郵便物を受け取るかどうか確認せず送信する形になる
不便なように思えるが利点もあり、低コストにできたり単純な処理にできる
回線交換とパケット交換
現在のネットワークで大きく通信方法を分けると、この2つ
回線交換は電話で利用された方式、パケット交換は1960年代から認められ始めた方式
TCP/IPはパケット交換
回線交換
交換機がデータの中継処理をする
PCは交換機に接続され、交換機間は複数の通信回線で接続される
通信したい場合は交換機を通して目的のPCとの間に回線を設定する(コネクションの確立)
コネクションが切れるまで占有して使える
2台程度なら問題ないが複数のPCがあった場合、送受信を行った場合他のPCが使えなくなる
いつ終わるかもわからない
パケット交換
データをパケットで細分化することで、各PCが一斉に送受信できるようになった
パケットにヘッダがあり、そこに自分/相手のアドレスが記載されている
1つの回線の中で色々なデータがあっても、どの通信かを区別できる
パケット交換機によって通信回線が結ばれる
これがルーター
PCからはデータがパケットとして送信され、ルーターが受け取る
ルータにはバッファと呼ばれる記憶領域があり、流れてきたバケットをバッファに格納する
パケットは待ち行列(キュー)を作りながらパッファに格納される
パケット交換の場合、PC/ルーター間には通常回線が一つしかないので共有して使う形になる
交換の差異について
回線交換は通信の速度が常に一定
パケット交換はネットワークの混雑度によって、通信速度が異なる
ルーターのバッファが一杯になるケースがある
この場合、パケットが喪失してデータにロスが生じる形になる
通信相手の数による通信方式の分類
ユニキャスト(1体1)
ブロードキャスト(同じデータリンク内の全てのコンピュータ)
不特定多数の相手に向かって行う、テレビ放送みたいなもの
マルチキャスト(特定のグループ宛)
ビデオ会議など。
エニーキャスト(特定のグループのいずれか1つ)
特定のものから最適な条件を持つ対象が選別され、送付される
選別された相手からユニキャストで返信があり、以降はそちらで行われる
DNSのルートネームサーバーなどはこれ
アドレスについて
通信の送受信先を特定するもの
プロトコルの各層で、異なるアドレスが使われている。
TCP/IPならMACアドレス、IPアドレス、ポート番号、メールアドレスもそう
アドレスは唯一性(ユニーク)を持たないとならない
また、IPアドレスに限っては階層性を持つ
MACアドレスはNIC毎に製造番号などが付与され唯一性が担保される
ただし、どのNICがどこで使われているかを特定はできない
IPアドレスはネットワーク部とホスト部という2つの部分からなる
ホスト部が異なるIPでも、同じネットワーク部を持つものは同じ組織で接続されている
ネットワーク部は組織・プロバイダなどで集約ができるのでアドレスが探しやすい
アドレスとネットワークとの関係
各パケットの宛先アドレスを見て、どのネットワークインターフェースから送るかを決める
アドレス毎に送出インターフェースを記したテーブルを参照する
MACアドレスの場合はフォワーディングテーブル
IPアドレスの場合はルーティングテーブル
転送表にはMACアドレスの場合は素で書かれるが、IPアドレスはネットワーク部が書かれる。
ネットワークの構成要素
通信媒体とデータリンク
PC間をどうやって接続するか
ツイストペアテーブルや光ファイバー、同軸、シリアルケーブルなどがある
利用するデータリンクの種類によって使用するものが変わる
データリンク
今回直接接続された機器間で通信するためのプロトコルを指す言葉
データリンクの名前とケーブル
イーサネット: 同軸・ツイストペアケーブル・光ファイバー
10MBps~10G, 100Gなどなど
無線: 電磁波
数Mbps
ATM: ツイストペア・光ファイバー
25Mbps, 155Mbps, 622Mpbs
FDDI: ツイストペア・光ファイバー
100MBps
フレームリレー: ツイストペア・光ファイバー
遅め。64kbps~1.5Mbps
ISDN: ツイストペア・光ファイバー 遅め。
64kbps~1.5Mbps
bps(Bits per Second)
2つの機器間を流れるデータの物理的な速度
この値が大きい場合、流れる速度が変わるわけではなく短い時間でより多くのデータを送ることができるということ
帯域とも言われ、一度に通れるデータの幅が広いというイメージ
実際にやりとりされる転送速度をスループットとよび、こちらもbpsで表すことができる
スループットは帯域だけでなく、CPUの能力やパケット中にデータが占める割合なども考慮して数値化される
ネットワーク機器の相互接続について
各メーカーがプロトコルを合わせないと通信が行えない
ATMや無線LANが登場した頃は、相互接続性にかなり問題があった
今はマシだが、それでも多少ある
機器の種類について
ネットワークインターフェース
NICなどケーブルの挿し口のこと。
PCならイーサネットの1000BASE-Tなどが有名
リピーター
物理層で使う、ネットワークを延長する機器。
ケーブル上を流れてきた電気や光の信号を受信し、増幅や波形の形に整形して別の側へ再生する機器
同軸ケーブルの通信を光ファイバーに直したりするリピーターもある
電気信号を光信号に変えるだけなので、速度の異なる媒体を接続することはできない
ネットワークの延長ができる
10Mbpsのイーサネットでは4つ、100Mbpsのイーサネットでは2台まで
ブリッジ/L2スイッチ
データリンク層で使う、ネットワーク同士を接続する装置
データリンクのフレーム(パケット)を認識して内部メモリに蓄積し、接続された相手側のセグメントに新たなフレームとして創出する
内部で一旦フレームを溜め込むので、伝送速度の異なるデータリンクと接続ができる
多段接続に制約はない。
FCS(Frame Check Sequence)
フレームが正しく届いたかどうかのチェックフィールド
壊れたフレームを他のセグメントに送信しないようにする
また、アドレス学習機能とフィルタリング機能により無駄なトラフィックを流さないようにする
ここではMACアドレスのことを指す。
ネットワークAとBがあり、指定のMACアドレスの機器がAにあるならBに流さないという感じ
一度ブリッジを通過したフレームのMACアドレスは、ブリッジ内のテーブルに一時登録される
いわゆる、スイッチングハブについて
ほぼほぼこの立ち位置。
ケーブルを接続するポートが全てブリッジになっているかのように機能する
ルーター/L3スイッチ
ネットワーク層の処理
ルーターとは
ネットワークとネットワークを接続して、パケットを中継する装置のこと
L2スイッチはMACアドレスを使っていたが、こちらはネットワーク層のアドレス(IPアドレス)で処理をする
ルーターの特徴として、異なるデータリンクを相互に接続することができる
イーサネットとイーサネット、イーサネットとFDDIを接続するなど
家庭などでブロードバンドルーターが使われるが、これも同じ
ネットワークの負荷を仕切る役割も持つ。最近はセキュリティの機能を備えたものもある。
L4-7スイッチ
第4層~第7層までの情報に基づいてパケットの配送処理を行う
ロードバランサーやファイアウォールなどはこの立ち位置で有名
ゲートウェイ
同じく第4層〜第7層までの階層で、データを変換して中継する装置のこと
トランスポート層以上の情報を見てバケットを処理するが、データ変換の役割がメイン
直接通信できない2つのプロトコルの翻訳作業など
インターネットの電子メールと携帯電話の電子メールを互換させたり。
インターネットと携帯電話の電子メールのプロトコルは違うが、ゲートウェイが解読の役割を果たす
またWWWを使用するときにネットワークトラフィックの軽減やセキュリティを意図してプロキシサーバー(代理サーバー)を建てる場合があるが、これもゲートウェイの一種
クライアントとサーバーは直接ネットワーク層では通信せず、トランスポート層からアプリケーション層の間で代理サーバーによって通信が制御される
ファイアウォールにもゲートウェイを介して通信を行うサービスは存在する
現在のネットワーク
バックボーン / コア
ネットワークの中心的な網。大量のデータを高速送受信することを目的として構築される
通常は高速なルーターで接続されている
エッジ
ネットワークの出入り口。多機能なルーター・L3スイッチが使われる
アクセス / あぐりえーしょん
出入り口から出たネットワークの部分
インターネット接続サービスを利用した通信の流れ
自宅のルーターからアクセスに接続され、必要な場合はエッジやバックボーンを通って相手と通信する
携帯電話の通信の流れ
電源を入れると、自動で電波が送信されて最寄りの基地局と通信が行われる
これがローミング
基地局には契約しているモバイルオペレータのアンテナが設置されており、これがアクセスに該当する
電話をする場合、その番号が登録されている基地局まで番号が運ばれて通信路が確立される
基地局の集められた情報がエッジに集約され、その間をバックボーンが繋ぐ
LTE
第4世代携帯電話の無線通信規格。
音声もIPパケットとして転送できるので、ネットワーク全体でTCP/IPへの対応が必要になる
ただしまだインフラ側の整備ができていないので、しばらくは従来の企画で通信しているらしい
※2012年出版なので、現在の5Gに置き換えて読めば良さそう。
公衆無線LANについて
利用者を特定するため、契約利用者かどうかを確認するケースがある
「アクセス」につなぐ前に、組織のネットワークに繋いで認証をしている
情報発信者側にとってのネットワーク
昔は自分でサーバーを用意し、webサイトを運用していた
今はブログサービスやホスティングサービスを使う
動画サイトなら世界中の動画を保存、配信するなど。
多くのストレージ機器を1箇所に集中し、多くの要求に応えさせる仕組みがデータセンター
大規模なものの場合、直接バックボーンへ接続されていることが多い
小規模なものでも、直接エッジに繋がれている場合が多い。
2 TCP/IP 基礎知識
TCP/IP(Transmission Control Protocol / Internet Protocol誕生の歴史
最も有名で、最もよく使われるプロトコル
WindowsやMac OSが標準でサポートしている(むしろ、サポートしていないOSは販売されない)
歴史について
1960年代、軍事的な理由でネットワークが破壊されても迂回経路を通ってデータ転送ができるような技術が求められた
パケット通信なら実現できる。そのためこの通信が注目され始めた
ARPANET
パケット交換技術の実用性を試験するためのネットワーク
インターネットの起源と呼ばれる。
TCP/IPの誕生
ARPANETでパケット通信ができたので、その中で信頼性の高い通信手段を定めたい。
1970年代に開発され、82年ごろまでに仕様が決まった。
UNIXの普及
1980年代から大学のPCのOSにBSD UNIXが利用され始めた。
このOSにはTCP/IPが実装されている。
また、UNIXワークステーションの普及が急速に進んだ時代でもある。
TCP/IPによるネットワークをインターネットと呼ぶようになった
インターネットがUNIXマシン同士を繋げ、主流になっていった。
後から出始めたPCもTCP/IPに対応するようになっていった。
商用インターネットサービスの開始
90年代になると、企業や一般家庭にもインターネットを提供するサービスが増えた
これがインターネットサービスプロバイダ(ISP)
今までは電話回線を使ったパソコン通信だったが、限られた会員同士として会話できなかった
TCP/IPの標準化
1960年代、ISOでOSIと呼ばれる国際標準プロトコルの標準化が行われた
ただし現在はOSIは普及していない。なぜ?
TCP/IPという言葉について
2つのプロトコルがあるという意味のように見える
その意味もあるが、IPを利用したりIPで通信するときに使うプロトコルの総称のことを言う。
TCP/IPはインターネットプロトコルスイートである(suite: 一式、集まりということ)
例えば
アプリケーションプロトコル
HTTP, SMTP, FTP, TELNET, SNMPなど
トランスポートプロトコル
TCP, UDP
経路制御プロトコル
RIP, OSPF, BGP
インターネットプロトコル
IP, ICMP, ARP
TCP/IP標準化の精神
オープンであることについて
IETFの議論を通して決められる(誰でも参加できる)
標準化するプロトコルが実際に使えるものか重視する
プロトコルの仕様を決めるのではなく、互いに通信できる技術を追い求める
実装をしながら仕様を決めるというイメージ
OSIが流行らなかったのは動作するプロトコルを早く作れなかったこと、プロトコルの改良などがすぐできなかったことなどが原因っぽい
仕様書について
IETFで議論され標準化されるプロトコルは、RFCと呼ばれるドキュメントとなり一般公開される
実装や運用に関する情報、実験情報などが記載
番号も割り振られる。IPに関するものはRFC791、TCPはRFC793
仕様が変わると、RFCの番号が変わったりする。
標準化の流れ
IETFの議論で決められる
インターネットドラフト > RFC > ドラフト標準 > 標準となる
高い基準で実用性がないと標準にまでならない。
RFCの入手
インターネットからとれる
インターネットの基礎知識
元々インターネットとは、複数のネットワークを結んで一つのネットワークにすること
2つのイーサネットをルーターで繋ぐこともインターネットだった
現在では、全世界を接続しているコンピューターネットワークのこと。
インターネットで通信をするためにプロトコルが必要であり、それがTCP/IP
インターネットの構造
小さなネットが集まり組織に、組織が集まり地域に、最終的に巨大なインターネットになる
バックボーンと呼ばれる基幹ネットワーク、スタブと呼ばれる末端のネットワークで構成される
ネット間はNOCで接続される
運用者や運用方針が違うネットを台頭に繋ぐポイントはIXと呼ばれる。
異なる組織がIXで接続された巨大なネットワークが、インターネット
ISPと地域ネット
インターネットを繋ぐためには、インターネットサービスプロバイダと契約する
TCP/IPの階層モデル
5. アプリケーション層
4. トランスポート層
3. インターネット層
2. ネットワークインターフェース層
1. ハードウェア(物理層)
これらはOSI参照モデルに当てはめることができる
(上の5つの層が、OSI参照モデルでいうどこの層になるかを割り当てることができる)
OSI参照モデルと少し異なるが理由は、
OSIは通信プロトコルに必要な機能は何かを考えている
TCP/IPはプロトコルをコンピューターに実装するにはどうプログラミングすれば良いかを考えているから
物理層
イーサネットや電話回線など、ハードウェアそのものを指す。
通信媒体はケーブルでも無線でもなんでもOK
信頼性やセキュリティなども制限なし。
ネットワークで接続された装置間で繋ぐことを前提にして作られたプロトコル
ネットワークインターフェース層(データリンク層)
イーサネットなどのデータリンクを利用して通信をするためのインターフェースとなる層
NICを動かすためのデバイスドライバと考えてもらっていい
OSとハードウェアの橋渡しをするソフトウェア
インターネット層(ネットワーク層)
IPプロトコルが使われる層で、IPアドレスをもとにしてパケットを転送する
インターネット層とトランスポート層がホストのOSに組み込まれることを想定している
インターネットに繋ぐホストやルーターは、IPの機能を必ず持つ必要がある
ハブやリピーターなどはTCP/IPを実装しなくても問題ない
IP
Internet Protocol
ネットワークを跨いでパケットを転送し、インターネット全体に届けるためのプロトコル
識別子はIPアドレス
IPアドレスをもとにしてパケットを送信する
データリンクの特性を隠す役割もあり、通信相手との経路がどのようなデータリンクでも通信ができる
パケットが相手に届かなかった時の再送は行わないので、信頼性のないパケット交換プロトコルである
ICMP
Internet Control Message Protocol
IPパケット配送中に転送できなくなった時、送信もとに異常を知らせるためのプロトコル
ARP
Address Resolution Protocol
パケットの送り先の物理的なアドレス(MACアドレス)をIPアドレスから取得できるプロトコル
トランスポート層
最も重要な役割は、アプリケーションプログラム間の通信の実現
PC内部では複数のアプリが動いているので、どれとどれのプログラムが通信しているかを識別する必要がある
プログラムの識別に使うのがポート番号になる。
TCP
Transmission Control Protocol
コネクション型で信頼性のある、第4層のプロトコル
データが無くなったりしてもTCPが解決してくれる。
転送データの総量が少ない場合、ビデオ会議の音声データなどの転送通信には不向き
UDP
User Datagram Protocol
コネクションレス型で信頼性のない、第4層のプロトコル
送信したデータが相手に届いているかどうかはアプリ側に任せる。
パケット数が少ない通信やビデオ音声などの通信によく使う
アプリケーション層(セッション層以上の上位層)
TCP/IP階層モデルでは、OSI参照モデルの5,6,7層は全てアプリケーションプログラムの中で実現されると考えている
TCP/IPのアプリケーションの多くは、クライアント/サーバーモデルである
WWW
インターネットが一般に普及する原動力となったアプリケーション
webブラウザと呼ばれるソフトウェアを通してネットワークの中に入ることができる
ブラウザとサーバー間の通信で使われるプロトコルがHTTP
送信に使われる主なデータフォーマットがHTML
HTTPがOSI参照モデルで言うところのアプリケーション層、HTMLがプレゼンテーション層のプロトコルという感じ
電子メール
SMTP(Simple Mail Transfer Protocol)が利用されている
昔はテキスト形式だけだったが、今は色々送れたり文字に色をつけたりできるようになった。
MIMEの使用が一般的になった
Multipurpose Internet Mail Extensions
インターネットで使えるようにメールのデータ形式を拡張したもの
プレゼンテーション層の機能
ファイル転送
File Transfer Protocol
バイナリモードかテキストモードを選択できる
指示をするための制御コネクション、実際に転送するためのデータコネクションという2本を確立できる
遠隔ログイン
TELNET, SSHなどが有名なプロトコル。
ネットワーク管理
SNMP(Simple Network Management Protocol)
これで管理されるルーターなどの機器はエージェントと呼び、機器を管理するプログラムをマネージャーと呼ぶ
エージェントとマネージャー間の通信に使うのがこのプロトコル
異常なパケットの量や機器の熱量など、いろいろ測れる
TCP/IPの階層モデルと通信の例
各階層で、送信データにヘッダが負荷される
プロトコルのための情報がヘッダで、送信される情報の元がデータ
データ用語について
パケット: オールマイティに使える
フレーム: データリンクのパケットを表す時に使う
データグラム: IP/UDPなどネットワーク層以上でパケット単位のデータを呼ぶときに使う
セグメント: ストリームベースのTCPに使われるデータを呼ぶ
メッセージ: アプリケーションプロトコルのデータ単位
TCP/IPでのメール送信時のパケットの処理の例
アプリケーション層
プログラムを動かし、メールを作る
メッセージが符号化され送信(プレゼンテーション層に相当)。
通信コネクションなどもこのときに管理しているものもある。
トランスポート層
TCPにコネクションの確立を支持し、データを通信する準備をして下位層に渡す。
TCPの機能を実現するために、データにTCPのヘッダをつける
ポート番号やシーケンス番号など
インターネット層
もらったデータにIPヘッダをつける。
宛先/送信元のIPや、トランスポート層でついたヘッダがTCPなのかUDPなのかなど。
データが完成したらルーティングテーブルを参照して、パケットを渡すルーターを決定する
その機器が接続されているネットワークインターフェースドライバにIPパケットを渡す。
必要に応じてARPでMACアドレスを調べる。
データリンク層
ドライバから見ると、もらったのは単なるデータ
さらにイーサネットのヘッダをつけて送信処理をする
宛先と送信もとのMACアドレスとか。
物理層により相手先に運ぶ。
データリンクを流れるパケットについて
ヘッダが都度付与されるが、以下の2つの情報はほぼ持っている
送信元/受信先のアドレス、上位層のプロトコルが何か
パケットの受信処理
受け手はイーサネットヘッダのMACアドレスを確認し、自分宛かをチェックして上位層に渡す
IPヘッダを調べて自分のIPアドレスかどうかを確認。上に渡す
TCPヘッダのチェックサムなどでデータが壊れていないか、順番通り届いたかを確認
ポート番号を調べて通信を行なっているアプリケーションを特定する
届いた場合は確認応答を返す。
アプリケーション側でそのまま受信することになり、結果メールが届く。
問題なく格納できたら送信もとのアプリケーションへ通達する。
3 データリンク
データリンクという言葉について
データリンク
OSI参照モデル第2層
具体的な通信手段を指す一般的な用語のこともそう言う。
イーサネット、無線LANなど。
プロトコル
通信媒体で直接接続された機器感で通信するための仕様を定めているものがほとんど
通信媒体はツイストペアケーブルや同軸ケーブル、光ファイバー、電波など
実際に機器間で通信する場合はデータリンク層と物理層が必要
光の点滅や電圧などを物理層で2進数に変換、データリンク層でフレームとして渡す
データリンクは、ネットワークの最小単位と言っても良い
ネットワークのトポロジー(接続形態、構成形態)
バス型、リンク型、スター型、メッシュ型など
MACアドレス
データリンクに接続しているノードを識別するためのアドレス
イーサネットやFDDIでは、IEEE802.3で規格化されたMACアドレスが使われる
無線LANやBluetoothでも同じ規格のMACアドレスが使われている
長さは48bit
1: ユニキャスト / マルチキャストアドレス
2: ユニバーサル / ローカルアドレス
3~24: IEEEがベンダごとに重ならないように管理するアドレス
25~48: ベンダが製品ごとに重ならないように管理するアドレス
一般的なNICの場合ROMに焼き込まれていて、同じMACアドレスがつけられているカードは存在しない。
IEEE802.3のMACアドレスはデータリンクの種類に関わらず、常に一意である
イーサネットやFDDI, 無線LAN, Bluetoothなどデータリンクの種類が異なる場合でも一意である。
被るケースは、仮想マシンでNICを定義した場合など。
ネットワークの分類
媒体共有型
通信媒体を複数のノードで共有する
初期のイーサネットやFDDIのこと。
同じ通信経路を使ってデータを送受信する
半二重通信で通信の優先権を制御する必要がある
送信している側は受信できず、逆は送信できないと言うこと
トランシーバーとか。
コンテンション
データの送信権を競争で奪い取る(早い者勝ち)
複数の場所からデータが同時送信された場合は互いのデータが衝突し壊れてしまう
コリジョン
ネットワークが混雑すると急激に性能が低下する。
CSMA/CD
コンテンション方式を改良したデータ送信方式。コリジョンを早期に探知できる
トークンパッシング方式
トークンと呼ばれるパケットを巡回させ、これで送信権を制御する
トークンを持っているステーションがデータを送信できる
コリジョンが発生せず誰にでも送信権が回ってくるので、ネットワークが混雑しても性能低下しない。
ただしトークンが届くまで送信できないので、データリンクの性能を生かしきれない
解消するための技法が最近はいろいろある
媒体非共有型
通信媒体を共有せず、占有する
コリジョンが起こらない
スイッチに繋いでフレームを転送する方式になる
全二重通信
送受信を同時に扱える。イメージとしては電話。
ATMや最近のイーサネットでは主流
コンピューターとスイッチを1:1で繋ぐ
仮想的なネットワークやデータ流量の制御もできる。
スイッチが壊れると全てのコンピューター間の通信ができなくなる。
MACアドレスによる転送
イーサネット(10BASE5, 10BASE2など)の通信媒体の共有方式では、同時に1つのホストしかデータ送信できない
ネットに接続されるホストが多くなると性能が下がる
スイッチングハブ / イーサネットスイッチ
媒体非共有型で使われていたスイッチ技術をイーサネットで利用できるようにする機器
フレームの宛先のMACアドレスを見て、どのインターフェースから送り出すかを決める
決めるときに参照する参照表が、フォワーディングテーブル
自動的に生成されることがほとんど。
パケットを受け取ったとき送信元のMACアドレスと受け取ったインターフェースの対をテーブルに書き込む
今後この送信元のMACアドレスが宛先としてきたら、そのインターフェースに送ればいいと学習する。
スイッチの転送方式
ストア&フォワード
イーサネットフレーム末尾のFCSと呼ばれるものをチェックして転送する
コリジョンによって壊れたフレームなどは転送しない
カットスルー
フレームが全部蓄積し終わる前に処理を始めて、送信先に転送する
遅延が短いがエラーを転送することがある
ループを検出するための技術
ブリッジでネットワークを接続するとき、ループができるケースがある
フレームが次々にコピーされ、永久に回り続けてメルトダウンする
異常なパケットがネットワークを埋め尽くして通信不能になること。電源を切ったりしないと回復しない
対策
スパニングツリー
各ブリッジが調査用のパケットを交換し、ループを検知してパケットを削除する
通信に使うポートと使わないポートを決定し、障害発生時には通信路が切り替わる
昔は障害時の切り替わりが遅かったが、RSTPという形になって改善された
ソースルーティング
送信元がどのブリッジを経由してフレームを流すかを決定し、その情報をフレームに書き込む
ブリッジによるループがあったとしても目的地まで到達できる。
送信コンピュータ自体がこの機能を持ってないと使えない。
VLAN(Virtual LAN)
ブリッジ(スイッチ)に搭載されている技術
ネットワークの配線を変えずにネットワークの構造を変えることができる
同じスイッチに繋いでいても、セグメントを分けて制御できる
(AグループとBグループみたいな)
VLANを拡張した、タグVLANというものもある
メリットが多いが、物理的なネットワーク構成と論理的な構成が異なるのでわかりづらくなる
イーサネット
Ether: エーテル(媒体)
データリンク(通信手段)の1つ。
制御の仕組みが単純なのでNICやデバイスドライバが作りやすいので普及した。
1Gbps, 10Gbpsなどにも対応していっているため互換性と将来性が高い。
イーサネットのあれこれ
接続形態
昔は複数の端末で1本の同軸ケーブルを使う、媒体共有型の接続が一般的だった
今はスイッチの間を占有のケーブルで接続し、イーサネットプロトコルで通信する
ツイストペアケーブル = いわゆる、LANケーブルのこと
種類
10 BASE 2
10
伝送速度を表す。100とか1000(1G)とか。
BASE
決まり文句
2
媒体の違い。
Tならツイストペアケーブル、F, SR, LRとかなら光ファイバーとか。
伝送速度とコンピュータの内部表現について
コンピュータの表現
1k = 1024, 1m = 1024k, 1g = 1024m
伝送速度はクロック周波数によって伝送速度が決まるので、
1k = 1000, 1m = 1000k, 1g = 1000mとなる
歴史
同軸ケーブルを使う10BASE5が最初の規格。
当初は半二重通信のコンテンション(CSMA/CD)が前提の通信であった
コリジョンは起こるがなるべく早めに検知する仕組みのやつ。
100Mbpsに対応したFDDI(イーサネットのライバル通信方式的なやつ)が登場しても、イーサネットは10Mbpsのままだった
ただしスイッチの技術が進み、媒体非共有型で繋げるようになり衝突が起こらなくなり高速化できるようになった。
イーサネットのフレームフォーマット
先頭には1/0を並べたプリアンブルと呼ばれるフィールドがある
ここからイーサネットフレームが始まるという合図
相手のNICと同期をとる。
データ単位
ビット
2進数表示を行なった時の最小単位。
バイト
8ビット = 1バイト。
オクテット
8ビット = 1オクテット。
8ビットであるということを明確にしたい場合は、バイトと呼ばずオクテットと呼ぶ。
ヘッダの後ろにデータ本体が来る。46~1500オクテットほど。
その他データフレームに付属されるもの
宛先のMACアドレス
データを運んでいるプロトコルを表す番号など
IPとか、ARPとか、RARPとか
FCS(データ破損チェックフィールド)
無線通信
電波や赤外線、レーザー光線などで通信する
オフィス内のようなLANの範囲を比較的早い速度で接続するものが無線LAN
種類
無線PAN, LAN, MAN, RANの企画がある
無線WANの代表例は携帯電話など、基地局を経由した通信
IEEE802.11(ハチマルニ・テン・イチイチみたいな呼び方をする)
無線LANプロトコルの物理層・データリンク層の一部を定義した規格
この名称は多くの規格の総称として使われる場合と、無線LANの通信方式の1つとして用いられる場合がある
IEEE802.11関連の規格の基礎
通信方式としてのIEEE802.11は、物理層で電波や赤外線を用いて1~2mbpsの通信を実現する規格
現在は802.11b/g/a/nより劣る速度のためほぼ使われない。
IEEE801.11b, e
2.4GHz帯の電波を利用する無線LAN
bは最大11Mbps, eは54Mbpsほど。
30m~50.ほどの通信が可能。通常は基地局を介して通信を行う
IEEE802.11a
5GHz帯の周波数を利用する
54Mbpsほど。
b,eと似ているが互換性はない。ただし、両方に対応した基地局も製品化されている
電子レンジと干渉を受けにくい(電子レンジは2.4GHzなので。)
IEEE802.11n
g/aをベースに、複数のアンテナを同期させて通信する技術を使って高速化させた。
2.4GHzもしくは5GHz帯を使う
そのどちらにも干渉するものがない場合は、倍の帯域幅(40MHz)を使うことで最大150Mbpsの速度を出せる。
Wi-Fiについて
無線LANの業界団体によって、IEEE802.11規格群の普及を目的としてつけられたブランド名
注意点
移動性や自由性が高いが、盗聴などもされやすい。
周波数によっては電子レンジなどがあると干渉して能力が著しく低下する。
Bluetooth
IEEE802.11b/gなどと同じく、2.4GHz帯の電波を使う規格。
v2で3Mbpsほどの速度。
距離は1, 10, 100mの3種類。
通信可能な端末は原則8台程度。
IEEEでは、IEEE802.15として標準化が進められている。
WiMAX
マイクロ波で自宅などの無線接続を行う
無線MANに属し、大規模な都市圏をエリアとする広範囲なネットワークをサポートする
IEEE802.16で標準化されていて、その1つ
ZigBee
家電などに組み込まれる
低消費電力で短距離の無線接続ができる
PPP(Point to Point Protocol)
ポイントツーポイント(1:1)で接続するためのプロトコル
データリンク層に相当するプロトコル
電話回線やISDN, 専用回線、ATM回線などで使われる
ADSLやケーブルテレビの接続でPPPoE(over Ethernet)として使われるようになった
イーサネットのデータ部にPPPのフレームを格納して転送する仕組み
データ通信前にPPPレベルでコネクションを確立する
その際に暗号化などを行う
LCP
PPPの機能のうち、上位層に依存しないプロトコル
コネクションの確立と切断、パケット長の設定などを行う
NCP
上位層に依存するプロトコル
IPCPなどが有名
IPアドレスの設定やTCP/IPのヘッダ圧縮をする
PPPで接続する時
通常ユーザーIDとパスワード認証が必要
PPPでは双方向で認証を行う。
認証方式
PAP(Passowrd Auth Protocol)
コネクション確立時に1回だけID/PWをやりとりする
平文で送信されるので盗聴などにリスクがある
CHAP(Challenge Handshake Auth Protocol)
ワンタイムパスワードを使用して盗聴を防ぐ。
フレームフォーマット
HDLCというプロトコルと同じ方式。
フラグシーケンス
フレームの区切りを01111110で表現したもの
1が6つ以上連続することは許されない
PPPoEについて
イーサネットを利用してPPPの機能を提供するもの
通信回線をイーサネットのようにエミュレートする
最も普及している通信形態なので、安価にサービスを提供できるようになる
電話回線でネットできるみたいなやつ。フレッツがADSL回線として採用している
その他のデータリンク
ATM(Asynchronous Transfer Mode)
回線の占有時間が短く、大容量のデータを効率よく転送できる
通信開始前に必ず設定をする
POS
デジタル信号を光ファイバーでやりとりする
FDDI(Fiber Distributed Data Interface)
光ファイバーやツイストペアケーブルで100Mbpsの伝送速度を実現できる
ネットワークのバックボーンを支えていたが、現在はギガビットイーサネットが使われるようになってきたので使われなくなった
トークンパッシング方式を採用しているので、ネットワーク混雑に強い
リング型に接続されており通信不能になるのを防いでいる
ファイバーチャネル
SANを構築するためのデータリンクとして使う
Storage Area Networkでサーバとストレージ機器を繋ぐネットワークで使う
HDMIHigh Definition Multimedia Interface
1つのケーブルで画像と音声をデジタル伝送できる規格
著作権保護機能があり、現在の主流
バージョンがあり、現在TCP/IPによる通信ができる
iSCSI(アイスカジー)
PCとハードディスクを接続するための規格がSCSIさが、それをネットワークで使う企画
SANを構築するときに使う
公衆アクセス網
料金を払って通信回線を借りる形態のもの
アナログ電話回線
固定電話回線を使って通信する
コンピューターを電話回線で接続するために、デジタル信号とアナログ信号を変換するモデムが必要
56kbps程度と、ほぼ使われない
移動体通信サービス
携帯電話、PHSなど
WiMAXやLTEという技術により、高速化してきた。
ADSL
既存のアナログ電話回線を拡張して使うサービスのこと
通常電話回線は、電話局で余分な周波数をカットしている
カットされる前に分配器を設置して、アナログ回線よりは早い回線を使う
FTTH
光ファイバーを自宅や会社に引き込む手法
ONUOptical Network Unitで光を電気信号に変換してからルーターなどに繋ぐ。
ケーブルテレビ
通常電波を使うテレビ放送だが、ケーブルを使って放送するサービスを指す
放送に使われていないチャネルをデータ通信用に変えてインターネットを利用できる。
ダウンロードに比べてアップロード速度が低い。
専用回線
1:1の接続形態。
VPN
IP-VPN
IPネットワークにVPNを構築する手法
ラベルという情報をIPパケットに負荷して通信制御する
このラベルで宛先の判断を行う。
企業が独自にVPNを構築する場合はIPsecという手法が基本。
公衆無線LAN
Wi-Fiを利用したサービス
ホットスポットというジュキン可能エリアを設置して繋ぐ
接続後にIPsecを利用した独自のVPN経由のページが出る場合がある。
4 IPプロトコル
インターネット層のプロトコルについて
IPと、ICMPInternet Control Message Protocolの2つから構成される
今回はIPについての話
IP(IPv4, v6)について
TCP/IPで言うインターネット層、OSIで言うネットワーク層に相当する
終点ノード間の通信を実現する役割(エンドツーエンド)
ネットワーク層はデータリンクの違いを覆い隠して、連携をとってパケットを配送できるようにすることでコンピュータ間との通信を可能にする
ホストとノード
IPアドレスが付けられ、経路制御を行わない機器がホスト
行う機器がルーター
ホストとルーターを合わせてノードと呼ぶ
ネットワーク層とデータリンク層の関係について
データリンク層
直接接続された機器同士の通信を提供する
ネットワーク層
(IPの場合)直接接続されていないネットワーク間での転送ができる
なぜ分ける
データリンク:1区間(PCからルーターA, ルーターAからBまでなど)の対応
ネットワーク: エンドツーエンド
区間ごとの移動に必要なのがデータリンクの仕事、最終どこまでいくかを知るのがネットワーク層の仕事
IPの基礎知識
1. IPアドレス
2. 終点ホストまでのルーティング
3. IPパケットの分割/再構築処理
IPアドレス
ネットワーク層のアドレス
ちなみにデータリンク層のアドレスはMACアドレス
ネットワークに接続されているすべての機器から、通信を行う宛先を識別するための役割
TCP/IPで通信する場合は必ずこのアドレスが必要
イーサネット、無線LAN、PPPなどどのデータリンクでも必要
ブリッジやスイッチングハブなど、物理 <-> データリンク層間でパケットを中継する機器には必要ない
経路制御(ルーティング)とパケット分割
宛先IPのホストまでパケットを届けるための機能
ネットワークの1区間をIPパケットが飛ぶことを、ホップという
1区間は1ホップと呼ばれる
ホップバイホップルーティング
1区間ごとに次のルートが決定され、パケットが運ばれる。
ルーターやホストはIPパケットに次の転送先となるルーターやホストを指示するのみ
それぞれの区間ごとに個々のルーターがIPパケットの転送処理を行い、宛先までたどり着く
ルーティングテーブル
宛先ホストまでパケットを送るための情報
データリンクの抽象化
さまざまなデータリンクの特徴を抽象化する
MTU(Maximum Transmission Unit)
最大転送範囲(データの転送できる最大の範囲?)
イーサネットは1500, FDDIだと4352など決まっている
経路の途中でこの制限にそぐわないネットワークを通過する必要があるかもしれない
そのため、IPでは分割処理(フラグメンテーション)をする
大きなIPパケットを複数の小さなIPパケットに分割する
宛先で再び1つにまとめられ、上位層に渡される
途中のMTUに関わらずパケットが届く
コネクションレス型
IPは通信相手との確立を行わない。
機能の簡略型と高速化を優先している。
コネクション型のサービスとしたいならば、上位層で対応してやれば良い。
TCPはコネクション型なので、そちらで信頼性を高める
IPアドレスの基礎知識
IP(v4)アドレス
32ビットの正整数値
2進数だが人間にとってわかりにくいので、8ビット / 4組をピリオドで分けて10進数で表現した。
10101100 . 00010100 . 00000001 . 00000001
128 + 32 + 8 + 4 . 16 + 4 . 1 . 1
172.20.1.1
組み合わせは2^32 = およそ43億ほど。
実際にはホストごとではなくNICごとに割り当てる。
1つのNICに複数割り当てることもできる
通常ルーターは2つ以上のNICを持つので、2つ以上のIPアドレスを持つことになる
構成
ネットワーク部(ネットワークアドレス部)
データリンクのセグメントごとに値が割り当てられる
ネットワーク部はセグメントのアドレスと重ならないように設定しなければならない
同じセグメントに接続されているホストには、すべて同じネットワークアドレスを設定する
ホスト部(ホストアドレス部)
同一セグメント内で重ならない値を割り当てる
ネットワークアドレスとホストアドレスを設定すると、接続されているネットワーク全体でユニークなIPが割り当てられることになる
IPパケットが途中のルーターで転送されるとき、IPアドレスのネットワーク部が利用される
ネットワーク部を見れば、どのセグメント内のホストかがわかる
どこまでがネットワーク部かは、サブネットマスクを参照にする
IPアドレスのクラス
IPアドレスの先頭から4ビットまでのビット列の組み合わせでネットワーク部とホスト部を決める
クラスA
先頭1ビットが0から始まるもの
0111 1111 = 127
先頭から8ビット目までがネットワーク部になる
0.0.0.0 ~ 127.0.0.0まで
127.0.0.1 ~ 127.255.255.255やなどについて
予約済みIPアドレスで、通常関与することはない
ループバックアドレスとして確保されているIPアドレスの範囲は「127.0.0.0」から「127.255.255.255」です。
クラスB
先頭2ビットが10で始まるもの
1011 1111 = 191
128.0.0.0 ~ 191.255.0.0
クラスC
先頭3ビットが110で始まる
1101 1111 = 223
192.0.0,0 ~ 223.255.0.0
クラスD
先頭4ビットが1110で始まる
1110 1111 = 239
224.0.0.0 ~ 239.255.255.255
割り当てる時の注意点
ホスト部をビットで表した時、すべてのビットを0/1にすることはできない
すべて0のアドレスは、ネットワークアドレスを表す場合やIPアドレスがわからない場合に使うというルールがあるので通常は利用できない
すべて1のアドレスは、ブロードキャストアドレスとして扱う
IPアドレスのホスト部で割り当てられる数は、上の2つを引いた数
クラスCの場合だと、2^8 - 2コ = 254コ
ブロードキャストアドレス
同一リンクに接続されたすべてのホストにパケットを送信するためのアドレス
IPアドレスのホスト部をすべて1にするとブロードキャストアドレスになる
172.20.0.0/16なら、後ろ16ビットがホスト部なので、172.20.255.255になる
ローカルブロードキャスト
自分が属しているリンク内のブロードキャスト
たとえば192.168.0.0/24なら、ブロードキャストアドレスは192.168.0.255
このアドレスが設定されたIPパケットはルーターで異なるリンクへの通信を遮断する
192.168.1.0などのネットワークには送らないということ
ダイレクトブロードキャスト
異なるIPネットワークのブロードキャスト
192.168.1.255というパケットがあった場合、まず192.168.1.xxxのネットワークに飛ばす
IPマルチキャスト
特定グループに所属するすべてのホストにパケットを送る仕組み
ブロードキャスト宛よりも細かいグループ分けができる
マルチキャスト機能ができるまではブロードキャスト宛で送り、ホスト側で取捨選択をしていた
トラフィックが大きくなるのが問題だった。
アドレスについて
クラスDのIPアドレスを使用する(先頭4ビットが1110)
残りの28ビットがマルチキャストの対象となるグループ番号
224.0.0.0 ~ 239.255.255.255
224.0.0.0 ~ 224.0.0.255までは経路制御されず、同一リンク内でもマルチキャストになる
それ以外のアドレスは全ネットワークのグループメンバーに到達する
TTL(Time to Live. 生存時間)を利用して到達範囲を限定することもできる
すべてのホストは224.0.0.1, すべてのルーターは224.0.0.2のグループに属する必要がある
サブネットマスク
クラスが決まるとネットワーク/ホスト部が決定される
ネットワーク部が同じコンピューターは、すべて同一のリンクに接続しなければならない
クラスBのネットワークを構築したならば、1つのリンク内に65000台ほどのホストを接続できる(2^16)
普通はそんなに繋がない。
クラスAやクラスBをそのまま使うと無駄が多い。ネットワークアドレスが不足していってしまう。
IPアドレスを利用するとき、ネットワーク部とホスト部の切れ目はクラスに縛られなくなった。
サブネットマスク(識別子)が用意されるようになった
クラスで分けたネットワークをさらに小さく区切る
クラスごとに決まるホスト部をサブネットワークアドレス部として使うことで、物理ネットワークに分割する
この導入により、IPアドレスは2つの識別子で表されるようになった
IPアドレス
ネットワーク部を表すサブネットマスク
考え方
2進数で考える
サブネットマスクは32bitの数値
IPアドレスのネットワーク部を表すビットと同じ部分が1になる
IPアドレスのホスト部を表すビットと同じ部分が0になる
これにより、クラスに縛られずにIPアドレスのネットワーク部を決めることが可能となった
表記法
172.20.100.52で、上位26ビットがネットワークアドレスの場合
書き方1
IPアドレス 172.20.100.52 / 26
ネットワークアドレス 172.20.100.0 / 26
ブロードキャストアドレス 172.20.100.63 / 26
52 = 00110100
ブロードキャストアドレスはホスト部をすべて1にしたものなので、
00111111 = 63 という感じ
CIDRとVLSM
90年代中盤まで、IPアドレス割り当てはクラス単位で行われてきた
大規模なネットワークを構築する会社にはAを、中小にはCをなどなど
ただしこの場合クラスAは128個しか配布できない
また、クラスCは接続できる機器が最大254台まで
なのでクラスBが汎用性が高く、多く求められた結果枯渇した
そこでIPアドレスのクラス分けを廃止し、任意のビット帳でIPアドレスを配布するようになった
これがCIDR(Classless InterDomain Routiong)(サイダー)
組織感のルーティングプロトコルがCIDRに対応することで、クラスに縛られないIP配布ができるようになった
CIDRを適応することで、連続するクラスCアドレスなどを大きなネットワークとして使えるようになった
インターネットがCIDRに対応したばかりの頃、サブネットマスクの統一が求められた
/25なら、組織内全部のサブネットマスク長を25にする必要があった
これが自由に変えられるようになったのがVLSM(Variable Length Subnet Mask)
IPアドレスの仕様効率を50%ほど向上させられる
グローバルアドレスとプライベートアドレス
元々インターネットは、すべてのホストとルーターにユニークなIPアドレスを付与することが必須だった
複数あるとパケットの送り先に困る
ただしこれでは枯渇するので、必要なところに必要な数だけユニークなIPアドレスを割り当てるようにした
つまり
インターネットに接続しない独立したネットワークの場合、そのネットワークの中でのみユニークであれば良い
ただし問題もあり、そこで適当に割り振ったIPアドレスのホストがインターネットに接続されると不具合が起こる
なので、私的なネットワークで利用できるプライベートIPアドレスの枠が誕生した
クラスA: 10.0.0.0 ~ 10.255.255.255 (10/8)
クラスB: 172.16.0.0 ~ 172.31.255.255 (172.16/12)
クラスC: 192.168.0.0 ~ 192.168.255.255(192.168/16)
この範囲のものがプライベートアドレスで、それ以外がグローバルアドレス
当初プライベートアドレスはインターネットとの接続を考えないネットワークで利用されていた
しかしNAT技術の登場で、プライベートアドレスを持つホストが、グローバルアドレスを持つホストと通信ができるようになった
現在は企業内などではプライベートIPアドレスを設定し、インターネットと接続するルーターやインターネットに公開しているサーバーにのみグローバルIPアドレスをつけることが一般的になっている
プライベートIPアドレスのホストがインターネットを使いたい場合は、NATを介して通信するという感じ
基本はNATを介して通信するが制限事項もあるので、それの解決のためにIPv6が作られた
まだ普及していないので、IPv4+NATの運用が一般的。
24.2月で現在3-4割ほど
グローバルIPアドレスの決め方
ICANNという組織が一元管理している
日本ではJPNICという期間がグローバルIPアドレスの割り当てを担当している
インターネットの商用化が進む以前は、ユーザーがJPNICにIPアドレスの取得をお願いしていた
現在ではISPにインターネット接続を依頼するとき、同時にグローバルIPアドレスの申請も依頼するのが基本
ユーザーに変わってISPがJPNICにアドレス割り当ての申請をしてくれている
FTTHやADSLの場合
接続先のプロバイダのサーバーからIPが自動で割り当てられ、接続し直すたびにIPアドレスが変化することがある
この場合プロバイダがIPアドレスを管理しているので、一般ユーザーがIPアドレスを申請する必要はない
WHOISについて
インターネットはさまざまな組織が繋がって作られている
パケットが流れている途中で障害が発生した場合、どの経路が原因かがわからなくなる
ICMPパケットを見たりツールを使うことで近辺のIPアドレスを確認できる
ただ、このIPを管理しているのはどこか?
インターネットには、古くから組織や管理者の連絡先を知る方法がある
これがWHOIS
code:sh
bash-3.2$ whois -h whois.nic.ad.jp xxx.xxx.xxx.xxx
みたいな形で情報を取得できる
経路制御(routing)
パケットを配送するときに利用されるのがネットワーク層のアドレス(IPアドレス)
IPアドレスだけでは届けられない
「このアドレスは、このルーターに送り出す」という情報が必要
この情報がルーティングテーブル
ルーティングテーブルの設定
管理者が事前に設定する、スタティックルーティング
ルーターが他のルーターと通信して自動で作成する、ダイナミックルーティング
経路制御表を作るルーティングプロトコルも存在する
IPアドレスとルーティング
ネットワーク部を利用して経路制御をする
経路制御表には、ネットワークアドレスと次に配送すべきルーターのアドレスが記されている
IPパケットを送信するとき
宛先アドレスを調べて経路制御表から一致するネットワークアドレスを検索し、次のルーターへ配送する
い
デフォルトルート
すべてのネットワークの情報などを持つと無駄が多い
0.0.0.0/0もしくはdefaultと記述する
/0なのでIPアドレスを表している部分はない
ネットワークアドレス部が0bitということ(所属する区域が存在しない)
経路制御表に登録されているどのアドレスともマッチしない場合の経路を表す。
ホストルート
IPアドレス/32として表現した場合のルートのこと
IPアドレスの全てのビットを使って経路制御を行う
使用すると、NICに付属したIPアドレスそのものに基づいて経路制御を行うようになる。
何らかの理由でネットワークアドレスを使った経路制御をしたくない時に使う
ループバックアドレス
同じコンピュータ内部のプログラム間で通信したい場合に使う。
これが、いわゆる127.0.0.1
localhostとも呼ぶ。このアドレスを利用した場合パケットはネットワークに流れない。
経路制御表の集約
ネットワークアドレスのビットパターンを考えて機器を設置すると、経路制御表を小さくできる
メモリやCPUを効率化できる。
IPの分割/再構築処理
MTUについて
データリンクごとに異なるので、IPはそれを抽象化する
IPデータグラムの分割処理と再構築処理
ホストやルーターは必要に応じてデータの分割処理(フラグメンテーション)をする
ホストルーター間がFDDI(MTU:4352)で、ルーターと受信ホスト先がイーサネット(MTU:1500)の場合
一気に送れないので、3つに分割して送る。必要になったら何回でも。
分割されたデータは宛先で再構築されるが、ルーターですることはない。
分割されたデータが同じルーターに届く保証がなかったり、途中で失われてしまうかもしれない
経路MTU探索
分割処理の欠点
ルーターの処理が重くなる
セキュリティ向上のための仕組みや時代とともにさまざまなアップデートがされる
分割処理をすると、分割された断片の1つが失われた場合に元のIPデータが全て失われてしまう
経路MTU
送信先から受信先のホストまで分割処理が必要にならない最大MTUのこと
=最小MTUのこと
こちらを使えば途中のルーターで分割処理をしなくて済む。
IPv6
IPv4は32ビットだが、IPv6は128ビットである
IPv4と互換性を持たせる努力が多くある
特徴
IPアドレスの拡大と経路制御表の集約(IPアドレスを計画的に配布し、テーブルが極力大きくならないようにする)
パフォーマンスの向上
フラグ&プレイ(DHCPサーバがない環境でもIPアドレスを割り当てる)
認証機能や暗号化機能の採用(IP偽装や、盗聴対策(IPsec))
マルチキャストやMoblieIPの機能を定義
複数のIPと通信したり、
表記方法
コロンで区切って16進数で表現する
IPv4ヘッダについて知る
IP通信をするとき、データにIPヘッダがつけられる
このヘッダを見るとIPが備えている機能の詳細がわかる
IPv4ヘッダについて
バージョン
4ビットで構成され、IPヘッダのバージョンをここに表す
現在は4
? なぜv4からv6なのか
色々動作させて実験した結果、6のものが採用されたから
ヘッダ長
4ビットで構成され、ヘッダ自体の大きさを表す
サービスタイプ(TOS: Type of Service)
8ビットで構成され、IPのサービス品質を表す
現在は多くのネットワークでこのあたりの要求は無視されている
DSCPフィールド、ECNフィールド
TOSとして定義されていた部分
品質制御のクラス
パケット長
IPヘッダとIPデータを加えたパケット全体のオクテット長
16ビットなのでIPが運べる最大のパケットサイズは、2^16 = 65535オクテット
そのまま送れるデータリンクはほぼないので、分割処理で送る
識別子
16ビットで、フラグメントを復元する際の識別子になる
フラグ
3ビットで構成される
0ビット: 未使用。現在は0であることが基本
1ビット: 分割して良いかを判断する。0: 分割可能 1: 分割不可。
2ビット: 分割されたパケットの場合は最後のパケットかどうかを示す。0: 最後 1: 途中
フラグメントオフセット(FO)
分割されたフラグメントがオリジナルデータのどこにあったかを示す
生存時間(TTL)
8ビット
元々は、パケットがネットワークに存在して良い時間(生存時間)を秒単位で示したもの。
プロトコル
8ビット
IPヘッダの次のヘッダのプロトコルが何かを示す。
TCPとか、UDPとか。
ヘッダチェックサム
16ビット。IPヘッダが壊れていないか確認するためのデータ
送信元IPアドレス、宛先IPアドレス
それぞれ32ビット。
オプション
可変長。テストやデバッグなどに用いる
パディング
オプションをつけた場合ヘッダ長が合わない場合があるので、これで調整する
データ
データそのものが入る。
IPv6のヘッダもあるけど、知りたくなったらP176を見れば良い。
5 IPに関連する技術
IPを使うと、目的のホストまでパケットを届けることができる
ただし普段自分たちはIPアドレスを認識することなく使っている
DNS
文字列をIPアドレスへと変換してくれる。IPv4, IPv6どちらもこう呼ぶ。
hostsについて
IPアドレスを人間が覚えるのは大変なので、ホスト名につけた名前のようなもの
ホスト名とIPアドレスの対応を定義するファイルもこう呼ぶ
DNSの登場
ホスト名とIPアドレスの対応関係を効率よく管理するための手段
ホストを管理する組織がデータの設定や変更を行える
組織内でホスト名とIPアドレスの関係を表すデータ路整理できる
流れ
通信したいユーザーがホスト名を入力
自動でホスト名やIPアドレスが登録されたデータベースサーバーが検索され、IPが取得される
nslookup ホスト名のコマンドの動きがこんな感じ
これによりIPなど変更した場合でも、その組織だけで処理できるようになった。
ドメイン名の構造
kusa.ac.jp
kusaが固有の名称で、acが大学を表し、jpが日本を表す
ドメイン名を利用する前は単なるホスト名だけでIPアドレスが管理されていた
異なる組織であっても同じホスト名をつけることができなかった
階層的なドメインの登場により、組織単位でホスト名を自由につけられるようになった。
階層構造(木構造)である
ネームサーバー
ドメイン名を管理しているホスト、およびソフトウェアを指す
そのネームサーバーが設置された階層のドメインに関する情報を管理する。
管理する階層がゾーン
階層ごとにネームサーバーが置かれている
kusa.ac.jpだと、
kusaを管理するDNSサーバー(大学内のDNSサーバー)
jpを管理するDNSサーバー(日本国内のドメイン管理サーバー)みたいな感じ
ルートネームサーバー
全ての大元。jpやorgなどよりも根っこ。
jp, orgなど次レベルのネームサーバーのIPアドレスを持つ。
逆に言うと、これらの部分にドメインを新設する場合はルートネームサーバーの設定が必要である
次レベルのネームサーバーには、さらにその下の階層のIPアドレスが登録されている
次があるなら同じように、と言う感じの木構造
ネームサーバーがダウンすると、ドメインに対するDNSの問い合わせができなくなる。
基本冗長化して、1台目がダメなら2台目に繋ぐと言うような構造にするのが基本。
全てのネームサーバーには、ルートネームサーバーのIPアドレスを登録する必要がある
ルートネームサーバーのIPアドレスなどは公開されている
リゾルバ
DNSに問い合わせを行うホストなどを指す。
最低でも1つ以上のネームサーバーのIPを知らないといけない。
DNSによる問い合わせ処理(クエリと呼ぶ)
(例)kusa.ac.jpドメインに存在するコンピュータ(リゾルバ)が、www.ietf.orgにアクセスする
1. pcがkusaのDNSサーバーにIPを問い合わせる
2. kusaのDNSサーバーは知らないので、ルートネームサーバーに問い合わせる
3. jpのネームサーバーを通る。acなどもここで管理されている
4. ルートネームサーバーが知っていたので、IPをkusaのDNSサーバーに返す
5. kusaのDNSサーバーが情報からieft.orgのネームサーバーに問い合わせてIPアドレスを知る
6. kusaのDNSサーバーがそのIPアドレスを伝え、コンピューターとwww.ietf.orgとの通信が始まる
DNSはホスト名からIPアドレスを検索するシステム
だが、他にも色々管理している。 タイプという枠組みで決められている
タイプ
A: IPv4アドレス
NS: ネームサーバー
CNAME: ホストの別名に対する正式名
TXT: テキスト文字列
AAAA: IPv6アドレス
などなど
ARP
Address Resolution Protocol
IPが決まれば宛先に向けてパケットを送信するが、データリンクを介す際にはIPアドレスに対応したMACアドレスが必要。
ARPについて
アドレス解決のためのプロトコル
IPを手掛かりに次にパケットを受け取るべき機器のMACアドレスを調べてくれる
IPv4のみ。v6ではICMPv6の機能が使われる
どのようにMACアドレスを知るのか
ARP要求パケットとARP応答パケットを使用してMACアドレスを知る仕組み
送信先がARP要求パケットを宛先IPアドレスへ送る
宛先が受け取り、MACアドレスを記載したARP応答パケットを送信先に送る。
動的で解決するので、IPだけ意識すれば良い
キャッシュされるのでトラフィックの増加も少ない。
なぜアドレスが両方必要なのか
要求パケットを送れているのであれば、問題ないのでは?
別のリンクに接続されたホストにパケットを送ることを考えると良い。
? ホストA > ルーターC > ホストBと言う通信をする場合
BのMACアドレスがわかっていても、Cでネットワークが切れるので直接送信はできない
まずはCのMACアドレス宛にパケットを送る必要がある
IPアドレスは、どのネットワークにパケットを送るかと言う意味合いも兼ねる
またMACアドレスだけで送信する場合はどのネットワークに送信すればいいかわからない
大きな範囲でデータが送信され続けることになるので帯域を圧迫してしまう。
なので、IPアドレスでネットワークを定めて、MACアドレスでネットワーク内の機器を定める感じ
関連するプロトコル
RARP(Reverse Address...)
MACアドレスからIPアドレスを知りたい場合に使われる。
代理ARP(Proxy ARP)
通常ARPパケットはルーターで遮断されるが、これだと隣のセグメントに転送できるようになる
2つのセグメントが1つであるかのようになる
ICMP
Internet Control Message Protocol
IPを補助するプロトコル
ネットワークが正常に動作しているか、どこが問題なのかを解決してくれるプロトコル
パケットが届くかどうかの確認、パケットが廃棄された時の原因通知など。
原因の通知はIPを使って配送される
ホストA > ルーターB > ホストCに通信する時
A > B OK
B > C ARPリクエストでMACアドレスの取得を試みるが、失敗。
B > A 宛にICMPでエラーを返す。
色々タイプがある
エコー不能とか、到達不能とか、時間超過とか。
主なメッセージタイプ
到達不能(3)
IPルーターがIPデータグラムを宛先に配送できない場合。
ほとんどがnetwork unreachble(IPアドレスへの経路情報を持っていない場合)か、Host Unreachable(コンピューターがネットワークに接続されていなかった場合)
リダイレクトメッセージ(5)
送信元ホストが最適でない経路を使用しているのをルーターが検出した時
最適経路情報と元のデータを返す
時間超過メッセージ(11)
TTLが削られ、オアケットが破棄された場合。
経路制御に不具合が起きてパケットがネットワークを巡り続けてしまった場合など。
エコーメッセージ(0/8)
通信先にIPが届くかどうかのテスト
要求メッセージ(8)を送り、相手先から応答メッセージ(0)が帰ってくれば到達可能であることがわかる
pingがこれ。
そのほかの情報や、ICMPv6もある。知りたくなったらP198あたり参考。
DHCP
Dynamic Host Configuration Protocol
ホストごとのIPアドレスを設定するのは、非常に面倒
タブレットPCなどの場合、移動するたびにIPアドレスの設定を変更しなくてはならない。
面倒なIPアドレスの設定や配布するアドレス一括管理をするために、DHCPが使われる.
これによってPCをネットワークに繋ぐだけでTCP/IP通信が実現できる(フラグ&プレイ)
利用のために
DHCPサーバーが必要
配布するIPアドレスやサブネットマスク、経路制御について、DNSサーバーのアドレスなどを設定
流れ
PCがDHCP発見パケットを送信し、IPやサブネットマスクなどの設定を要求
DHCPサーバーがDHCP提供パケット(使用して良いネットワーク設定)を通知
PCがDHCP要求パケットを送り、通知された設定を使用したいことを知らせる
DHCPサーバーがDHCP確認応答パケットでそれに対しての答えを送付する
DNS同様に、障害が起こるとIPアドレスが配られなくなるため冗長化した方が良い
NAT
Network Address Translator
ローカルなネットワークでプライベートIPアドレスを使用し、インターネット接続時にグローバルIPに変換する技術
TCPやUDPのポート番号も付け替える、NAPTなども存在する
基本的にはアドレスが枯渇しているIPv4向けの技術。
仕組み
ホストA > NATルーターB > サーバーCに通信する場合
A(10.0.0.10)がC宛にパケットを送る。Bを通過する
Aはプライベートアドレスなので、BがグローバルIPアドレス(例えば、202.244.174.37とか)に変換して転送する
Cは202.244.174.37からパケットが送られてきたと判断して通信する
逆の場合は、BがプライベートIPアドレスに変換してA宛に送るイメージ。
NATルーター
アドレス変換のためのテーブルが自動的(もしくは固定的)に作られ、対応した処理が行われる
NATの問題点
NATの外側から内側のサーバーに接続することはできない
パケット以外の話?
変換テーブル作成時の処理にオーバーヘッドがある
NATが異常動作を行い再起動した時、TCPのコネクションがリセットされる
冗長化が難しい。NATを切り替えるようにしてもTCPコネクションは切れる。
解決するためには
IPv6を使って、IPを潤沢に使う
NATがある環境を前提にアプリケーションを作成する
その他の技術
IPトンネリング
IPv6とv4のネットワークをデータが行き来できるようにすること
IPマルチキャスト
マルチキャスト=受信者がいるかどうか確認が必要である
対応したプロトコルを使うことで、IPでもマルチキャスト通信ができる。
6 TCPとUDP
トランスポート層のプロトコル
TCPとUDPが、代表的なプロトコルである
TCPが信頼性を持ち、UDPが同報通信(複数宛に届けるなど)に使われる
トランスポート層について
IPヘッダにはプロトコルフィールドが定義されている
IPより上位のどの層にデータを渡すかの番号
つまりTCPなのか、UDPなのかが識別するための番号が付属されている
同様にトランスポート層でも、自分が運んでいるデータをどのアプリケーションに渡すかの番号が付属される
IPで宛先PCに届けて、その中のどのアプリに渡すかを決めるイメージ
通信するプログラムを指定する識別子が、ポート番号
ポート番号によりトランスポート層の上位アプリケーション層の処理を行うプログラムを識別する
通信処理について
TCP/IPのアプリケーションプロトコルは、一般的にクライアント/サーバーモデル
あらかじめサーバープログラムを起動しておき、クライアントからの要求を待つ必要がある
そうしなければ要求が来た場合でも、受け付けることができない
これを待ち受ける、サーバー上で常時起動されていて特定の処理を受け付けるプロセスがデーモン
HTTPのサーバープログラムはhttpd、sshのサーバーはsshdなど
UNIXの場合は個々のデーモンを別々に動かすのだけでなく、代表として要求を待つinetd(Internet Daemon)というスーパーデーモンが使われる。
スーパーデーモンは要求を受けるとforkし、sshdなどのデーモンに返信(exec)する
どのデーモンに向けられたものかは、受信パケットの宛先ポート番号を調べて解決できる
TCPの接続要求パケットを受信した場合、22ならsshd, 80ならhttpdなど。
そのデーモンが以降の通信処理を受け持つ
TCP, UDPは受信したデータが誰宛かをポート番号で判断する
TCP
Transmission Control Protocol(送信操作)
コネクション指向で、信頼性を持つストリーム型プロトコル
切れ目のないデータ構造のこと
順序制御や再送制御、フロー制御(流量制御)、ふくそう制御、利用効率を高める機能を持つ
UDP
User Datagram Protocol
信頼性のないデータグラム型プロトコル
細かい処理は上位層に任せる。
どっちが優れているか?
TCPとUDPで役割が違う。UDPは信頼性はないが速度はあるのでリアルタイム性を重視する通信で使われる。
ポート番号
データリンクやIPにはアドレスという概念があった
MACアドレス: 同一データリンク内の端末を識別するもの
IPアドレス: TCP/IPネットワークに接続されているホストを識別するためのもの
ポート番号は、同一コンピューター内で通信を行っているプログラムを識別するためのもの
プログラムのアドレスという意味合いで考えると良い
通信の識別について
コンピュータ上のプログラム
webブラウザやメールソフトなど同時に使える。
トランスポートプロトコルはポート番号で識別し、正しくデータを渡す
通信の識別はポート番号だけではない
例えばブラウザを2つ開いて通信した時、別々の通信が行われる
起動する際にプロトコル番号が割り振られ、そこで判断する
ブラウザA(プロトコル番号2000) > サーバーC(ポート80で受付)
ブラウザB(プロトコル番号2001) > サーバーC(ポート80で受付) みたいな感じ
識別に使うもの
宛先IPアドレス
送信元IPアドレス
宛先ポート番号
送信元ポート番号
プロトコル番号
識別に使う番号は、netstat -nなどで確認ができる。
どれか1つでも違った場合は別の通信と判断して通信が行われる
ポート番号を決める
標準で決められている番号を使う場合(静的な決定)
HTTPなど広く使われているアプリケーションプロトコルでは、使用するポート番号が決められている
これがウェルノウンポート。0~1023までの番号
特に指定がない限りはこのポートを別の用途には使わない。
1024~49151までのポート番号も正式に登録されている。
TCPで有名なもの
20: ftp-data
21: ftp
22: ssh
25: smtp
53: dns
UDPで有名なもの
53: domain
動的に割り当てる場合
サーバー側は番号が決まっている必要があるが、クライアントはその限りではない。
クライアントは自分のポート番号を決定せず、OSに任せることができる
OSがアプリケーションごとに同じ値にならないように制御してポート番号を割り当ててくれる
同じプログラムから複数のコネクションを確立した場合でも、値が被らない。
49152~65535までの値が使われる。
ポート番号とプロトコル
TCPとUDPの間では、同じポート番号を異なる目的で使うことができる
UDPの目的と特徴
ネットワークが混雑していても送信量を制御するような仕組みはないし、パケットが失われても再送などしない。
アプリケーションプログラムに制御を任せている。
UDPのUserは、開発者のこと。
TCPの信頼性を実現するための仕組み
シーケンス番号と確認応答
送信したデータがホストに到達した時、受信ホストはデータ到達を知らせる
これが確認応答(ACK)
データが10あって、1-3まで送って応答、4-6送って応答、....みたいな感じ
ACKがない場合
データ到達がされていないので、データ喪失があったことがわかる。
もしくは、ACKパケット自体が消えたケース。
その時はデータを再送信する。
ACKの速度が遅く、到達する前に再送信パケットが来るケースもある
同じデータを重複して受け取ることになる
受信済みのデータを識別し、要否を判断するための仕組みがシーケンス番号
受信データパケットのTCPヘッダに書き込まれる。
これで次に自分が受信すべき番号をACKとして返送することで、信頼性の高い通信が実現されている。
再送タイムアウト時間
ACKの到達を待つ時間
環境によって変わるので、柔軟に調整するのが良い
RTT(ラウンドトリップ時間)や揺らぎ(RTTの細かな時差)なども考慮できると良い
コネクション管理
通信を始める準備段階がある。
A > Bと通信する場合
AがB宛にコネクション確立要求(SYN)を送る
BがACKを送り、BもA宛にSYNを送る
AがACKを送り、通信が開始する
コネクションを切る場合はFINという切断要求を送る
受け取った側がACKとFINを送る
送信側がACKを返し、通信が終わる。
データの送信方法
コネクション確立時に、通信を行うデータ単位を決定する
最大セグメント長(MSS, Max Segment Size)
TCPではMSSの値ごとにデータが区切られて送信される。再送時も同様。
送信元と受信元とで違う場合は、小さい方の値を使って送信する。
データリンクが違う場合(FDDIとイーサネットでMTUが違う時など)に起こる。
ウィンドウ
パケットの往復時間が長くなると通信性能が悪くなる
ウィンドウという概念を使えば、往復時間を抑えられる。P237参考。
いっぺんにたくさん送ってたくさん応答し、漏れがあったら別途対応するというイメージ
ヘッダのフォーマット
UDP
送信元ポート番号
宛先ポート番号
パケット長
チェックサム
UDPのヘッダとデータの信頼性を提供する。
データ
TCP
送信元ポート番号
宛先ポート番号
シーケンス番号
確認応答番号
データオフセット
予約(今後の拡張用フィールド)
コントロールフラグ
ウィンドウサイズ
チェックサム
緊急ポインタ
オプションなどなど
7,8,9 ルーティング / アプリケーションプロトコル, セキュリティ
ルーティング振り返り
正しい方向へパケットを転送すること
スタティックとダイナミック(動的)にテーブルを作る方法がある
ダイナミックルーティングは隣り合うルーター同士でネットワークの情報を教え合う。
経路を制御する範囲
今のご時世、ネットワーク全体を一括管理するのは不可能
経路を制御する範囲によってIGPとEGPというルーティングプロトコルが利用されるようになった
企業は内部でネットワークのルールを決めながら構築する
内部でダイナミックルーティングに使われるのがIGP
ネットワーク間の経路制御に使われるのがEGP
IPアドレスの関係と似ている。
EGPで地域ネットワーク間の経路制御を行い、IGPでネットワーク内部のホストを識別する
ルーティングの知識はあまり関係なく、見ても忘れる気がするので知識をつけたくなったら再度読む。
8 アプリケーションプロトコル
IP, TCP, UDP
通信を行う上での基礎部分。OSI参照モデルの下位に位置する。
アプリケーションプロトコルは、5層以上の上位層に相当するプロトコルのことを指す
アプリケーションプロトコル
ブラウザ、電子メール、遠隔ログインなど特有の通信処理を行うプロトコルのこと
TCPやIPなどは汎用性の高いプロトコルだが、これは実用的なアプリを実現するために作られたプロトコル
例えばTELNETなんかは遠隔ログインでのみ使う。
ネットワークアプリケーションは様々なメーカーが作る
機能実現のためには、アプリケーションプロトコルが必要
アプリケーションは下位層の土台となる部分を使う
階層化のおかげで分割して考えることができ、パケットをどう送るかなどは考慮が不要となる。
代表的なアプリケーションプロトコル
遠隔ログインTELNET, SSH
自機をネットワーク先のコンピュータと接続する。
その端末のアプリケーションを利用したり、環境設定ができる
TELNET
ポートは23番。
TCPコネクションを1つ使用する。
コマンドが文字列として送信され、相手のPCで実行される
自分のキーボードとディスプレイが相手のコンピューター内部のシェルに接続されるイメージ
shell
OSが提供する機能をユーザーが利用しやすくするユーザーインターフェースのこと
ルーターなどネットワーク機器にログインして機器調整をするときなどに使われる
オプションと呼ばれる機能を持つ
ユーザーが入力した文字以外のオプションをやり取りできる
画面制御とか。
そのポートで待っているアプリケーションを実行することができる
code:sh
telnet host_name TCPポート番号
# telnet host_name 21 とすれば、ftpと繋がりftpを実行できる
SSH
ポートは22番。
暗号化された遠隔ログインシステム。
TELNETはログイン時のパスワードが暗号化されずに送信される。sshなら盗聴に対して効果的。
色々な機能
より強固な認証機能を利用できる
ファイルの転送ができる(scp, sftp)
ポートフォワード機能の利用
特定のポートに届けられたメッセージを特定IPアドレス、ポート番号に転送できる仕組み
sshを経由する部分が暗号化されるので、セキュアな通信ができる
ファイル転送ftp
異なる端末でファイルを転送するときに使われる。
遠隔ログインと同じ動きがあり、相手先コンピューターにログインしてから動作する。
インターネット上に、誰でも使える(ログインできる)ftpサーバーが存在する
anonymous ftpサーバーというものがある
ftpの仕組み
2つのTCPコネクションが使われる
制御用と、データ転送用
制御用: ログイン名/pwの確認、転送ファイルの名称や方法の指示など。
ポートは21番。ファイルのGET, PUTなどコマンドが実行されると転送用のコネクションが確立される。
転送が終わると切断するやりとりなど。
転送用
ポートは20番だが、別の番号の指定もできる
電子メールSMTP
(SMTPの場合)相手に届けるためにTCPを利用している
昔は相手の端末の電源が入っていればコネクションが確立できて送れるみたいな形だった
今は中間にメールサーバーが入り、経由する。
受信者が電子メールを受け取るときのプロトコルが、POP(Post Office Protocol)
メールの仕組み
メールアドレス
ご存知の通り組織名など。
電子メールの配送先の管理はDNSで行われている。
メールアドレスと、メールの宛先を送信すべきメールサーバーのドメインなどを登録
MXレコードと呼ぶ
MIME(Multipurpose Internet Mail Extensions)
昔はテキスト形式でしかメールを送れなかった
今はメールで送信できる形式を拡張した、MIMEが一般的。
静止画や音声ファイルなどいろいろ。
モデルに当てはめるならば、プレゼンテーション層あたり。
構造
ヘッダ
空行があってはならず、あるとそれ以降本文となる
Content-Type=Multipart/Mixedとして、その後文字列で区切ると1つのMIMEメッセージが完成する
Content-Type
ヘッダに続く情報がどのような種類のデータなのかを表す。
text/plainならテキスト、image/gifならgifとか。
本文
SMTP
ポートは25番。
1つのTCPコネクションを確立し、制御や応答、メッセージ転送を行う
メールの配送を行うプロトコル
POP
ポートは110番。
メールをメールサーバーから受け取るためのプロトコル
盗み見を防ぐためのユーザーの認証もできる。
IMAP
POPと同様に、電子メールのメッセージを受信するためのプロトコル
POPはクライアント側だが、IMAPはサーバー側で動作する。
使うとサーバー上の電子メールをダウンロードしなくても読むことができる
各コンピューター上に落とすことなく、サーバー上のメッセージを読み書きできる
--------------
WWW(World Wide Web)
インターネットの情報をHyperText形式で参照できるシステムをこう呼ぶ。
WWWの情報を画面に表示するのが、Webブラウザ
3つの定義
URI
HTML
HTTP
URI(Uniform Resource Identifier)
資源を表す表記法
URL(Locate)はインターネットの資源を表す場所
URIはインターネットに限らない。
XMLとは
eXtensible Markup Lang
WWWにおいてデータをファイル保存したり、アプリケーション間でやり取りする形式
HTMLと同じようにタグをつけて意味を表す。
HTTP
ブラウザでURIを入力すると処理が始まる。ポートは80.
クライアントからサーバーへ80番でTCPのコネクション確立が行われ、そこからやり取り
CGIとは
webサーバーが外部プログラムを呼び出すサーバーサードアプリケーションの仕組みのこと
通常のweb通信は、クライアントの要求に応じてサーバーが格納しているデータを送るだけ
CGIを使うと
要求に応じてwebサーバー側が別の外部プログラムを起動させることができる
プログラムにユーザーが入力した内容を伝える
その情報から作成したHTMLやデータをクライアント側に転送する
そのため、ユーザーの操作に応じて動的な情報を転送できる。
クッキー
サーバー側が発行する
webサーバーがクライアント側に情報を格納する。
サーバー側がcookieを確認することで、同じ相手からの通信なのかどうか等を把握する。
9 セキュリティ
TCP/IPとせキュロティ
当初は閉じた範囲での情報交換ツールだった
徐々に遠隔で使われるように発展した。なので、セキュリティは最初のうち考慮されていなかった
セキュリティはある程度は、利便性と安全性を天秤にかけて実装するもの
セキュリティの構成要素
個人のコンピュータなど
アンチウイルス、パーソナルファイアウォールを経由して安全にネットワークに接続
サーバー
ファイアウォールでアクセス制御を行ったのちに通信
認証局で証明書発行など
ファイアウォール(FW)
組織内のネットワークとインターネットを接続するときに、不正アクセスを防ぐために設置するもの
NATを設置する場合は外部から参照できるアクセスを限定されるので、結果的にFWの役割を果たすことがある
種類
規定されたパケットのみを通過されるパケットフィルタリングタイプ
アプリを介在させ、不正接続を遮断するアプリケーションゲートウェイタイプ
考え方の基本
危険に晒すのは、ネットワーク内の一部のルーターやホストのみにする
インターネットから直接接続できる端末を数台に限定して、こちらに集中してセキュリティをかける。
たとえば
インターネットに繋ぐルータに対してのみ規制をかけるとか
webサーバーは80番、メールサーバーは25番だけ開けるとか。
それ以外の通信パケットを破棄するようにする
コネクション確立は、内部から外部に出ていくもののみを通過させる
IDS(侵入検知)
FWはポリシーと合致した通信であれば通過する
逆にいうと、ポリシーに準じてさえいれば悪意のある通信だろうと通す
内部への侵入後、不正アクセスなど行う通信を検知するのがIDS
ログ収集やサーバー監視などできるものもある。FWでは手の届かない場所をカバーするイメージ
DMZ(DeMilitarized Zone)
非武装地帯
インターネットに繋いだネットワークで、インターネットから通信できる専用のサブネットのこと
この中にサーバーなどを設置することで、不正アクセスがあったとしても本来の内部ネットワークに影響が及ばなくなる
アンチウイルス / パーソナルファイアウォール
ユーザーが使うコンピュータ、サーバで動作するソフトウェアのことを指す
PCに出入りするパケットやデータを監視して侵入を防ぐ
クライアントPCが感染したとき、拡大して被害が大きくならないように食い止める効果もある
潜在的な脅威になる要素を遮断するものもある
スパム除外や広告ブロックなど
鍵について概要
PKI(Public Key Infrastructure)
通信相手が本物かどうかを第三者(CA:認証局)に証明してもらう仕組み
利用者はCAが発行する証明書で通信相手が本物かどうかを確かめる
証明書の内容
持ち主についての情報
持ち主だけが復号できる形でデータを暗号化するための鍵
これが公開鍵
証明書の持ち主だけが、この公開鍵で暗号化された内容を自分が持っている秘密鍵で復号できる
公開鍵で通信内容を暗号化すれば、証明書の持ち主以外に読み取られてはいけないデータを安全にやりとりできる
つまり
ユーザーは証明書から、公開鍵を使って暗号化する
サーバー側は暗号化されたデータを、秘密鍵を使って復号する
暗号化メールやHTTPS通信で使われる。
暗号化技術の基礎について
通常webページへのアクセスや電子メール(ネットを流れるデータ)は暗号化されていない
また、どの経路を通過して通信されているかも利用者はわからない
上記の理由から、情報が第三者に漏洩している可能性を完全に否定することはできない
機密性の高い送受信を実現するために、いろいろな技術が登場している
アプリケーション層: SSHなど
セッション / トランスポート層: SSL/TLS
ネットワーク層: IPsec
データリンク: Ethernet, WANの暗号化装置など
共通鍵暗号方式と公開鍵暗号方式
暗号化の基本
ある値(これが鍵)を用意し、その値を使って元のデータ(平文)に対して一定のアルゴリズムで変換をする
平文 -> 暗号化アルゴリズム+鍵 -> 暗号文 -> 復号化アルゴリズム+鍵 -> 平文
共通鍵暗号方式
暗号化と復号に同じ鍵を使う。
復号させる側に、どうやって安全に鍵を渡すかが課題。
AES, DESなどが有名
公開鍵暗号方式
暗号化に公開鍵を使い、復号に秘密鍵を使う。それぞれに別々の鍵を使う方式。
片方の鍵だけでは復号が行えない。
公開鍵はメールやweb、PKIを通して配布することで安全に鍵のやり取りを行える
秘密鍵は厳重管理する必要がある。
共通鍵暗号方式と比較して、暗号化と復号に長い計算時間がかかる。
RSA, DH, 楕円曲線暗号などが有名
どちらも組み合わせる方法もある
認証技術
利用者が正当な利用者かどうかを判別するための技術。
情報を持っていることによる認証
パスワードや鍵
あるものを持っていることによる認証
IDカード、電子証明書など
ある特徴を持っていることによる認証
指紋、瞳孔など
セキュリティのためのプロトコル
IPsecとVPN
昔は機密情報を転送するときは、専用回線を繋ぎ転送していた
手間や費用などが多くかかる
インターネットを利用し、仮想的な私的ネットワークを作ることができるようになった
これがVPN
読み取られても解読できないこと、改竄されたことが検出できるなどが特徴。
暗号化や認証の技術が利用されて構築される
VPN構築時に利用されるのが、IPsec
IPヘッダの後ろに暗号ヘッダ、認証ヘッダをつけて管理する
これで改竄された時などに計算結果がおかしくなるので、改竄を判別できる
TLS/SSLとHTTPS
webの普及によりカード決済などをするケースが多くなってきた
ネットワークを介して送る際には、暗号化して送る必要がある
TLS/SSL
Transport Layer Security / Secure Sockets Layer
最初に作った会社がSSLと名付けたが、標準化に際してTLSと呼ばれるようになった。どっちでもOK
TLS/SSLを使ったHTTP通信が、HTTPS
共通鍵暗号方式で暗号化処理が行われる。
なお、共通鍵を送信するときには公開鍵暗号方式が利用される
公開鍵が正しいかどうかの確認はCAから発行された証明書を使う
CAの情報はwebブラウザ側に組み込まれていることが多い
組み込まれていない場合はブラウザで警告が出る
この場合は、正しいCAであるかどうかをユーザーが判断してページを開く形になる
もう少し詳しく(👩💻user 💻server)
1. 👩💻webサーバーにHTTPSでアクセス
2. 💻webサーバーの公開鍵・証明書を👩💻へ送信
3. 👩💻(ブラウザが)電子証明書を確認して、公開鍵がアクセスしたサーバーのものかどうかをチェックする
電子証明書は💻の情報と💻の公開鍵を持つ
電子証明書はCAの秘密鍵で暗号化されている。👩💻がCAの公開鍵で復号する
4. 👩💻共通鍵暗号化方式の共通鍵を作成する。webサーバーの公開鍵を使って暗号化して送信。
5. 💻webサーバーの持つ暗号鍵で復号し、👩💻が作成した共通鍵を知る。
6. これ以降は👩💻<=>💻間は共通鍵暗号方式で通信をする(共通鍵の方が処理が軽いので)
IEEE802.1X
認められた機器だけがネットワークにアクセスできるように認証する仕組み
機内LANなどで使われることが多い
流れ
接続後にID/PWを入力
認証サーバーで確認される
利用者が利用可能なネトワーク情報がアクセスポイントと端末に通知される
AP側は、その端末がネットワークに接続されるために必要となるVLAN番号へ接続の切り替えを行う
端末側は、VLANの切り替え後にIPアドレスをリセットして再設定する