2015-09-08 2 views
0

Мне было интересно, могу ли я создать TCP-клиент на машине A и подключить его к удаленному узлу (S), а затем закрыть соединение с клиентской стороны и создать прослушиватель TCP на том же компьютере (машина A) с помощью тот же порт, который использовался для клиента (например, порт 1234). сервер, который теперь имеет конечную точку A, отправляет его на другую машину (B), а B может подключиться к A на общедоступной конечной точке A (например, порт 4567), а сеть NAT в сети перенаправляет SYN на A, поскольку она все еще имеет перевод (4567 -> 1234). Я хочу знать, сколько времени между отключением первого соединения и подключением узла B.Как долго NAT хранит поле перевода TCP в его таблице?

+1

Это а) не вопрос программирования, и б) полностью зависит от реализации. «NAT» - это технология, а не спецификация. Техника, которую вы описываете, относится к более широкой категории «туннелирование портов»; он может работать с определенными маршрутизаторами, но часто не будет, из-за тайм-аутов, а также для поддержания работоспособности таблицы (если маршрутизатор обнаруживает, что соединение фактически закрыто, оно вполне может удалить отображение из его таблицы). Если вы хотите контролировать переадресацию портов, используйте UPnP, который является спецификацией и хорошо поддерживается. –

ответ

0

Я согласен с комментарием Питера Дунихо. Но я отвечаю на ваш вопрос обычным поведением NAT.

Что вы хотите сделать, не будет работать. NAT не ведет себя одинаково с протоколом UDP и TCP. То, что вы сказали, будет работать, если протокол был UDP, а тип NAT A был полным конусом.

Почему для TCP не будет работать

NAT позволяет входящий SYN с IP: порт, если SYN был послан ранее через NAT к этому IP: порт. И эти два входящих и исходящих SYN должны пересекать друг друга за пределами NAT. Если до исходящего SYN пересекает NAT, входящий SYN приходит, тогда NAT удаляет пакет и может отправлять RST-сообщение в качестве ответа. Эта процедура называется TCP hole punching.

Эта перфорация отверстий не будет работать на всех NAT. Для этого NAT необходимо поддерживать одновременное открытое соединение.

Как долго NAT держать поле TCP перевода в его таблице

перевод может получить тайм-аут, и это значение тайм-аут полностью зависит от реализации. Также NAT может получать сообщение TCP RST и удалять привязку.

Таким образом, в нижней строке показано, как сложно определить поведение NAT в целом, поскольку у этого нет определенного протокола. Вы должны делать эксперименты и узнавать сами.