AXT> Да всё просто. В UDP нет понятия сессии (соединения), каждый пакет едет сам по себе.
Да, UDP stateless протокол. Только (P)NAT-у наплевать на это дело. Он не firewall. Т.е. он смотрит в TCP и, как только получает запрос на разрыв, то удаляет из своих таблиц. Для UDP он это делает по таймеру. Хотя умные (P)NAT делают по таймеру и для TCP. Не у всех выставлена опция Keep Alive для TCP.
AXT> Из-за этого NAT не обладает полной информацией о соединении, и вынужден транслировать всё, что похоже на реальный пакет.
Это не правда. (P)NAT должен быть настроен. Либо на трансляцию адреса внешнего на внутренний (внутренний на внешний там автоматом) на какую-то машину (чистый NAT, сам NAT просто не имеет представления, какой внутренний IP использовать, когда приходит запрос), либо трансляцию портов и адресов (PNAT) на указанные внутренние порты и адреса. Проблемы в том, что тот же FTP клиент сообщает серверу по командному каналу (в активном режиме) свой адрес и порт для передачи данных по каналу данных, на которых он собирается слушать. Т.е. сервер тут выступает в качестве клиента и пытается установить соединение с FTP клиентом, который выступает в качестве сервера. При этом, обычно, в FTP клиентах выбор порта для данных отдаётся на откуп ОС, т.е. любые значения в диапазоне 1024-65535. И таких приложений много. Скажем, многие VoIP с коммутацией. Или всякие лоадбалансинги. Третий вариант — это DMZ, но тогда весь трафик направляется (по неустановленным соединениям) на один адрес. Кстати, (P)NAT независимо от протокола уровня UDP или TCP ведёт сессии. И таймауты там есть, как указано выше. Собственно сессия у него выражается во входе в табличку — адрес и порт из серой сети с временной пометкой. Т.е. это такое знание приобретённое, которое помогает ему направлять пакет, пришедший снаружи, на нужный адрес и порт (путём подправления заголовка пакета). Нет входа — нет перенаправления. Правила открытия портов/адресов — это добавление ручками входов в эту таблицу на перманентной основе.
Поэтому разницы между TCP и UDP здесь нет. Для демультиплексации трафика используется тот же механизм портов. Кстати, даже в IPv6 SCTP тоже использует такой же механизм. Только он имеет ещё один уровень демультиплексирования — в нём можно организовать независимые подпотоки.
В чём может есть разница, так это в том, что в TCP ОС обрабатывает таймауты, а в UDP приходится прикладнухе этим делом заниматься — да, эта разница между надёжным TCP и ненадёжным UDP.
AXT> Отсюда есть возможность его обмануть.
Это не верно.

Это сообщение редактировалось 08.12.2014 в 08:43