
所以……我和我的網路老師發生了這個爭論。他說,有些人抱怨由於路由器上的 NAT 表上有很多條目而導致路由器崩潰。
我不明白,我問:「如果應用程式使用相同的端口,為什麼路由器會崩潰?它應該只有一個條目(pc-ip,pcport;public-ip,public-port)」。他說:「使用相同的連接埠並不重要」。
我的想法是 NAT 為通過它的每個資料包創建一個條目。正如您可能已經猜到的那樣,我假設 NAT 過載。
所以問題是:
nat條目是如何創建的?基於數據包還是基於連接?我的意思是:假設我發送一個 udp 封包..路由器是否建立一個條目?
當我啟動 TCP 連線時,路由器是否會建立持久的 nat 條目直到連線關閉?
我的老師說得對嗎?假設應用程式在同一連接埠上傳送封包,NAT 表可能會過載?
提前致謝。
答案1
- 每個連接(或每個 UDP 流)
- 是的
- 是的。例如,一台內部 PC 上的 Web 瀏覽器可以同時向多個不同的外部 Web 伺服器中的每一個開啟多個並發 TCP 連線。對於每個連接,來源連接埠會有所不同(隨機選擇),但多個連接的目標連接埠和目標 IP 位址可能相同。設計用於滿足家庭中兩台或三台電腦需求的路由器可能無法應對(例如)擁有數百台非常繁忙的電腦的學校所需的同時連接數量。路由器的大小必須適合預期的負載。
如果你看TCP 用戶端的範例 C 原始碼描述於如何,您將看到「sockets」API 沒有為客戶端啟動連線來指定來源連接埠提供任何方法。