2016-11-04 48 views
0

我知道,爲了連接到一個網站,在TCP層,源端口是一個高隨機數,目的地址是80.所以,響應段有80個源端口和該隨機端口號作爲目標端口。HTTP流量vs套接字流量

我明白,客戶端在等待HTTP請求的響應時會監聽該隨機端口號。

當我建立一個TCP服務器套接字並且我想讓它監聽特定的端口(47860)時,爲什麼我應該配置我的路由器並轉發端口,而在使用Web瀏覽器時我不需要這樣做? HTTP套接字和通用TCP套接字有什麼區別?

+0

HTTP是使用TCP的應用層協議。 '套接字'與TCP層相關,而不是在應用程序中。沒有「HTTP套接字」 – Prabhu

+0

您必須閱讀TCP。客戶端不聽任何東西,連接已經打開。也沒有像HTTP套接字這樣的東西。 –

+0

在基於HTTP的進程下,我們找到一個TCP套接字;爲此,我使用了「HTTP套接字」術語。 – Engineer

回答

1

當NAT後面的客戶端啓動到遠程主機的流量時,NAT路由器會記住這一點。這樣,從該遠程主機到本地客戶端的響應可以重定向到客戶端。

當你有後面NAT服務器,而不轉發其偵聽端口,任何進入的流量,該端口將被路由器丟棄:有來自NAT 背後沒有事先流量客戶端,所以沒有什麼要記住,就路由器而言並沒有什麼可轉發的。

+0

假設我連接到一個網站,並且我的隨機源端口號是35691.路由器生成另一個公共源端口號(例如43512)。路由器是否打開此端口(43512)以接收HTTP響應? – Engineer

+0

@Engineer yes .. – CodeCaster

+0

我禁用了路由器防火牆,然後用canyouseeme.org檢查了端口。港口仍然關閉。如果它們被ISP阻止,我的路由器如何能夠接收HTTP響應? – Engineer

1

@ CodeCaster的答案是正確的,我會試着給出更多細節。

所以我們在這裏有兩種情況:1)NAT後面的web瀏覽器2)NAT後面的web-server。它們之間的主要區別是第一個數據包的方向。 (1)網頁瀏覽器發起通信,因此通過路由器發送一個數據包。路由器中的NAT將此數據包註冊爲將源IP /端口映射到目標IP /端口的表中的條目。當路由器收到來自網絡服務器的回覆時,它會在NAT表中查找該條目以確定將數據包轉發到哪裏,然後您的網絡瀏覽器接收到回覆。

(2)路由器中的NAT不知道您的網絡服務器是否存在。外部Web瀏覽器使用您的公共IP向您的Web服務器發送請求,並將數據包傳送到路由器。現在路由器不知道如何處理數據包,因爲NAT表和端口轉發都沒有註冊端口80。換句話說,NAT會自動處理傳出連接,併爲輸入連接配置端口轉發。

+0

非常感謝 – Engineer