WebSockets/HTTPS 的標準是埠 443,世界各地的每個客戶端都連接到服務器埠 443。起初這讓我感到困惑,因為我想象所有流量都流經一個物體,如果只有一個物體,那將是一個瘋狂的瓶頸服務所有網路流量的物體。然后我了解到“埠”只是一個數字,客戶端和服務器上的實際物體是套接字。套接字附加到埠,以便內核知道將傳入流量轉發到哪個套接字(如果這是錯誤的,請糾正我)。所以套接字是比埠更高級別的物體。
我的問題是讓所有流量都轉到服務器上的單個埠是否有任何性能差異。要將傳入流量正確地解復用到套接字,必須需要更多資訊(可能是客戶端主機名/埠?)。然而,如果每個客戶端都在服務器端使用唯一的埠,那么僅服務器埠就足以解復用。
uj5u.com熱心網友回復:
我的問題是讓所有流量都轉到服務器上的單個埠是否有任何性能差異。要將傳入流量正確地解復用到套接字,必須需要更多資訊(可能是客戶端主機名/埠?)。
假設所有流量都流向同一個程式(即流向 Web 服務器行程),那么讓所有流量進入單個埠可能比使用多個埠更有效,因為 Web 服務器只需要處理單個套接字來接受連接,而不必為多個埠中的每一個創建單獨的套接字。
TCP 連接由5 元組(源 IP、源埠、目標 IP、目標埠、協議)唯一標識,因此網路堆疊對傳入流量進行多路分解所花費的作業量將是相同的(對 5 -tuple) 無論有多少埠正在使用。
然而,如果每個客戶端都在服務器端使用唯一的埠,那么僅服務器埠就足以解復用。
但是,這樣做會將服務器限制為相對較少數量的客戶端,因為任何給定主機上只有 65535 個埠可用(埠欄位為 16 位寬),其中許多埠可能已經用于其他服務...并且服務器必須為每個分配的埠創建一個套接字,這很快就會變得笨拙。因此,給每個客戶端一個唯一的埠會導致埠號爭用問題,而實際上并沒有加速任何事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/482900.html
