คู่มือเกมแลค › ค้นหาตามอาการ
วาร์ป: 47 สาเหตุและทีมที่ต้องแก้
เรียกอีกอย่างว่า: เทเลพอร์ต, หายวับแล้วโผล่อีกที่, กระโดดข้ามตำแหน่ง
เปิดพจนานุกรมอาการในฉบับหลักที่มีภาพ →
ตัวละครย้ายไปยังตำแหน่งที่ไกลออกไปในทีเดียว โดยไม่เห็นช่วงระหว่างทาง
อีกฝ่ายยืนนิ่งอยู่ที่เดิม แล้วจู่ ๆ ก็ไปโผล่ในตำแหน่งที่ไปไกลแล้ว
ส่วนใหญ่แปลว่าแพ็กเก็ตขาดหายไปช่วงหนึ่ง ให้ดูแพ็กเก็ตหาย, เน็ตขาดช่วงสั้น ๆ, เซิร์ฟเวอร์หยุด และ extrapolation ที่พลาด ถ้าคนอื่นปกติแต่มีคนเดียวที่วาร์ป ให้สงสัยเน็ตของคนนั้นก่อน
สาเหตุที่ทำให้เกิดอาการนี้
L1 โปรเซสเกมฝั่งไคลเอนต์
L2 OS และอุปกรณ์ฝั่งไคลเอนต์
- receive buffer ล้น: ถ้าเกมยุ่งจนดึงแพ็กเก็ตออกจากซ็อกเก็ต (อินเทอร์เฟซรับส่งข้อมูลเครือข่ายที่ OS จัดให้) ช้า บัฟเฟอร์ของ OS จะล้น (พัฒนาไคลเอนต์ (ทีมพัฒนาเกม))
- การสแกน Wi-Fi เบื้องหลัง: ระหว่างที่ OS สลับช่องสัญญาณไปมาเป็นระยะเพื่อหา Wi-Fi รอบตัว การรับส่งข้อมูลจะหยุดไปครู่หนึ่ง (ภายนอก (ภายนอก))
L3 เครือข่ายในบ้าน
L4 เส้นทางอินเทอร์เน็ต
- อินเทอร์เน็ตดาวเทียม (วงโคจรต่ำ/ค้างฟ้า): อินเทอร์เน็ตดาวเทียมต้องส่งสัญญาณขึ้นไปในอวกาศแล้วกลับลงมา ดาวเทียมวงโคจรค้างฟ้าแค่ช่วงขึ้นลงนี้ก็ใช้เวลาไปกลับเกิน 0.5 วินาทีแล้ว ส่วนดาวเทียมวงโคจรต่ำอย่าง Starlink ปกติเร็ว แต่ตอนที่ระบบจัดเส้นทางใหม่ ความหน่วงจะแกว่งและบางครั้งขาดไปชั่วครู่ (ภายนอก (ภายนอก))
- จุด peering แออัดช่วงพีค: ช่วงหัวค่ำราว 21:00–23:00 ทราฟฟิกวิดีโอพุ่งขึ้นมาก จุดเชื่อมต่อระหว่าง ISP (peering) จึงมักแออัด (อินฟราเครือข่าย (ทีมอินฟรา))
- เคเบิลใต้น้ำ/วงจรต่างประเทศขัดข้อง: เมื่อเคเบิลใต้น้ำขาด ทราฟฟิกต้องอ้อมไปเส้นทางไกลหลายสัปดาห์ (นานสุดหลายเดือน) จนกว่าจะซ่อมเสร็จ และวงจรที่เหลืออยู่ก็แออัด (ภายนอก (ภายนอก))
- เส้นทาง BGP เปลี่ยนและ converge ใหม่: เมื่อข้อมูลเส้นทางของอินเทอร์เน็ตเปลี่ยน แพ็กเก็ตจะหายในช่วงไม่กี่วินาทีถึงหลายสิบวินาที (บางกรณีหลายนาที) ที่เส้นทางกำลัง converge ใหม่ (อินฟราเครือข่าย (ทีมอินฟรา))
- เส้นทาง ECMP เส้นหนึ่งเสีย: ISP และดาต้าเซ็นเตอร์มีหลายเส้นทางไปยังปลายทางเดียวกัน และกำหนดเส้นทางหนึ่งเส้นให้แต่ละการเชื่อมต่อ ถ้าเสียแค่เส้นเดียว คนที่ถูกจัดให้ใช้เส้นนั้นจะแลคอยู่ตลอด (อินฟราเครือข่าย (ทีมอินฟรา))
- ISP จำกัดความเร็วและจัดการทราฟฟิก: ในแพ็กเกจที่ใช้ดาต้าเกินโควตาแล้ว หรือแพ็กเกจที่มีการจัดการทราฟฟิกบางประเภท แพ็กเก็ตจะถูกหน่วงหรือถูกทิ้ง (ภายนอก (ภายนอก))
- การจำกัด UDP และตรวจแพ็กเก็ตระดับประเทศหรือ ISP: บางเครือข่ายบล็อก IP หรือพอร์ต UDP บางตัว หรือจำกัดความเร็ว UDP และอุปกรณ์ตรวจแพ็กเก็ตจะกรองโปรโตคอลที่ไม่รู้จักทิ้ง เกมที่สื่อสารด้วย UDP จึงเชื่อมต่อในเครือข่ายนั้นไม่ได้หรือหลุดบ่อย (ภายนอก (ภายนอก))
- คุณภาพสายเน็ตแย่: ขั้วต่อหลวม สายเก่า หรือโมเด็มผิดปกติ ทำให้แพ็กเก็ตหายอย่างต่อเนื่องและเน็ตขาดเป็นระยะ (ภายนอก (ภายนอก))
- ลิงก์ที่ใช้ร่วมกันเต็มเพราะ DDoS: การโจมตีปริมาณมหาศาลที่พุ่งเป้ามาที่บริษัทเกม หรือที่อื่นในเครือข่ายเดียวกัน ทำให้ลิงก์ที่ใช้ร่วมกันเต็ม (อินฟราเครือข่าย (ทีมอินฟรา))
- เชื่อมต่อผ่าน VPN/โปรแกรมลดปิง: เมื่อเปิด VPN หรือโปรแกรมลดปิง แพ็กเก็ตจะวิ่งผ่านเซิร์ฟเวอร์ตัวกลาง (relay) ของบริษัทนั้น ถ้าเซิร์ฟเวอร์ตัวกลางอยู่ไกลหรือแออัด ก็กลับยิ่งช้าลง (ภายนอก (ภายนอก))
L5 อุปกรณ์เครือข่ายในดาต้าเซ็นเตอร์
- การอ้อมผ่านระบบป้องกัน DDoS และ false positive: เมื่อเบี่ยงทราฟฟิกไป scrubbing center เพื่อกันการโจมตี เส้นทางจะยาวขึ้น และบางครั้งระบบเข้าใจผิดว่าผู้เล่นปกติเป็นการโจมตีแล้วบล็อก (อินฟราเครือข่าย (ทีมอินฟรา))
- microburst ที่สวิตช์: ถ้าเซิร์ฟเวอร์หลายเครื่องส่งแพ็กเก็ตถึงผู้เล่นหลายพันคนพร้อมกันในชั่วขณะเดียว บัฟเฟอร์ขนาดเล็กของพอร์ตสวิตช์ที่ทราฟฟิกนั้นไหลมารวมกันจะล้นภายในไม่ถึง 1 ms (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- ลิงก์ของดาต้าเซ็นเตอร์เต็ม: ถ้าการแจกจ่ายแพตช์ การส่ง log หรือการสำรองข้อมูล ใช้ลิงก์เดียวกับเกม ลิงก์จะเต็ม (อินฟราเครือข่าย (ทีมอินฟรา))
- สายเสีย/พอร์ตมี error: ถ้าโมดูลออปติกหรือสายเสีย แพ็กเก็ตที่ผ่านเส้นทางนั้นจะเสียหายในสัดส่วนคงที่ (อินฟราเครือข่าย (ทีมอินฟรา))
L6 การ์ดเครือข่ายของเซิร์ฟเวอร์
- อินเทอร์รัปต์ของ NIC กระจุกที่คอร์เดียว: ถ้า NIC ส่งอินเทอร์รัปต์แจ้งว่าแพ็กเก็ตมาถึงไปที่คอร์ CPU เพียงคอร์เดียว คอร์นั้นจะกลายเป็นคอขวด (อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา))
- ring buffer ไม่พอ: ถ้า ring buffer ที่ NIC ใช้พักแพ็กเก็ตไว้ชั่วคราวมีขนาดเล็ก เมื่อแพ็กเก็ตทะลักเข้ามาในชั่วขณะ บัฟเฟอร์จะล้นและแพ็กเก็ตถูกทิ้ง (อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา))
- เกินขีดจำกัด PPS ของคลาวด์: เซิร์ฟเวอร์บนคลาวด์แต่ละประเภทมีขีดจำกัดจำนวนแพ็กเก็ตต่อวินาทีและแบนด์วิดท์ ถ้าเกินจะถูกทิ้งเงียบ ๆ (อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา))
- แบนด์วิดท์ NIC เต็ม: ถ้าใช้การ์ด 1 Gbps หรือ 10 Gbps จนถึงขีดจำกัด transmit queue จะยาวขึ้น และสุดท้ายแพ็กเก็ตจะถูกทิ้ง (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- การซ่อมบำรุงโฮสต์คลาวด์/live migration: เมื่อผู้ให้บริการคลาวด์ซ่อมบำรุงเครื่องจริง (โฮสต์) จะย้าย VM ไปโฮสต์อื่น (live migration) หรือหยุด VM ชั่วคราว ระหว่างนั้นทั้งเซิร์ฟเวอร์จะหยุด และถ้าหยุดนาน การเชื่อมต่อจะขาด (อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา))
L7 OS ของเซิร์ฟเวอร์ (เคอร์เนล)
- บัฟเฟอร์ซ็อกเก็ตของเคอร์เนลไม่พอ: ถ้าบัฟเฟอร์ส่งและรับเล็ก เมื่อทราฟฟิกมาเป็น burst แพ็กเก็ตที่รับทาง UDP จะถูกทิ้ง ส่วนการส่งทาง TCP จะติดเพราะบัฟเฟอร์ไม่มีที่ว่าง (อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา))
- ตาราง conntrack ของเซิร์ฟเวอร์เต็ม: เมื่อตาราง connection tracking (conntrack) ที่ไฟร์วอลล์ของ Linux ใช้บันทึกทุกการเชื่อมต่อแตะขีดจำกัด แพ็กเก็ตใหม่จะถูกทิ้ง (อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา))
L8 ซ็อกเก็ตและโปรโตคอล
- นโยบายจัดการไคลเอนต์ที่ช้า (slow consumer): เมื่อข้อมูลที่ต้องส่งให้ไคลเอนต์ใดกองสะสมเรื่อย ๆ เซิร์ฟเวอร์จะทิ้งอัปเดตเก่าหรือตัดการเชื่อมต่อ (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- IP fragmentation ของแพ็กเก็ต UDP: แพ็กเก็ต UDP ที่ใหญ่กว่า MTU (ขนาดสูงสุดที่ส่งได้ในครั้งเดียว) จะถูกแบ่งเป็นชิ้น (fragmentation) ที่ชั้น IP และถ้า fragment หายไปแค่ชิ้นเดียว ทั้งแพ็กเก็ตจะถูกทิ้ง (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
L9 โปรเซสเกมฝั่งเซิร์ฟเวอร์
- ปริมาณ broadcast พุ่ง: ถ้าส่งการเคลื่อนไหวของผู้เล่นหนึ่งคนไปให้ทุกคนที่มองเห็น จะเกิดอัปเดตที่ต้องส่งเท่ากับจำนวนคนที่รวมตัวยกกำลังสอง (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- แพตช์ทำให้รูปแบบทราฟฟิกเปลี่ยน: ถ้าคอนเทนต์ เอฟเฟกต์ หรือรายการที่ต้องซิงก์ใหม่ทำให้ขนาดและความถี่ของแพ็กเก็ตเพิ่ม เซิร์ฟเวอร์ที่เคยลื่นจะเริ่มชนขีดจำกัด MTU แบนด์วิดท์ และจำนวนแพ็กเก็ตหลังลงแพตช์ (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
การออกแบบการซิงก์
- client authoritative: ถ้าแต่ละคนตัดสินผลของตัวเอง จอของเราจะลื่น แต่ผลจะไม่ตรงกับจอของคนอื่นและโกงได้ง่าย (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- rollback netcode คาดการณ์พลาด: แสดงผลไปก่อนโดยคาดการณ์อินพุตของอีกฝ่าย ถ้าผิดจะย้อนกลับไปคำนวณใหม่ ยิ่งปิงสูง ช่วงที่ต้องย้อนยิ่งยาว (พัฒนาไคลเอนต์ (ทีมพัฒนาเกม))
- การคำนวณเส้นทางไม่ตรงกันในการซิงก์คำสั่ง: ถ้ารับส่งแค่ “ให้ไปที่นี่” แล้วแต่ละฝั่งคำนวณเส้นทางเอง เมื่อการคำนวณต่างกันแม้เพียงเล็กน้อย ตัวละครหรือมอนสเตอร์จะเดินไปคนละเส้นทางแล้วถูกดึงกลับมาที่ตำแหน่งที่ถูกต้อง (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- อัตราส่งสแนปช็อตต่ำ: ถ้าเซิร์ฟเวอร์ส่งอัปเดตตำแหน่ง (สแนปช็อต) แค่ไม่กี่ครั้งใน 1 วินาที ต้องตั้ง interpolation buffer ให้ยาวตามไปด้วย จึงเห็นตัวละครอื่นเป็นภาพในอดีตที่ไกลขึ้น (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
ปัญหาที่เกิดกับบางคนเท่านั้น
- คนเน็ตช้าขยับแบบกรอเร็วบนจอคนอื่น: อินพุตของคนที่เน็ตไม่ดีจะไปถึงเซิร์ฟเวอร์แบบไม่สม่ำเสมอและมาเป็นกลุ่ม ถ้าเซิร์ฟเวอร์ใช้คำสั่งตามที่ได้รับในแต่ละทิก คนอื่นจะเห็นตัวละครนั้นหยุดแวบแล้วเดินหลายก้าวในทีเดียว (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- สิทธิ์ควบคุมมอนสเตอร์อยู่ที่ไคลเอนต์ที่ช้า: บางเกมให้ไคลเอนต์ของผู้เล่นคนหนึ่งที่อยู่ใกล้คำนวณการเคลื่อนที่ของมอนสเตอร์เพื่อลดโหลดเซิร์ฟเวอร์ ถ้าเน็ตของคนนั้นไม่ดี มอนสเตอร์ตัวนั้นจะขยับแปลก ๆ บนจอของทุกคน (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- สแนปช็อตตั้งต้น (baseline) หาย: ในแบบที่เซิร์ฟเวอร์ส่ง “เฉพาะส่วนที่ต่างจากครั้งก่อน” ถ้าข้อมูลเต็ม (baseline) ที่ส่งครั้งแรกหายไป ก็จะใช้ส่วนเปลี่ยนแปลงที่ตามมาไม่ได้ (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
ต้นเหตุของการส่งซ้ำใน TCP
- แพ็กเก็ตหายช่วงไร้สาย: Wi-Fi และเครือข่ายมือถือจะลองส่งซ้ำในช่วงไร้สายอยู่หลายครั้ง ถ้ายังไม่สำเร็จก็จะทิ้งแพ็กเก็ตนั้น แล้ว TCP จะส่งแพ็กเก็ตที่ถูกทิ้งใหม่หลังจากนั้นพักใหญ่ (ภายนอก (ภายนอก))
- บัฟเฟอร์ตื้นล้นเพราะ burst จากฝั่งส่ง: ถ้าเซิร์ฟเวอร์ส่งอัปเดตของผู้เล่นหลายพันคนออกไปรวดเดียวในทุกทิก บัฟเฟอร์เล็ก ๆ ของสวิตช์หรือขีดจำกัดชั่วขณะของคลาวด์จะล้นภายในไม่ถึง 1 ms และแพ็กเก็ตบางส่วนถูกทิ้ง (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- policer ทิ้งส่วนที่เกิน: แพ็กเกจเน็ตของ ISP, ขีดจำกัดของอินสแตนซ์คลาวด์ และอุปกรณ์ป้องกัน DDoS บางครั้งจะทิ้งแพ็กเก็ตที่เกินความเร็วที่กำหนดทันทีโดยไม่เข้าคิว (อินฟราเครือข่าย (ทีมอินฟรา))
- ข้อผิดพลาดทางกายภาพ (สายเสีย/โมดูลออปติก/คอนเน็กเตอร์): สายที่ชำรุด, คอนเน็กเตอร์ไฟเบอร์ที่มีฝุ่น และโมดูลออปติกที่หมดอายุการใช้งาน ทำให้เกิด bit error และอุปกรณ์จะทิ้งแพ็กเก็ตที่เสียไปเงียบ ๆ (อินฟราเครือข่าย (ทีมอินฟรา))
- เครื่องเซิร์ฟเวอร์ฝั่งรับทิ้งแพ็กเก็ต: แพ็กเก็ตมาถึงเซิร์ฟเวอร์แล้ว แต่ถูกทิ้งเพราะ ring buffer ของ NIC (บัฟเฟอร์ที่พักแพ็กเก็ตที่มาถึงไว้ชั่วคราว) ล้น หรือคอร์ที่เคอร์เนลใช้ประมวลผลขาเข้าทำงานเต็ม (อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา))
- อุปกรณ์กลางทางเกินขีดความสามารถ (ไฟร์วอลล์/IPS/ระบบป้องกัน DDoS): ไฟร์วอลล์, อุปกรณ์ป้องกันการบุกรุก (IPS) และอุปกรณ์ป้องกัน DDoS ตรวจแพ็กเก็ตที่ผ่านทีละตัว เมื่อเกินความสามารถในการตรวจ แพ็กเก็ตที่ประมวลผลไม่ทันจะถูกทิ้งตั้งแต่จังหวะนั้น (อินฟราเครือข่าย (ทีมอินฟรา))
- เส้นทางเปลี่ยน/เส้นทาง ECMP ที่เสีย: แพ็กเก็ตจะหายไปในช่วงไม่กี่วินาทีที่เส้นทางอินเทอร์เน็ตเปลี่ยน หรือในการเชื่อมต่อที่ถูกจัดให้วิ่งบนเส้นทางที่เสียจากหลายเส้นทาง ECMP (อินฟราเครือข่าย (ทีมอินฟรา))
ดูพจนานุกรมอาการในฉบับหลักที่มีภาพ