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

คู่มือเกมแลค › L8 ซ็อกเก็ตและโปรโตคอล

IP fragmentation ของแพ็กเก็ต UDP IP fragmentation of large UDP

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

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

แพ็กเก็ต UDP ที่ใหญ่กว่า MTU (ขนาดสูงสุดที่ส่งได้ในครั้งเดียว) จะถูกแบ่งเป็นชิ้น (fragmentation) ที่ชั้น IP และถ้า fragment หายไปแค่ชิ้นเดียว ทั้งแพ็กเก็ตจะถูกทิ้ง

ทำไม สแนปช็อตในที่ที่คนเยอะมีขนาดเกิน 1,500 ไบต์ → ผลคือ ถูกแบ่งเป็นหลาย fragment ตอนส่ง ถ้าหายแม้แต่ชิ้นเดียวก็ทิ้งทั้งหมด → บนหน้าจอ ยิ่งแพ็กเก็ตใหญ่ อัตราแพ็กเก็ตหายยิ่งสูงขึ้นหลายเท่า วาร์ปเฉพาะในที่ที่คนเยอะ

อาการ
วาร์ป
ปัจจัย
แพ็กเก็ตหาย
ใครเจอ
บางจุด/บางแชนแนล, บางพื้นที่/บาง ISP
เกิดเมื่อไร
ตอนคนแห่มารวมกัน
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
งานฝั่งทีมพัฒนาเกม
แบ่งแพ็กเก็ตเองให้ไม่เกิน 1,200 ไบต์, ส่งเฉพาะส่วนที่เปลี่ยน
ตัวเลขที่ควรรู้
บนเน็ตที่แพ็กเก็ตหาย 2% แพ็กเก็ตที่ถูกแบ่งเป็น 4 fragment จะหายไปประมาณ 8% ไฟร์วอลล์และ ISP บางรายทิ้งแพ็กเก็ตที่ถูกแบ่งชิ้นไปเลย ผู้เล่นกลุ่มนั้นจึงไม่ได้รับแพ็กเก็ตใหญ่เลยสักตัว
บนกราฟ
สูงตามจำนวนคนและโหลด · จำนวน IP fragment (IpFragCreates), ขนาดสแนปช็อต
จุดที่ต้องดู
ค่าที่เพิ่มขึ้นของ IpFragCreates (จำนวน fragment ที่สร้างตอนส่ง) จาก nstat -az บนเซิร์ฟเวอร์ และ IpReasmFails (จำนวนครั้งที่ประกอบกลับไม่สำเร็จ) ฝั่งรับ ตรวจการกระจายขนาดแพ็กเก็ต UDP จาก log ของเซิร์ฟเวอร์เกมหรือ packet capture
สัญญาณว่าใช่
ในที่ที่คนแห่มารวมกัน IpFragCreates เพิ่มขึ้น มีแพ็กเก็ต UDP ที่ใหญ่เกิน 1,500 ไบต์ และตอนนั้นมีผู้เล่นแจ้งอาการวาร์ปมากขึ้น
สัญญาณว่าไม่ใช่
IpFragCreates ไม่เพิ่ม: ฝั่งที่เซิร์ฟเวอร์ส่งไม่ได้เกิด fragmentation
วิธีตรวจ
ใช้เครื่องมือฝั่งอินฟรา (ไม่ต้องใช้โค้ดเกม)

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

  1. RFC 8085: UDP Usage Guidelines IETF
    ถ้า fragment หายหนึ่งชิ้น จะประกอบกลับไม่ได้และเสียทั้งแพ็กเก็ต, แอป UDP ควรเลี่ยง IP fragmentation
  2. RFC 8900: IP Fragmentation Considered Fragile IETF
    กรณีที่ไฟร์วอลล์และเครือข่ายบางแห่งทิ้ง IP fragment
  3. net/ipv4/proc.c (Linux v6.12) Linux kernel
    ชื่อตัวนับที่ nstat แสดง: FragCreates (จำนวน fragment ที่สร้าง) และ ReasmFails (จำนวนครั้งที่ประกอบกลับไม่สำเร็จ) ในกลุ่ม Ip

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

ชั้นเดียวกัน: L8 ซ็อกเก็ตและโปรโตคอล

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

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