13

私は BSD ソケットに精通しており、 のマニュアル ページをめくるとsendto、フラグにぶつかりましたMSG_CONFIRM。これは、現時点では非常に不思議です。

説明には次のように書かれています。

進行状況が発生したことをリンク層に伝えます。反対側から成功した応答がありました。リンク層がこれを取得しない場合、定期的に近隣を再プローブします (たとえば、ユニキャスト ARP を介して)。SOCK_DGRAM および SOCK_RAW ソケットでのみ有効で、現在 IPv4 および IPv6 に対してのみ実装されています。

のマニュアル ページをざっと見てみると、arp何かにフラグを立てることMSG_CONFIRMで、リモート マシンの ARP マッピング MAC アドレス ↔ IP アドレスが古いと見なされるのを防ぐことがわかりました。

私はそれを入れるべきではない理由が見当たらないので、今私は戸惑っています。アプリケーション層は、リンク層で発生するすべてのことを処理する必要があるのはなぜですか。

それで、私は何かを見逃しましたか?いつ設定する必要がありますか、または設定しないでください。

4

2 に答える 2

3

送信しない理由は、IP の MAC アドレスが時間の経過とともに変化した場合です。システムにチェックしないように常に指示している場合、IP アドレスが存在しなくても、システムは同じ MAC に送信し続けます。

メッセージを送信するには、メッセージの受信者に関することを保証できる非常に特別な状況が必要なようです。定期的な ARP 要求のオーバーヘッドは非常に低いため、メリットは非常に限られています。

于 2013-05-16T18:18:33.200 に答える