Если у всех ваших узлов нет синхронизированных часов, это было бы почти невозможно сделать. Если у вас есть точный механизм синхронизации и вы можете верить, что часы одинаковы, тогда вы можете просто вставить метку времени в пакет, когда отправляете его из A, а затем в C, сравнить его с текущим временем.
Но опять же, вам нужна синхронизация с высоким разрешением, чтобы этот подход работал.
Что вы могли бы сделать, если вы просто хотите сравнить и получить представление о среднем времени, так это заставить пакет отскочить назад. По сути, скажите С отправить этот же пакет обратно В, а затем А, а в А вы сравниваете исходную временную метку с текущим временем (которое будет использовать те же часы). Это даст вам задержку в оба конца, которую вы можете разделить на два, чтобы получить время задержки в одну сторону.
Если вы беспокоитесь о накладных расходах, добавляемых отправкой сообщений назад, то вы можете выполнить одно (или оба) следующее
- Отправьте намного меньший пакет обратно. В основном целое число, соответствующее порядковому номеру полученного сообщения
- Отправляйте ACK только каждое N-е сообщение. Должно предоставить достаточно данных, чтобы знать «типичное» время задержки