題 來自遠程服務器的IP數據包如何“找到”NAT防火牆後面的家用計算機?


我理解遠程機器之間的通信,例如只有在用戶計算機啟動通信時才會發生網絡服務器和用戶家庭計算機/設備(假設您的防火牆/網絡配置正確)。

然後

  • 典型的家庭網絡由許多具有唯一發布的IP地址的設備組成,例如 192.168.1.1192.168.1.2 等等
  • 同一個網絡通過一個“公共”IP地址連接到互聯網

我很想知道的是,當遠程服務器向家庭計算機的請求發送響應時,響應數據包如何能夠在以下情況下唯一地識別用戶計算機 - 我在這裡假設可能是錯的  - 遠程服務器只能“看到”整個網絡的公共IP地址?


2
2018-02-20 04:33


起源


這就是NAT的作用。 TCP是一種面向連接的協議,因此當您在內部協商與外部服務器的連接時,防火牆會記住您已啟動連接。返回的數據包將具有正確的端口號,以及其中特定連接的SYN和ACK值,因此路由器知道數據包是它先前觀察到的連接的一部分,並將數據包傳遞到LAN和啟動的主機連接。正如您所說,外部服務器只知道連接,包括您的公共IP,端口號和SYN / ACK值。 - Frank Thomas
謝謝,因此本地防火牆會記住您的連接並等待包含正確SYN / ACK值的數據包。我理解發生了SYN / ACK “三方握手”。一旦發生握手,這些SYN / ACK值是否繼續存在於所有數據包中? - Michael Coleman
是的,並且它們(可預測地)改變每個數據包,以便TCP可以判斷它是否獲得了所有數據包,或者它是否錯過了一些並且需要重新發送特定數據包。注意不要將syn / ack值與syn / ack標誌混淆。在握手期間打開或關閉標誌,但是值以隨機值開始並且隨著每個數據包成功發送而從那裡開始增加。請注意,這些值僅在連接中可預測。如果外面有人觀察並且同步太容易預測,他們可能會劫持這種聯繫。 - Frank Thomas
看這裡: en.wikipedia.org/wiki/...  注意,不僅在第110和第111位中存在syn / ack標誌位,還存在用於保持syn和ack值的32位字段。在第一個數據包上,ACK關閉,沒有值,但每個其他數據包都有一個,並且每次回复都會遞增。 - Frank Thomas


答案:


IP地址不是遠程服務器看到的唯一內容。它也看到了 港口。端口是16位整數。

將計算機視為公寓樓。 IP就像街道地址。港口識別哪個公寓。因此,瀏覽器,郵件客戶端等都在屬於計算機的一個IP上運行,但每個由OS給出一個或多個要使用的唯一端口。

當本地計算機將數據包發送到遠程服務器時,數據包將從本地計算機上的端口發送到遠程服務器上的端口。防火牆接收該數據包並將其發送到遠程服務器,但只有在更改後才會這樣做  IP地址到本地網絡的公共IP,也可能改變  端口到防火牆選擇的其他端口。

當公共服務器響應時,它會將數據包發送回公共IP以及給出的端口號。防火牆接收該數據包並將其發送到在該端口上啟動連接的任何計算機上。

如果防火牆收到一個指向沒有本地計算機正在使用的端口的數據包,防火牆的工作就是將該數據包保留在本地網絡之外。它可以靜默地丟棄它,或者它可以大聲地將拒絕消息發送回源。

一些常見的端口號

當您的瀏覽器向某個遠程服務器發送請求時,該請求很可能會進入遠程服務器的端口80。

  • 22 = ssh
  • 25 = smtp(郵件)
  • 53 = DNS(域名服務器)
  • 80 = http
  • 194 = IRC
  • 220 = IMAP
  • 993 = POP(郵件)

通常,低數量端口(最多1024個)保留供操作系統使用。用戶應用程序(如瀏覽器)使用高編號端口(可能是32000到65535)。


3
2018-02-20 04:55



重要的是要注意NAT防火牆不允許任何來自外部服務器的數據包重新進入。數據包必須是同一連接的一部分,轉到LAN客戶端上的同一端口,或者在無連接的情況下像UDP這樣的協議必須在非常狹窄的時間範圍內進行。否則會對使用1024這樣的公共端口對NAT路由器進行許多合理的攻擊,因為大多數客戶端使用1024作為其第一個連接的端口,因此幾乎總是處於可以接收數據包的狀態,如果NAT允許它,即使它不請自來。 - Frank Thomas
謝謝,兩個夢幻般的答案 - 所以當本地防火牆在發送本地數據包時重寫端口時,它會指示遠程服務器將請求發送回 port x。比方說,它是否使用了一個非常罕見的端口 port#33789 作為識別服務器響應的一種方式,有點像, “啊,我收到了一個包 port#33789 必須來自xyz_server“? - Michael Coleman
好吧,請記住,除非您使用端口轉發,否則端口只是等式的一部分,因為回复必須是已建立連接的一部分。對於端口號,Windows客戶端在啟動與外部的連接時分配1024以上的第一個開放端口。服務器端口更難以預測。某些服務可以在同一端口上維護不同的單個連接,但是其他服務使用端口映射將每個客戶端連接映射到另一個空閒端口,並且僅在其眾所周知的端口號上偵聽NEW連接(例如TCP \ 80)。 - Frank Thomas
@MichaelColeman是的,防火牆保留一個轉換錶,將互聯網端使用的端口與LAN端的計算機和端口相關聯。 - John1024