Функционально протоколы могут выполнять известную задачу, например чтение электронной почты или передачу сообщения в телеконференцию Usenet, но в конечном счете все сводится к пересылке байтов сообщений через сокеты. Структура этих сообщений зависит от протокола, сокрыта в библиотеке Python, и ее обсуждение по большей части находится за рамками данной книги, но несколько общих слов помогут развеять таинственность слоя протоколов.
Одни протоколы могут определять содержимое сообщений, пересылаемых через сокеты; другие могут задавать последовательность управляющих сообщений, которыми обмениваются стороны в процессе общения. Путем определения правильных схем связи протоколы делают ее более надежной. Они также могут препятствовать появлению блокировок, возникающих, когда компьютер ждет сообщения, которое никогда не поступит.
Например, протокол FTP предотвращает блокировку путем организации связи по двум сокетам: один служит только для обмена управляющими сообщениями, а другой — для передачи содержимого файла. Сервер FTP ждет управляющих сообщений (например, «передай мне файл») на одном порту, а содержимое файла передает по другому. Клиенты FTP открывают соединения с управляющим портом компьютера сервера, посылают запросы и передают или получают содержимое файлов через сокет, соединенный с портом данных на компьютере сервера. Протокол FTP определяет также стандартные структуры сообщений, передаваемые между клиентом и сервером. Например, управляющее сообщение запроса файла должно соответствовать стандартному формату.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011