Tôi có một câu hỏi về UDP. Đối với bối cảnh, tôi đang làm việc trên một trò chơi hành động thời gian thực.
Tôi đã đọc khá nhiều về sự khác biệt giữa UDP và TCP và tôi cảm thấy tôi hiểu chúng khá rõ, nhưng có một điều chưa bao giờ cảm thấy chính xác, đó là độ tin cậy và đặc biệt là sự thừa nhận . Tôi hiểu rằng UDP không cung cấp độ tin cậy theo mặc định (nghĩa là các gói có thể bị mất hoặc không theo thứ tự). Khi cần một số độ tin cậy, giải pháp tôi đã thấy (có ý nghĩa về mặt khái niệm) là sử dụng các xác nhận (tức là máy chủ gửi một gói đến máy khách và khi máy khách nhận được thông báo đó, nó sẽ gửi lại một xác nhận cho máy chủ) .
Điều gì xảy ra khi xác nhận bị bỏ?
Trong ví dụ trên (một máy chủ gửi gói đến một máy khách), máy chủ xử lý mất gói tiềm năng bằng cách gửi lại gói mỗi khung cho đến khi nhận được xác nhận cho các gói đó. Bạn vẫn có thể gặp phải các vấn đề về băng thông hoặc tin nhắn không theo thứ tự, nhưng hoàn toàn từ góc độ mất gói, máy chủ được bảo vệ.
Tuy nhiên, nếu khách hàng gửi một xác nhận không bao giờ đến, máy chủ sẽ không có lựa chọn nào khác ngoài việc dừng gửi tin nhắn đó, điều này có thể phá vỡ trò chơi nếu thông tin chứa trong gói đó là bắt buộc. Bạn có thể thực hiện một cách tiếp cận tương tự với máy chủ (nghĩa là tiếp tục gửi xác nhận cho đến khi bạn nhận được ack cho ack?), Nhưng cách tiếp cận đó sẽ khiến bạn lặp đi lặp lại mãi mãi (vì bạn cần ack cho ack cho ack và như thế).
Tôi cảm thấy logic cơ bản của tôi là chính xác ở đây, điều này cho tôi hai lựa chọn.
- Gửi một gói xác nhận duy nhất và hy vọng điều tốt nhất.
- Gửi một số gói xác nhận (có thể 3-4) và hy vọng điều tốt nhất, cho rằng không phải tất cả chúng sẽ bị loại bỏ.
Có một câu trả lời cho vấn đề này? Tôi có hiểu nhầm về cơ bản một cái gì đó? Có một số đảm bảo về việc sử dụng UDP mà tôi không biết? Tôi cảm thấy do dự để tiến về phía trước với quá nhiều mã mạng cho đến khi tôi cảm thấy thoải mái rằng logic của tôi là âm thanh.