สำหรับการเชื่อมต่อ TCP หรือ UDP มีองค์ประกอบสี่อย่างที่ประกอบกันเป็นแอดเดรสของแพ็กเก็ต ที่อยู่ IP ต้นทาง, ที่อยู่ IP ปลายทาง, พอร์ตต้นทางและพอร์ตปลายทาง
destinatin IP เป็นเซิร์ฟเวอร์ที่คุณเชื่อมต่อและพอร์ตปลายทางคือพอร์ตที่คุณกำลังเชื่อมต่อเช่น TCP พอร์ต 80 สำหรับการเชื่อมต่อ http พอร์ตต้นทางคือ "ชั่วคราว" ซึ่งหมายความว่าจะถูกเลือกจากช่วงและไม่มีความหมายเฉพาะ ช่วงอยู่ระหว่าง 1024-65535 การเลือกพอร์ตนั้นขึ้นอยู่กับระบบปฏิบัติการ แต่ไม่สำคัญว่าพอร์ตใดที่เลือก
ที่อยู่ IP ต้นทางคือพีซีที่สร้างการเชื่อมต่อ สมมุติว่าการเชื่อมต่อคือ 222.222.222.222:80 และเรามีพีซีสองเครื่องเชื่อมต่อกับที่อยู่ IP นี้ภายใน 10.1.1.1 และ 10.1.1.2
ดังนั้นเมื่อแพ็กเก็ตมาพวกมันอาจจะพูดถึงเรื่องนี้
10.1.1.1:3434 -> 222.222.222.222:80
10.1.1.2:5455 -> 222.222.222.222:80
แพ็กเก็ตการตอบกลับจะถูกย้อนกลับดังนี้:
222.222.222.222:80 -> 10.1.1.1:3434
222.222.222.222:80 -> 10.1.1.2:5455
ดังนั้นเราจะเห็นได้ว่าพอร์ตต้นทางคือสิ่งที่อนุญาตให้แพ็กเก็ตกลับมาถึงผู้ส่ง
เมื่อเราผ่านเราเตอร์ NAT IP ต้นทางจะเปลี่ยนเป็น IP ของเราเตอร์ - ในกรณีนี้ 111.111.111.111 ดังนั้นแพ็กเก็ตจะมีลักษณะดังนี้:
111.111.111.111:3434 -> 222.222.222.222:80
111.111.111.111:5455 -> 222.222.222.222:80
ดังนั้นหากเราเตอร์คอยติดตามพอร์ตต้นทางของการเชื่อมต่อจากนั้นจะทราบว่าแพ็กเก็ตตอบกลับไปยังพอร์ต 3434 ควรถูกส่งไปที่ 10.1.1.1 นี่คือตารางการแปล NAT
แต่จะเกิดอะไรขึ้นถ้าพีซีของเราทั้งคู่เลือกพอร์ตต้นทางเดียวกัน
10.1.1.1:3434 -> 222.222.222.222:80
10.1.1.2:3434 -> 222.222.222.222:80
แพ็คเก็ต NATted จะมีลักษณะเช่นนี้:
111.111.111.111:3434 -> 222.222.222.222:80
111.111.111.111:3434 -> 222.222.222.222:80
ดังนั้นแพ็คเก็ตการตอบสนองต่อ 3434 ที่มีไว้สำหรับ 10.1.1.1 นั้นจะแยกไม่ออกจากชุดข้อมูลเดียวสำหรับ 10.1.1.2
ในการหลีกเลี่ยงปัญหานี้เราเตอร์จะไม่เพียง แต่เปลี่ยนที่อยู่ IP ต้นทาง แต่จะเปลี่ยนเป็นพอร์ตต้นทางด้วย จากนั้นเราเตอร์สามารถมั่นใจได้ว่าการเชื่อมต่อทุกครั้งมีพอร์ตต้นทางที่ไม่ซ้ำกันและเก็บตารางการแปลเพื่อเปลี่ยนทั้ง IP และพอร์ตของแพ็กเก็ตตอบกลับดังนั้นพวกเขาจึงถูกส่งไปยังผู้ส่งที่ถูกต้อง
ในการตอบคำถามเพื่อความปลอดภัยของคุณเราเตอร์จำเป็นต้องเปลี่ยนพอร์ตต้นทางในกรณีที่เกิดการชนกัน แต่ส่วนใหญ่จะเปลี่ยนพอร์ตต้นทางในทุกกรณีและเลือกพอร์ตต้นทางแบบสุ่ม สิ่งนี้ทำให้ยากที่จะคาดการณ์ว่าพอร์ตต้นทางถัดไปที่เลือกอาจเป็นอะไรและทำให้ผู้โจมตีสามารถฉีดแพ็คเก็ตลงในลำดับได้ยากขึ้น