Почему FTP требует разделения номера порта? - PullRequest
0 голосов
/ 27 декабря 2018

Мне недавно пришлось реализовать FTP-клиент (в активном режиме).В RFC 959 замечательно то, что для команды PORT номер порта должен быть разбит на 8 бит.

Пример: при использовании порта 20000 на клиенте этот двоичный код следует разделить,20000 основание 10 = 0100111000100000 основание 2. Это должно быть разделено на 01001110 и 00100000, которые соотв.78 и 32. Эти цифры следует отправлять в виде цифр в виде простого текста.

Есть ли какая-либо причина, почему стандарт выбрал этот подход?Это кажется странным как с точки зрения эффективности, так и с точки зрения простоты отладки.

1 Ответ

0 голосов
/ 27 декабря 2018

Есть ли какая-то причина, почему стандарт выбрал этот подход?

Это, вероятно, потеряно в истории.Но, вероятно, типичный формат для IP: Port, используемый сегодня, не был установлен в это время (это было задолго до HTTP и синтаксиса URL), поэтому кодирование sockaddr_in с его 4-байтовым IP и 2-байтовым портом в виде последовательности из 6 чисел, разделенныхчерез запятую, вероятно, имел смысл.

Это кажется странным как с точки зрения эффективности, так и с точки зрения простоты отладки.

FTP - это текстовый протокол.Очевидно, что эффективность не была критерием проектирования, иначе все было бы сделано в двоичном формате.Наличие последовательности из 6 байтов вместо IP: порт подходит для отладки, если уровень, на котором выполняется отладка, - это код C, и вы эффективно работаете с 6-байтовой адресацией (4-байтовый IP, 2-байтовый порт) в формеsockaddr_in struct.

...