by shigemk2

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

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

遅れたので、P514-P521は落としてます。ピンとこない仕様の話が多いらしい

P.514(12.1.2 通信プロトコル)

リンク層

http://www.gailogic.co.jp/ss/sslink.html

プロミスカスモード

プロミスキャス・モード - Wikipedia

データのストライピング

watching timer関数 統計情報の収集や信頼性の低いハードウェアを監視する

12.2 ソケットとプロトコル間のインターフェース

ユーザ要求関数が存在する。

P514より抜粋

f:id:shigemk2:20141227150850p:plain

pru=protocol userの略 プロトコルユーザ要求の意

それぞれの要求関数(なまら長い)

  • pru_attach()
  • pru_detatch()
  • pru_bind()
  • pru_listen()
  • pru_connect()
  • pru_accept()
  • pru_disconnect() pru_shutdown()との違いが分からない
  • pru_shutdown()
  • pru_rcvd() れしーぶでーたの略か
  • pru_send()
  • pru_abort()
  • pru_control()
  • pru_sense()
  • pru_rcvoob() 帯域外データの受信
  • pru_sockaddr()
  • pru_peeraddr()
  • pru_connect2() パイプっぽい
  • pru_fasttimo()
  • pru_slowtimo()

P495より

f:id:shigemk2:20141227152045p:plain

12.2.2 プロトコル制御出力関数

f:id:shigemk2:20141227152859p:plain

1-3行目。関数の型が書いてあるだけ。擬似コードと思われる。5行目 列挙型 7行目 構造体

関数を呼び出すときに構造体に値を入れておく。

制御出力関数 pr_ctloutput

自分で分からない要求があったら下の層に投げる。

12.3 プロトコル間インターフェース

プロトコルファミリー ‐ 通信用語の基礎知識

IPv4のデータをIPv6に変換するとかは少しむずかしい。

中に他のドメインの通信を入れる

12.3.1 pr_output

それぞれのプロトコルは、出力関数に対して異なる呼び出し形式を持っている。

STREAMS - Wikipedia

12.3.1 pr_output

プロトコル出力関数

P527

f:id:shigemk2:20141227160405p:plain

12.3.2 pr_input

プロトコル入力関数

P527

f:id:shigemk2:20141227160513p:plain

12.3.3 pr_ctlinput

制御情報の伝達

P528

f:id:shigemk2:20141227160803p:plain

本がすごく不親切

12.4 プロトコルとネットワークインターフェース間のインターフェース

プロトコルファミリを構成する一連のプロトコルの間で最低位の層は、パケットを送受信するために1つあるいはそれ以上のネットワークインターフェースを取り扱う必要がある。

cf. P513 ネットワークコードを通るパス

  • 内向き
  • 外向き
  • 転送
  • エラー

12.4.1 パケットの送信

  1. インターフェースの選択
  2. ifpを取得
  3. 整形済みのネットワークレベルのパケットを呼び出す

P530

f:id:shigemk2:20141227163858p:plain

12.4.2 パケットの受信

ネットワークインターフェースはパケットを受信したあとにリンク層プロトコルヘッダ内の情報にしたがってそのパケットを適切なネットワーク層プロトコルに転送する

パケットキューを操作するためにいくつかマクロを用意している

出力関数のコード

f:id:shigemk2:20141227164454p:plain

パケットをキューに挿入

f:id:shigemk2:20141227164545p:plain

もう何がなんだか…

Linuxはドライバが専用のスレッドを持っていなかった。

12.5 経路制御

ネットワークシステムはヘテロジニアスなネットワーク環境を想定して設計

第523回:ヘテロジニアスネットワーク とは - ケータイ Watch

  • ゲートウェイ
  • ルータ

f:id:shigemk2:20141227171825p:plain

f:id:shigemk2:20141227171946p:plain

フォワーディング自体は、送信先を決定しているだけの単純なもの。

12.5.1 カーネルルーティングテーブル

カーネルの経路制御機構(外部ポリシーを定義するユーザレベルプロセスによって提供される経路制御関連機構のこと)は第一ホップ経路を判断するためのルーティングテーブルを実装する。

f:id:shigemk2:20141227174230p:plain

f:id:shigemk2:20141227174251p:plain

ブラックホール経路

CentreCOM 8948XL コマンドリファレンス: IP/経路制御

ラウンドトリップタイム

ラウンドトリップタイム - Wikipedia

パスMTU

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

メトリックとは 【 metric 】 - 意味/解説/説明/定義 : IT用語辞典

MTU

Maximum Transmission Unit - Wikipedia

Haskellでごにょごにょしたかったやつ

Haskell のセクションと中置記法 | すぐに忘れる脳みそのためのメモ

``で中置

let hoge x y = x / y
hoge 4 2
4 `hoge` 2

Haskell のリスト操作 : tnomuraのブログ

[1,2,3] ++ [4,5,6]
0:1:[2,3,4]
[1]:2 -- これは出来ない

プログラミングHaskellのfoldr, foldlの説明が秀逸だった件 - あと味

main = do
    print $ sum [1..100]
    print $ foldl (+) 0 [1..100]