How NAT traversal works
Great explainer on NAT traversal and different kinds of NATs — arguably the foundation of peer-to-peer networking. Interesting to compare their approach with WebRTC approaches (STUN, TURN) and
(identify, autonat, DCUtR)
twitterで見つけたYudai.icon
ネットワークパケットを送受信するネットワークソケットを直接制御する必要がある
ゴール: UDPパケットを2つのデバイス間で双方向に流して他のプロトコルがクールなことができるようにすること https://scrapbox.io/files/6645cc4397a0b8001d584075.png
ステートフルファイアウォールは過去にどんなパケットを見たかを記憶し、新しく現れたパケットに対して何をすべきかを決定する際にその知識を使うことができる
UDPの場合:
以前に一致するアウトバウンドパケットを見た場合、インバウンドのUDPパケットを許可する
唯一の制約は、ファイアウォールの後ろにあるマシンがすべての接続を開始しなければならないということです。ファイアウォールが最初に話しかけない限り、何も話しかけることはできない。
当たり前だけどおもしろYudai.icon
問題: 2つの「クライアント」が直接通話したいと思った場合に生じる = 双方が先に進まなければならないがもう一方が進まなければならないからどちらも進めない
解決するには?
一方または両方を「ポートを開く」ように設定し、もう一方のマシンのトラフィックを許可することを要求する
ユーザーフレンドリーではない
あるパケットが違いに関連している必要はないため、正しい送信元と宛先で流出すればいい => レスポンスのように見えるパケットであれば良い => 再流入が許可される
NATの厄介な機能
2つのピアが相手のip:portを知らないことだ。さらに悪いことに、厳密に言えば、もう一方のピアがパケットを送信するまで、ip:portは存在しない。私たちはステートフル・ファイアウォールの問題に戻ってしまったが、さらに悪いことに、双方が最初に話さなければならないが、双方とも誰に話せばいいのかわからず、相手が最初に話すまで知ることができないのだ。
P2Pで通信を行うって前提やらないといけないことめっちゃあるんやねYudai.icon
ちょっと面白いと思う自分がいるw
ファイアーウォールをどう突破してP2Pで通信するかなんて考えたことなかったYudai.icon
この辺のことの理解を多少はできるけど、議論できて提案できるくらいまでいけるとだいぶどう通信を行うかなど考えられそうYudai.icon
ってかレイヤーが低くなればなるほどこの辺はかなり理解が必要だ