Bất kỳ giao thức ứng dụng dựa trên UDP nào chắc chắn sẽ dễ bị mất gói, sắp xếp lại và (trong một số trường hợp) trùng lặp. Chữ "U" trong UDP có thể là viết tắt của "Unreliable" như trong Unreliable Datagram Protocol. (OK, nó thực sự là viết tắt của "Người dùng" ... nhưng nó chắc chắn là một cách tốt để nhớ đặc điểm của UDP.)
Mất gói UDP thường xảy ra do lưu lượng vượt quá dung lượng đệm của một hoặc nhiều " bước nhảy giữa máy chủ và máy khách. Khi điều này xảy ra, các gói sẽ bị xóa ... và vì bạn đang sử dụng UDP, không có thông báo mức giao thức truyền tải nào đang xảy ra.
Nếu bạn sử dụng UDP trong ứng dụng, ứng dụng cần tính đến bản chất không đáng tin cậy của UDP, triển khai các cơ chế riêng để xử lý các gói bị mất và không theo thứ tự và thực hiện điều khiển luồng riêng. (Một ứng dụng phát tán các gói UDP mà không nghĩ đến hiệu ứng có thể xảy ra trên một mạng đã quá tải là một công dân mạng kém .)
(Trong trường hợp TCP, các gói có thể bị giảm xuống) nhưng TCP đang phát hiện và gửi lại các gói đã bị loại bỏ và cơ chế điều khiển luồng TCP đang khởi động để làm chậm tốc độ truyền dữ liệu. Kết quả thực là "độ trễ".)
EDIT - dựa trên nhận xét của OP , nguyên nhân của vấn đề của anh ta là khách hàng không "lắng nghe" trong một khoảng thời gian, khiến cho các gói tin (có lẽ) bị hệ điều hành của khách hàng giảm xuống. Cách giải quyết này là:
sử dụng một sợi Java chuyên dụng chỉ đọc các gói tin và hàng đợi họ để xử lý, và
tăng kích thước của hàng đợi gói hạt nhân cho các ổ cắm .
Nhưng ngay cả khi bạn thực hiện các biện pháp này, bạn vẫn có thể nhận các gói bị xóa. Ví dụ, nếu máy bị quá tải, ứng dụng có thể không nhận được các lát thời gian thực hiện đủ thường xuyên để đọc và xếp hàng tất cả các gói trước khi hạt nhân phải thả chúng.
CHỈNH SỬA 2 - Có một số tranh luận về việc UDP có dễ bị trùng lặp hay không. Nó chắc chắn đúng là UDP không có phát hiện hoặc ngăn chặn trùng lặp bẩm sinh. Nhưng nó cũng đúng là các gói tin định tuyến IP vải đó là internet không có khả năng tự sao chép các gói tin. Vì vậy, các bản sao, nếu chúng xảy ra, có khả năng xảy ra vì người gửi đã quyết định gửi lại gói UDP.Vì vậy, với tâm trí của tôi trong khi UDP dễ bị các vấn đề với bản sao, nó không gây ra chúng mỗi se ... trừ khi có lỗi trong ngăn xếp giao thức OS hoặc trong vải IP.
Nguồn
2010-03-14 01:56:03
Bạn có chắc chắn đó là "Java" chứ không phải mạng của bạn? Ngoài ra, UDP không đảm bảo về phân phối, đặt hàng hoặc trùng lặp gói - không giống như TCP. – Nate
Thực tế là việc sử dụng kết quả TCP về độ trễ cho tôi biết rằng bạn đang cố gắng đổ vào mạng của bạn nhiều dữ liệu hơn so với dữ liệu có thể mang theo. Vì bạn có các bản ghi từ phía máy chủ gửi các gói tin, bạn sẽ có thể nhận được một ý tưởng chung về số lượng dữ liệu bạn đang gửi mỗi giây. Nó có tương thích với dung lượng mạng của bạn không? – Arkadiy