TCP/IPプロトコル・スタックの省メモリ開発事例(後編) ――ROM 8Kバイト,RAM 0.5KバイトにTCP/IPプロトコル・スタックを収める
● 性能をある程度犠牲にしても信頼性を確保
TCP/IPを使用するユーザにとってもっとも重要なものは,データの送受信に対する信頼性の確保であると筆者らは考えました.そこで,「TCPの信頼性に関する機能は実装し,転送性能に関する機能は削除する」という方針で,機能と実装方法の見直しを行うことにしました.
前編の「TCP/IPで外せない機能をリストアップする」に示した機能はすべて実装しました.一方,以下のように処理を簡略化することにより,(転送性能はある程度犠牲になるが)コード量を低減することができました.
1) 再転送
再転送を行う間隔は,RTT(round trip time;パケットを送信して相手から応答を受信するまでの時間)に応じた値ではなく,一定の値としました.ネットワークの混雑状況に対応するため,再転送を行うたびに間隔を2倍にするしくみ(指数バックオフ)は実装しました.
2) ゼロ・ウィンドウ・プローブ
ゼロ・ウィンドウ・プローブを送信する間隔は,再転送の場合と同じ方式にしました.
3) 確認応答
データを受信した場合,1パケットごとに確認応答を送信するようにしました.また,データを送信する場合,1パケットごとに確認応答を待つようにしました.
そのほか,APIについては,前回と同様にITRON TCP /IP API仕様に準拠させることにしました.ただし,APIで指定されたパラメータ・エラーのチェックについて,アプリケーション側で実現可能なものはAPI側では省略しました.