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