Làm thế nào để làm cho một trò chơi nhiều người chơi hoạt động đáng tin cậy đằng sau NAT?


20

Ngay cả các trò chơi 100% máy khách / máy chủ đôi khi cũng gặp sự cố khi máy khách đứng sau NAT. Trò chơi Peee-ngang hàng thậm chí là một vấn đề lớn hơn. Một số trò chơi cần sử dụng nhiều phương tiện vận chuyển (như UDP và TCP) hoặc nhiều kết nối (như cổng UDP khác cho giọng nói).

Một số cách để đảm bảo một trò chơi hoạt động đáng tin cậy khi chạy phía sau bộ định tuyến NAT?

  • Peer-Peer: Không tồn tại máy chủ tập trung. Người chơi A bắt đầu trò chơi và Người chơi B muốn tham gia
  • Máy khách-Máy chủ: Một máy chủ tập trung trên một địa chỉ nổi tiếng (tên máy chủ) chấp nhận tất cả các kết nối đến. Mỗi khách hàng chỉ giao tiếp với máy chủ đó.
  • Combo: Trường hợp máy chủ chỉ là mai mối, nhưng cập nhật trò chơi là ngang hàng. Các đồng nghiệp khác nhau có thể thấy mỗi người chơi có một IP / cổng khác nhau (ví dụ: một số khách hàng đứng sau cùng một NAT và một số người ở trên một bộ định tuyến khác nhau)

Câu trả lời:


9

Kỹ thuật được sử dụng phổ biến nhất được gọi là đột phá NAT. Đây là một giới thiệu tốt: http://www.mindcontrol.org/~hplus/nat-punch.html

Có một dự án OSS ít nhất cho UDP: http://udt.sourceforge.net/index.html

RakNet cũng hỗ trợ đột phá. Đó là thương mại, nhưng có giấy phép "Indie" miễn phí. Xem tại đây: http://www.jenkinssoftware.com/

Googling cho "NAT punch" sẽ giúp bạn đọc được nhiều tài liệu hơn


1
Tôi biết đây là một câu hỏi và câu trả lời thực sự cũ nhưng nếu có ai đọc nó, RakNet được OculusVR mua lại và bây giờ là nguồn mở với giấy phép BSD 2 điều khoản. github.com/OculusVR/RakNet
Quad

9
  • Không có khách hàng thông báo cho máy chủ hoặc đồng nghiệp địa chỉ của chính nó. Nói cách khác, không nhúng IP của máy khách A vào gói trò chơi và để máy khách B hoặc máy chủ trả lời địa chỉ đó. Luôn trả lời địa chỉ / cổng mà tin nhắn có nguồn gốc từ.

  • Giảm thiểu các cổng UDP hoặc TCP khác nhau được sử dụng cho trò chơi. Điều này làm cho việc thiết lập các quy tắc NAT dễ dàng hơn.

  • Cho phép người dùng ghi đè cổng mặc định được sử dụng trong trò chơi. Bằng cách này, một số máy chủ có thể được lưu trữ phía sau cùng NAT.

  • Tài liệu về các cổng và bất kỳ quy tắc nào họ tuân theo trong tài liệu trò chơi của bạn (cảm ơn vì một Zorba đó). Trong Descent 3, tôi đã tạo ra một ứng dụng thử nghiệm độc lập có thể giúp bạn khắc phục sự cố cấu hình bộ định tuyến hoặc NAT bằng cách gửi các gói đến máy chủ thử nghiệm.

7
Ngoài câu trả lời tốt khác này, hãy bao gồm ghi chú về các cổng trò chơi trong tài liệu trò chơi . Thật đáng ngạc nhiên khi có nhiều trò chơi không làm điều này - mọi người đã root các cổng bằng tay với "netstat" và nhận được một nửa số đó sai.
ZorbaTHut

Với UDP, bạn không thực sự biết thông điệp bắt nguồn từ đâu. Bất cứ điều gì có thể được viết trong địa chỉ trả lại.
MickLH

0

Cùng với các câu trả lời khác, hãy sử dụng một bánh xe hiện có: http://miniupnp.free.fr/ Thư viện này chống lại hầu hết các phiền toái ở dạng chức năng, cho phép bạn kiểm soát thời điểm và cách đấm và kéo :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.