這是一個微不足道的問題,但我真的找不到一個好的答案。NAT後面的Web服務器,我需要爲請求端口啓用端口轉發嗎?
當我主持端口80上偵聽很顯然,我需要啓用端口轉發到web服務器的80端口在我的路由器在NAT後面的網絡服務器。但是,80只是服務器的接受端口,對於實際的請求,它將使用不同的臨時隨機端口。
我的問題是,我還需要啓用現在正被用於請求或不是這個隨機端口的端口轉發?如果不是,它是如何工作的,我的意思是它怎麼神奇地通過NAT呢?
讓我引用一本書: 「服務器(程序)運行在特定的計算機上,並且具有綁定到特定端口的套接字,服務器偵聽套接字以便客戶端發出連接請求(見)。如果一切順利 正常,服務器接受連接,一旦接受,服務器獲取綁定到不同的端口一個新的套接字 ,它需要一個新的socket(因此不同的端口號),以便它可以 繼續在服務連接的客戶端時收聽原始套接字的連接請求。「
我只是想知道,如果這個「新的連接」適用於客戶端是在互聯網上,如果端口轉發時,纔會啓用路由器後面的服務器的監聽端口。
請參閱我的編輯,我不認爲我問過這個問題吧。 – waiferv
寫給作者(Buyya的「面向對象程序設計與Java」,對嗎?)他錯了,當然需要一個新的套接字,但不是一個新的端口,它並不是一個新的TCP端口。在我看來,作者試圖「轉述」http://docs.oracle.com/javase/tutorial/networking/sockets/definition.html,這是注意不要降低端口的不準確性。看看書中的圖表和我提供的鏈接,看看我的意思,沒有新的TCP端口! – gae123
我仍然不明白的是,如果沒有新的端口,那麼一個客戶端與服務器的所有通信都會阻止監聽端口,所以沒有其他客戶端可以連接。或者是真的如你在給我發送的鏈接中說的那樣,一個端口可以用於多套接字連接?我總是學習一個端口=套接字,否則資源很忙。是Java特定的,我可以在一個端口上打開多個套接字,還是它通常被設計爲在網絡中如此?你能指出我的資源澄清這一點嗎? – waiferv