IL: 失われたプロトコル oraccha Plan9日記(http://d.hatena.ne.jp/oraccha/) 2010年5月8日 第四回カーネル/VM探検隊
IL: 失われたプロトコル
oracchaPlan9日記(http://d.hatena.ne.jp/oraccha/)
2010年5月8日 第四回カーネル/VM探検隊
Ken Thompsonに聞く
Q「UNIXを再設計できるとしたら、 何を変えたい?」
A「creat(2)に”e”を付ける」
出典:Ask a google engineer. Ken Thompson,
http://www.google.com/moderator/#15/e=7f3&t=7f3.44&f=7f3.5046
Ken Thompsonに聞く1. ポータビリティ
2. EthernetとIPよりもよい通信
3. プロセス毎の名前空間
4. ファイルシステム用リモートアクセスプロトコル
IL: Internet Link1. ポータビリティ
2. EthernetとIPよりもよい通信
3. プロセス毎の名前空間
4. ファイルシステム用リモートアクセスプロトコル
9P9P
TCP IL
IPIP
EthernetEthernet
IL: Internet Link• 9P向けに設計された軽量でコネクション指向のトランスポートプロトコル
• TCPとUDPの中間的特徴
• 信頼性のあるデータグラム
• 順序保証、再送
• メッセージの区切りの存在
• フロー制御はない
rx(1): リモート実行
• Usage: rx machine command arg...
例)玄柴(plug)で処理を実行
注意:cpu(1)は標準入出力をつなぎ替えないので、上記のような使い方はできない
% rx plug echo 1 2 3 | sed s/1/x/x 2 3
% echo 1 2 3 | rx plug sed s/1/x/(制御が戻らない)
rx(1) over IL
• rxは標準入力がcloseされたとき、0バイトwriteすることでEOFを通知(TCPでは0バイトwriteは無視)
% echo 1 2 3 | rx il!plug!17009 sed s/1/x/x 2 3
% echo 1 2 3 | rx il!plug!17009 sed s/1/x/ |sed s/2/y/x y 3
TCPハーフクローズ• TCPは全二重通信
• shutdown(2)により片方向のみの通信を切断可能
• rsh系コマンドでEOF通知に利用
• Plan 9では未実装... orz
ILの現状
• TCPへの置換えは既定路線だったが、数年前にカーネルからコードが消滅
• 理由:長距離ネットワークへの対応
• ルーティング
• 性能(特にADSLのような非対称網)
ILを使ってみよう
• カーネルの再構築
• /n/sources/extra/il.c
• 参照:http://lufia.org/plan9/doc/inst/il.html
• ndb/cs.cの変更cpu% diff cs.c.orig cs.c164a165> { "il", iplookup, iptrans, 1 },
まとめ• TCPは万能ではない
• メッセージ指向プロトコル
• 例:IL、SCTP、DCCP
• 専用L4プロトコルを作る意義は?
• 例:劣悪な通信環境(モバイル、衛生通信)
SCTP: Stream Control Transport ProtocolDCCP: Data Congestion Control Protocol
続・Ken Thompsonに聞く
Q「Plan 9を再設計できるとしたら、 何を変えたい?」
A「クラウドOS!」
出典:Ask a google engineer. Ken Thompson,
http://www.google.com/moderator/#15/e=7f3&t=7f3.44&f=7f3.5046
続きは懇親会で
Plan9日記(http://d.hatena.ne.jp/oraccha/)
Tokyo Inferno/Plan9 Users Group (TIP9UG)もよろしく!
IL/IPヘッダフォーマットVersion Header
length TOS LengthLengthLengthLength
IdentifierIdentifierIdentifier 0 DF MF Fragment offset
TTLTTL Protocol Header checksumHeader checksumHeader checksumHeader checksum
Source IP addressSource IP addressSource IP addressSource IP addressSource IP addressSource IP addressSource IP address
Destination IP addressDestination IP addressDestination IP addressDestination IP addressDestination IP addressDestination IP addressDestination IP address
IL checksumIL checksumIL checksum Packet lengthPacket lengthPacket lengthPacket length
Packet typePacket type Special Source portSource portSource portSource port
Destination portDestination portDestination port Sequence idSequence idSequence idSequence id
Sequence id (cont.)Sequence id (cont.)Sequence id (cont.) Acked sequenceAcked sequenceAcked sequenceAcked sequence
Acked sequence (cont.)Acked sequence (cont.)Acked sequence (cont.) ----
0 31
Closed
Syncer
Syncee
Established
Closing
ipwriteip/devip.c
ilkick
transmit
ipoput4
etherbwrite
ipread
iliput
interrupt
ipiput4
etherread4
ip/il.c
ip/ip.c
ip/ethermedium.c
etheriq
etherbwriteetheroqpc/devether.c
pc/etherxxxx.c
write(2) read(2)
wq rq
in
oq