手旗信号システムによるIP伝送
手旗信号システムによるIP伝送(Semaphore Flag Signaling System、略称SFSS)は、手旗信号を用いてIPパケットを伝送する
通信プロトコルです。これは2007年の
エイプリルフールにRFC 4824として発表された
ジョークRFCですが、技術的な詳細が規定されています。
概要
SFSSは、国際的な手旗通信であるセマフォア信号を使用し、
IPv4および
IPv6パケットを送受信するリンク層プロトコルです。
物理層には、一般的に太陽光を利用した見通し距離における光学的な無線通信が用いられます。通信を行うインターフェース(信号手)は、2本1組の手旗を振ることでデータ信号や制御信号を送信します。2つのインターフェースが向かい合い、半二重通信を行います。
ビット誤り率は、インターフェースの経験によって大きく変動し、ボーイスカウトレベルで約10⁻³、熟練した水夫レベルで約10⁻⁴程度と予想されます。また、天候や日照条件(夜間など)によって誤り率が大幅に増加する可能性があります。同様に、伝送速度もインターフェースの熟練度に大きく依存します。
プロトコル詳細
用語の定義
リンク: 共通のサブネットを共有する2つのインターフェースで構成されます。
リンクパートナー: インターフェースの通信相手です。
セッション: 1つのIPデータグラムの伝送が完了するまでの期間です。
SFS: 1つの手旗信号。4ビットのデータ信号または制御信号を表します。
IP-SFS: 手旗信号システムでIPデータグラムを伝送すること。
IP-SFSフレーム: IPデータグラムをカプセル化し、IP-SFSヘッダとトレーラを付加したものです。
IP-SFSフレームの構造は以下のようになっています。
[FST] [Protocol] [CksumTyp] [Frame No] [DATA] [CRC] [FEN]
各フィールドは1つのSFSを表し、DATAフィールドは0~510個のSFS信号(0~255オクテット)の可変長です。
FST (Frame STart): フレームの開始を表す制御信号です。
Protocol: インターネットレイヤーのプロトコルコードです。
CksumTyp: チェックサムのタイプを表します。
Frame No: 8ビットのフレーム番号(2つのSFSに分割)。IPデータグラムを分割して送信する際に、フレームの順序を示します。先頭のフレームはN-1、次のフレームはN-2、最後のフレームは0となります。
DATA: IPデータグラム本体。
CRC: 16ビットのCRC(4つのSFSに分割)。初期値は0xFFFFです。
FEN (Frame ENd): フレームの終了を表す制御信号です。
SFSのデータ信号
データ信号は、セマフォア信号のアルファベットに対応した以下の信号を使用します。
(アルファベットは、本来のセマフォア信号に対応)
SFSの制御信号
制御信号には以下のものがあります。
FST (Frame STart): 新しいフレームの開始。
FEN (Frame ENd): 1つのフレームの終了。
SUN (Signal Undo): 現在のフレームで伝送済みのSFSを1つキャンセル。
FUN (Frame UNdo): 現在のフレームの伝送済みのSFSをすべてキャンセル。
ACK (Frame ACK): 受信したフレームの伝送を承認。
KAL (KeepALive): キープアライブ用の制御信号。
NAK (Frame No Ack): 受信したフレームが間違っていることを通知。
RTR (Ready To Receive): 受信側が受信準備完了。
RTT (Ready To Transmit): 送信側が伝送開始の許可を要求。
待機状態
待機状態のインターフェースは、ネゴシエーション済みまたは事前に決められたキープアライブ間隔でKAL信号を送信します。
セッションの開始
セッションは以下の手順で開始します。
1. 送信キューに送信すべきIPデータグラムがある場合、リンクパートナーにRTT信号を送信します。
2. リンクパートナーが受信準備完了の場合、RTR信号を返信します。
3. 送信側インターフェースは、さらにRTT信号とフレーム数を2つのSFS(データ信号)で送信します。
4. 受信側インターフェースは、RTR信号とフレーム数を2つのSFSで返信します。
5. 次のSFS信号がタイムアウト間隔内に到達しない場合、待機状態に移行します。
送信状態
送信状態では、インターフェースはFST信号からIP-SFSフレームの伝送を開始します。
誤ったデータを送信した場合は、SUN信号(1つのデータ信号をキャンセル)、またはFUN信号(該当セッションの全データをキャンセル)を送信して、正しいデータを再送します。
FEN信号を送信した後、リンクパートナーからのACK信号またはNAK信号を待ちます。
ACK信号を受信した場合、次のフレームの送信を開始します。送信するフレームがない場合は、待機状態に移行します。
NAK信号を受信した場合、伝送失敗と判断し、同じフレームを再送します。
ACKもNAKも受信せずタイムアウトした場合も、伝送失敗と判断し、同じフレームを再送します。
同じフレームの再送が5回失敗した場合は、当該データグラムをキューに残したまま待機状態に移行します。
受信状態
受信状態では、インターフェースはリンクパートナーから受信したSFS信号を受信キューに格納します。
FST信号を受信してからFEN信号を受信するまでの間、受信側インターフェースはいつでもFUN信号を送信して、IP-SFSフレームの再送を要求できます。
2つのSFS信号の受信間にタイムアウトが発生した場合、受信中のIP-SFSフレームを削除し、FUN信号を送信できます。
リンクパートナーからの次のSFS信号がタイムアウト期間内に届かない場合、受信キューを削除して待機状態に移行します。
リンクパートナーからSUN信号を受信した場合、最後に受信したデータ信号を削除します。N個のSUN信号を受信した場合は、最後のN個のデータ信号を削除します。フレームにデータ信号がない場合は、SUN信号を無視します。
リンクパートナーからFUN信号を受信した場合、それまでに受信したフレームを削除します。
FEN信号を受信した場合、受信インターフェースはチェックサムを検証します。
チェックサムが正しい場合、ACK信号を送信します。実行中のフレームのフレーム番号が0の場合、受信キューから取り出した全データを上位プロトコルに渡し、受信キューをクリアして待機状態に移行します。
チェックサムが無効な場合、NAK信号を送信します。
コネクション切断
インターフェースが待機状態であり、リンクパートナーからキープアライブ間隔内にSFS信号を受信しない状態が5回続いた場合、コネクションを切断し、インターフェースは解放されます。
リファレンス実装
このシステムのリファレンス実装は、RFC発行前の2006年に「Talking the Fish」プロジェクトで実施されました。SMTPを使用したメール送信実験では、
オーストリアと
スロベニアの国境を流れるムール川を挟んだ対岸での受信に成功しました。送信されたメールには「I am the text, wandering across the river」と書かれていました。
脚注
関連項目
鳥類キャリアによるIP
音響伝送メディアによるIP伝送
腕木通信
光による通信
* スニーカーネット