Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(要望)IPv6でのリレーへの対応 #182

Open
konoiz opened this issue Sep 16, 2014 · 4 comments
Open

(要望)IPv6でのリレーへの対応 #182

konoiz opened this issue Sep 16, 2014 · 4 comments

Comments

@konoiz
Copy link

konoiz commented Sep 16, 2014

現状では、PCPでの接続部分がIPv4限定になっていあるため、IPv6でのリレーができないようです。
具体的には、現状ではtipにIPv6アドレスが指定された場合、接続しに行こうとした段階(DoConnect)で、
No Host Foundになってしまいます。

とりあえず、PCPSourceStreamを少し変更すると、IPv6でもリレーできそうなのは確認しました

--- PCPSourceStream.cs  2014-09-16 19:50:27.000000000 +0900
+++ PCPSourceStream.cs.new  2014-09-16 19:53:07.000000000 +0900
@@ -161,7 +161,7 @@
     protected StreamConnection DoConnect(IPEndPoint endpoint)
     {
       try {
-        client = new TcpClient();
+        client = new TcpClient(endpoint.AddressFamily);
         client.Connect(endpoint);
         remoteEndPoint = (IPEndPoint)client.Client.RemoteEndPoint;
         var stream = client.GetStream();
@@ -185,6 +185,9 @@
       try {
         var addresses = Dns.GetHostAddresses(source.DnsSafeHost);
         var addr = addresses.FirstOrDefault(x => x.AddressFamily==AddressFamily.InterNetwork);
+        if (addr == null) {
+            addr = addresses.FirstOrDefault(x => x.AddressFamily==AddressFamily.InterNetworkV6;)
+        }
         if (addr!=null) {
           endpoint = new IPEndPoint(addr, port);
         }

ただし、2ノード(子PCから配信PC)での接続しか確認してないため、2ホップ(3ノード)以上になった時などに
正常に接続できかは確認できていません(リレー管理の関係で問題ありそう?)

そもそも、現状ではYPなどがIPv6に対応していないため、実質的には無意味な変更です。

設定にv6関連の項目もあるし、せっかくなので一応issueだけつくっておく程度のものです

@kumaryu
Copy link
Owner

kumaryu commented Sep 16, 2014

IPv6対応にするには、リレー間で流れるノード情報に載ってるIPアドレスもIPv6のアドレスにしないといけないんですが、現状はそれがIPv4アドレス決め打ちなのでそのままではリレーできなくなります。
IPv6アドレスに対応するように拡張にできなくもないんですが、従来のPeerCast側が対応してないため互換性がなく、従来のPeerCastでは視聴できなかったり切れたりしますし、配信者がIPv6の場合はYP側も対応しないといけません。
また、リレー中にIPv6で接続待ち受けてるノードとIPv4でのみ待ち受けてるノード、IPv6に接続できる/できないクライアントが混在するとリレーできるのかできないのかよくわからんという問題もあります。
そういった諸々のため、現状はIPv6対応はしてませんし、少なくとも混在はできるようにするつもりはありません。
やるならIPv6はIPv4用とは別プロトコルとして、リレーはIPv6内でのみできるようにしようかと考えています。ただどうせ別プロトコルにするなら従来のPeerCastのプロトコルを受け継ぐ必要もないのでどうしよっかなーといったところです。
あとうちがIPv6のグローバルアドレス貰える環境じゃないってのもでかいですね。あとまだまだ一般的になってくれないというあたりも。

ただいつかなんらかの形で対応したいという思いはありますので、ご意見あればどんどん上げてください。

@Philmist
Copy link
Contributor

最低限の部分(どのあたりまでになるかはわかりませんが)をいじるにしても、
IPv6で動かす部分は最初に流すPCPのプロトコルバージョンを上げて、
明示的に互換性を切っちゃったほうが良いような気がしないでもないです。
IPv6だけでしか使わないから関係ないといえばそうなんですけれども。

@kumaryu
Copy link
Owner

kumaryu commented May 29, 2017

PCPのプロトコルバージョンを上げたところでみんなちゃんとそこ見てるんですかね!?
IPv6で待ち受けてるつもりの方が見るようにすればいいだけか
何を見て切るかは検討の余地がありそうな気もしますが、うっかりつながらないように互換を切るのは賛成です
あんまり変更が大きくならない範囲で

@Philmist
Copy link
Contributor

IPv6対応するとして、最低限対応しないといけないAtomは以下のWikiに書いた4つ(3つ)でしょうか。

https://github.com/kumaryu/peercaststation/wiki/PCP%E3%81%AEIPv6%E5%AF%BE%E5%BF%9C%E3%81%BE%E3%81%A8%E3%82%81

あと、これは杞憂ですが、IPv4ネットワークとIPv6ネットワークをクロスするクライアントが出てきてしまっちゃった場合どうしましょう(どう互換性を切っておきましょう)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants