localhost
のポート80
をリッスンする単純なサーバーは次のとおりです。
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でFedora23を実行しています。
あなたがやろうとしていることは意味がありません。同じ5タプル{ SRC-IP, SRC-PORT, DST-IP, DST-PORT, PROTO }
で2つのTCPソケットを作成しようとしているため、2つのソケットは互いに区別できません。
このように考えてください。これが許可されている場合、TCPパケットが127.0.0.1:80から送信され、127.0.0.1:80宛てに到着すると、どちらのソケットがそれを受信しますか?両方?