by shigemk2

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

ネットワークファイルシステム1 歴史と概要 #readDaemon

P425

  • 近代的なシステムはリモートアクセスをカーネル上層部のvnode層で実現

XML用語事典 [セマンティックス]

  • ファイル記述子に対する要求をサーバに送出

ユーザー

カーネル UNIX United vnode

ハード

Unixの決まり 所有者 グループ その他 みたいなことを正しく動くことを「セマンティクス」がただしく動くという。「使い勝手」

NFSだから特別に分岐する部分はあるけども、基本的なUnixの動きと合致していないといけない。

FTPをマウントするのではなく、コマンドで使うあたりを想定

カーネルの最下部のデバイスドライバで実装 ネットワークでデータを読み書き

キャッシュの整合性がないので、セマンティクス的におかしい

Andrew File System - Wikipedia

Server Message Block - Wikipedia

Samba - Wikipedia

パブリックドメイン - Wikipedia

初期のNFSはSun社によるもの パブリックドメインは著作権を放棄したもの 仕様を公開しただけで、ソースコードは公開していない(オープンソースではない)

BSD - Wikipedia

inode - Wikipedia

NFSバージョン4は外部投げ(認証とか、ベンダーごとの独自実装が組み込まれている)

今はNFSバージョン4はリリースされているはず

vnode(万能inodeみたいなもの)

inode(ファイルシステムの中にあるファイルの情報 ファイルシステムによってはinodeがなかったりしているので、inodeを一般化したもの)

Linuxはvnodeって言わない

セマンティクスは整合性みたいな感じ

セマンティック・ウェブ - Wikipedia

状態をもたないので動作が継続する

ステートレスサービスとステートフルサービス - OpenStack 高可用性ガイド - カレント

ネットワークファイルシステム2 NFSの構造と動作の仕組み #readDaemon

P431

NFSはクライアント・サーバ型のアプリケーション

RPCとXDRのライブラリはオープンソースでライセンスの制限はない

RPC - Wikipedia

XDR - Wikipedia

TDP UDP両方のプロトコルが使える

Transmission Control Protocol - Wikipedia

User Datagram Protocol - Wikipedia

冪等 - Wikipedia (idempotence ラテン語)

inodeを再利用 vnodeはより大きな情報を取得している (inodeと世代番号で一意)

ファイルを削除してすぐ作ったらinodeは再利用される可能性はある

ファイル識別子、inode、世代番号でファイルを識別する

全ページの添付ファイル一覧 - SIGOS

ファイルシステム識別子(ファイルシステムが違うとinodeがかぶる)

識別子はid番号

永続的識別子(ファイルハンドルに永続性が保証される)

ファイルハンドル(inodeと識別子があるから当分かぶることはないよねって話)

NFSはステートレス

ステートレスなので情報は持たない

サーバが受け取るすべてのRPC要求は、それ自体で完結してる。なので、起動したサーバは到着する要求を単純に処理すればいい

サーバは要求の中身だけを見ていればいいので、どのクライアントが要求を出したかを知る必要がない

しかし、状態がわからない

unlink ファイルシステムからは消滅するが、データとしてはディスクの中に残っている

協調ロック プロセスからの明示的な実行要求があったときのみ実行されるロック機構(職質)

あと、スループットが低下する(クライアントからの書き込みを複数回行う必要があるときがある)

字句解析 - Wikipedia

ファイルの末尾に拡大するのではなければ、inodeの確保とかは必要ない

NFS実装は8Kバイトブロックのバッファを使用している

クッキーは、サーバが起動しているあいだ変化せず、サーバの再起動のたびに新しくなることが保証されている

処理するひとつの単位が8キロバイト(上限ではなく、区切り)

UGU: Unix Guru Universe - Rick Macklem

NFC バージョン3

  • アクセスコール
  • リース技術
  • sosend soreceive カーネルの中の関数
  • 接続指向型(TCPのことだろうか
  • デーモンが複数存在する

Client → Server (/etc/exports)

ネットワーク・インフォメーション・サービス - Wikipedia

ポートマップ - Wikipedia

tcp 接続したらつながっている(ストリーム) udp 送りっぱなし(データグラム)

ポート番号の待ち受けとしてのソケット

マウントしたら繋ぎっぱなしにする

ずっとサーバへの要求を繰り返すのがハードマウントで、一定数繰り返したあとにシステムコールを終了させるのがソフトマウント、この2つの他に割り込み可能マウントがある(これは中間解)

輻輳 - Wikipedia

輻輳ウィンドウ - Security Akademeia

フラグメント - Wikipedia

フラグメンテーション - Wikipedia

セキュリティ

セキュリティへの配慮が欠けている

ファイルのデータはネットワーク上で平文で送られる(傍受されたら丸見え)

ケルベロス認証 - Wikipedia