如果兩個本地系統在同一個埠下載相同的資源會發生什麼?
我知道 NAT 表。我只想知道如果私有區域網路中的兩個客戶端想要在同一個埠上下載完全相同的資源會發生什麼?換句話說,當一個數據包來自伺服器時,路由器如何決定哪個客戶端應該得到這個數據包?
如果我沒記錯的話,來自伺服器的傳入數據包具有路由器的目標 IP 地址,該地址是公共的,並且對於兩者都是相同的,並且在這種情況下,目標埠號也恰好相同。
路由器或伺服器中是否有任何機制可以檢測到這一點?或者這種行為一開始是否可能?
我已經搜尋過這樣的問題,因為埠繁忙而引發錯誤是有道理的,但我問的是兩個獨立的系統。
**更新:**從評論中我意識到我不夠清楚,所以讓我再舉個例子:
我只關心設備的“源”埠。假設我有兩台筆記型電腦(
192.168.2.10
和192.168.2.11
),它們都從網際網路某處的同一台伺服器下載相同的文件。它們每個都有一個生成隨機埠的作業系統,因此源 IP 和源埠類似於:192.168.2.10:6321
和192.168.2.11:7132
. 我認為在 NAT 中,路由器將設置它的(公共)IP 地址以及筆記型電腦的埠,所以如果家庭路由器的公共 IP 地址是65.82.23.32
,這兩個包將分別獲取這些源 IP 和源埠:65.82.23.32:6321
和65.82.23.32:7132
.現在,當響應返回時,路由器可以從埠號中找出哪個數據包是針對哪台筆記型電腦的,對嗎?到目前為止,一切都很好。但是,如果兩台筆記型電腦意外或有意生成完全相同的源埠會怎樣?例如:
192.168.2.10:6000
和192.168.2.11:6000
。現在路由器將像以前一樣將它的公共 IP 地址設置為源 IP 地址,但是現在如果它嘗試使用這些埠號,這些包將具有完全相同的源 IP 和源埠號,例如 :65.82.23.32:6000
和65.82.23.32:6000
.這就是我感到困惑的地方,即當響應返回時,路由器如何確定哪個數據包用於哪台筆記型電腦?
在@mfinni 的回答之後,我注意到這不是 PAT 的工作方式!NAT 設備(此處為路由器)將為每台筆記型電腦(私有 IP 地址)分配唯一埠,然後使用這些唯一埠(例如
7777
和7778
)發送數據包。因此,當響應返回時,很明顯哪個數據包是來自埠的哪台筆記型電腦,然後路由器會將這些65.82.23.32:7777
,分別轉換65.82.23.32:7778
為 –> 。192.168.2.10:6000``192.168.2.11:6000
TCP 連接(作為 HTTP 和許多其他協議的基礎)唯一地(在給定時間點)由 4 個參數定義:
- 本地IP
- 本地港口
- 遠端IP
- 遠端埠
即使您從同一台電腦同時發出兩次相同的請求,即使兩個 IP 地址相同且目標埠相同,源埠也會不同。
同樣,如果您有來自兩個設備的兩個請求通過同一個 NAT 設備,則 NAT 設備將使用不同的源埠。根據設備的不同,它可以保留原始源埠(只有在發生衝突時才更改),或者始終獨立於原始源埠分配一個新的源埠。
然後,NAT 設備將在其轉換錶中為每個連接保留一個映射,該映射聲明外部連接(外部 IP、外部源埠、目標 IP、目標埠)映射到內部連接(內部主機 IP、內部主機源埠、目標IP,目標埠)。