by shigemk2

当面は技術的なことしか書かない

BSDカーネルの設計と実装 読書会 (31) #readDaemon

おさらい

ネットワークのプロトコルが洗練されてきた。

Raw socket - Wikipedia

rawソケット 昔Windowsでウィルスを仕込むのにやられたことがある。

http://ja.wikipedia.org/wiki/Raw_socket#Windows_XP

ネットワークバイトオーダーはビッグエンディアン。

ネットワークバイトオーダーとは 【 network byte order 】 - 意味/解説/説明/定義 : IT用語辞典

バイトオーダー

  • htons(short)
  • htonl(long)

CPUによって素通りしたりしなかったりする。

シリアルだとビットオーダーが問題になる。

Endianness of bits

IPv4アドレス

  • 一括集中管理
  • 地域インターネットレジストリ
  • クラスレスインタードメインルーティング(アドレス管理がそう呼ばれる)

CIDRとは 【 Classless Inter-Domain Routing 】 - 意味/解説/説明/定義 : IT用語辞典

日本ネットワークインフォメーションセンター - JPNIC

アドレスは以下のような構造体で管理される。

f:id:shigemk2:20150215132541p:plain

ネットマスクとサブネットマスクは別物のように扱われている。

ネットワークの型が存在してて、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にインスパイヤされた。

Multics - Wikipedia

デルタ航空191便墜落事故 - Wikipedia

バス係数みたいなもの。

Adobe Printing Technologies -About PostScript 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の区分はあとから変更されてきた。

ネットワークがサブネット化されていると、ブロードキャストアドレスのサブネットフィールドには通常のサブネット番号が含まれる。

RFC917 インターネットサブネット

サブネットがあるときとないときを混ぜた時の話だろうか。

ブロードキャストアドレスとは 【 broadcast address 】 - 意味/解説/説明/定義 : IT用語辞典

$ ping -b 255.255.255.255

帰ってきたブロードキャストアドレス

13.1.3 インターネットマルチキャスト

メールのccやMLなどと同様の機能。

IPマルチキャスト - Wikipedia

ネットワーク入門サイト - マルチキャスト通信

MACアドレス IPアドレスをマップさせる

リンク層アドレス=MACアドレス

IPアドレス(32bit)をもとにしてMACアドレス(48bit)を勝手に作る機能が存在する。

1110xxx.224.0.0.0

マルチキャストのアドレッシング

固定のPrefix

擬似MACアドレス 固定24ビット+可変24ビット(IPアドレスの24ビット部分と同じ)

普通にネットワークの説明。

MACアドレスの上位24ビットは固定なのは、メーカーごとに違うから。なので、IPアドレスとの共有は32ビットにはならない。

リニアサーチ/線形探索 : アルゴリズム

http://www-01.ibm.com/support/knowledgecenter/SSSHRK_3.9.0/com.ibm.networkmanagerip.doc_3.9/itnm/ip/wip/disco/reference/nmip_dsc_agents_multicast.html?lang=ja

Internet Group Management Protocol - Wikipedia

マルチキャストの対象の加入脱退を管理するのがIGMP

マルチキャストは複数人に同じものを送りつけるのに適しているため、ネトゲみたいに送る内容が違う場合だとちょっと違う。

(たぶん通知とかの場合にマルチキャストが使われる)

サーバーマシン1台で同時接続者数1万名を実現するにはどうすればいいのかというノウハウと考え方 - GIGAZINE

13.1.4 インターネットのポート番号とアソシエーション

  • 216=65536
  • 一意なポート番号を選択する必要がある。

ポート番号チェックはトランスポート層でやる。(リンク層 < ネットワーク層 < トランスポート層)

f:id:shigemk2:20150215143935p:plain

IPv4ヘッダー ‐ 通信用語の基礎知識

TCPの8000とUDPの8000は別扱いされるので、固有のマッピング方式。

  • アソシエーション
  • 発信元アドレス 送信先アドレス プロトコル番号 発信元ポート 送信先ポート

発信元ポートと送信先ポートは違っていて、発信元ポートはなんでもいい。(発信元のポートもルータによっては指定させられることがある)

13.1.5 プロトコル制御ブロック

TCPやUDPのソケットにはインターネットプロトコル制御ブロックが割り当てられる。

f:id:shigemk2:20150215145815p:plain

たとえていうとこんな感じだ。

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チェーンとして渡される。

送受信するときに任意に使えるバッファ

mbuf ‐ 通信用語の基礎知識

実際の操作はudp_output()関数によって行われる。

f:id:shigemk2:20150215161016p:plain

IPヘッダをスタブで確保する。

ipヘッダ スタブ - Google 検索

疑似ヘッダー ‐ 通信用語の基礎知識

f:id:shigemk2:20150215161704p:plain

ip_output()のflags引数は、パケットがIPの擬似ヘッダを含んでいるかどうかを示すためにも使われるが、完全に初期化済みのヘッダが含まれることもある。

13.2.3 入力処理

udp_input()関数のフロー。以下のインターフェイスをサポートしている。

f:id:shigemk2:20150215162620p:plain

ソケットのサイズやアソシエーションをチェックしている。

アソシエーションが適合しない場合はポート到達不能(ICMPが用意しているメッセージ)を返す。普通は送った時の情報を残さず記録を取らないのでエラーメッセージを送っても意味がない。

13.2.4 制御操作

UDPはそこまで複雑なことは出来ないので、その他の制御はIPに丸投げする。

f:id:shigemk2:20150215163731p:plain

connectやselectを使えばUDPのエラーを確認できる。

データグラムソケットがクローズされると、udp_detach()関数が実行される。ブロックとその内容を消去する。

13.3 インターネットプロトコル(IP)

  • ホスト間のアドレス付と経路制御
  • パケット転送
  • パケットのフラグメント化と復元
  • Don't Fragment
  • More Fragments

f:id:shigemk2:20150215164355p:plain

  • NOP
  • オプション終端
  • タイムスタンプ
  • レコードルート
  • ソースルート

IP層の機能にはいろいろなオプションがあるが、現実にはこれらのオプションはほとんど使われていない。

13.3.1 出力処理

ip_output()関数について

f:id:shigemk2:20150215165612p:plain

  • 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用語辞典

インターネット10分講座:経路制御 - JPNIC

13.4 伝送制御プロトコル(TCP)

信頼性のある接続指向のストリーム型トランスポートプロトコルのこと。

TCPとは 【 Transmission Control Protocol 】 - 意味/解説/説明/定義 : IT用語辞典

f:id:shigemk2:20150215173754p:plain

↑入力だとヘッダがなくなっていって、出力だとヘッダが補われていく。

TCPシーケンス番号予測攻撃 - Wikipedia

f:id:shigemk2:20150215174744p:plain

IPレベルでアドレスが扱われるからTCPだとポートしかない。

Transmission Control Protocol - Wikipedia

TCPの制御(スライディングウィンドウ) TCP/IP入門

TCPにおける通信では、ACK(確認応答)を受け取るまでに送出できるデータの範囲であるウィンドウを徐々にスライドさせながら通信を行います。この方式ことを「スラインディングウィンドウ」と呼びます。

確認応答は必ず送る。

【基礎から応用まで】Road to ネットワークスペシャリスト

いろいろなフラグがある。

オプションがついていた。

追記

ちょこちょこ間違っているところがあったので修正しました。