IP แพ็คเก็ตคำตอบไปถึงปลายทางได้อย่างไรภายใน LAN ส่วนตัว [ซ้ำ]


26

นี่เป็นคำถามเชิงทฤษฎีเล็กน้อยที่ทำให้ฉันสับสนมานาน

โดยทั่วไปถ้าเราอยู่ใน LAN ส่วนตัวและเราต้องการให้แพ็กเก็ตขาเข้ามาถึงตัวอย่างเช่นเซิร์ฟเวอร์ HTTP ที่ตั้งอยู่บนหนึ่งในเครื่องเราจะส่งต่อพอร์ตเพื่อให้แพ็คเก็ตที่เข้ามานั้นตรงกับคอมพิวเตอร์เครื่องนั้น

ตอนนี้ฉันค่อนข้างสับสนว่าแพ็คเก็ต 'การตอบสนอง' มาถึงปลายทางของพวกเขาอย่างไรภายใน LAN เช่นเมื่อเราเปิดหน้าเว็บหรือมากกว่านั้น ไม่พบข้อมูลที่เป็นประโยชน์ในหัวข้อนั้น

ฉันหวังว่าบางคนสามารถให้เบาะแสแก่ฉันหรือเชื่อมโยงฉันกับข้อมูลบางอย่างที่อาจอธิบายได้ ขอบคุณ

แก้ไข: ฉันคิดว่าฉันควรชี้แจง ตัวอย่างของสิ่งที่ฉันถามจะเป็นดังนี้:
1. คอมพิวเตอร์ภายใน LAN ที่มี IP ภายนอกเดียวพยายามโหลดหน้าเว็บจากเว็บเซิร์ฟเวอร์นอก LAN นี้ (โดยทั่วไปบนอินเทอร์เน็ต)
2 เว็บเซิร์ฟเวอร์ตอบสนองและส่งเว็บเพจกลับไปยังคอมพิวเตอร์เครื่องนั้น

สิ่งที่ทำให้ฉันสับสนในตอนนี้คือเราเตอร์รู้ได้อย่างไรว่าคอมพิวเตอร์ส่งข้อมูลขาเข้าได้อย่างไร (เนื่องจากเราเตอร์เชื่อมต่อกับ LAN กับคอมพิวเตอร์หลายเครื่อง) โดยไม่ต้องส่งต่อพอร์ตก่อนหน้า


เพิ่งดูวิดีโอที่ดีในหัวข้อ: การแปลที่อยู่เครือข่าย - คอมพิวเตอร์
Der Hochstapler

คำตอบ:


56

แม้ว่าคำถามจะได้รับการครอบคลุมอย่างเต็มที่ ฉันรู้สึกว่ากระบวนการนี้ควรอธิบายขั้นตอนได้ดีที่สุด

สำหรับตัวอย่างนี้ฉันนั่งใน LAN ส่วนตัวที่เชื่อมต่ออินเทอร์เน็ตผ่านเราเตอร์ เนื่องจากเครือข่ายของเราใช้ที่อยู่ IP สาธารณะเดียวเราจึงใช้ NAT

ดังนั้นเมื่อฉันขอหน้าเว็บsuperuser.comที่จะสร้างแพ็กเก็ต IP จำนวนมาก ลองดูที่เดียว

IP Packet
Source: 192.168.1.12(IP ของฉัน)
ปลายทาง: 64.34.119.12(superuser.com)

ตอนนี้ระบบของฉันมีแนวโน้มที่จะติดตั้งคล้ายกับที่เป็นปัญหา ฉันมีที่อยู่ IP ของตัวเอง ( 192.168.1.12) ซับเน็ตมาสก์ ( 255.255.255.0) และเกตเวย์เริ่มต้น ( 192.168.1.1) ตอนนี้เนื่องจากฟิลด์ปลายทางของฉันในแพ็คเก็ต IP ของฉันชี้ไปที่เครือข่ายที่แตกต่างจากของฉันเองจึงถูกส่งไปยังเกตเวย์เริ่มต้นของฉัน (แทนที่จะไปที่คอมพิวเตอร์โดยตรง)

แต่แพ็คเก็ตจะไปถึงเกตเวย์เริ่มต้นได้อย่างไรถ้าปลายทางชี้ไปที่อื่นอย่างสมบูรณ์

อีเธอร์เน็ต

ง่ายมากเพราะเราใช้การกำหนดที่อยู่ของโปรโตคอลอีเธอร์เน็ตสำหรับสิ่งนั้น เราเพียงแค่ตั้งค่าที่อยู่ IP ปลายทางของเราในแพ็คเก็ต IP และที่อยู่ MAC ของเกตเวย์เริ่มต้นของเราเป็นสถานที่ในการกรอบอีเธอร์เน็ต

superuser.comตอนนี้ที่จะทำให้แน่ใจว่าเกตเวย์เริ่มต้นของเราได้รับแพ็คเก็ตสำหรับ เย้!

ตอนนี้เกตเวย์มีแพ็กเก็ตของเราและสามารถส่งได้ทันทีบนเส้นทางของมัน แต่เพื่อให้แน่ใจว่าจะได้รับคำตอบก่อนอื่นจำเป็นต้องแทนที่ที่อยู่ของแพ็กเก็ตแหล่งข้อมูล (มิฉะนั้นsuperuser.comจะพยายามส่งคำตอบไปยังอุปกรณ์ที่ไม่มีอยู่จริงบางตัว (อาจเป็นไปได้) ด้วยที่อยู่ IP ของฉันในเครือข่ายของพวกเขา ดีมาก)
ดังนั้นเราเตอร์ของฉันจะวางที่อยู่ IP สาธารณะในฟิลด์แหล่งที่มา :

IP Packet
Source: 92.69.127.243(IP สาธารณะของฉัน)
ปลายทาง: 64.34.119.12(superuser.com)

ขณะนี้เกมเดียวกันดำเนินต่อไปเรื่อย ๆ กับเราเตอร์ทั้งหมดในโลกจนกว่าแพ็กเก็ตจะมาถึงในที่สุดsuperuser.comและจะสร้างคำตอบ

คำตอบ

คำตอบที่มา IP Packet
: 64.34.119.12(superuser.com)
ปลายทาง: 92.69.127.243(IP สาธารณะของฉัน)

ตกลงคำตอบมาที่เราเตอร์ของฉันตอนนี้เป็นอย่างไร เราเตอร์ของฉันรู้ได้อย่างไรว่าจะส่งคำตอบไปได้192.168.1.12อย่างไร

TCP

นั่นใช้งานได้จริงเพราะเราดูเฉพาะส่วนของ IP และ Ethernet ของการสื่อสาร สิ่งที่ทำให้งานนี้เป็นส่วน TCP

80คุณมีแนวโน้มที่ส่วนใหญ่ทราบว่าเว็บเซิร์ฟเวอร์ทำงานปกติในพอร์ต IP มีความคิดของการไม่มีพอร์ต ที่มาจากTCP ใน TCP เรามี (เหมือนใน IP บริการ) แหล่งที่มาและปลายทาง พอร์ต

TCP Packet ของฉันไปยัง superuser.com
ที่มา: 192.168.1.12(IP ของฉัน)
พอร์ตต้นทาง: 11111(พอร์ตที่คอมพิวเตอร์สร้างขึ้น)
ปลายทาง: 64.34.119.12(superuser.com)
พอร์ตปลายทาง:80

เมื่อเราเตอร์ของคุณส่งแพ็กเก็ตเริ่มต้นนั้น (ที่ส่งไปsuperuser.comที่พอร์ต80) เขาจะใส่พอร์ตต้นทางใหม่ลงไป (เช่น12345)
และนี่คือส่วนที่สำคัญ! เขาจะจำสิ่งนั้นไว้แทนที่!

TCP Packet ของเราเตอร์ของฉันเป็น superuser.com
ที่มา: 92.69.127.243(IP สาธารณะของฉัน)
พอร์ตที่มา: 12345(พอร์ตที่เราเตอร์สร้างขึ้น)
ปลายทาง: 64.34.119.12(superuser.com)
พอร์ตปลายทาง:80

ดังนั้นแพ็กเก็ตคำตอบที่เราเตอร์ได้รับจะมีลักษณะดังนี้:
คำตอบ TCP Packet จาก superuser.com
ที่มา: 64.34.119.12(superuser.com)
พอร์ตต้นทาง: 80
ปลายทาง: 92.69.127.243(IP สาธารณะของฉัน)
พอร์ตปลายทาง: 12345(พอร์ตที่เราเตอร์สร้างขึ้น)

ดังนั้นตอนนี้เขาได้รับแพ็คเก็ตนั้นและเห็นว่ามันเป็นพอร์ตที่จำไว้ก่อนหน้านี้ได้รับมอบหมายให้ดำเนินการ NAT สำหรับที่อยู่ IP 192.168.1.12(ที่อยู่ IP ของฉัน)

ตอบ TCP Packet จากเราเตอร์ของฉัน
ที่มา: 64.34.119.12(superuser.com)
พอร์ตที่มา: 80
ปลายทาง: 192.168.1.12(IP ของฉัน)
พอร์ตปลายทาง: 11111(พอร์ตที่คอมพิวเตอร์สร้างขึ้น)


1
ฉันแก้ไขคำตอบของคุณแล้วมันไม่ได้แสดงให้เห็นอย่างชัดเจนว่าเกิดอะไรขึ้นกับหมายเลขพอร์ต ฉันเพิ่มตัวอย่างเพิ่มเติมในขั้นตอนกลางและหมายเลขพอร์ตที่แต่ละขั้นตอน
Scott Chamberlain

1
@OliverSalzburg ฉันกำลังมองหาคำตอบเดียวกันและคำอธิบายของคุณช่วยฉันจำได้ว่าเป็นเพียงคำถามสั้น ๆ สงสัยว่าเราเตอร์จะเก็บการแม็พย้อนกลับนี้ (พอร์ตต้นทาง) ไว้นานแค่ไหนที่รู้สึกว่ามันจะหมดพื้นที่ถ้ามันยังคงทำเช่นนั้นสำหรับการร้องขอจำนวนมาก
อาเหม็ด

@Ahmed: จำนวนหน่วยความจำที่ใช้ในการติดตามข้อมูลนั้นมี จำกัด มีหมายเลขพอร์ตที่เป็นไปได้ 65536 รายการจะถูกเก็บไว้ใน 2 ไบต์ ดังนั้นเพื่อจดจำที่อยู่ IP (4 ไบต์) สำหรับแต่ละพอร์ตจะรวมได้ถึง 65536 x 4 ไบต์ = 262144 ไบต์ = 256 kB อย่างไรก็ตามข้อมูลเฉพาะถูกนำไปใช้ในเราเตอร์นั่นไม่ใช่หน่วยความจำมากมาย
Der Hochstapler

@Oliver คำตอบที่ดีสิ่งที่ฉันกำลังค้นหา! ฉันมีคำถามสองสามข้อ - (1) "เกมเดียวกันดำเนินต่อไปพร้อมกับเราเตอร์ทั้งหมดในโลก" - นั่นถูกต้องไหม? แน่นอนว่าแหล่งข้อมูลจะไม่ถูกแทนที่ในแต่ละขั้นตอนหรือไม่ (2) เราเตอร์จำพอร์ตที่เปิดไว้ในระยะยาวหรือไม่หรือปล่อยเป็นประจำสำหรับคำขอที่ไม่ตอบสนองหรือไม่ (3) นี่หมายความว่าแฮ็กเกอร์สามารถแพ็คเก็ตผ่านไฟร์วอลล์ของเราเตอร์ของคุณด้วยการโจมตีแบบคนกลาง: สอดแนมแพ็กเก็ต TCP ขาออกของคุณแล้วกำหนดเป้าหมายพอร์ต TCP ของเราเตอร์ที่มี IP ปลอมแหล่งที่ตรงกับปลายทางของคุณ
Jon Bentley

1
ICMP ping response กลับมาที่คอมพิวเตอร์ใน LAN ได้อย่างไร มันมีบางอย่างที่คล้ายกับพอร์ตสำหรับ TCP หรือไม่ วิธีการเกี่ยวกับโปรโตคอลอื่น ๆ ?
Jean

11

การแปลที่อยู่เครือข่าย สั้น ๆ เมื่อเราเตอร์เกตเวย์ของ LAN ส่วนตัวแทนที่ที่อยู่แหล่งที่มาของ LAN ส่วนตัวด้วยที่อยู่สาธารณะของตนเองมันจะแก้ไขแพ็กเก็ตในบางวิธีเช่นการกำหนดหมายเลขพอร์ตที่ไม่ซ้ำกันและที่ไม่มีความหมายในท้องถิ่น . มันจะจำการแมปพอร์ตนี้ดังนั้นเมื่อการตอบกลับมาถึง IP สาธารณะ / พอร์ตที่ไม่ซ้ำ # มัน (เราเตอร์) รู้วิธียกเลิกการแมปกลับไปที่โหนดต้นทางแรกเริ่ม นี่เป็นวิธีที่คุณสามารถเรียกใช้แท็บหลายเบราว์เซอร์หรือเบราว์เซอร์ - อินสแตนซ์และการตอบกลับคำขอของเบราว์เซอร์แต่ละรายการกลับมาที่เบราว์เซอร์และแท็บที่ถูกต้อง


2
JRobert: แล้วโปรโตคอล IP (เช่น ICMP) นอกเหนือจาก tcp หรือ udp ซึ่งไม่มีหมายเลขพอร์ตล่ะ
Uri

0

เมื่อแพ็กเก็ตเริ่มต้นมาถึงอินเตอร์เฟสภายนอกของเราเตอร์จะเปลี่ยนปลายทาง - IP-address ของแพ็กเก็ตตามการกำหนดค่าการส่งต่อพอร์ตและส่งแพ็กเก็ตที่แก้ไขบนอินเตอร์เฟสภายในของเราเตอร์ (หลังจาก ARP ปกติถ้าจำเป็น)

แพ็คเก็ตมาถึงเว็บเซิร์ฟเวอร์และยังคงมีแหล่งภายนอก - ที่อยู่ IP ซึ่งจะใช้เป็นที่อยู่ปลายทางสำหรับการตอบกลับใด ๆ เซิร์ฟเวอร์จะจัดการกับแพ็กเก็ตการตอบกลับขาออกตามปกติด้วยที่อยู่ IP ปลายทางเท่ากับที่อยู่ IP ต้นทางของคำขอ เนื่องจากที่อยู่ IP ของผู้ร้องขออยู่ภายนอกแพ็กเก็ตจะได้รับการจัดการที่เลเยอร์ MAC ไปยังอินเตอร์เฟสภายในของเราเตอร์

โปรดทราบว่ามีเป้าหมายที่แตกต่างกันในแต่ละเลเยอร์เครือข่าย


0

การส่งต่อพอร์ตมักจะทำบนเราเตอร์หรืออุปกรณ์ที่อยู่ติดกัน เมื่ออุปกรณ์บน LAN ส่งทราฟฟิกไปยังอุปกรณ์อื่นใน LAN เดียวกันเราเตอร์จะไม่เกี่ยวข้องเลย การจราจรไม่ได้แตะต้องมัน กฎการส่งต่อพอร์ตของคุณจะไม่มีผลกับปริมาณการใช้ LAN-to-LAN

อีเธอร์เน็ตได้รับการออกแบบด้วยโทโพโลยี "บัส" ในใจที่คอมพิวเตอร์แต่ละเครื่องเชื่อมต่อกับสื่อเดียวกัน ในขณะที่สวิตช์สมัยใหม่ปรับการไหลของการรับส่งข้อมูลโดยการเรียนรู้ที่อยู่ MAC ที่ปลายอีกด้านของพอร์ตและจำลองการรับส่งข้อมูลตามลำดับโทโพโลยี "บัส" ยังคงอยู่ สิ่งใดก็ตามที่เชื่อมต่อกับสวิตช์มาตรฐานสามารถ "เข้าถึง" โดยตรงได้ทุกอย่าง (สมมติว่ามันอยู่ในซับเน็ตเดียวกัน) โดยไม่ต้อง "ผ่าน" อุปกรณ์ระดับกลางเช่นเราเตอร์

คุณอาจสับสนหากอุปกรณ์ที่คุณเชื่อมต่อคอมพิวเตอร์ทุกเครื่องมีพอร์ต Ethernet "LAN" หลายพอร์ตและพอร์ต "WAN" เดียว อุปกรณ์ประเภทนี้มีทั้งเราเตอร์และสวิตช์ในโครงเครื่องเดียวกัน

ดังนั้นภายใน LAN ของคุณหากเซิร์ฟเวอร์ HTTP ของคุณมีที่อยู่ 192.168.1.55 เพื่อเข้าถึงภายใน LAN ของคุณคุณจะต้องพิมพ์ " http://192.168.1.55 " ในแถบที่อยู่ของเบราว์เซอร์ เราเตอร์ไม่เคยเห็นมัน ในการเข้าถึงนอก LAN คุณจะต้องพิมพ์ IP ภายนอกของคุณเช่น " http://256.99.88.77 : {พอร์ตที่คุณส่งต่อที่นี่}" หรืออะไรก็ตาม สิ่งนี้จะกระทบกับเราเตอร์ของคุณฟังก์ชั่น NAT ของเราเตอร์จะทำงานกับมันจากนั้นเราเตอร์จะส่งไปที่ 192.168.1.55


0

ค่อนข้างง่ายเมื่อคอมพิวเตอร์ภายใน LAN ส่วนตัวเริ่มการเชื่อมต่อขาออกเกตเวย์ NAT จะสร้างการแมปพอร์ตโดยอัตโนมัติ มันคล้ายกับการจับคู่พอร์ตที่คุณป้อนด้วยตนเองมาก่อน: {พอร์ตสาธารณะที่อยู่ส่วนตัวพอร์ตส่วนตัว} และใช้งานในลักษณะเดียวกัน ข้อแตกต่างที่ใหญ่ที่สุดกับการแม็พแบบไดนามิกคือเกตเวย์ NAT มักจะต้องกำหนดพอร์ตสาธารณะสำหรับการแม็พโดยพลการเมื่อหมายเลขพอร์ตที่คาดไว้ใช้งานอยู่

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