60998


TCP/IP - TCPのポート番号でアプリケーションを特定することができると知りました。  
このサイトによるとWebブラウザごとに正しくWebページを表示させるためにWebブラウザごとに異なるポート番号がランダムに割り当てられるらしいです。

> <https://www.infraexpert.com/study/tcpip7.html>  
>  なお、クライアントPCが複数のWebブラウザを開いている場合、そのWebブラウザごとに正しくWebページ  
>  を表示させるためにWebブラウザごとに異なるポート番号がランダムに割り当てられます。下図はイメージ図。

他方で、クライアント側のアプリケーションに自動的に割り当てられるポート番号、ダイナミックポート番号は49152～65535の範囲だとかかれていました。たぶんこのダイナミックポート番号がWebブラウザごとのポート番号割り当てに使われるのだと思いますが、ダイナミックポート番号の範囲を超えるほど(65535-49152=16383個のWebブラウザ？)Webブラウザを開いたときにはWebブラウザ、ポート番号、ネットワークとの通信などへの影響をふくめて、何が起こりますか？

> ポート番号は「0～65535」の範囲で割り当てられます。このポート番号は以下の3つに分類されています。  
>  ダイナミックポート番号 49152～65535 クライアント側のアプリケーションに自動的に割り当てられるポート番号。


CC BY-SA 4.0
2019-12-02T01:05:50.087
60997
2019-12-05T14:05:31.797
2019-12-05T14:05:31.797
3060
36877
question
network
クライアント側のポート番号に空きが無くなったら何が起こるのか？


割り当てるポート番号が無いと、TCP/IPでの通信が出来ません。  
なので、Webブラウザが起動できなくなります。

例えば、あなたが携帯電話を３台持っているとしましょう。  
１台目はAさんと通話中、２台目はBさんと通話中、そこに３台目にCさんから掛かってきました。  
そこでDさんに電話したい時、あなたはどうしますか？  
使える電話機がないので、電話できないですよね。  
ポート番号が枯渇した状態というのは、そういう状態です。

新たに電話を掛けたり受けたりできなくなるだけで、３台の電話での通話に影響はありません。  
それと同様に「（既に通信を行っている）ネットワークとの通信など」には影響はありません。

現実的には、16383個ものWebブラウザを起動する前にメモリなどの資源が足りなくなってしまうでしょうが。


CC BY-SA 4.0
2019-12-02T02:40:28.843
60998
2019-12-02T02:40:28.843
217
60997
answer


このサイトの説明は概念的なもので、実際の動作を正しく説明していません。

さも「アプリケーションが識別できるようにアプリケーションの起動時にポート番号が割り振られる」ように読めてしまいますが、そうではありません。

実際には、アプリケーションの起動時ではなくどこかへ通信を始めようとしたときにポートが割り当てられます。このポートは通信が終わったとき、例えば「HTMLをダウンロードした」とか「一連のメールをダウンロードしおわった」とかの時点で解放されます。アプリケーションに紐付いているわけではないので、あるポートをアプリケーションAがつかったとしても、次のタイミングでは同じポートを別のアプリケーションBが使うかもしれません。

また、一つのアプリケーションが同時に複数の通信を行う場合、複数のポートが使われます。

なので、  
\- アプリケーションを大量に開いても通信しないかぎりポート番号は消費されない  
\- 1つのアプリケーションでも大量に通信をするとポート番号が尽きることはあり得る  
ということになります。

また、ポート番号が不足しているかどうかは通信を始めようとしないとわかりません。これは実際には「通信しようとしたけど何らかの理由で接続できなかった」という状況と大差ないので、ブラウザのようなきちんと作り込まれたアプリケーションであれば適切にエラー処理できるはずで、立ち上がらないという状況にはならないと思います。(起動時に通信しようとして失敗したら死ぬ、というアプリケーションの作りであれば「起動しない」という状況になるでしょう)


CC BY-SA 4.0
2019-12-05T14:03:05.147
61153
2019-12-05T14:03:05.147
5793
60997
answer