手旗信号システムによるIP伝送（てばたしんごうしすてむによるアイピーでんそう）は、手旗信号によってIP伝送を行う通信プロトコルである。

これは2007年のエイプリルフールにとして発行されたジョークRFCである。

 概要 
この手旗信号システム（、略称 SFSS）を用いた伝送は、国際的な手旗通信の一つであるセマフォア信号を用いて、IPv4およびIPv6のパケットを送受信するリンク層のプロトコルである。

一般的に、物理層は太陽光と見通し距離における光学的な無線通信を用いる。

インタフェース（信号手）が2本1組の手旗を振ることによって、データ信号や制御信号を送信する。2つのインタフェースが向かい合い、共通のチャネル上で半二重の通信を行うことになる。

ビット誤り率の範囲はインタフェースの経験によって （ボーイスカウトレベル）から（プロの水夫）程度が予想される。また、気象状況や日照状況（例えば夜間など）によって誤り率が大幅に増える可能性もある。

同様に伝送速度もインタフェースの経験に大きく依存して変化する。

 プロトコル詳細 

 用語の定義 
 リンク 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のデータ信号 

データ信号は、以下を使用する（アルファベットは、本来のセマフォア信号）。

A0x00B0x01C0x02D0x03E0x04F0x05G0x06H0x07I0x08J0x09K0x0AL0x0BM0x0CN0x0DO0x0EP0x0F

また、制御信号は以下を使用する。

QFSTRFENSSUNTFUNUACKVKALWNAKXRTRYRTTZ未使用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」プロジェクトの中で実施された。

本システム上でSMTPを使用して電子メールの送信が行われ、オーストリアとスロベニアの国境を流れるムール川を渡った対岸で受信に成功した。その電子メールには "I am the text, wandering across the river" と書かれていた。