Gniutella P2P プロトコルの仕組みについてもっと理解しようとしています。GnuFU と最新のプロトコル仕様 (0.4) を読みましたが、ファイアウォールまたは NAT ボックスを介して PUSH がどのように機能するかについていくつか質問があります。
ケース 1: Alice は、NAT ボックスまたはファイアウォールを介してインターネットに接続されています。彼女は、Bob がダウンロードしたいファイルを持っていることを知りました。Bob にはファイアウォールがありません。したがって、Alice のクライアントは Bob のマシンへの TCP 接続を開き、ファイルをダウンロードします。問題ない。
ケース 2: ボブがアリスからファイルを取得したいことを除いて、#1 と同じです。Bob のクライアントは、ファイアウォールの内側にあるため、Alice のコンピューターへの TCP 接続を開くことができません。私が読んだことによると、Bob のクライアントは PUSH コマンドを Alice のマシンに送信する必要があります。Alice のマシンは PUSH を受信し、Bob のマシンへの TCP 接続を開き、ファイルを Bob に送信します。私はそれが正しいですか?
私の質問: 1) PUSH パケットはどのようにしてボブからアリスに届きますか? アリスはファイアウォールの背後にいるため、アリスへの TCP 接続を開くことができないため、ボブはそれを直接送信できません。どこかにキャッシュされますか?もしそうなら、アリスはどのようにしてそれを探すことを知っていますか?
2) これは Alice の NAT ボックスが uPNP やポート転送をサポートしている場合にのみ機能しますか? もしそうなら、アリスと、例えばキャロルが同じ NAT ボックスの背後にいるとしたらどうでしょうか? ルーターは、ボブが PUSH を送信しようとしているコンピュータをどのようにして知るのでしょうか?
3) Alice がファイルを Bob のマシンにプッシュしようとしたが、Bob はそのファイルを要求していなかったとします。とにかく、ボブのマシンのサーバントはそれを受け取りますか? または、着信ファイルを拒否しますか?
ありがとう、マイク