Как было показано в предыдущей главе, сокеты используются для выполнения самых разных действий в Сети. В частности, пример getfile из предыдущей главы обеспечивал передачу между машинами файлов целиком. Однако на практике многое из происходящего в Сети обеспечивается протоколами более высокого уровня. Протоколы действуют поверх сокетов и скрывают значительную часть сложностей сетевых сценариев, которые мы видели в примерах в предыдущей главе.
FTP (File Transfer Protocol, протокол передачи файлов) — один из наиболее часто используемых протоколов Интернета. Он определяет модель взаимодействия более высокого уровня, в основе которой лежит обмен строками команд и содержимым файлов через сокеты. Протокол FTP позволяет решать те же задачи, что и сценарий getfile из предыдущей главы, но использует более простой, стандартный и универсальный интерфейс — FTP позволяет запрашивать файлы любой машине- серверу, которая поддерживает FTP, не требуя, чтобы на ней выполнялся наш специализированный сценарий getfile. FTP позволяет также выполнять более сложные операции, такие как выгрузка файлов на сервер, получение содержимого удаленного каталога и многое другое.
В действительности FTP выполняется поверх двух сокетов: один из них служит для передачи управляющих команд между клиентом и сервером (порт 21), а другой — для передачи байтов. Благодаря использованию модели с двумя сокетами FTP устраняет возможность взаимной блокировки (то есть передача в сокетах данных не блокирует диалога в управляющих сокетах). И наконец, существует вспомогательный модуль Python ftplib, который позволяет выгружать файлы на удаленный сервер и загружать с него посредством FTP, не имея дело ни с низкоуровневыми вызовами сокетов, ни с деталями протокола FTP.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011