0

そこで、ドロップボックスが自分のコンピューターで使用するポートを調べ、そのポートに新しい http サーバーを作成するとどうなるかを確認しようとしました。驚くべきことに、それは機能しました。そのため、ドロップボックスと http サーバーの両方が同じポートで実行されていましたが、送信元アドレスに応じて、着信要求が別のアプリケーションにルーティングされました。

lsof -i tcp:51311

COMMAND  PID           USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME

Dropbox 3811 user   18u  IPv4 0xdedc291239eb197f      0t0  TCP 172.20.10.2:51311->108.160.163.34:http (ESTABLISHED)

node    3984 user   11u  IPv4 0xdedc29123b1494cf      0t0  TCP *:51311 (LISTEN)

これがどのように機能するのか疑問に思っています。ポートは既にドロップボックスに割り当てられているため、OS が http サーバーへのバインドを拒否すると思っていましたが、驚いたことに機能しました。誰でも考えますか?

4

2 に答える 2

4

TCP ソケットは、4 つのタプル (source-ip、source-port、destination-ip、destination-port) に対して一致します。4 つすべてが衝突しない限り、ポートを再利用できます。

108.160.163.34:80デーモンがスタックから接続を受信しない限り、それを処理できます。サーバー108.160.163.34が適切に動作している場合、アプリケーションは172.20.10.2:51311ソース ポートとして 80 を使用してソケット ( ) への接続を開始できません。(bind()で失敗するはずAddress already in useです)。

適切に動作しない場合、既存のドロップボックス接続が予期しないパケット (間違ったシーケンス番号スペース) を受信し、スタックがRSTそれを受け取ります。

于 2013-07-22T22:21:51.393 に答える