おさらい
ネットワークのプロトコルが洗練されてきた。
rawソケット 昔Windowsでウィルスを仕込むのにやられたことがある。
http://ja.wikipedia.org/wiki/Raw_socket#Windows_XP
ネットワークバイトオーダーはビッグエンディアン。
ネットワークバイトオーダーとは 【 network byte order 】 - 意味/解説/説明/定義 : IT用語辞典
- htons(short)
- htonl(long)
CPUによって素通りしたりしなかったりする。
シリアルだとビットオーダーが問題になる。
IPv4アドレス
- 一括集中管理
- 地域インターネットレジストリ
- クラスレスインタードメインルーティング(アドレス管理がそう呼ばれる)
CIDRとは 【 Classless Inter-Domain Routing 】 - 意味/解説/説明/定義 : IT用語辞典
アドレスは以下のような構造体で管理される。
ネットマスクとサブネットマスクは別物のように扱われている。
ネットワークの型が存在してて、A B Cなどの区分でわけられてたが、IPアドレスが枯渇しているなどの理由でそういう区分けはもはややっていない。
レジストラとは 〔 ドメインレジストラ 〕 【 registrar 】 - 意味/解説/説明/定義 : IT用語辞典
地域インターネットレジストリ=レジストラのことじゃないのか。
JPNIC→APNIC など。
ネットワークHOTTOPICS - なぜ「192.168.x.x」のアドレスを使う?:ITpro
13.1.2 ブロードキャストアドレス
4.2以降ホスト部はすべて1
サブネットを理解するホストと理解しないホストが存在する。
BSDから標準規格からあふれた?
独自実装していたら標準規格からあふれたのでは。
歴史
- ベル研 AT&T (Unix V1-V7)時代
- 32v
- SytetmIII
- SystemV
- Solaris
- HP-UX
AIX
ベル研 AT&T (Unix V1-V7)時代
- 1BSD(USバークレーがオレオレ改造したやつでBerkeleySoftwareDistributionの略)
- 2BSD
- 3BSD(32vの要素を取り入れている)
- 4BSD
- 4.1BSD
- 4.2BSD
- 4.3BSD
4.4BSD
ベル研 AT&T (Unix V1-V7)時代
32v
FreeBSDは4.4BSDから派生した386BSDから発展したやつ(NetBSDも同じ)
NetBSD→OpenBSD
Multics→UnixV1UnixV1はMulticsにインスパイヤされた。
バス係数みたいなもの。
Adobe Printing Technologies -About PostScript 3
TCP/IPはバークレー校が作ったオレオレ規格で、ちょうど4.2BSDのころに出来た。- インターネット・プロトコル・スイート - Wikipedia
- 4.2から4.3の間にちょっと仕様変更があった。
RFC911
RFC911 日本語訳 - [RFC/技術資料] ぺんたん info
サブネットマスクをあとづけすると、矛盾が出てくる。
192.168.0.0
255.255.0.0
ブロードキャスト
サブネットマスクを255.255.255.0にすると、192.168.0.0か192.168.255.0なのかわからなくなってくる。サブネットを細かくすると区別がわからなくなってくる。
ABCの区分はあとから変更されてきた。
ネットワークがサブネット化されていると、ブロードキャストアドレスのサブネットフィールドには通常のサブネット番号が含まれる。
サブネットがあるときとないときを混ぜた時の話だろうか。
ブロードキャストアドレスとは 【 broadcast address 】 - 意味/解説/説明/定義 : IT用語辞典
$ ping -b 255.255.255.255
帰ってきたブロードキャストアドレス
13.1.3 インターネットマルチキャスト
メールのccやMLなどと同様の機能。
MACアドレス IPアドレスをマップさせる
リンク層アドレス=MACアドレス
IPアドレス(32bit)をもとにしてMACアドレス(48bit)を勝手に作る機能が存在する。
1110xxx.224.0.0.0
固定のPrefix
擬似MACアドレス 固定24ビット+可変24ビット(IPアドレスの24ビット部分と同じ)
普通にネットワークの説明。
MACアドレスの上位24ビットは固定なのは、メーカーごとに違うから。なので、IPアドレスとの共有は32ビットにはならない。
Internet Group Management Protocol - Wikipedia
マルチキャストの対象の加入脱退を管理するのがIGMP
マルチキャストは複数人に同じものを送りつけるのに適しているため、ネトゲみたいに送る内容が違う場合だとちょっと違う。
(たぶん通知とかの場合にマルチキャストが使われる)
サーバーマシン1台で同時接続者数1万名を実現するにはどうすればいいのかというノウハウと考え方 - GIGAZINE
13.1.4 インターネットのポート番号とアソシエーション
- 216=65536
- 一意なポート番号を選択する必要がある。
ポート番号チェックはトランスポート層でやる。(リンク層 < ネットワーク層 < トランスポート層)
TCPの8000とUDPの8000は別扱いされるので、固有のマッピング方式。
- アソシエーション
- 発信元アドレス 送信先アドレス プロトコル番号 発信元ポート 送信先ポート
発信元ポートと送信先ポートは違っていて、発信元ポートはなんでもいい。(発信元のポートもルータによっては指定させられることがある)
13.1.5 プロトコル制御ブロック
TCPやUDPのソケットにはインターネットプロトコル制御ブロックが割り当てられる。
たとえていうとこんな感じだ。
struct A { struct B *b; int c; }
- 構造体の中に構造体が入っているのではなく、構造体の中に構造体のポインタが入っている。
双方向リスト
配列とリストの違いは要素のアドレスが順番に並んでいるかどうかの差だったりする。特定の要素を削除したり挿入する場合はリストのほうが楽だが、頭出しは配列のほうが楽。
ソケットをカーネルの中で扱うときに、リストでやったほうが扱いが楽。
ソケットは入り口。ポインタとリストを使ってソケットの実体を扱う。
図がわかりづらい。
13.2 ユーザーデータグラムプロトコル(UDP)
単純で信頼性のないプロトコル
UDPとは 【 User Datagram Protocol 】 【 UDP/IP 】 - 意味/解説/説明/定義 : IT用語辞典
擬似ヘッダはなぜ擬似なのか。
13.2.1 初期化
UDPを扱うときにudp_attach関数を使う。in_pcballoc()をつかって制御ブロックを作る。
発信元を指定したらできる。
意図的につけようと思ったらやろうと思ったらできる。
13.2.2 出力処理
データの送信を行うシステムコールはudp_send()関数としてUDP層に到達する。
データグラムに含まれるデータはmbufチェーンとして渡される。
送受信するときに任意に使えるバッファ
実際の操作はudp_output()関数によって行われる。
IPヘッダをスタブで確保する。
ip_output()のflags引数は、パケットがIPの擬似ヘッダを含んでいるかどうかを示すためにも使われるが、完全に初期化済みのヘッダが含まれることもある。
13.2.3 入力処理
udp_input()関数のフロー。以下のインターフェイスをサポートしている。
ソケットのサイズやアソシエーションをチェックしている。
アソシエーションが適合しない場合はポート到達不能(ICMPが用意しているメッセージ)を返す。普通は送った時の情報を残さず記録を取らないのでエラーメッセージを送っても意味がない。
13.2.4 制御操作
UDPはそこまで複雑なことは出来ないので、その他の制御はIPに丸投げする。
connectやselectを使えばUDPのエラーを確認できる。
データグラムソケットがクローズされると、udp_detach()関数が実行される。ブロックとその内容を消去する。
13.3 インターネットプロトコル(IP)
- ホスト間のアドレス付と経路制御
- パケット転送
- パケットのフラグメント化と復元
- Don't Fragment
- More Fragments
- NOP
- オプション終端
- タイムスタンプ
- レコードルート
- ソースルート
IP層の機能にはいろいろなオプションがあるが、現実にはこれらのオプションはほとんど使われていない。
13.3.1 出力処理
ip_output()関数について
- IPオプションがあればそれを挿入する
- パケットが擬似IPヘッダを含んでいれば残りのヘッダフィールドを埋める
など。
フラグメントはルータごとに行われる可能性はある。
バグが出るたびに細かく追加しているのではないか、というアタリ。
コードを把握するコツはあまり身についていない。。
ユーザーランドに直にパケットを作る奴。
uIP (micro IP) - Wikipedia, the free encyclopedia
直接接続するネットワーク。
送信先アドレスを確認して、パケットを出力キューに配置して処理を終了する。エラーが返るのはキューが満杯かアドレスが送信不能のときだけ。
IPのレベルから送信がされる。TCP UDP関係なく共通の処理、と思われる。
13.3.2 入力処理
ネットワークインターフェイスハンドラ
ip_input()の話。
- 上位プロトコルの入力
- エラー通知
- エラーによる破棄
- 最終送信先への次のホップへの転送
13.3.3 転送処理
4.2BSDではホストとルータの両方のサービスを標準的に提供する。
ブロードキャストストームの防止
ブロードキャストストームとは 【 broadcast storm 】 - 意味/解説/説明/定義 : IT用語辞典
13.4 伝送制御プロトコル(TCP)
信頼性のある接続指向のストリーム型トランスポートプロトコルのこと。
TCPとは 【 Transmission Control Protocol 】 - 意味/解説/説明/定義 : IT用語辞典
↑入力だとヘッダがなくなっていって、出力だとヘッダが補われていく。
IPレベルでアドレスが扱われるからTCPだとポートしかない。
Transmission Control Protocol - Wikipedia
TCPにおける通信では、ACK(確認応答)を受け取るまでに送出できるデータの範囲であるウィンドウを徐々にスライドさせながら通信を行います。この方式ことを「スラインディングウィンドウ」と呼びます。
確認応答は必ず送る。
【基礎から応用まで】Road to ネットワークスペシャリスト
いろいろなフラグがある。
オプションがついていた。
追記
ちょこちょこ間違っているところがあったので修正しました。