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

คู่มือเกมแลค › L5 อุปกรณ์เครือข่ายในดาต้าเซ็นเตอร์

MTU ไม่ตรงกัน (เฉพาะแพ็กเก็ตใหญ่ที่หาย) MTU black hole

ID สาเหตุ dc-mtu · ผู้รับผิดชอบหลัก อินฟราเครือข่าย (ทีมอินฟรา) · ร่วมกับ อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา), พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)

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

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

ทำไม MTU ลดลงในช่วง tunnel หรือ VPN → ผลคือ ข้อความแจ้งว่าขนาดเกิน (ICMP) ถูกไฟร์วอลล์บล็อก ฝั่งส่งจึงไม่รู้ → บนหน้าจอ ค้างเฉพาะตอนเปิดหน้าจอที่ข้อมูลเยอะ เช่น กระเป๋าหรือรายชื่อตัวละคร แล้วหลุด

อาการ
ค้าง, หลุด, เข้าเกมไม่ได้/โหลดไม่จบ
ปัจจัย
แพ็กเก็ตหาย
ใครเจอ
บางพื้นที่/บาง ISP, เราคนเดียว
เกิดเมื่อไร
ตอนทำแอ็กชันบางอย่าง, หลังล็อกอิน/หลังปิดปรับปรุง
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก อินฟราเครือข่าย (ทีมอินฟรา) · ร่วมกับ อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา), พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
งานฝั่งทีมพัฒนาเกม
ถ้าจะลดจากฝั่งเซิร์ฟเวอร์โดยตรง ให้ตั้งขนาด segment สูงสุดของซ็อกเก็ต (TCP_MAXSEG) เพราะแค่แบ่งข้อความในโค้ดเกมให้เล็กลงยังกันไม่ได้, รักษาขนาดแพ็กเก็ต UDP ไว้ไม่เกิน 1,200 ไบต์
งานฝั่งทีมอินฟรา
เครือข่าย: ลดขนาดแพ็กเก็ต TCP ในช่วง tunnel (ปรับ MSS), อนุญาตข้อความแจ้งว่าขนาดเกิน (ICMP) ในไฟร์วอลล์และ network ACL บนคลาวด์ เครื่องเซิร์ฟเวอร์/OS: อนุญาตข้อความแจ้งว่าขนาดเกิน (ICMP) ในไฟร์วอลล์ของเซิร์ฟเวอร์และ security group บนคลาวด์ด้วย, เปิดการค้นหา MTU ของเคอร์เนลเซิร์ฟเวอร์ (tcp_mtu_probing=1) ไว้เป็นด่านสุดท้าย ซึ่งจะทำงานหลังหยุดไปหลายวินาทีแล้ว
ตัวเลขที่ควรรู้
ปกติ 1,500 ไบต์ เมื่อผ่าน tunnel จะลดเหลือราว 1,400
บนกราฟ
สูงเฉพาะบางกลุ่ม · หลุดแยกตามพื้นที่/ISP, การตอบกลับขนาดใหญ่ล้มเหลว
จุดที่ต้องดู
จาก PC ของผู้เล่นที่มีปัญหา ส่ง ping ที่เปิดแฟล็กห้ามแบ่ง (DF) ไปที่เซิร์ฟเวอร์โดยเปลี่ยนขนาดไปเรื่อย ๆ Windows ใช้ ping /f /l 1472 SERVER_IP, Linux ใช้ ping -M do -s 1472 SERVER_IP (1,472 คือ MTU 1,500 ลบเฮดเดอร์ IP 20 ไบต์และเฮดเดอร์ ICMP 8 ไบต์) ลดขนาดลงเรื่อย ๆ เพื่อหาขนาดสูงสุดที่ผ่าน และตรวจว่า security group และไฟร์วอลล์ฝั่งเซิร์ฟเวอร์อนุญาตข้อความ ICMP แจ้งว่าขนาดเกิน (Fragmentation Needed) หรือไม่
สัญญาณว่าใช่
ping ขนาดเล็กผ่าน แต่ ping DF ขนาด 1,472 ไบต์ล้มเหลว (ไม่มีการตอบกลับ หรือได้ error ว่าต้อง fragment) และขนาดสูงสุดที่ผ่านเล็กราว 1,400 ผู้เล่นในพื้นที่เดียวกันค้างเฉพาะตอนเปิดหน้าจอที่ข้อมูลเยอะ
สัญญาณว่าไม่ใช่
ถ้า ping DF ขนาด 1,472 ไบต์ก็ผ่านดี แสดงว่าไม่ใช่ปัญหา path MTU ถ้า ping ขนาดเล็กก็ไม่ผ่าน แสดงว่า ICMP ถูกบล็อกทั้งหมด จึงใช้วิธีนี้ตัดสินไม่ได้
วิธีตรวจ
ตรวจที่สภาพแวดล้อมฝั่งผู้เล่น

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

  1. RFC 2923: TCP Problems with Path MTU Discovery IETF
    ถ้าไฟร์วอลล์บล็อก ICMP (Fragmentation Needed) การค้นหา path MTU จะล้มเหลว และแพ็กเก็ตใหญ่จะหายไปเรื่อย ๆ (black hole), ping และการสื่อสารขนาดเล็กยังใช้ได้ จึงวินิจฉัยยาก
  2. Maximum transmission unit and maximum segment size Cloudflare
    path MTU ของอินเทอร์เน็ต 1,500 เมื่อผ่าน GRE tunnel เหลือ 1,476 แนะนำให้จำกัด TCP MSS ไว้ไม่เกิน 1,436
  3. IP Sysctl Linux kernel
    tcp_mtu_probing=1 ปกติปิดอยู่ และจะเปิดการค้นหา path MTU ของ TCP เมื่อตรวจพบ ICMP black hole
  4. ping(8) — Linux manual page iputils
    -M do เปิดแฟล็ก DF และปฏิเสธแพ็กเก็ตที่ใหญ่กว่า path MTU, -s กำหนดขนาดข้อมูล (ค่าเริ่มต้น 56 ไบต์ บวกเฮดเดอร์ ICMP 8 ไบต์)
  5. ping Microsoft
    /f เปิดแฟล็ก DF ใช้หาปัญหา path MTU และ /l กำหนดขนาดข้อมูล

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

ชั้นเดียวกัน: L5 อุปกรณ์เครือข่ายในดาต้าเซ็นเตอร์

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

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