同じ送信元ポートと宛先ポートを使用してlocalhostのサーバーに接続する

同じ送信元ポートと宛先ポートを使用してlocalhostのサーバーに接続する

80以下は、ポートでリッスンする単純なサーバーですlocalhost

nc -4 --listen 127.0.0.1 80

localhost以下は、サーバーの宛先ポートと同じソースポートを使用してサーバーに接続するクライアントです。

nc -4 --source-port 80 --source 127.0.0.1 127.0.0.1 80

エラーが発生します。

libnsock mksock_bind_addr(): Bind to 127.0.0.1:80 failed (IOD #1): Address already in use (98)

規則に従って:{ SRC-IP, SRC-PORT, DST-IP, DST-PORT, PROTO }一意でなければならず、この接続を作成することを許可する必要があります。接続を作成する最初の試みの前に、そのようなタプルは存在しません。これはなぜ許可されないのですか?私はカーネル4.4.6でFedora 23を実行しています。

答え1

あなたがやろうとしていることは言葉ではありません。同じ5タプルを使用して2つのTCPソケットを作成しようとしているため、{ SRC-IP, SRC-PORT, DST-IP, DST-PORT, PROTO }2つのソケットを区別することはできません。

こう考えてみてください。これが許可されている場合、宛先が127.0.0.1:80の127.0.0.1:80のTCPパケットが到着したときにどのソケットがそれを受信しますか?両方とも?

関連情報