Понимание протокола FTP

Опубликовано: 25 Марта, 2023


FTP протокол


Обычно, когда кто-то думает об Интернете, первое, что приходит на ум, это «серфинг» с одного веб-сайта на другой. Возможность переходить с веб-сайта на другой и просматривать содержимое действительно является причиной того, что Интернет так популярен, как сегодня, и с каждым годом становится все больше. Если мы отложим в сторону веб-серфинг, что у нас останется с точки зрения фактического использования Интернета? Что ж, одним из выполняемых действий является загрузка файлов данных, фильмов, антивирусных обновлений и тому подобного. Общим для этих действий является один протокол, а именно протокол FTP или протокол передачи файлов.


Следует отметить, что FTP также придерживается модели клиент/сервер. Однако, в отличие от HTTP, где есть явный победитель для веб-браузеров и веб-серверов, ни одна такая программа не может претендовать на то же, что и FTP. Сегодня существует большой выбор FTP-клиентов и серверов. Стоит отметить, что ваша версия Windows поставляется со встроенным FTP-клиентом.


Сам FTP использует исключительно транспортный протокол TCP, или, другими словами, он никогда не использует UDP для своих транспортных нужд. Обычно протокол прикладного уровня использует тот или иной вариант. Одним из заметных исключений является DNS или система доменных имен. FTP также странен тем, что использует два порта для выполнения своей задачи. Обычно он использует порт 20 для передачи данных и порт 21 для прослушивания команд. Хотя передача данных через порт 20 не всегда имеет место, поскольку это также может быть другой порт. Вот где запутанная часть для многих людей вступает в игру. Есть два режима FTP, а именно активный и пассивный режим. Эти два режима инициируются FTP-клиентом, а затем используются FTP-сервером.


Давайте углубимся


Так как же все-таки работают активный и пассивный FTP? Ну, все начинается с того, что FTP-клиент инициирует соединение с FTP-сервером на своем порту 21. Порт 21 — это место, где сервер прослушивает переданные ему команды и, в свою очередь, отвечает на них. Итак, мы предполагаем, что рукопожатие TCP/IP завершено, и, как обычно, клиент сделал все это на эфемерном порту. В этот момент клиент начинает прослушивать свой эфемерный порт + 1 и отправляет команду PORT N+1 на сервер через свой порт 21, т.е. если эфемерный порт, используемый клиентом, равен 1026, то он будет прослушивать порт 1027. После этого порт передачи данных (порт 20) на FTP-сервере инициирует соединение с эфемерным портом FTP-клиента плюс 1, как указано выше. Примерно так и клиент, и сервер проводят активный FTP-сеанс. Хотя, если у клиента установлен брандмауэр, весь этот процесс связи остановится. Клиентский брандмауэр отбрасывает то, что он считает нежелательной попыткой связи через эфемерный порт плюс один порт для передачи данных. Способ, которым FTP решает эту проблему, заключается в использовании пассивного FTP.


Возьмем пассивный подход


Используя пассивный режим FTP или, как это показано в содержимом ASCII пакета «PASV», FTP смог аккуратно обойти проблему брандмауэра на стороне клиента. Это было сделано следующим образом: FTP-клиент, скажем, встроенный FTP-клиент, поставляемый с операционной системой win32, запускает два соединения с FTP-сервером. Мы также должны помнить, что оба соединения, инициированные клиентом, сами используют эфемерные порты, как и должно быть. Открыв два соединения или сокета с FTP-сервером, клиент может решить проблему, связанную с тем, что его брандмауэр запрещает доступ к FTP-серверу, инициирующему контакт на одном из старших эфемерных портов клиента.


Одно из подключений, открытых клиентом, свяжется с FTP-сервером через порт 21 и выдаст ему команду PASV (пассивная), в отличие от обычной команды PORT при использовании активного FTP. Теперь происходит то, что FTP-сервер открывает эфемерный порт и выдает команду PORT FTP-клиенту. Имея это в руках, клиент затем устанавливает обратное соединение с портом сервера для передачи данных. Это довольно изящный способ решить вышеупомянутую проблему Active FTP и клиентских брандмауэров.


Еще подробнее


Подобно некоторым другим протоколам прикладного уровня, FTP имеет собственный набор кодов состояния и ошибок. Как и в HTTP, эти числовые значения сообщат вам, что происходит с установленным сеансом. Также, как и статус HTTP и коды ошибок, они разбиты на пять групп. Всегда удобно иметь ссылку на прорыв из них поблизости, если вы исследуете некоторые проблемы с трафиком. Что ж, с учетом сказанного, какой была бы статья о протоколе без пакета, показывающего его в действии! Без лишних слов давайте взглянем на один из них.


Вот FTP-пакет!



14:01:25.561863 192.168.1.100.21 > 192.168.1.200.11191: P [tcp sum ok] 825:884(59) ack 367 win 65169 (DF) (ttl 118, id 61059, len 99)
0x0000 4500 0063 ee83 4000 7606 c5e7 c0a8 0164 [электронная почта защищена]…….
0x0010 c0a8 01c8 0015 2bb7 8941 e301 1dc0 b76c ……+..A…..l
0x0020 5 018 fe91 7d81 0000 3135 3020 4f70 656e P…}…150.Открыть
0x0030 696e 6720 4249 4e41 5259 206d 6f64 6520 ing.BINARY.mode.
0x0040 6461 7461 2063 6f6e 6e65 6374 696f 6e20 соединение.данных.
0x0050 666f 7220 4a72 412e 3139 3939 2e6a 7067 для.JrA.1999.jpg
0x0060 2e0d 0a


Итак, что мы можем почерпнуть, взглянув на пакет выше? Итак, мы видим, что FTP-сервер находится по адресу 192.168.1.100 на 21 порту и переходит в бинарный режим, чтобы облегчить передачу картинки клиенту по адресу 192.168.1.200 на его порт 11191. Что еще мы можем извлечь информацию мудры из этого пакета? Если мы посмотрим на значение ttl, как показано выше, мы можем разумно сказать, что FTP-сервер представляет собой операционную систему win32, поскольку значения ttl по умолчанию в операционных системах win32 равны 128, и тот факт, что установлен бит DF, в значительной степени закрепляет сделку. что касается того, что это win32. Довольно аккуратно! Как видите, в пакете содержится много информации.


Вывод


Теперь быстро напомним, какой протокол где начинается! Мы знаем, что заголовок TCP начинается с байта 0015, как подчеркнуто выше, поэтому мы можем сделать вывод, что заголовок IP заканчивается на байтах 01c8, предшествующих байтам 0015. Также видно, что параметры TCP не установлены, о чем свидетельствует значение 5 (что в приведенном выше пакете подчеркнуто), мы знаем, где заканчивается заголовок TCP и начинаются данные FTP. Таким образом, мы можем видеть из подчеркнутых частей в приведенном выше пакете, где именно находится наш FTP-трафик. Что ж, на этой ноте я закончу эту статью о FTP, и если у вас возникнут какие-либо вопросы по этому поводу, не стесняйтесь, напишите мне. До следующего раза!