Чтобы обеспечить именно такое поведение, в большинстве реализаций брандмауэра есть модули «отслеживания подключений», которые работают по принципу:
- На исходящем участке брандмауэр читает то, что идет по проводам (и во многих случаях манипулирует им). Таким образом, брандмауэр знает, когда входящее соединение, «заказанное» исходящим, неизбежно.
- Когда приходит это входящее соединение, брандмауэр пересылает его на инициирующую машину.
В вашем случае IP-адрес и порт в PORT
сегменте командного канала FTP считываются, анализируются и обрабатываются брандмауэром: внутренний IP-адрес вашего компьютера (как отправлено вашим FTP-клиентом) и порт заменяются внешним IP-адресом брандмауэр и, скорее всего, другой порт. Эта пара кортежей хранится вместе со сроком действия.
Когда FTP-сервер подключается обратно к этому IP-адресу и порту, кортеж ищется и, если не истек срок действия, снова подключается к вашему ПК и, следовательно, к FTP-клиенту. Затем пара кортежей отбрасывается, так как она действительна только один раз.
Хотя такое поведение не является строго необходимым для FTP (просто используйте пассивный режим), оно очень полезно для других протоколов, которым требуется функция обратного соединения. Помните: NAT - это довольно новая концепция, которая не была ожидаема, когда был изобретен набор протоколов IP.