Сетевой стандартный порядок байтов

Опубликовано в Технологии > Серверные технологии Продолжение

Чтобы избежать проблем, связанных с сопровождением числа версий программ клиент/сервер, пропорционального квадрату N, программисты не используют асимметричное преобразование, а создают клиентское и серверное программное обеспечение таким образом, чтобы каждую конкретную исходную программу можно было транслировать и вызывать на выполнение на различных компьютерах без каких-либо изменений. В результате этого программирование упрощается, поскольку разрабатываемый код может быть легко перенесен из одной архитектуры в другую. В конечном итоге упрощается также доступ к службе, поскольку пользователям достаточно только запомнить, как нужно вызывать одну версию клиента.

Но как обеспечить правильную трансляцию единственной исходной программы на разных архитектурах, если в них используются различные варианты представления данных? Еще важнее найти ответ на вопрос о том, как может клиентская или серверная программа передавать данные программе на другом компьютере, если на этих двух компьютерах используются разные представления данных? В главе 5 описано, как решается проблема представления целочисленных данных в протокольных заголовках протоколов TCP/IP: в этих протоколах используются функции, выполняющие преобразование из внутреннего порядка байтов компьютера в сетевой стандартный порядок байтов.

Фактически в протоколах TCP/IP для всех данных, передаваемых по сети в протокольных заголовках, используется одно и то же представление. Это означает, что в заголовках целочисленные данные представлены в стандартной, машинно-независимой форме. Принято считать, что в таких проектах применяется симметричное преобразование данных, т.е. вместо преобразования непосредственно из одного представления в другое, каждый участник соединения берет на себя обязанности выполнять преобразование из локального представления в стандартное представление, используемое при передаче. Применение симметричного преобразования данных имеет одно важное следствие: оно позволяет иметь только одну версию программного обеспечения протокола.

Метод симметричного преобразования данных получил самое широкое распространение при разработке программного обеспечения клиент/сервер. Вместо преобразования непосредственно из представления данных одного компьютера в представление другого, и клиент, и сервер выполняют преобразование данных в единый формат. Перед передачей по сети данные преобразуются из внутреннего представления компьютера-отправителя в стандартное, машинно-независимое представление. Аналогичным образом, данные преобразуются из машинно-независимого представления во внутреннее представление компьютера-получателя после приема данных из сети. Стандартное представление, используемое для передачи данных по сети, принято называть внешним представлением данных.

Применение стандартного внешнего представления данных имеет свои преимущества и недостатки. Основным преимуществом является расширение области применения: ни клиентская, ни серверная программа не должна иметь информации о том, в какой архитектуре работает другой участник соединения. Для доступа к серверу на любом компьютере может применяться только одна клиентская программа, в которой не должны учитываться сведения о его архитектуре. Общие затраты труда программистов становятся пропорциональными числу компьютерных архитектур, а не квадрату этого числа. Наконец-то. Качественные мужские костюмы на свадьбу в нашем салоне.

Основным недостатком симметричного преобразования является рост издержек, связанных с преобразованием данных. В тех случаях, если и клиент, и сервер работают на компьютерах с одинаковой архитектурой, эти издержки кажутся неоправданными. Один из участников соединения преобразует все данные из внутреннего представления своей архитектуры во внешнее представление перед их передачей, а другой участник соединения снова преобразует данные из внешнего представления в первоначальное после их приема.

Даже если клиентский и серверный компьютер не имеют одинаковой архитектуры, применение промежуточной формы представления данных вносит дополнительные издержки. Вместо преобразования данных непосредственно из представления отправителя в представление получателя, и клиент, и сервер должны расходовать процессорное время на прямое и обратное преобразование из локального представления во внешнее. Кроме того, поскольку внешнее представление может потребовать введения дополнительной информации в передаваемые данные или выравнивания их по границе слова, такое преобразование может привести к увеличению объема передаваемых данных сверх необходимого.

Но несмотря на дополнительные вычислительные издержки и увеличение объема данных, передаваемых по сети, большинство программистов считают целесообразным использование симметричного преобразования данных, поскольку оно упрощает программирование, уменьшает количество ошибок и увеличивает способность к взаимодействию различных программ. Этот способ позволяет также упростить управление сетью и отладку, поскольку сетевой администратор может анализировать содержимое любых пакетов без учета того, какие архитектуры имеют компьютеры отправителей и получателей.