Какой порт назначен ответу, зависит от приложения. UDP полностью лишен состояния, поэтому после запуска пакета единственный способ, которым приложение может ожидать ответ, - это если он знает, что другой конец отправит один. В зависимости от приложения UDP, я бы ожидал, что ответ будет поступать на один и тот же порт для простоты - это не относится к протоколам, таким как TCP, которые имеют намеренно случайный (и высокий) порт источника.
Чтобы ответить на ваш второй вопрос, многие маршрутизаторы, даже недорогие домашние маршрутизаторы, проводят проверку пакетов с отслеживанием состояния (SPI). Нечто подобное может произойти, но я готов поправиться, если у меня не получится:
[Установить сцену с клиентом, маршрутизатором, Интернетом, сервером.]
- Клиент отправляет пакет UDP.
- Маршрутизатор передает UDP-пакет в Интернет.
- Маршрутизатор запоминает, что клиент отправил пакет UDP на сервер, и устанавливает сопоставление в своей памяти.
- Сервер отправляет пакет UDP, вероятно, на тот же порт.
- Маршрутизатор получает пакет и проверяет сопоставление, чтобы обнаружить, что клиент недавно общался с сервером.
- Маршрутизатор передает пакет клиенту.
Я полагаю, как это реализовано, зависит от маршрутизатора, но я понимаю, как он работает.