分散アルゴリズム輪講 3章 通信プロトコル 遠藤 敏夫 本章のプロトコル (1) Balanced Sliding-window プロトコル 直接つながれた2プロセス間でデータ列をやりとり 双方向 メッセージの消失がありうる通信路上で、信頼できる通信 OSIモデルのデータリンク層に相当 (2) Timer-based プロトコル (間にノードが挟まっているかもしれない)2プロセス間でデータ列を やりとり 単方向 通信チャネルの概念あり メッセージの消失や複製がありうる通信路上で、信頼できる通信 OSIモデルのトランスポート層に相当 メッセージを送りつけるだけでは ダメ プロセスpからプロセスqへデータ列w0, w1, w2...を送信 消失!! <6,w6> 送信ユーザ 通信プロセスp <5,w5> 通信プロセスq qに一部メッセージが届かない問題 pがそのことに気づかない問題 受信ユーザ 予備知識: Acknowledgement 通信プロセスp 通信プロセスq <data,1,w1> <ack,1> <data,2,w2> <data,2,w2> <ack,2> × qにdataメッセージが届いたら、 pにackを返信 pにackがしばらく届かなけれ ば、再送 再送も失敗する可能性はある が、「失敗した」とpが認識でき ることが重要 プロトコルが満たすべき性質と は? 受信プロセスに届いたデータは正しい (safety property) データは受信プロセスにいつかは届く(かつ送信 プロセスが認識)、またはエラーを送信プロセス が認識 (liveness property) 3.1 The Balanced Sliding-window Protocol 3.2 A Timer-based Protocol Balanced Sliding-windowプロト コルの概要(1) 2プロセスp, qが双方向に送信 無限列のデータを、互いに歩調を合わせながら送信 メッセージが消失、順番入れ替わりするかもしれない通 信路を利用 配列inp 配列inq 配列outp 配列outq 通信プロセスp 通信プロセスq Balanced Sliding-windowプロト コルの概要(2) 0以上の適当な定数lp, lqを用意(いわば歩調の「余裕」) プロセスpはi番目データを<pack, inp[i], i>の形のパケッ トとして送信。ただし、outp[0..i-lp]がすでに受信済みであ るときのみ プロセスqが<pack, inp [i], i>を受け取ったとき、qは inq[0..i-lp]の送信がすでに成功したことを知る つまり、 <pack, inp [i], i> は<pack, inq[i-lp], i-lp>に対するAck の役割を果たしている p, qを入れ替えても同様 Balanced Sliding-windowプロト コルが満たすべき性質 安全な配達: spが、pがこれからqから受け取るデータ番号の最小値 であるとき、(sqも同様) outp[0..sp-1]=inq[0..sp-1]かつ outq[0..sq-1]=inp[0..sq-1] いつかは配達: 任意のk≧0に対して、いつかはsp ≧kかつsq ≧k 変数の説明 プロセスpが持つ変数 定数lp, lq (前述) 入力データinp[] 出力データoutp[]: 初期値は全要素とも‘udef’ sp: まだqから受け取っていないデータ番号の最小値。初 期値0 ap: まだqからackを受け取っていないデータ番号の最小 値。初期値0 プロセスqも同様 Balanced Sliding-windowプロト コル Algorithm 3.1 アクションSp(送信): sp+lp未満の番号のデータのみを送 ることができる アクションRp(受信): パケットを受け取ったら、必要に応じ てsp, apを更新 アクションLp(消失): p宛てのパケットのどれかが消える かもしれない ただし、Qpはp宛てのパケットの集合 Balanced Sliding-windowプロト コルが満たす不変条件 P i s p : outp [i ] udef (0 p ) i sq : outq [i ] udef (0 q ) (1 p ) pack, w, i Q p w inq [i ] (i sq lq ) pack, w, i Qq w in p [i ] (i s p l p ) outp [i ] udef outp [i ] inq [i ] (a p i lq ) outq [i ] udef outq [i ] in p [i ] (aq i l p ) a p sq aq s p (1q ) (2 p ) (2q ) (3 p ) ( 3q ) Lemma: Pはどんなconfiguration(=pの状態+q の状態+Qpの状態+Qqの状態)に対しても成り立 つ 不変条件の証明の方針 帰納法で証明 初期configurationに対してPは成り立つ あるconfigurationに対してPが成り立つとき、そ こから遷移したconfigurationに対してはどうか? Lp Sq Lq Sp Sq Sp Sq Rp 不変条件の証明の一部 (2p)に注目。あるconfigurationでPが成り立っているとき、 SP: SPはoutp, apを変更しないので、SPによる遷移後も (2p)が成り立つ Sq ,Rq, Lp, Lqも同様 Rp: Rpはoutp[i]の値をudefからwに変えうる(<pack,w,i> 受信時)。 このパケットはRp適用前にはQpにあったので、(1p)よりw=inq[i]。 ap:=max(ap,i-lq+1)はap>i-lqを満たす。 以上よりRpは(2p)を保存する。 Pを使ってうれしいこと(1) 「安全な配達」が成り立つ 証明: (0p), (2p), (0q), (2q)より。 Pを使ってうれしいこと(2) 「いつかは配達」を証明するには仮定が必要 lp+lq>0 通信路が全く通じないと困る あるパケットの送信actionが無限に長い時間適用可能なら、無 限の頻度で(infinitely often)送信される 同一パケットが無限の頻度で送信されるなら、無限の頻度で受 信される Pを使ってうれしいこと(3) 「いつかは配達」の証明の概略 Pが成り立つとき、pによる<pack,inp[sq],sq>の送信、もし くはqによる<pack,inq[sp],sp>の送信のいずれかは適用 可能である 前の仮定より上のパケットはいつか相手に届く 相手に届いたとき、sqかspのどちらかが増加する 定数lp, lqの選び方について lp, lqは通信プロセスが使うメモリ量に影響 pはinp[]のap以前の部分にアクセスしない⇒ある時点で アクセスしうるinp[]の要素はlp+lq個以内 outp[]の要素がudef以外なのはsp+ lp+lq番目以下⇒通 信プロセスが持っておくべきoutp[]の要素はlp+lq個以内 必要メモリ量は2(lp+lq)で、lp, lqが小さいほどメモリ 節約。 一方、小さすぎると通信オーバラップができず、性 能低下 3.1 The Balanced Sliding-window Protocol 3.2 A Timer-based Protocol Timer-basedプロトコルの概要 単方向 接続(connection)オープン・クローズあり 接続をクローズしたら、その情報を捨ててよい タイムアウトあり 時間の概念利用 一定時間以内に、送信ユーザに「送信成功」「送信失 敗」のいずれかを知らせる タイマー タイマーは実数変数 時間がxたつと全タイマーの値がx減る 説明の上では大域時間の存在を考えるが、プロセス自体は 大域時間にアクセスせず、局所的なタイマーのみを使う t1=50 t2=40 時間30経過 t1=20 t2=10 本プロトコルで使われるタイマー (1) 時間切れパケットは消失 accept St deliver Rt 成否報告 Ut[] 通信プロセスq 受信ユーザ 送信ユーザ 通信プロセスp 本プロトコルで使われるタイマー (2) 送信プロセスp: 接続タイマーSt。一定時間(S)送信できなければ接続切断 各送信データのタイマーUt[] 一定時間(U)送信できなければ、または 一定時間Ackが返ってこなければ そのデータの送信は失敗したと見なす 受信プロセスq: 接続タイマーRt。一定時間(R)受信できなければ接続切断 通信路: 各パケットのタイマーρ。受信前に一定時間(μ)が過ぎたパケットは消失 する Timer-based プロトコルが満た す性質 No loss: 各データはaccept後、一定時間以内に qが受信ユーザにdeliver pが送信ユーザにエラー報告 のいずれかが成される (両方成されてしまう可能性はある) Ordering: qがdeliverするデータの番号は単調増加 変数の説明 変数: Figure 3.3に加え、 送信側変数 inp[]: 送信データ列 Ut[]: 各データのタイマー errorp[]: 各データの送信成否 パケットの説明 pからqへのパケット <data,s,i,w,ρ> s: start-of-sequenceビット。1のときオープン要求 i: データ番号 w: データ ρ: タイマー qからpへのパケット <ack,i,ρ> i: データ番号 (i未満は受け取ったよ、の意) ρ: タイマー Timer-basedプロトコル Algorithm 3.4: 送信側プロトコル Algorithm 3.5: 受信側プロトコル Algorithm 3.6: その他 Timer-basedプロトコルが満たす 不変条件 配布資料参考 これらを満たすためには、 R≧μ+U S≧R+2μ である必要 Ok(i)≡(error[i]=true)∨(qがi番目データをdeliver済み) pr=qが最後にdeliverしたデータ番号 不変条件の説明(ごく一部)(1) (6) 受信側qで接続中なら送信側pでも接続中で あり、St≧Rt+μ(送信側の方が長生き) Rqで受信側タイマーがRに更新される。近い過去(μ以 内)において送信側タイマーがS(≧R+2μ)に更新され ているはずなので。 (7) ackが通信路にあるとき、pで接続中であり、 ackよりpの接続の方が長生き Sqでack(タイマー値μ)が送信された時点において Rt≧0である。このときSt≧μなので。 不変条件の説明(ごく一部)(2) (10) B+Low以下のiについてOk(i) Lowが増え得るのはRp(Ack受け取り)かEp(タイムア ウト)である。前者のときはdeliver済み((13)より)なの でok, 後者のときはerror(i)=trueとなるのでok Timer-basedプロトコルはNo lossを満たす Epは、Ut[B+Low]=-2μ-R-λとなる前に適用され ることを仮定 No loss: 各データはaccept後、U+2μ+R+λ時間 以内に、deliverされるか、エラー報告される No lossの証明の概略 Accept済みのIについて一定時間以内にOk(I)とな ることを示したい 接続がクローズされているとき、I<Bなので(9)よ りOk(I)が成り立つ 接続がオープンされているとき I≧B+Lowのとき、inp[I]送信後2μ+R以内にdeliverま たはEp適用可能となる。deliver~送信の余裕U, Ep適 用可~適用の余裕λを足して、 U+2μ+R+λ以内に Ok(I) I<B+Lowのとき、(10)よりOk(I)が成り立つ Orderingについて Ordering: qがdeliverするデータ番号(inpにおけ る)は単調増加 Rqにおいて 接続が閉じていたとき、新たに受け取るデータはprよ り大きいはず 接続がすでに開いていたとき、新たに受け取るデータ はB+Exp=pr+1 ??Timer-basedプロトコルに関し て疑問 「通信路上でμ時間たったパケットは消失」…現実には実現 可能か? パケットに送信時刻を記録し、受信ノードや中継ノードで チェック⇒みんなの時刻がそろっていなければ不可能 実用上のプロトコルでは、時刻のかわりに中継ノード数を 利用することも(IPヘッダのTTL) この仮定が崩れ、古いパケットをqが受け付けてしまうと、 (6)が崩れる
© Copyright 2024 ExpyDoc