2009-12-21 183 views
10

當我嘗試從程序中將端口80綁定到套接字時,出現錯誤,但兩臺瀏覽器如何同時聽到同一端口80?兩個瀏​​覽器如何同時在端口80上偵聽?

+18

服務器偵聽,瀏覽器連接... – miku 2009-12-21 11:58:13

+1

當連接到端口80時,兩個程序中的哪一個應該回答? – 2009-12-21 12:06:43

+1

@Alvaro這不是套接字的工作方式。 – 2009-12-21 12:14:07

回答

17

瀏覽器不偵聽端口80,HTTP服務器(雖然這只是慣例,你可以使用端口80輕鬆擁有一個FTP和Telnet服務器)。

在TCP/IP中,「會話」必須是唯一的,會話定義爲5元組(protocol, sourceIP, sourcePort, destinationIP, destinationPort)。這允許數據包在互聯網上正確路由。

典型地,當客戶端試圖聯繫服務器,它指定0作爲其源端口這意味着該操作系統分配給它的未使用的一個。這意味着客戶端實際上將在上監聽端口而不是端口80

因此,當您的瀏覽器訪問微軟的網頁時,您可能會收到與屬性(TCP, mybox.com, 1101, www.microsoft.com, 80)的會話。

如果您發現無法將服務器綁定到端口80,很可能是因爲您已經有一臺服務器在該端口上運行,或者您的程序沒有綁定到該端口所需的特權(端口小於1024通常被認爲是特權端口)。

運行netstat -a(在Linux上 Windows)會告訴你服務器是否綁定到端口80。尋找端口80監聽器(或http如果它解決端口服務名稱),是這樣的:

tcp 0 0 localhost:http *:* LISTEN 
+0

您將會話列爲具有五元組('protocol,sourceIP,destinationIP,sourcePort,destinationPort)',但是您舉例說明'(TCP,mybox.com,1101,www.microsoft.com,80)'。它應該不是'(TCP,mybox.com,www.microsoft.com,1101,80)'? – 2018-02-03 17:57:43

+1

@Jon,謝謝你。這個元組不是我自己想要以任何方式訂購的,它只是確定會話所需的信息。我會修正它的一致性,因爲你絕對正確,可能會導致混淆。 – paxdiablo 2018-02-04 02:23:30

18

他們不聽他們與80端口對話的端口80,或443如果您使用SSL(或在任何其他端口,如果管理員打破常規,您可能已經看到類似http://www.site.com:8080的網址已在8080端口上設置)。

瀏覽器將從隨機編號較高的端口發出請求,以便瀏覽器可以同時處於活動狀態。

由於paxdiablo說,你可以用netstat查看哪些程序偵聽連接(使用「netstat的 - -b」將顯示哪些可執行文件綁定到哪個端口)

3

的瀏覽器實際上不是綁定到80端口。您可能會發現,您也正在運行IIS或其他網絡服務器,綁定,這是您的問題的原因

8

瀏覽器實際上不聽在端口80.網絡服務器做到這一點,瀏覽器(動態端口)與49152和65535之間的端口打開連接。

4

在網絡連接中,有一個對等體(通常稱爲客戶機)連接到另一個(通常稱爲服務器)。據說服務器正在偵聽某個端口,而客戶端據說正在連接到該端口。

在這種情況下,Web服務器在所有客戶端(瀏覽器)連接到端口80時監聽端口80。

2

當瀏覽器與服務器建立連接時,它綁定到本地非特權端口,但連接到Web服務器的端口80.當服務器發回響應時,它會轉到非特權端口瀏覽器的電腦。如果同一臺計算機上有兩個瀏覽器,則它們綁定到不同的端口。

0

如果你的意思是「怎麼兩個服務器偵聽端口80」,可以考慮使用HTTP服務器API。 這兩個服務器都可以註冊一個回調函數和一個URL。客戶端然後可以根據URL f.e來決定調用哪個服務器。

http://localhost/Service1將轉到指定「http://localhost/Service1」作爲其URL的服務。