แม้ว่าคำถามจะได้รับการครอบคลุมอย่างเต็มที่ ฉันรู้สึกว่ากระบวนการนี้ควรอธิบายขั้นตอนได้ดีที่สุด
สำหรับตัวอย่างนี้ฉันนั่งใน 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
(พอร์ตที่คอมพิวเตอร์สร้างขึ้น)