Протокол FTP

Из огромного количества существующих протоколов только некоторые были созданы для передачи данных. Вопреки расхожему мнению Интернет - это не только HTTP и веб-сайты. В данной статье дается обзор протокола FTP и передачи данных с его помощью.

Протокол FTP

Просмотр сайтов - вот первое что, приходит на ум при слове Интернет. Просмотр различных сайтов в Интернете действительно сделал его популярным, и эта популярность растет изо дня в день. А какой же вид деятельности в Интернете останется, если исключить просмотр сайтов? Загрузка файлов, фильмов, антивирусных обновлений и тому подобные вещи. Все это объединяет один протокол – FTP или протокол передачи файлов.

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

FTP использует протокол TCP или, другими словами, он никогда не использует протокол UDP. Обычно протокол уровня приложения использует или то, или другое. Исключением является система доменного имени (DNS). Кроме того, протокол FTP использует два порта. Обычно это порт 20 для передачи данных и порт 21 для принятия команд. Но для передачи данных не всегда используется порт 20. И многих людей это сбивает с толку. FTP может работать в двух режимах: активном и пассивном. Команда по выбору режима поступает от клиента и выполняется на сервере FTP.

Описание работы FTP

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

Пассивный режим

Благодаря пассивному режиму работы FTP или, как это подается в пакете ASCII, “PASV” решается проблема использования firewall на стороне клиента. Делается это следующим образом: клиент FTP (допустим, это встроенный клиент FTP, поставляемый с операционной системой win32) устанавливает два соединения с сервером FTP. Необходимо помнить, что оба соединения используют кратковременные порты. Устанавливая два соединения с сервером FTP, клиент решает проблему защитной системы firewall, которая отказывает в доступе к серверу FTP через кратковременный порт.

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

Дополнительные подробности

Как и некоторые другие протоколы уровня приложений, FTP имеет набор кодов состояния и ошибок. Как и в случае с HTTP, по порядковому номеру кода можно узнать, что происходим с соединением. Коды делятся на пять групп. Их необходимо знать при наличии проблем с трафиком. Данная статья ничего не будет стоить без практического примера, поэтому перейдем к анализу пакета.

Обзор пакета FTP

4: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        E..c..@.v.......
0x0010   c0a8 01c8 0015 2bb7 8941 e301 1dc0 b76c        ......+..A.....l
0x0020   5018 fe91 7d81 0000 3135 3020 4f70 656e        P...}...150.Open
0x0030   696e 6720 4249 4e41 5259 206d 6f64 6520        ing.BINARY.mode.
0x0040   6461 7461 2063 6f6e 6e65 6374 696f 6e20        data.connection.
0x0050   666f 7220 4a72 412e 3139 3939 2e6a 7067        for.JrA.1999.jpg
0x0060   2e0d 0a                                                                  ...

Что можно увидеть в данном пакете? Мы видим, что сервер FTP расположен по адресу 192.168.1.100 на порте 21 и использует двойной режим для передачи рисунка клиенту, расположенному по адресу 192.168.1.200 на порте 11191. Какая дополнительная информация может быть извлечена из данного пакета? Судя по значению ttl, сервер FTP – это операционная система win32, так как значение ttl по умолчанию операционной системы win32 составляет 128. Кроме того, наличие бита DF подтверждает этот факт. В пакете содержится много информации, как Вы сами можете прекрасно видеть.

Заключение

Теперь приведем краткий обзор некоторых протоколов. Известно, что заголовок TCP начинается с 0015 байтов, поэтому можно сделать вывод, что заголовок IP заканчивается на 01с8 байтами, перед которыми стоят байты 0015. Судя по отсутствию опций TCP, что подтверждается значением 5 (подчеркнуто в пакете), можно определить, где заканчивается заголовок TCP, и где начинаются данные FTP. Подчеркнутая часть пакета показывает трафик FTP. На этом я заканчиваю обзор протокола FTP. При наличии вопросов не стесняйтесь написать мне. До встречи.

Дон Паркер (Don Parker)