手旗信号システムによるIP伝送
手旗信号システムによるIP伝送(てばたしんごうしすてむによるアイピーでんそう)は、手旗信号によってIP伝送を行う通信プロトコルである[1][2]。
これは2007年のエイプリルフールにRFC 4824として発行されたジョークRFCである。
概要
[編集]この手旗信号システム(英: Semaphore Flag Signaling System、略称 SFSS)を用いた伝送は、国際的な手旗通信の一つであるセマフォア信号を用いて、IPv4およびIPv6のパケットを送受信するリンク層のプロトコルである。
一般的に、物理層は太陽光と見通し距離における光学的な無線通信を用いる。
インタフェース(信号手)が2本1組の手旗を振ることによって、データ信号や制御信号を送信する。2つのインタフェースが向かい合い、共通のチャネル上で半二重の通信を行うことになる。
ビット誤り率の範囲はインタフェースの経験によって 10-3 (ボーイスカウトレベル)から10-4 (プロの水夫)程度が予想される。また、気象状況や日照状況(例えば夜間など)によって誤り率が大幅に増える可能性もある。
同様に伝送速度もインタフェースの経験に大きく依存して変化する。
プロトコル詳細
[編集]用語の定義
[編集]- リンク
- 1つのリンクは共通のサブネットを共有する2つのインタフェースからなる。
- リンクパートナー
- インタフェースの相手側。
- セッション
- 1つのIPデータグラムの伝送が終わるまでを1セッションという。
- SFS
- 1つの手旗信号。4ビットのデータ信号、あるいは制御信号を意味する。
- IP-SFS
- 手旗信号システムでIPデータグラムを伝送すること。
IP-SFSのフレーム
[編集]IPデータグラムは、IP-SFSフレームにカプセル化され、前後にIP-SFSのヘッダとトレーラが付加される。以下にIP-SFSのフレームのイメージを示す。各フィールドは、1つのSFSを表す(DATAのみ 0 - 510 個の可変長である)。
+0 | +1 | +2 | +3 | +4 |
---|---|---|---|---|
FST | Protocol | CksumTyp | Frame No | Frame No |
DATA | ||||
CRC | CRC | CRC | CRC | FEN |
- FST
- フレームの開始。
- Protocol
- インターネットレイヤーのプロトコルコード
コード | 意味 |
---|---|
0 | なし |
1 | IPv4 |
2 | IPv6 |
3 | gzip 圧縮された IPv4 |
4 | gzip 圧縮された IPv6 |
5 - 15 | 将来使用のため予約 |
- CksumTyp
- チェックサムのタイプ
コード | 意味 |
---|---|
0 | なし |
1 | CCITT CRC 16 (多項式: x^16 + x^12 + x^5+1) |
2 - 15 | 将来使用のため予約 |
- Frame No
- 8ビットのフレーム番号(2つのSFSに分割)。IPデータグラムを例えば N 個のフレームに分割する場合、先頭のフレーム番号は N-1、2番目のフレーム番号は N-2、最後のフレーム番号は 0 になる。
- DATA
- IPデータグラム本体。0 - 510個のSFS信号であり、0 - 255オクテットを意味する。
- CRC
- 16ビットのCRC(4つのSFSに分割)。プリセットは 0xFFFF。
- FEN
- フレームの終了。
SFSのデータ信号
[編集]データ信号は、以下を使用する(アルファベットは、本来のセマフォア信号)。
A 0x00 |
B 0x01 |
C 0x02 |
D 0x03 |
E 0x04 |
F 0x05 |
G 0x06 |
H 0x07 |
I 0x08 |
J 0x09 |
K 0x0A |
L 0x0B |
M 0x0C |
N 0x0D |
O 0x0E |
P 0x0F |
また、制御信号は以下を使用する。
Q FST |
R FEN |
S SUN |
T FUN |
U ACK |
V KAL |
W NAK |
X RTR |
Y RTT |
Z 未使用 |
Error 未使用 |
- 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 信号を送る。
セッションの開始
[編集]セッションの開始は以下のようになる。
- 送信すべきIPデータグラムが送信キューにある場合には、リンクパートナーに RTT 信号を送る。
- リンクパートナーの受信準備ができている場合には、RTR 信号を返す。
- インタフェースは、さらに RTT 信号と、フレーム数を2つの SFS (データ信号)で送る。
- リンクパートナーは、RTR 信号と、フレーム数を2つの SFS で送り返す。
次の 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」プロジェクトの中で実施された[3]。
本システム上でSMTPを使用して電子メールの送信が行われ、オーストリアとスロベニアの国境を流れるムール川を渡った対岸で受信に成功した。その電子メールには "I am the text, wandering across the river" と書かれていた。
脚注
[編集]出典
[編集]- ^ The Transmission of IP Datagrams over the Semaphore Flag Signaling System (SFSS) (英語). 1 April 2007. doi:10.17487/RFC4824. RFC 4824。
- ^ 佐藤哲司「RFCについて-Joke RFCを通じてRFCの理解を深める-」『海技教育機構論文集』第8巻、海技教育機構、2020年、31-36頁、doi:10.34486/jmetsjournal.8.0_31、ISSN 2435-6557、NAID 40022231309。
- ^ “Talking the Fish”. 2024年11月30日閲覧。