ただ送るだけ
最初の例として、何かまずいことが起きる可能性を心配する必要がないので、できるだけ簡単なものを考えるよう。
データは一方向のみに伝送
される。送信側及び受信側のネットワーク層はいつでも準備が整っている
。処理時間は無視
できる。無限のバッファ領域が利用可能
である。そして、中でもデータ・リンク層の間の通信チャネルは決してフレームを壊したり、失ったりしない
。この完全に非現実的な「ユートピア」とあだ名を付けたプロトコルは、単位これから作るものの基本的な構造を示すためだけのものである。
プロトコルは送信者と受信者という二つの別々の手続きから構成されている。送信者は送信元マシンのデータ・リンク層で動作し、受信者は宛先のマシンのデータ・リンク層で動作する。順序番号や確認通知は用いないので、MAX_SEQは不要である。
イベントのタイプとして可能なのはframe_arrival(すなわち損傷を受けていないフレームの到着)
だけである。
送信者は、
データをできるだけ早く回線に送り出すだけの無限whileループの状態
にある。ループの本体は、(常に親切な)ネットワーク層からパケットをとってくる
事、変数sを用いて出力フレームを作成
すること、そしてフレームを送り出す
ことの三つの手続きで構成されている。このプロトコルではフレームのinfoフィールドだけが使用
される。というのは、他のフィールドは誤り制御、フロー制御に関係しているが、ここでは誤りやフロー制御の制約は存在していないからである。
infoフィールドとは
データフレームのinfoフィールドは単一のパケットを格納している。
...
繰り返し何なるが、パケットとフレームの関係を理解することが重要である。ネットワーク層はトランスポート層からメッセージを受け取り、ネットワーク層ヘッダーを付加してパケットを構築する。このパケットがデータ・リンク層に渡され、出力フレームのinfoフィールドに入れられる。
p207
逐次確認
フレームが溢れるのを防ぐことを試みる
送信者が
受信者が処理できるより早くフレームで溢れさせるのを防ぐ
問題に挑戦しよう。このような状況は現実で容易に起こるので、それを防ぐことは非常に有用
である。ただし、通信チャネルにはまだ誤りがないものとし、データ・トラフィックはまだ単方向である。
一般的な解決策 受信者が送信者に送信許可を伝えるフィードバックを返す
受信者が送信者にフィードバックを返すようにすることである。パケットをネットワーク層に渡した後に、
受信者は小さなダミー・フレームを送信者に送り返し、送信者に次のフレームを送信して良いという許可を与える
。1フレーム送った後、送信者は小さなダミー(すなわち確認通知)フレームが届くまで、暇つぶしをしなければならない
。この遅延は、フロー制御プロトコルの簡単な例である。
送信者がフレームを一つ送ると、先に進む前に確認通知を待つプロトコルを逐次確認(stop-and-wait)と呼ぶ。
誤り訂正の追加
受信したフレームが誤っているとそれに関わるプロトコルに悪い影響を及ぼす
今度は通信チャネルの通常の状況である。誤りがある場合について考えてみよう。フレームは損傷を受けたり完全い失われたりする。しかし、フレームが伝送中に損傷を受けても、受信側のハードウェアがチャックサムを計算する際に、これを検出するものと仮定しよう。もしーありそうにないことであるがーフレームが損傷を受けているにも関わらずチェックサムが正しくなっていると、
このプロトコル(そして他のすべてのプロコトル)は誤りを起こす(すなわち、正しくないパケットをネットワーク層に届ける)
同じフレームかどうかを判別するための順序番号
受信者が初めて見るフレームと再送とを区別できるようにする手段である。これを実現するための自明な方法は、送信者が送信する各フレームのヘッダーに順序番号を付加することである。
ヘッダーはプロトコルによって順序番号に1ビット、数ビット、あるいは複数バイトを提供する。重要な点は、プロトコルが正しく動作するのに十分なだけ大きな順序番号を運ぶことができなければならない。
フレームが届くか傷ついて届くか、届かないかでフレームを送る内容が決まる
あるフレームを送信してタイマーを起動すると、送信者は何か面白いことが起こるのを待つ。三つの可能性がある。すなわち、
確認通知フレームが損傷なく届く
か、損傷を受けた確認通知フレームがたどり着くか
、タイマーが切れる
かのいずれかである。正しい確認通知が到着すると、送信者はネットワーク層から次のパケットを取り出してバッファに入れ、以前のパケットに上書き
する。順序番号も進められる
、損傷を受けたフレームが到着するかタイマー切れになると、バッファも順序番号も変更されず、そのコピーが送信
される。すべての場合において、ついで、バッファの内容(次のパケットまたは重複のいずれか)が送信
される。
正しいフレームが受信者に到着すると、順序番号が検査されて重複かどうか調べられる。重複でなければ受理されてネットワーク層に渡され、確認通知が生成される。重複したフレームや損傷を受けたフレームはネットワーク層に渡されないが、最後に正しく受信したフレームの確認通知を引き起こし、送信者に次のフレームに進むか損傷したフレームの再送を促す。