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

TCPの既定の待ち受けポート番号をエフェメラルポートから変更する #631

Closed
3 tasks done
leobtype opened this issue Mar 1, 2023 · 4 comments
Closed
3 tasks done

Comments

@leobtype
Copy link

leobtype commented Mar 1, 2023

内容

本ソフトウェアのTCPの待ち受けポート番号は既定値で50021番で、これは多くのOSでエフェメラルポートとして扱われます。エフェメラルポートはTCPのクライアントソフトウェアがサーバーとの通信のために空いているポート番号を一時的に利用する資源で、サーバーソフトウェアが待ち受けをするための専有的な利用には向きません。

エフェメラルポートをTCPの待ち受けポートとして利用することで、例えば次のようなケースで問題が発生する可能性があります。
あるTCPクライアントがバックグラウンドで通信(たとえばゲームソフトをダウンロード)していて、そのTCPクライアントが50021番を「たまたま」使っています。その間に本ソフトウェアを起動して利用しようとした場合に50021番は競合するため利用できません。そして利用者はゲームソフトのダウンロードが終わったあとは「なぜか」また利用できるようになったと感じます。

本ソフトウェアでサポートするOSでエフェメラルポートとして扱われていないレンジのポート番号をTCPの待ち受けポートに利用することで上のような問題の発生を回避できます。

Pros 良くなる点

本ソフトウェアを起動できなかったり利用できなくなるケースが低減される。

Cons 悪くなる点

本ソフトウェアにTCP接続するクライアント側の設定変更も必要になる可能性がある。

実現方法

本ソフトウェアでサポートするOSでエフェメラルポートとして扱われていないレンジからポート番号を選択して既定値に設定する。また本ソフトウェアとよく併用されるソフトウェアと待ち受けポートが競合しないように注意する。

VOICEVOXのバージョン

0.14

OSの種類/ディストリ/バージョン

  • Windows
  • macOS
  • Linux

その他

私自身は利用者ではございませんが本ソフトウェアと連携するソフトウェアの設定をしている配信を動画配信サイトで視聴している中で気づいたので上げさせていただきました。

@github-actions github-actions bot added OS 依存:linux Linux に依存した現象 OS 依存:mac macOS に依存した現象 OS 依存:win Windows に依存した現象 labels Mar 1, 2023
@y-chan
Copy link
Member

y-chan commented Mar 2, 2023

Issue作成ありがとうございます!

VOICEVOXエンジンを利用する他のプラグインやソフトウェアのために、今からポートを変更するというのは破壊的変更に近いため(また、エンジンを利用する方々への周知を行う必要があるため)、なかなかにハードルの高いことだと考えます。
また、ハードルの高い割に、メンテナ判断としては優先度は低いです。今までで他のアプリケーションとポート番号が干渉したためにアプリケーションが起動できなくなった、という類の報告はあまり見られていません(単に報告されていないだけの可能性もありますが、かなりの回数ダウンロードされている本ソフトウェアにおいて、今まで報告が上がったといったことは聞いていません)。
加えてこれは私見ですが、エフェメラルポートの使用は正しいと考えます。エフェメラルポートは一時的な利用としてもありますが、IANAに対して登録されていないアプリケーションポートとしての利用も認められているように(私は)受け取れました。

よって、今後ポート番号の変更を行うことは現実的ではない・必須ではないかなと思いました...!

ちなみに、私は優先度及び問題としての大きさは低い・小さいと感じましたが、 @leobtype さんとしてはどのように感じているでしょうか...?(単に私の知識不足で、大きな問題である可能性もあるので、少し教えていただきたいです...!:pray:)

@esperecyan
Copy link

こちらに転記します。

VOICEVOX/voicevox#1252 (comment)

50021番ポートは、Hyper-V/WSLが予約する50000〜50059と競合していることがわかったので、追記しておきます。

そのため、個人的には50021番ポートからは変更して欲しいと思いますが、前のコメントの通り破壊的です。具体的に困ったことは、エンジンを利用するアプリケーションとのあいだにプロクシサーバーを立てようとしたところ、予約済みで.NETからは50021番ポートを扱えなかったことです。

どの番号を使うかについて、VOICEVOXエンジンのようにポート番号を固定する必要があるローカルホストサービスとしては、理想的には登録済みポート番号の範囲 (1024〜49151) からIANAに申請して利用することです。

なお、エフェメラルポートは、49152〜65535ではなく1024〜65535から利用中でも予約済みでもないポートを選択することになっているため、1024〜49151の範囲を利用しても衝突を避けられるわけではないと思います。

次善策として、ポート番号を引数ではなく設定ファイルでも指定できるようにしておく、VOICEVOXがIANA未登録であり50021番ポート固定ではないことを、エンジンを利用するアプリケーション開発者向けに明記しておくのが良いのかなと思います。

@tarepan
Copy link
Contributor

tarepan commented Mar 6, 2024

2024年3月での前提状況

(最終議論から約10ヶ月経過したため、前提状況の再整理)

VOICEVOX (エディタ) 側で自動ポートスキャンが実装されており、エディタレベルではポート競合問題が解決しました。
VOICEVOX ENGINE を直接利用するケースでは依然として競合しうる状態ですが、READMEの起動引数手引きにある通り、起動引数でポート変更が可能です。

対応策へのコメント

理想的には ... IANAに申請

👍
プロジェクト規模等の兼ね合いから現段階では検討されていませんが、正道だと考えます。

次善策として、ポート番号を引数ではなく設定ファイルでも指定

2024年3月段階ではエディタ側での問題解決により、ENGINE 直接ユーザーのみが考慮対象になりました。ENGINE 直接ユーザーであれば引数指定のみで十分と考えます。

VOICEVOXがIANA未登録であり50021番ポート固定ではないことを ... 明記

IANA非登録であることは半ば自明であり、READMEにポート引数があることからポート可変は明記済みと考えます。

今後の方向性

issue タイトルである「TCPの既定の待ち受けポート番号をエフェメラルポートから変更する」は実装無しとの結論が得られたと認識しています。
次善策も状況変化により特段必要でなくなったため、本 issue は役割を果たしたと考えます。
@leobtype さんの提言と @esperecyan さんの助言によりポート関連の情報が整理されました、ありがとうございました!

@y-chan @Hiroshiba
本 issue は役割を終え、close 可能と考えます。

@tarepan tarepan self-assigned this Mar 7, 2024
@tarepan tarepan removed OS 依存:mac macOS に依存した現象 OS 依存:linux Linux に依存した現象 OS 依存:win Windows に依存した現象 優先度:低 (運用中止) labels Mar 8, 2024
@Hiroshiba
Copy link
Member

@tarepan 整理ありがとうございます!

デフォルトのポート番号の変更はもう結構現実的ではなさそうに思っています。
でももしかしたらバージョン1にするタイミングで破壊的変更は許されるかもです。
もしご存知の方がいらっしゃったら、50021番よりはこの辺りの番号が良いよという範囲があれば知りたいかもです。
(知識がないのですが、なんとなくどこもほぼ等しく衝突の危険があるのかなと思ってます)

確かに少なくとも現状ではportが固定ではないことがしっかり案内されているように思うので、追加で何かしないといけないことはないかもです。
ということでクローズしたいと思います!
議論ありがとうございました!!

@Hiroshiba Hiroshiba closed this as not planned Won't fix, can't repro, duplicate, stale Mar 16, 2024
@tarepan tarepan removed their assignment Mar 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants