한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

คู่มือเกมแลค › L3 เครือข่ายในบ้าน

NAT mapping หมดอายุ NAT mapping timeout

ID สาเหตุ hn-nat · ผู้รับผิดชอบหลัก พัฒนาไคลเอนต์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)

เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →

เราเตอร์จะลบการเชื่อมต่อที่ idle (ไม่มีแพ็กเก็ตวิ่งมาสักพัก) ออกจากตาราง NAT นี่คือสาเหตุที่พบบ่อยของอาการหลุดตอนที่เพิ่งขยับหลังจากอยู่เฉย ๆ

ทำไม เราเตอร์บันทึกการเชื่อมต่อ “อุปกรณ์ข้างใน ↔ เซิร์ฟเวอร์ข้างนอก” ไว้ในตาราง NAT (ตารางแปลงที่อยู่) → ผลคือ ถ้าไม่มีแพ็กเก็ตสักพัก จะลบออกจากตาราง (UDP มักอยู่ที่ 30–120 วินาที) → บนหน้าจอ แพ็กเก็ตจากเซิร์ฟเวอร์เข้ามาในบ้านไม่ได้ จึงหลุด

อาการ
หลุด
ปัจจัย
แพ็กเก็ตหาย
ใครเจอ
เราคนเดียว, คนในบ้านเดียวกัน
เกิดเมื่อไร
หลังอยู่เฉย ๆ สักพัก
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก พัฒนาไคลเอนต์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
งานฝั่งทีมพัฒนาเกม
ไคลเอนต์: ส่ง heartbeat ทุกช่วงไม่เกินครึ่งหนึ่งของ idle timeout ที่สั้นที่สุด (UDP mapping จะต่ออายุได้แน่นอนก็ต่อเมื่อมีแพ็กเก็ตขาออกจากในบ้าน ไคลเอนต์จึงต้องเป็นฝ่ายส่ง), เชื่อมต่อใหม่อัตโนมัติเมื่อหลุด เซิร์ฟเวอร์: ตอบ heartbeat และถ้าไม่ได้รับนานเกินกำหนดให้ปิดการเชื่อมต่อก่อน, ถ้า mapping ถูกลบจนที่อยู่และพอร์ตภายนอกเปลี่ยน ให้ยืนยันว่าเป็นผู้เล่นคนเดิมด้วย session token (รหัสยืนยันที่ได้ตอนเชื่อมต่อ) แล้วรับช่วงต่อ
บนกราฟ
การเชื่อมต่อหลุดพร้อมกัน · จำนวนครั้งที่หลุด (heartbeat timeout), เวลา idle ก่อนหลุด
จุดที่ต้องดู
รวบรวมสาเหตุการหลุดที่เซิร์ฟเวอร์บันทึกไว้ และเวลาที่ผ่านไปตั้งแต่แพ็กเก็ตสุดท้ายบนการเชื่อมต่อนั้นจนหลุด (เวลา idle) แล้วดูเป็นการกระจาย สำหรับการทดสอบ ให้ยืดช่วงห่างของแพ็กเก็ต UDP เป็น 30, 60 และ 120 วินาที แล้ววัดว่าช่วงห่างเท่าไรที่การตอบกลับขาดไป
สัญญาณว่าใช่
หลุดเฉพาะการเชื่อมต่อที่อยู่เฉย ๆ และเวลา idle กระจุกอยู่ถัดจากค่าหนึ่ง เช่น 30–120 วินาที ถ้าตั้งช่วงห่าง heartbeat ให้สั้นกว่านั้นแล้วหายไป
สัญญาณว่าไม่ใช่
หลุดแม้ระหว่างกำลังขยับ: ให้ดูเน็ตและเส้นทาง ถ้ากระจุกที่ค่าสั้น ๆ เฉพาะบางค่ายมือถือ น่าจะเป็น “IP ที่ ISP ให้ใช้ร่วมกัน (CGNAT)”
วิธีตรวจ
ต้องมี log หรือเมตริกจากเซิร์ฟเวอร์/ไคลเอนต์เกม

แหล่งอ้างอิง

  1. RFC 4787: Network Address Translation (NAT) Behavioral Requirements for Unicast UDP IETF
    ตัวจับเวลาของ UDP mapping ต้องไม่หมดก่อน 2 นาที และแนะนำค่าเริ่มต้นตั้งแต่ 5 นาทีขึ้นไป การต่ออายุด้วยแพ็กเก็ตขาออกจากข้างในเป็นข้อบังคับ ส่วนการต่ออายุด้วยแพ็กเก็ตขาเข้าจากข้างนอกเป็นทางเลือก
  2. An Experimental Study of Home Gateway Characteristics (IMC 2010) ACM
    ผลวัดเราเตอร์บ้าน 34 รุ่น: UDP mapping อยู่ได้ 30–691 วินาที ค่ามัธยฐาน 90 วินาที เกินครึ่งต่ำกว่า 2 นาที ส่วน TCP ค่ามัธยฐานราว 60 นาที
  3. RFC 9308: Applicability of the QUIC Transport Protocol IETF
    บนอินเทอร์เน็ตที่มี NAT อยู่ในเส้นทาง keep-alive ทุกราว 30 วินาทีกำลังพอดี ถี่กว่านั้นจะเปลืองทราฟฟิกและพลังงาน

สาเหตุที่ควรดูประกอบ

ชั้นเดียวกัน: L3 เครือข่ายในบ้าน

สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (หลุด)

ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง