2.4.1 UDPプロトコルを使用した通信
UDP通信機能を使用すると,UDPプロトコルを使用した高速通信ができます。
UDPプロトコルを使用した通信では,メッセージをパケット単位で管理し,1パケットを1UDPデータグラムとして送受信します。パケットのサイズは,RPC関連定義のrpc_udp_packet_sizeオペランドで指定できます。
メッセージがrpc_udp_packet_sizeオペランドに指定したパケットサイズを超えている場合は,メッセージを複数のパケットに分割して送信します。受信側は,パケットを受信すると,分割された複数のパケットを元のメッセージに組み立てます。
UDPプロトコルを使用した通信では,パケット(分割されたメッセージ)の送信に対して,肯定応答(ACK),否定応答(NACK),およびタイマ監視を行います。これによって,回線障害,回線ビジーなどでメッセージがロストした場合でも,再送制御によってメッセージを保証します。
送信側は,最後のパケットを送信したあと,再送タイマを設定します。再送制御は,ここで設定した再送タイマを使用して行います。再送タイマは,UDPグループ情報関連定義のeeudpdef,clgrpdef,またはmyudpsnddef定義コマンドの-wオプション(輻輳制御時は,-Wオプション)によって指定します。
通信処理の流れを次に示すケースに分けて説明します。
- 正常ケース
- 正常ケース(受信側パケットロスでの再送発生)
- 正常ケース(再送タイマでの再送発生)
- 正常ケース(UDP用受信バッファ(UIBF)の不足)
- 異常ケース(タイムアウト上限超過)
- <この項の構成>
- (1) 正常ケース
- (2) 正常ケース(受信側パケットロスでの再送発生)
- (3) 正常ケース(再送タイマでの再送発生)
- (4) 正常ケース(UDP用受信バッファ(UIBF)の不足)
- (5) 異常ケース(タイムアウト上限超過)
(1) 正常ケース
正常ケースでの通信の流れを次の図に示します。
図2-16 正常ケースでの通信の流れ
![[図データ]](figure/zu020410.gif)
- 説明
- 送信側は,パケットを送信したあと,再送タイマを設定します。
- 受信側は,すべてのパケットを受信したあとに肯定応答を返信します。
- 送信側は,肯定応答の受信によってメッセージの送達確認を行います。
(2) 正常ケース(受信側パケットロスでの再送発生)
正常ケース(受信側パケットロスでの再送発生)での通信の流れを次の図に示します。
図2-17 正常ケース(受信側パケットロスでの再送発生)での通信の流れ
![[図データ]](figure/zu020420.gif)
- 説明
- 送信側は,パケットを送信したあと,再送タイマを設定します。
- 受信側は,パケットのロストを検出した場合,否定応答を返信します。
- 送信側は,否定応答で指示されたパケットを再送します。
- 受信側は,送信側からの再送によってすべてのパケットを受信したあと,肯定応答を返信します。
- 送信側は,肯定応答の受信によってメッセージの送達確認を行います。
(3) 正常ケース(再送タイマでの再送発生)
正常ケース(再送タイマでの再送発生)での通信の流れを次の図に示します。
図2-18 正常ケース(再送タイマでの再送発生)での通信の流れ
![[図データ]](figure/zu020430.gif)
- 説明
- 送信側は,パケットを送信したあと,再送タイマを設定します。
- 最後に送信したパケットがロストした場合(または送信先からの送達確認がロストした場合),送信側は,再送タイマで設定した時間まで待ったあとタイムアウトします。このとき,送信側は,最後に送信したパケットを再送して,再び再送タイマを設定します。
- 受信側は,パケットのロストを検出した場合,否定応答を返信します。
- 送信側は,否定応答で指示されたパケットを再送します。
- 受信側は,送信側からの再送によってすべてのパケットを受信したあと,肯定応答を返信します。
- 送信側は,肯定応答の受信によってメッセージの送達確認を行います。
(4) 正常ケース(UDP用受信バッファ(UIBF)の不足)
正常ケース(UDP用受信バッファ(UIBF)の不足)での通信の流れを次の図に示します。
図2-19 正常ケース(UDP用受信バッファ(UIBF)の不足)での通信の流れ
![[図データ]](figure/zu020440.gif)
- 説明
- 送信側は,パケットを送信したあと,再送タイマを設定します。
- 受信側は,UDP用受信バッファ不足によって受信できなかったパケットがあった場合,否定応答を返信します。
- 送信側は,否定応答を受信してもすぐには再送しないで,再送タイマのタイムアウト時に否定応答で指示されたパケットを再送します。
- 受信側は,送信側からの再送によってすべてのパケットを受信したあと,肯定応答を返信します。
- 送信側は,肯定応答の受信によってメッセージの送達確認を行います。
(5) 異常ケース(タイムアウト上限超過)
異常ケース(タイムアウト上限超過)での通信の流れを次の図に示します。
図2-20 異常ケース(タイムアウト上限超過)での通信の流れ
![[図データ]](figure/zu020450.gif)
- 説明
- 送信側は,パケットを送信したあと,再送タイマを設定します。
- 最終パケットがロストした場合,または受信側からの肯定応答,否定応答がロストした場合,再送タイマがタイムアウトします。この場合,最終パケットの再送後,再度,タイマを設定します。
- タイムアウト回数がタイムアウト上限に達した場合は送達確認失敗となり,送信エラーになります。