ลูกค้าเกมรู้ได้อย่างไรว่าเซิร์ฟเวอร์กำลังทำงานบน LAN ของพวกเขา?


18

ในเกมที่มีผู้เล่นหลายคนจำนวนมากมีตัวเลือกสำหรับการเล่น LAN คำถามของฉันคือลูกค้าจะรู้ได้อย่างไรว่าเซิร์ฟเวอร์อยู่บน LAN หรือไม่

วิธีเดียวที่ฉันสามารถคิด

  1. ส่งการออกอากาศผ่านที่อยู่การออกอากาศ นี่เป็นข้อเสียของการกรองบางครั้งโดยเราเตอร์หรือสวิตช์ในสภาพแวดล้อมเครือข่ายที่แตกต่างกัน
  2. พยายามเชื่อมต่อกับเซิร์ฟเวอร์ในทุก ๆ IP ในซับเน็ตของคุณ นี่เป็นข้อเสียของการช้า (โดยเฉพาะถ้าเครือข่ายใช้ 10.XXX.XXX.XXX สำหรับ IP ของพวกเขา) และการโจมตี mini ddos ​​แต่จะไม่ถูกกรอง

เกมทำเช่นนี้โดยเฉพาะในเครือข่ายอื่น ๆ ได้อย่างไร

คำตอบ:


32

สำหรับเกมที่มีการเล่น LAN สิ่งที่ต้องทำมาตรฐานคือให้ลูกค้าส่งแพ็กเก็ตออกอากาศเพื่อค้นหาเซิร์ฟเวอร์ (ไคลเอนต์ส่งการออกอากาศเซิร์ฟเวอร์ส่งการตอบกลับโดยตรงไปยังไคลเอนต์)

โดยทั่วไปลูกค้าจะส่งข้อความออกอากาศระหว่างสามถึงห้าข้อความแต่ละข้อความห่างกันหนึ่งวินาทีและจะตัดสินใจว่าจะต้องไม่มีเซิร์ฟเวอร์หากไม่ได้ยินคำตอบภายในเวลานั้น การส่งแพ็คเก็ตหลายครั้งทำให้การค้นพบบริการมีความทนทานต่อการสูญเสียแพ็คเก็ตเพิ่มขึ้นเล็กน้อย (แม้ว่าจะเป็นเรื่องที่ค่อนข้างแปลกใน LANs) และการมีเวลาระหว่างพวกเขาทำให้พวกเขาขัดขวางการรับส่งข้อมูลเครือข่ายอื่น ๆ

ไม่มีตัวเลือก (ตามความรู้ของฉัน) ทำ # 2 ตัวเลือกของคุณเพราะมันจะลดประสิทธิภาพของ LAN (หรือจะใช้เวลาสักครู่ถ้าคุณเดินโซเซพยายามเชื่อมต่อ)

แต่เพื่อรับมือกับกรณีที่การออกอากาศถูกกรองโดย LAN ท้องถิ่น (ซึ่งค่อนข้างผิดปกติ แต่ไม่เคยได้ยิน) เกมส่วนใหญ่จะอนุญาตให้ผู้เล่นป้อนที่อยู่ IP เพื่อเชื่อมต่อโดยตรง สิ่งนี้ช่วยให้ผู้เล่นในสถานการณ์ประเภทนี้สามารถเชื่อมต่อกับเซิร์ฟเวอร์ที่รู้จักแม้ว่าพวกเขาจะไม่สามารถออกอากาศเพื่อค้นหามันโดยอัตโนมัติ

สำหรับเกมทางอินเทอร์เน็ตลูกค้าจะส่งคำขอโดยตรงไปยังเซิร์ฟเวอร์เมตาดาต้าแบบคงที่ซึ่งจะตอบกลับด้วยที่อยู่สำหรับอินสแตนซ์ของเซิร์ฟเวอร์ปัจจุบันที่รู้จัก เซิร์ฟเวอร์เช่นเดียวกันให้ติดต่อเมตาเซิร์ฟเวอร์เพื่อแจ้งให้พวกเขาทราบถึงตำแหน่งของตนเองเพื่อให้ลูกค้าสามารถนำไปใช้งานได้ อย่างไรก็ตามเนื่องจากความซับซ้อนของ NAT วิธีนี้จึงไม่สามารถใช้งานได้กับเซิร์ฟเวอร์ที่โฮสต์ภายใน LAN นี่คือสาเหตุที่วิธีการแบบนี้ไม่ได้ใช้สำหรับเกม LAN

หมายเหตุเพิ่มเติม: เป็นเรื่องธรรมดาสำหรับเกมอินเทอร์เน็ตที่จะติดต่อกับเซิร์ฟเวอร์จุดแรก เซิร์ฟเวอร์จุดแจ้งให้เกมทราบเกี่ยวกับที่อยู่ที่สามารถค้นหาเซิร์ฟเวอร์เมตาซึ่งจะแจ้งให้ทราบว่าสามารถหาเซิร์ฟเวอร์ได้ที่ไหน เซิร์ฟเวอร์พอยต์มักจะถูกนำไปใช้เป็นเว็บเซิร์ฟเวอร์ที่เรียบง่ายและเป็นเพียงส่วนเดียวของระบบนี้ที่มีที่อยู่ซึ่งถูกเข้ารหัสในเกม สิ่งนี้ช่วยให้นักพัฒนาเกมสามารถย้ายเมตาเซิร์ฟเวอร์ของตนจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่งได้ตามต้องการเพียงแค่อัปเดตที่อยู่ที่ส่งคืนโดยเซิร์ฟเวอร์จุด นอกจากนี้ยังสามารถใช้ในการปรับใช้การโหลดบาลานซ์หรือการสลับภูมิภาคแบบง่าย ๆ โดยให้เซิร์ฟเวอร์จุดส่งผู้ใช้ไปยังเซิร์ฟเวอร์เมตาที่แตกต่างกันโดยขึ้นอยู่กับโหลดเซิร์ฟเวอร์หรือความใกล้เคียงทางภูมิศาสตร์


2
+1 ถึงคุณครับนี่ตอบคำถามสองสามข้อที่ฉันมีเช่นกัน
เรน

2
+1, การถ่ายทอดเป็นวิธีที่จะไปตามความเป็นจริงเป็นวิธีที่เหมาะสมในการทำ # 2, ฮิฮิ .. นั่นคือสิ่งที่ออกอากาศสำหรับการติดต่อหลาย IP เพื่อดูว่ามีอะไรฟัง
James

ใช่ปัญหาเดียวของการออกอากาศคือ LAN (โดยเฉพาะองค์กรขนาดใหญ่) ซึ่งไม่เผยแพร่การออกอากาศระหว่าง LAN ทุกกลุ่ม ในอนาคตมัลติคาสต์น่าจะเป็นวิธีใหม่ในการทำเช่นนี้และควรทำงานโดยอัตโนมัติในทุกส่วนของ LAN แต่ตอนนี้การสนับสนุนเราเตอร์ที่เหมาะสมสำหรับ Multicast นั้นยังไม่เพียงพอที่จะใช้แทนการออกอากาศ ให้อีกสองสามปีและในที่สุดสิ่งต่าง ๆ อาจปรับปรุง
Trevor Powell

ไม่กี่ครั้งที่ฉันเจอเครือข่ายองค์กรที่ไม่รองรับการออกอากาศฉันพบปัญหาการกำหนดเส้นทางอื่น ๆ ทุกประเภทที่เกิดขึ้นจากอุปกรณ์ที่มีข้อบกพร่อง (บางครั้งแก้ไขโดยการอัพเกรดเฟิร์มแวร์ของเราเตอร์) หากการออกอากาศไม่ทำงานในเซกเมนต์ LAN ในพื้นที่แสดงว่าไม่น่าจะมีเจตนา
Randolf Richardson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.