Webシステム開発の雑多なアウトプット

AWS、プログラム、OSS等を中心に良かった本も。

どのような場合にポートの競合が発生するか

Linux では、bind() システムコールを起動して使用するポートを指定 しない場合、もしくは、引数のポート番号に 0 を指定して bind() システムコールを起動した場合、特定のポート番号の中から アプリケーションが使用するポート番号をカーネルが任意に割り当てる。

このため、あるアプリケーションがカーネルが割り当てたポート番号を 使用しているときに、他のアプリケーションがそのポート番号を指定して 使用しようとすると、ポート番号の競合が起こる。

カーネルが任意に割り当てるポート番号の範囲は、カーネルパラメータ (sysctlの結果.txt)の net.ipv4.ip_local_port_range にて 確認できる。

たとえば、 net.ipv4.ip_local_port_range = 1024 65000 となっている場合、カーネルが任意に割り当てるポート番号の範囲が 1024 ~ 65000 であることを意味する。