NAT จะแบ่งปันที่อยู่ IPv4 สาธารณะหนึ่งที่อยู่ในที่อยู่ IPv4 ส่วนตัวหลายแห่งอย่างไร [ปิด]


10

ฉันคิดว่ามันเป็นคำถามที่คลาสสิก แต่คิดว่าฉันมีพื้นฐานบางอย่างฉันไม่มีคำศัพท์เพียงพอที่จะค้นหาและเข้าใจอย่างถูกต้องในเว็บ

สมมติว่าฉันมีเครือข่ายในบ้านที่มี 192.168.0.1 (IP.1) และ 192.168.0.2 (IP.2) และเราทั้งคู่กำลังเล่นกับ Counter Strike ที่กระทบเซิร์ฟเวอร์ภายนอกเดียวกันทั้งหมด

เราเตอร์ในบ้านของฉันรู้ว่าแพ็คเก็ตที่จะไปที่ IP.1 ฉันมักจะอ่านเนื้อหาด้วย NAT และ xxx.xxx/ ที่อยู่ของฉัน ** ส่วน / y เขียนอยู่ที่ไหนใน TCP / IP stack?

เราต้องการ NAT จริง ๆ หรือเปล่า? สิ่งที่ฉันเข้าใจจากบทความ Wikipedia คือ NAT ทำขึ้นเพื่อปรับที่อยู่ IP ให้เหมาะสมเมื่อปิดคอมพิวเตอร์บางเครื่อง อนุญาตให้เชื่อมต่อ 5 อุปกรณ์ด้วย IP สาธารณะเพียง 1 เครื่องหรือไม่


แบบตัวต่อตัวควรตอบคำถามของคุณ นอกจากนี้คำถามเกี่ยวกับเครือข่ายในบ้านและระดับเริ่มต้นนั้นไม่ใช่สิ่งที่เหมาะสมที่สุดสำหรับเว็บไซต์นี้
Craig Constantine

คำตอบ:


14

(สำหรับต่อไปนี้ฉันจะละเว้นการค้นหา 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 แพ็คเก็ตเหล่านี้และรู้ว่าชร้องขอหน้าเว็บที่มันเป็นเพราะ 2345portnumber

เหล่านี้รวมกันพอร์ตเขียนมักจะเป็นเช่น: และ1.1.1.1:23453.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:2345192.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 / พอร์ตต้นทางและปลายทางทั้งหมด


ขอบคุณ ฉันคิดว่าลูกค้าทุกคนจะส่งพอร์ต 80 ไปยังพอร์ต 80 อีกอันฉันคิดว่าผู้เชี่ยวชาญจำนวนมากไม่เชื่อเช่นเดียวกัน
Nicolas Zozol
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.