(สำหรับต่อไปนี้ฉันจะละเว้นการค้นหา DNS หรือการกระทำเลเยอร์สองเนื่องจากนั่นไม่ใช่ส่วนที่เกี่ยวข้องสำหรับเรื่องราว NAT)
การเชื่อมต่อ TCP ใด ๆ เป็น tuple สี่ส่วน:
<source IP> <source port> <destination IP> <destination port>
กล่าวโดยย่อ: IP ปลายทางใช้ในการรับแพ็คเก็ตไปยังเครื่องที่ถูกต้องพอร์ตปลายทางจะใช้เพื่อรับแพ็กเก็ตบนเครื่องนั้นไปยังโปรแกรม / เซสชันที่ถูกต้อง IP ต้นทางจะใช้เพื่อทราบตำแหน่งที่จะส่งคำตอบใด ๆ กันไปสำหรับพอร์ตต้นทาง เมื่อมีการส่งคำตอบแหล่งที่มาและปลายทางจะถูกสลับสับเปลี่ยน
เริ่มจากคอมพิวเตอร์สองเครื่องโดยไม่มี NAT:
- คอมพิวเตอร์มี IP
1.1.1.1
- เว็บเซิร์ฟเวอร์มี IP
3.3.3.3
- พอร์ตมาตรฐานสำหรับ HTTP คือ
80
เมื่อคอมพิวเตอร์ขอเว็บเพจมันจะเลือกหมายเลขพอร์ตที่ไม่ได้ใช้แบบสุ่มจากช่วงสุ่ม (1024-65535) มาเลือก2345
กัน แล้วลำดับต่อไปที่จะเกิดขึ้น: คอมพิวเตอร์ส่งของแพ็คเก็ตที่มีแหล่ง IP 1.1.1.1
, พอร์ตต้นทาง2345
ปลายทาง IP ปลายทางพอร์ต3.3.3.3
80
แพ็คเก็ตมาถึงที่เว็บเซิร์ฟเวอร์มันเห็นว่ามันเป็น IP และพอร์ตของตัวเอง80
ดังนั้นจึงรู้ว่านี่เป็นคำขอของเว็บเพจ เว็บเซิร์ฟเวอร์แล้วส่งกลับมาที่หน้าเว็บในแพ็กเก็ตที่มีแหล่งที่มาของ IP 3.3.3.3
พอร์ตมา 80, IP ปลายทาง1.1.1.1
, 2345
พอร์ตปลายทาง คอมพิวเตอร์ recieves แพ็คเก็ตเหล่านี้และรู้ว่าชร้องขอหน้าเว็บที่มันเป็นเพราะ 2345
portnumber
เหล่านี้รวมกันพอร์ตเขียนมักจะเป็นเช่น: และ1.1.1.1:2345
3.3.3.3:80
ตอนนี้จำนวนคอมพิวเตอร์บนอินเทอร์เน็ตมีจำนวนมากกว่าที่อยู่ IPv4 ที่มีอยู่ เพื่อรักษาพื้นที่ที่อยู่ได้มีการแนะนำชุดช่วงที่อยู่ส่วนตัวซึ่งสามารถใช้สำหรับการแชร์ที่อยู่ได้อย่างอิสระ rangese เหล่านี้เรียกว่า RFC1918 และมีดังต่อไปนี้:
- 192.168.0.0 - 192.168.255.255
- 172.16.0.0 - 172.31.255.255
- 10.0.0.0 - 10.255.255.255
ที่อยู่เหล่านี้ไม่มีที่ใดในตารางเส้นทางอินเทอร์เน็ตดังนั้นหากคุณจะส่งแพ็คเก็ตที่มีปลายทางในช่วงเหล่านี้บนกระดูกสันหลังของอินเทอร์เน็ตพวกเขาจะถูกทิ้ง เนื่องจากคนหลายล้านคนใช้ที่อยู่เดียวกัน ต้องแปลที่อยู่เหล่านี้เป็นสิ่งที่มีประโยชน์สำหรับอินเทอร์เน็ต นี่คือที่มาของการแปลที่อยู่เครือข่าย:
เรามีคอมพิวเตอร์สองเครื่อง:
- A:
192.168.0.1
และ B:192.168.0.2
1.1.1.1
ประตูของพวกเขามีไอพีสาธารณะของ
- เราเก็บเว็บเซิร์ฟเวอร์เดียวกัน
- คอมพิวเตอร์ทั้งสองต้องการหน้าเว็บเดียวกันจากเซิร์ฟเวอร์เดียวกัน
แรกคอมพิวเตอร์ทั้งสองเลือกพอร์ตสุ่ม: พูด Let 's: และ192.168.0.1:2345
192.168.0.2:5432
คอมพิวเตอร์ A ส่งของแพ็คเก็ตที่มีแหล่งที่มาและปลายทาง192.168.0.1:2345
3.3.3.3:80
เกตเวย์แปลแพ็คเก็ตนี้ไปยังแหล่ง1.1.1.1:2345
ปลายทาง3.3.3.3:80
และจำได้ว่าการตอบกลับใด ๆ 192.168.0.1
ที่จะรวมกันนี้ไป ดังนั้นเมื่อมันได้รับการตอบกลับด้วยแหล่งที่มา3.3.3.3:80
และปลายทาง1.1.1.1:2345
มันจะแปลมันเป็นแหล่งที่มา3.3.3.3:80
และปลายทาง192.168.0.1:2345
และส่งแพ็คเก็ต
คอมพิวเตอร์ B ส่งของแพ็คเก็ตที่มีแหล่งที่มาและปลายทาง192.168.0.2:5432
3.3.3.3:80
เกตเวย์แปลแพ็คเก็ตนี้ไปยังแหล่ง1.1.1.1:5432
ปลายทาง3.3.3.3:80
และจำได้ว่าการตอบกลับใด ๆ 192.168.0.2
ที่จะรวมกันนี้ไป ดังนั้นเมื่อมันได้รับการตอบกลับด้วยแหล่งที่มา3.3.3.3:80
และปลายทาง1.1.1.1:5432
มันจะแปลมันเป็นแหล่งที่มา3.3.3.3:80
และปลายทาง192.168.0.2:5432
และส่งแพ็คเก็ต
หากคอมพิวเตอร์ทั้งสองเครื่องเกิดขึ้นเพื่อเลือกหมายเลขพอร์ตต้นทางเดียวกันเกตเวย์จะเลือกหมายเลขพอร์ตต้นทางแบบสุ่มฟรีอีกครั้งและอย่าลืมแปลหมายเลขพอร์ตด้วย บางครั้งสิ่งนี้อ้างถึงเป็น PAT (การแปลที่อยู่พอร์ต) นี่เป็นส่วนย่อยของ NAT
มีการใช้งานหลายอย่างเพื่อทั้งหมดนี้ เกตเวย์อาจจำได้เพียง "Computer X ใช้พอร์ตต้นทาง Y" และส่งต่อสิ่งใด ๆ ด้วยพอร์ต Y ไปยังคอมพิวเตอร์ X อาจจำได้ว่า Computer X ใช้พอร์ตต้นทาง Y และปลายทาง Z "และส่งต่อสิ่งใด ๆ จากพอร์ต Z ไปยังพอร์ต Y กลับไปที่ computer X. หรือมีตัวเลือกที่จะจดจำ tuple ทั้งหมดและส่งปริมาณการใช้งานไปยังคอมพิวเตอร์ X ที่ตรงกับ ip / พอร์ตต้นทางและปลายทางทั้งหมด