มีความเข้าใจผิดโดยทั่วไประหว่างNAT (การแปลที่อยู่เครือข่าย) และ PAT (การแปลที่อยู่พอร์ต) ซึ่งเป็นสิ่งที่เราส่วนใหญ่ใช้ในเราเตอร์ที่บ้านของเรา
NAT
สมมติว่าเรามีเครือข่ายที่มีโทโพโลยีต่อไปนี้:
Private_Network <-------> เราเตอร์ <-------> The_Internet
อินเตอร์เฟซของเราเตอร์ที่มีการเชื่อมต่อกับPrivate_Networkมีที่อยู่ IP เอกชนคือหนึ่งที่ไม่ซ้ำกันในThe_Internet ในทางกลับกันในกรณีของNAT , Routerมีหลายอินเตอร์เฟซที่เชื่อมต่อกับThe_Internet อินเตอร์เฟซที่แต่ละคนมีที่อยู่ IP ไม่ซ้ำกันในThe_Internet ตอนนี้สมมติว่าHost_AและHost_Bอยู่ในPrivate_Networkและพวกเขาทั้งสองต้องการเข้าถึงWebsite_XในThe_Internetพร้อมกัน IP และพอร์ตของHost_Aแพ็กเก็ตของจะเป็น:
แหล่งที่มาของ IP: Host_A 's ส่วนตัว IP
แหล่งที่มาของพอร์ต: พอร์ตบนHost_A
ปลายทาง IP: Website_Xของประชาชน / IP ที่ไม่ซ้ำกัน
ปลายทางพอร์ต: พอร์ตที่Website_Xเซิร์ฟเวอร์ 's ฟัง
และในทางเดียวกันสำหรับแพ็คเก็ตมาจากHost_B
หาก IP ต้นทางไม่มีการเปลี่ยนแปลงWebsite_Xจะตอบกลับไปยังที่อยู่ IP ที่เป็นส่วนตัวนั่นคือไม่ซ้ำกันดังนั้นแพ็กเก็ตจะไม่สามารถค้นหาได้ เพื่อแก้ไขปัญหานั้นเราเตอร์จะตรวจสอบว่าหนึ่งในที่อยู่ IP ที่ไม่ซ้ำกันของเขาเชื่อมต่อกับThe_Internetไม่ได้ใช้ หากเป็นกรณีนี้จะทำการแมปต่อไปนี้:
Host_A 's ส่วนตัว IP ======= Router's_unique_IP_K
และตอนนี้แพ็กเก็ตที่เริ่มต้นจากHost_Aไปที่Website_Xและขณะนี้ได้ออกจากส่วนต่อประสานของเราเตอร์ที่เชื่อมต่อกับThe_Internetจะมีรูปแบบ:
Source IP: Router's_unique_IP_K
Source Port: พอร์ตบนHost_A
IP ปลายทาง: Public / IP เฉพาะของWebsite_X
พอร์ตปลายทาง: พอร์ตที่เซิร์ฟเวอร์ของWebsite_Xกำลังฟัง
ดังนั้นคุณสามารถเข้าใจได้ว่ามีการเชื่อมโยงแบบหนึ่งต่อหนึ่งจาก IP ส่วนตัวถึง IP สาธารณะ ดังนั้นเมื่อแพ็กเก็ตมาจากWebsite_Xไปยังเราเตอร์การเชื่อมโยงนี้จะถูกตรวจสอบและที่อยู่ IP ปลายทางจะถูกเปลี่ยนกลับเป็นไพรเวตและส่งไปยังโฮสต์ที่ถูกต้อง
อย่างที่คุณเห็นวิธีการนี้ค่อนข้างง่าย แต่มีข้อเสียอย่างหนึ่งคือโฮสต์ส่วนตัวแต่ละรายการต้องมีที่อยู่ IP ที่ไม่ซ้ำกันสำรองซึ่งมีราคาแพงเราจึงเลือกที่จะมีที่อยู่ IP ที่ไม่ซ้ำกันน้อยกว่าโฮสต์ในเครือข่ายส่วนตัว ดังนั้นหากโฮสต์ส่วนตัวทั้งหมดพยายามเข้าถึงThe_Internetในเวลาเดียวกันเพียงชุดย่อยของพวกเขาเท่ากับจำนวนของที่อยู่ IP สาธารณะที่มีอยู่ที่เราเตอร์มีจะสามารถเข้าถึงและที่เหลือจะถูกปฏิเสธ
เพื่อตอบโต้ที่เราสร้างขึ้นPAT
PAT
PATคือสิ่งที่เราเตอร์ในบ้านส่วนใหญ่ใช้อยู่ ข้อ จำกัด พื้นฐานคือเราเตอร์มีที่อยู่ IP ที่ไม่ซ้ำกันซึ่งเชื่อมต่อกับThe_Internetแต่เรายังต้องการอนุญาตให้หลายโฮสต์จากเครือข่ายส่วนตัวสามารถเข้าถึงThe_Internet ได้ในเวลาเดียวกัน
วิธีที่เราทำคือ "คล้ายกัน" กับวิธีที่NATทำกับความแตกต่างที่สำคัญ: แทนที่จะเป็นRouter ที่เก็บพูลของที่อยู่ IP มันเก็บพูลหมายเลขพอร์ต อีกอย่างแม่นยำแพ็คเก็ตที่เดินทางมาถึงRouterจากHost_AในPrivate_Networkลิขิตให้Website_XในThe_Internetจะมีรูปแบบต่อไปนี้:
แหล่งที่มาของ IP: Host_A 's ส่วนตัว IP
แหล่งที่มาของพอร์ต: พอร์ตบนHost_A
ปลายทาง IP: Website_Xของประชาชน / IP ที่ไม่ซ้ำกัน
ปลายทางพอร์ต: พอร์ตที่Website_Xเซิร์ฟเวอร์ 's ฟัง
ตอนนี้เราเตอร์จะทำงานสองอย่าง:
- มันจะเปลี่ยนแหล่งที่มาของทรัพย์สินทางปัญญากับRouterของประชาชนที่ไม่ซ้ำกัน IP และ
- มันจะเปลี่ยน Source Port เป็นพอร์ตจากพูลที่เราเตอร์รักษาไว้และยังไม่ได้ใช้เช่นPort_Z
และตอนนี้แพ็กเก็ตที่เริ่มต้นจากHost_Aไปที่Website_Xและขณะนี้ได้ออกจากส่วนต่อประสานของเราเตอร์ที่เชื่อมต่อกับThe_Internetจะมีรูปแบบ:
แหล่งที่มาของ IP: Router's_unique_IP_K
พอร์ตแหล่งที่มา: Port_Z
ปลายทาง IP: Website_Xของประชาชน / IP ที่ไม่ซ้ำกัน
ปลายทางพอร์ต: พอร์ตที่Website_X 's เซิร์ฟเวอร์ฟัง
และเราเตอร์จะทำแผนที่ต่อไปนี้:
IP ส่วนตัวของHost_A และพอร์ตบนHost_A ======= Port_Z
ทำไมจึงใช้งานได้
ตอนนี้เมื่อแพ็กเก็ตกลับมาเราเตอร์จะตรวจสอบหมายเลขพอร์ตปลายทางและเปลี่ยนที่อยู่ IP ปลายทางและหมายเลขพอร์ตปลายทางตามการทำแผนที่ที่กล่าวถึงล่วงหน้าและแพ็กเก็ตได้รับการจัดส่งเรียบร้อยแล้ว
จะเกิดอะไรขึ้นถ้าฉันเรียกใช้แอปพลิเคชันหลายรายการบนโฮสต์เดียวกัน
การใช้งานที่แตกต่างกันจะมีพอร์ตที่แตกต่างกันโดยความหมายดังนั้นพวกเขาจะแมปไปยังพอร์ตที่แตกต่างจากเราท์เตอร์
จะเกิดอะไรขึ้นถ้าหลายโฮสต์พยายามเข้าถึงThe_Internetในเวลาเดียวกันและพวกเขาทั้งหมดใช้แอปพลิเคชันเดียวกัน
โฮสต์ที่แตกต่างกันจะมีที่อยู่ IP เอกชนที่แตกต่างกันโดยความหมายดังนั้นพวกเขาจะแมปไปยังพอร์ตที่แตกต่างจากเราท์เตอร์
PATเป็นอันตรายอย่างสมดุลในพื้นที่สีเทาของ cross-layer หมายเลขพอร์ตเป็นส่วนหนึ่งของ Transport Protocol ในขณะที่เราเตอร์ได้รับอนุญาตให้ทำงานได้ถึง Internet Protocol ดังนั้นเทคนิคการพูดจึงเป็นสิ่งที่โปรโตคอลไม่ได้รับอนุญาต ดังนั้นอย่างน้อยในทางทฤษฎีอันตรายที่อาจเกิดขึ้น: พูลพอร์ตมี จำกัด ดังนั้นหากเครือข่ายส่วนตัวของฉันประกอบด้วย 1,000 โฮสต์และแต่ละคนกำลังเรียกใช้แอปพลิเคชัน port_pool / 10 ตารางการแมปที่เราเตอร์จะหมดรายการที่มีอยู่และการเข้าถึงแอปพลิเคชันจะถูกปฏิเสธ
คำตอบนี้เกินความตั้งใจของฉันอย่างมาก แต่ฉันหวังว่ามันจะมีประโยชน์