Какой порядок байтов порта используется в URL? - PullRequest
0 голосов
/ 22 марта 2020

Если вы хотите привязать порт к C, вы должны использовать htons(port) для преобразования порта из байтового порядка хоста в сетевой байтовый порядок. Это происходит потому, что номер порта копируется непосредственно в пакеты TCP, поэтому они должны совпадать на машинах с прямым и прямым порядком байтов.

Рассмотрим следующий пример в C:

int port = 5000;
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(port);

Обратите внимание на использование htons. Теперь, если вы запустите netstat -anp --tcp (на Linux), вы увидите, что 0.0.0.0:5000 прослушивается. Похоже, что номер порта использует порядковый номер узла.

Теперь возникает вопрос: если номер порта является порядковым номером узла в URL, означает ли это, что клиент с прямым порядком байтов не может использовать http://a.b.c.d:5000 URL для подключиться к серверу с прямым порядком байтов, слушающему 0.0.0.0:5000?

1 Ответ

1 голос
/ 22 марта 2020

Нет, вы почти наверняка неправильно применяете правила на неправильном уровне абстракции.

Локальный браузер, по всей вероятности, захватит строку :5000 с конца URL и используйте его для создания целого числа 5000 в формате host . Затем он передаст это htons как часть построения сеанса, точно так же, как это делает ваш фрагмент кода.

И, вуаля, структуры содержат правильный сетевой порядок.

...