2010-07-30 39 views
5

Tôi có một ứng dụng bao gồm nhiều hệ thống sử dụng máy khách UDP ở các địa điểm từ xa. Tất cả các máy khách gửi gói UDP đến một vị trí trung tâm để xử lý. Trong ứng dụng của tôi, điều quan trọng là vị trí trung tâm phải biết thời gian gói tin được gửi bởi vị trí từ xa.Tiềm năng trì hoãn UDP

Từ quan điểm thiết kế, có thể cho rằng vị trí trung tâm có thể đặt dấu thời gian cho các gói khi chúng đến và sử dụng nó làm "thời gian gửi" không? Kể từ khi ứng dụng sử dụng UDP, các gói tin sẽ đến ngay lập tức hoặc không đến được tất cả? Tùy chọn khác sẽ là thiết lập một số loại đồng bộ hóa thời gian trên mỗi vị trí từ xa. Bất lợi cho điều này là sau đó tôi sẽ cần phải liên tục đảm bảo rằng thời gian đồng bộ đang làm việc trên mỗi hàng trăm tiềm năng của các địa điểm từ xa.

Câu hỏi của tôi là liệu timestamping các gói UDP ở vị trí trung tâm để xác định "thời gian gửi" là một lỗ hổng tiềm năng. Có thể gặp bất kỳ sự chậm trễ nào với UDP không?

+3

Bạn cần nó chính xác đến mức nào? Xuống đến phút? Thứ hai? Mili giây? –

+1

Xuống hạng hai. – Mike

+1

Tôi không biết gì về lập trình mạng vì vậy tôi chỉ ném nó ra ngoài như một tùy chọn, nhưng tôi tự hỏi liệu bạn có thể giả định có sự chậm trễ và dễ dàng bù đắp cho nó? Điều gì đó giống như quy trình bắt tay ... vì vậy khi một khách hàng từ xa kết nối với vị trí trung tâm, nó được ping có thể là 1000 lần và bạn giữ từ điển ? Tôi chắc chắn nó không phải là một giải pháp tuyệt vời nhưng nó chắc chắn có vẻ tốt hơn so với giả định không có sự chậm trễ. – NickHalden

Trả lời

3

Đối với độ phân giải giây, bạn có thể sử dụng tính năng đóng dấu thời gian khi nhận gói, nhưng bạn vẫn cần phải sử dụng số thứ tự để chặn các gói được sắp xếp lại hoặc trùng lặp.

Điều này có thể làm cho các trạm từ xa của bạn kém phức tạp hơn vì chúng không cần đồng hồ được hỗ trợ bằng pin hoặc kỹ thuật đồng bộ hóa.

Đối với độ phân giải giây, bạn muốn tính thời gian chuyến đi khứ hồi (RTT) và sử dụng bù đắp cho đồng hồ trên bộ thu.

Trừ khi bạn đang sử dụng giao thức thời gian chính xác (PTP) trong môi trường được kiểm soát, bạn không bao giờ có thể tin tưởng đồng hồ của máy chủ từ xa.

+0

"Trừ khi bạn đang sử dụng giao thức thời gian chính xác (PTP) trong một môi trường được kiểm soát, bạn không bao giờ có thể tin tưởng vào đồng hồ của các máy chủ từ xa." Đây chính là lý do tại sao tôi bắt đầu sử dụng thời gian lưu trữ để đóng dấu từng gói. Ngay cả với tất cả các máy chủ từ xa của tôi bằng cách sử dụng NTP, có thời gian trôi mà tương đương với một vài giây. – Mike

1

Luôn có sự chậm trễ trong việc truyền tải và các gói UDP không được phân phối chắc chắn cũng như không đảm bảo chúng được gửi đến theo thứ tự.

Cần thêm thông tin về ngữ cảnh để đề xuất giải pháp tốt hơn.

0

Một tùy chọn sẽ là yêu cầu đồng hồ máy khách được đồng bộ hóa với đồng hồ nguyên tử bên ngoài. Để đảm bảo điều này, và để làm cho UDP của bạn mạnh mẽ hơn, máy chủ có thể từ chối bất kỳ gói nào đến "muộn" (như được xác định bởi sự khác biệt trong đồng hồ của máy chủ - cũng đồng bộ hóa bên ngoài - và dấu thời gian gói).

Nếu máy chủ của bạn đang gói tin, nó có thể báo cáo cho khách hàng rằng nó (có thể) không đồng bộ để có thể tự đồng bộ lại.

Nếu máy chủ của bạn không phải là gói đang kích hoạt, toàn bộ chương trình của bạn sẽ không thành công do bị loại bỏ hoặc hết gói.