あれの開発記 29ページ目 ARPの件、再び [SilentC]
投票感謝キャンペーンは以下のアドレスで行っています。
http://hamayan.blog.so-net.ne.jp/2008-09-01-2
UDPでの一発目の送信で必ずこける話を以下のアドレスでやりましたが、
http://hamayan.blog.so-net.ne.jp/2008-08-31-4
実は最初の一回目だけではなかったと言う話です。
通常ARPキャッシュのデータには生存時間が設定され、古いデータは使われなくなります。
多分SilentCの生存時間は6分と思われますが、そこまで散々パケットの交換を行ってきているにも関わらず、6分経過すると自動的にARPキャッシュの該当データが無効となるのか、再びARP要求を行う為に、やはりそこでパケットは送出できず仕舞いとなります。
つまりUDPで送信する時は何時如何なる時も送信リザルトをチェックした方が良いと言う事になります。
※UDPはベストエフォートとは言え、原因が判っていてlostしてしまうのは、ちょっと使い辛いのではないかい?。
※同様の事がTCPでも起きる可能性が有るのだけれど、その場合タイムアウトして再送となるのかな。
※えーと、汎用OSによっては生存時間が切れた時点でUDPやTCPに関係無くARP要求を掛けて情報を更新している物もあります。なので特に汎用OS上でこう言った不都合を感じた事は無いと思います。SilentCのアルゴリズムは、6分経過後の最初のUDPなりTCPなりのパケットの送出に合わせてARP要求を行う様です。うーむ。
※ちなみにNavajoは、ARPキャッシュに情報が無かったり、古かったりした場合は、パケットの送出を一旦ペンディングしてからARP要求を掛けて、それを100ms置きに10回リトライを行い、まあ通常は数msで応答が帰ってきますので、ペンディングしたパケットを送出します。または、10回のリトライでも応答が無ければ、アプリケーション側に通知を行います。また、有効なIPパケットを受信した場合は、常にその情報をARPテーブルに格納し、生存時間の更新を行っていますので、パケットの交換が生存時間以内に連続して行われている場合は、自ら要求を掛ける事は無いです。
http://hamayan.blog.so-net.ne.jp/2008-09-01-2
UDPでの一発目の送信で必ずこける話を以下のアドレスでやりましたが、
http://hamayan.blog.so-net.ne.jp/2008-08-31-4
実は最初の一回目だけではなかったと言う話です。
通常ARPキャッシュのデータには生存時間が設定され、古いデータは使われなくなります。
多分SilentCの生存時間は6分と思われますが、そこまで散々パケットの交換を行ってきているにも関わらず、6分経過すると自動的にARPキャッシュの該当データが無効となるのか、再びARP要求を行う為に、やはりそこでパケットは送出できず仕舞いとなります。
つまりUDPで送信する時は何時如何なる時も送信リザルトをチェックした方が良いと言う事になります。
※UDPはベストエフォートとは言え、原因が判っていてlostしてしまうのは、ちょっと使い辛いのではないかい?。
※同様の事がTCPでも起きる可能性が有るのだけれど、その場合タイムアウトして再送となるのかな。
※えーと、汎用OSによっては生存時間が切れた時点でUDPやTCPに関係無くARP要求を掛けて情報を更新している物もあります。なので特に汎用OS上でこう言った不都合を感じた事は無いと思います。SilentCのアルゴリズムは、6分経過後の最初のUDPなりTCPなりのパケットの送出に合わせてARP要求を行う様です。うーむ。
※ちなみにNavajoは、ARPキャッシュに情報が無かったり、古かったりした場合は、パケットの送出を一旦ペンディングしてからARP要求を掛けて、それを100ms置きに10回リトライを行い、まあ通常は数msで応答が帰ってきますので、ペンディングしたパケットを送出します。または、10回のリトライでも応答が無ければ、アプリケーション側に通知を行います。また、有効なIPパケットを受信した場合は、常にその情報をARPテーブルに格納し、生存時間の更新を行っていますので、パケットの交換が生存時間以内に連続して行われている場合は、自ら要求を掛ける事は無いです。
2008-09-02 22:11
nice!(0)
コメント(2)
トラックバック(0)
せんせ~質問~
> UDPで送信する時は何時如何なる時も送信リザルトをチェックした方が良い
「UDPの送信リザルトをチェック」とは、具体的にはどうしたらいいんでしょうか。 SendTo() の返り値を使うのでしょうか。この返り値が「正常」であっても、パケットが途中のルータで握りつぶされちゃったりすることは、無いのでしょうか。
by noritan (2008-09-03 14:22)
「パケットが途中のルータで握りつぶされちゃったり」
そのルーター捨てて、新しいのと交換して下さい(笑)。
そもそもこれはSendToで送信したら、アドレスが解決できていなかったので戻り値に0を返してそこで終わっていますが、パケットをlostする理由が判っているなら、「自然現象で消えました!」みたいな話ではなく、なんとかしてくれればねぇ。
by hamayan (2008-09-03 14:52)