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パケットが到着したときにどのソケットがそれを受信しますか?両方とも?