天天看點

伺服器如何區分多個用戶端的資訊,伺服器如何區分單個用戶端的多個連接配接?

正常的答案是你首先不要那樣做。

用戶端通常會連接配接到具有未綁定套接字的伺服器,這意味着它尚未指定将接收回複的本地端口。伺服器将使用bind指定本地端口,然後它将在該端口上偵聽來自用戶端的連接配接。

當用戶端連接配接未綁定的套接字時,TCP堆棧将選擇目前未使用的端口号,并将其配置設定給該連接配接。當它向伺服器發送請求時,伺服器将回複已配置設定的端口号。在用戶端,TCP堆棧将檢視資料包中的端口号,并将其路由到配置設定了該端口号的任何程序。

是以,用戶端将不使用端口4321 - 它将使用堆棧配置設定給它的任何端口。當同一台機器上的另一個程序連接配接到同一台伺服器時,它也不會使用端口4321 - 它将使用配置設定給它的另一個端口。網絡堆棧負責確定每個都獲得唯一的端口号。

對于它的價值,TCP端口分為三個範圍。從0到1023是FTP,SMTP,HTTP,POP等伺服器的“衆所周知”端口。這些端口供伺服器使用,作業系統可能會采取一些特殊步驟來保護這些。例如,典型的作業系統需要某種管理者/根級别權限才能使用這些端口。

從1024到49151是注冊的端口号。這些通常比衆所周知的端口更松散地控制。幾乎任何人都可以設定監聽它們,但IANA維護着針對特定端口的特定用途的系統資料庫。根據系統資料庫,端口4321用于遠端whois協定。

從49152到65535是動态端口 - 當用戶端連接配接到伺服器時,它通常會獲得此範圍内的本地端口号。當然,您可以編寫伺服器并将其綁定到此範圍内的端口号(如果您願意)(例如,用于測試)。當/如果你這樣做,堆棧将跟蹤它,是以它不會嘗試将該端口用于其他目的。