2015-08-31 69 views
3

我有一個關於TCP的非常基本的問題。同一IP和端口上有多個TCP連接

考慮的應用,比方說DEST,與IP Dest IP監聽端口6789

現在我有其能夠發送消息到該應用程序的DEST 2級源的應用程序和它們經由TCP協議通信。

說源系統1是SRC1,源系統2是SRC2,分別是IP SRC1SRC2

理想地僅這些源系統中的一個將被運行,並且我可以看到,我具有由源系統(netstat -nao | grep 6789)上執行的命令netstatSRC1SRC2DEST之間的活動連接。

現在只是爲了赫克我開始了第二源系統,以及,驚訝地得知的netstat兩個源系統的結果顯示了監聽端口的應用程序DEST活動的TCP連接6789

SRC1SRC2服務器

結果netstat命令:

TCP SRC1 IP:17678 DEST IP: 6789 ESTABLISHED 

TCP SRC2 IP:51298 DEST IP: 6789 ESTABLISHED 

我的印象是,監聽IP DEST1和端口6789 DEST應用下只能有1個交流tive TCP連接(DEST服務器IP:6789只能有1個活動的TCP連接)。

+2

無論你怎麼想? –

回答

7

如果你認爲是真的,網絡服務器將無法正常工作。 Web服務器基本上在兩個端口上偵聽:HTTP爲80,HTTPS爲443。 Web服務器通常會同時連接數千個客戶端。

應用程序可以通過一個端口建立多個連接。它可以通過連接主機的源/端口組合區分連接。實際上,如果應用程序支持,每個源主機都可以在多個端口上連接(地址實際上是地址和端口的組合)到相同的目標端口。

9

TCP連接由4元組定義:本地IP,本地端口,遠程IP,遠程端口。請注意,我沒有說源和目標,因爲一旦連接建立,就沒有區別。

在你給出的例子中,兩個連接有一個共同的IP和端口,但另一個IP和端口是不同的。

這不同於僅由本地IP和端口定義的TCP偵聽套接字。這意味着只有一個套接字可以偵聽給定端口上的新連接。一旦建立了連接,就會有一個由上述4元組定義的新套接字,儘管源自給定監聽套接字的所有連接將具有相同的本地IP和端口,但具有不同的遠程IP和/或端口。

+0

以及Source/Dest IP和Ports是否相同?假設一個在瀏覽器中打開多個標籤的例子從同一臺服務器獲取數據? – Saad

+0

@Saad他們不可能都是一樣的。在這種情況下,您將擁有多個具有相同源IP和目標IP的套接字,並且服務器端的端口將相同,但每個客戶端端口都會有所不同。 – dbush

+0

那麼如果UDP被管理,在某種相同的場景中仍然有不同的套接字? – Saad