У меня проблема с клиент-серверным приложением, в котором клиентское приложение часто отправляет данные UDP на сервер, а сервер перенаправляет обратно клиенту. Но в некоторых случаях я вообще не получаю пакеты на стороне клиента.
Я проверил маршрутизатор на стороне клиента, поскольку он не получает пакетов, но маршрутизатор на стороне сервера показывает, что он передал пакеты клиентам. Тогда где теряются пакеты?
Иногда я также наблюдал, как через некоторый переменный интервал времени клиент через некоторое время начинает получать пакет. Я проверил маршрутизатор на стороне сервера и приложение и обнаружил разницу в порте NAT, поскольку маршрутизатор сервера получает с другого порта NAT, но клиент по-прежнему отправляет с предыдущего порта.
Я не понимаю, почему этот клиентский порт NAT меняется для активного сеанса на серверном маршрутизаторе. Это случай двойного NAT?
Двойной NAT - это когда трансляция сетевых адресов происходит дважды на пути от источника к месту назначения. например Один NAT за другим. Это очень маловероятно, но иногда возможно. например маршрутизатор Wi-Fi, выполняющий NAT, подключен к другой сети, у которой есть шлюз, также выполняющий NAT.
UDP - ненадежный протокол. Так что пакеты могут вообще не приходить. Приложение должно быть достаточно умным, чтобы справиться с этим.
В приложениях UDP обычно, когда клиент (за NAT) отправляет пакет UDP на сервер через NAT, NAT открывает порт, чтобы разрешить получение ответа от сервера и его пересылку обратно клиенту. Это динамично и будет открыто только в течение установленного времени. Вы не сказали, какой NAT вы используете, так что кто знает, какие это могут быть таймауты.