メインコンテンツまでスキップ

5. 接続試行 (Connection Attempts)

この時点までに受信したアドレスのリストが構築されると、クライアントは接続を試みます。不合理なネットワーク負荷を避けるため、接続試行は同時に行うべきではありません (SHOULD NOT)。代わりに、最初に単一のアドレスへの1つの接続試行が開始され、その後リスト内の他の試行が1つずつ続きます。新しい接続試行を開始しても以前の試行には影響しません。複数の接続試行が並行して発生する可能性があります。接続試行の1つが成功すると (通常はTCPハンドシェイクが完了したとき)、まだ成功していない他のすべての接続試行はキャンセルされるべきです (SHOULD)。まだ接続として試行されていないアドレスは無視されるべきです (SHOULD)。その時点で、非同期DNSクエリはキャンセルされることがあります (MAY)。新しいアドレスはこの接続には使用されないためです。ただし、DNSクライアントリゾルバーは、短期間 (推奨は1秒) ネットワークからのDNS応答を処理し続けるべきです (SHOULD)。これらはDNSキャッシュに格納され、後続の接続に使用できるためです。

単純な実装では、次の接続試行を開始する前に待機する時間について固定の遅延を持つことができます。この遅延は "Connection Attempt Delay" (接続試行遅延) と呼ばれます。デフォルトの遅延の推奨値は250ミリ秒です。より洗練された実装の遅延は、TCPの再送信タイマー [RFC6298] に基づいて、前の試行が2番目のTCP SYNを送信する時刻に対応する必要があります。クライアントが同じホストまたはプレフィックスへの他の接続から収集した履歴RTTデータを持っている場合、この情報を使用して遅延に影響を与えることができます。このアルゴリズムは、最初のSYN再送信の時刻のみを近似しようとすべきであり、指数タイマーバックオフの影響を受ける可能性のあるそれ以上の再送信は考慮しないことに注意してください。

接続試行遅延は、特に履歴データを使用して計算される場合、下限を持つ必要があります (MUST)。より具体的には、後続の接続は前の試行の10ミリ秒以内に開始してはなりません (MUST NOT)。推奨される最小値は100ミリ秒であり、これは "Minimum Connection Attempt Delay" (最小接続試行遅延) と呼ばれます。この最小値は、高パケット損失率が存在する場合の輻輳崩壊を避けるために必要です。接続試行遅延は、"Maximum Connection Attempt Delay" (最大接続試行遅延) と呼ばれる上限を持つべきです (SHOULD)。現在推奨される値は2秒です。