2013-07-22 43 views
0

因此,我正在調查我的計算機上使用的端口dropbox,並試圖查看如果在該端口上創建新的http服務器會發生什麼情況。令人驚訝的是,它的工作。因此,dropbox和我的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服務器,因爲端口已經被分配到dropbox,但令我驚訝的是它的工作。任何想法?

回答

4

TCP套接字與4元組(source-ip,source-port,destination-ip,destination-port)匹配。只要他們四人不衝突,就可以重複使用端口。

只要你的守護進程沒有收到來自108.160.163.34:80的連接,你的堆棧就可以處理它。如果服務器108.160.163.34運行良好,它將不會讓應用程序啓動與您的套接字(172.20.10.2:51311)的連接,並將其作爲源端口80。 (bind()應該失敗,Address already in use)。

如果表現不好,現有的Dropbox連接將收到一個意外的數據包(錯誤的序列號空間),並且您的堆棧將會是RST它。

1

Dropbox使用的HTTP端口位於108.160.263.34,而不是您的本地主機。

端口51311被用作一個出站端口和一個偵聽端口。不是'兩個服務在同一個端口上運行'。否則會有兩條LISTENING行。

+0

OP在他的箱子上談論港口51311。 – jman

+1

端口51311被用作一個出站端口和一個偵聽端口。不是'兩個服務在同一個端口上運行'。否則會有兩條LISTENING行。 – EJP

+0

從我的閱讀中,我認爲他的意思是說「使用同一端口的兩個進程」。 – jman

相關問題