คู่มือเกมแลค › ปัญหาที่เกิดกับบางคนเท่านั้น
บั๊กแยกเซสชันด้วย IP/ID เครื่อง Session keyed by IP or machine ID
ID สาเหตุ pt-session-key · ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาไคลเอนต์ (ทีมพัฒนาเกม)
เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →
ถ้าเซิร์ฟเวอร์หรือเซิร์ฟเวอร์ตัวกลางแยกการเชื่อมต่อด้วย IP หรือ ID เครื่อง สองไคลเอนต์ใน PC เดียวกัน (public IP เดียวกัน) จะถูกมองเป็นคนเดียว
ทำไม สร้างตารางเซสชันโดยใช้ IP หรือ IP+ID เครื่องเป็นคีย์ → ผลคือ ข้อมูลของไคลเอนต์ตัวที่สองเขียนทับหรือปนกับเซสชันแรก → บนหน้าจอ ฝั่งหนึ่งมองไม่เห็น NPC อีกฝั่งหลุดหรือได้รับข้อมูลของคนอื่น
- อาการ
- มองไม่เห็น/ตัวผี, หลุด
- ปัจจัย
- แพ็กเก็ตหาย
- ใครเจอ
- ไคลเอนต์เดียวในเครื่องที่เปิดหลายจอ, คนในบ้านเดียวกัน, บางพื้นที่/บาง ISP
- เกิดเมื่อไร
- หลังล็อกอิน/หลังปิดปรับปรุง
- ผู้รับผิดชอบ
- ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาไคลเอนต์ (ทีมพัฒนาเกม)
- งานฝั่งทีมพัฒนาเกม
- เซิร์ฟเวอร์: ทั้งเซิร์ฟเวอร์และเซิร์ฟเวอร์ตัวกลางต้องแยกการเชื่อมต่อด้วย session token ที่ไม่ซ้ำกัน, ต้องแก้ให้ได้เพราะหลายคนในบ้านเดียวกัน (หลัง NAT ของเราเตอร์) และผู้ใช้เครือข่ายมือถือที่ ISP แบ่ง IP เดียวให้ผู้ใช้หลายราย (CGNAT) ก็เจอปัญหาเดียวกัน ไคลเอนต์: ใช้ session token ที่ได้รับแยกกันสำหรับแต่ละไคลเอนต์ที่เปิด
- บนกราฟ
- สูงเฉพาะบางกลุ่ม · จำนวนเซสชันพร้อมกันจาก public IP เดียวกัน, จำนวนครั้งที่เซสชันถูกเขียนทับ
- จุดที่ต้องดู
- บันทึกคีย์ที่ใช้ค้นหาเซสชัน, session token และ IP/พอร์ตของไคลเอนต์ ลงใน log ของเซิร์ฟเวอร์และเซิร์ฟเวอร์ตัวกลาง แล้วดูว่าเซสชันเดิมเปลี่ยนไปหรือไม่ในจังหวะที่มีการเชื่อมต่อที่สองจาก IP เดียวกัน จำลองอาการได้โดยเปิดสองไคลเอนต์ใน PC เดียวกันตามลำดับ
- สัญญาณว่าใช่
- ทันทีที่ไคลเอนต์ตัวที่สองเชื่อมต่อ ที่อยู่หรือข้อมูลตัวละครของเซสชันแรกเปลี่ยน และผู้เล่นคนอื่นที่อยู่หลังเราเตอร์เดียวกันหรือเครือข่ายมือถือ (CGNAT) ก็หลุดแบบเดียวกัน
- สัญญาณว่าไม่ใช่
- สองเซสชันจาก IP เดียวกันแยกกันด้วย token ต่างกัน: ไม่ใช่สาเหตุนี้ ถ้าสองโปรเซสใช้พอร์ตภายในเครื่องเดียวกัน น่าจะเป็น “พอร์ต UDP แบบตายตัวชนกัน”
- วิธีตรวจ
- ต้องมี log หรือเมตริกจากเซิร์ฟเวอร์/ไคลเอนต์เกม
แหล่งอ้างอิง
- RFC 6269: Issues with IP Address Sharing IETF
เมื่อผู้ใช้บริการหลายรายใช้ IPv4 address เดียวกันผ่าน NAT หรือ CGN จะแยกผู้ใช้ด้วย IP อย่างเดียวไม่ได้
สาเหตุที่ควรดูประกอบ
ชั้นเดียวกัน: ปัญหาที่เกิดกับบางคนเท่านั้น
สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (มองไม่เห็น/ตัวผี)
ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง