статьиGNU Free Documentation License материалы взяты из Википедии Статья была изменена. Оригинал статьи.

External Data Representation

Материал из Энциклопедии в свободной энциклопедии
Перейти к: навигация, поиск
XDR
Название:

External Data Representation

Уровень (по модели OSI):

Представления

Семейство:

TCP/IP, ONC

Назначение протокола:

Стандартизация формата данных

Спецификация:

RFC 4506 / STD 67

XDR (англ. External Data Representation - внешнее представление данных) в международный стандарт передачи данных в Интернете, используемый в различных RFC для описания типов. XDR позволяет организовать не зависящую от платформы передачу данных между компьютерами в гетерогенных сетях.

External Data Representation (XDR) в это стандарт IETF с 1995 года. Он позволяет данным быть упакованными не зависящим от архитектуры способом, таким образом, данные могут передаваться между гетерогенными компьютерными системами.

  • Преобразование из локального представления в XDR называется кодированием.
  • Преобразование из XDR в локальное представление называется декодированием.
  • XDR выполнен как портативная (переносная) библиотека функций между различными операционными системами и так же не зависит от транспортного уровня.

Среди использующих XDR программ можно назвать следующие:

Содержание

[править] Типы данных в XDR

  • boolean
  • int (32-ное целое число)
  • hyper (64-ное целое число)
  • float
  • double
  • enumeration
  • structure
  • string
  • массивы фиксированной длины
  • массивы переменной длины
  • неформатированные («сырые») данные

[править] Мотивация использования XDR

Разные компьютеры могут иметь разное внутреннее представление информации. Например, 32битный Integer имеет 2 возможных формы представления:

  • Порядок байтов от старшего к младшему (Motorola 68000)
  • Прямой порядок байтов (Intel 80x86)


Для некоторых функций WinSock, их аргументы (т.е. параметры функций), должны храниться в обратном порядке.

  • Сервер и клиент могут обмениваться разными типами данных.
  • Если сервер и клиент выполняются на двух соответствующих машинах, используя разное внутреннее представление данных, то они должны согласовывать точно представление всех данных, передаваемых между ними.
  • Sun Microsystems разработала external data representation (XDR), который определяет представление для различных типов данных (integer,enumerationв.)
  • XDR стал стандартом де-факто для большинства клиент-серверных приложений:

- Программа преобразует сообщения из своего внутреннего представления в XDR для последующей передачи. Это называется кодированием. - Получатель преобразует полученное сообщение из XDR в собственное представление. Это называется декодирование.

[править] Типы данных в XDR

XDR указывает представление для большинства типов данных в C:


Закодированная информация содержит только данные, она не содержит информации о типе данных. Например, после кодирования 32-битного integer, результатом будет 32-битный integer в XDR. Не будет информации о том, что это integer. Клиенты и серверы, использующие XDR, должны согласовывать тип данных сообщений, которыми они обмениваются.

[править] Программная поддержка использования XDR

  • XDR определяет представление для каждого типа данных.
  • Например, 32-битный integer имеет порядок байтов от старшего к младшему.
  • Для содействия программистам, XDR обеспечивает библиотеку стандартных программ для конвертирования представления данных.

[править] Посылка сообщения в XDR

  • Посылаемое сообщение может состоять из нескольких пунктов данных (items).
  • Например, сообщение содержит информацию о студенте. Оно состоит из трех пунктов:

- имя (строка символов) -ID (целое) -совокупный GPA (floating-point number)

  • Перед посылкой сообщения программа (клиент или сервер) конвертирует всю информацию пунктов из внутреннего представления в XDR.
  • Шаги конвертирования
    1. Предоставление буфера для хранения всей информации сообщения, которая должна быть послана.
    2. Вызов xdrmem_create() для инициализации потока XDR.

Например:xdrmem_create() возвращает указатель на пустой поток.

    1. Вызов стандартной программы в XDR для преобразования каждого пункта информации. Она будет дописывать закодированную информацию в конец потока следующим образом:
       *#* помещать закодированную информацию в следующее доступное место в буфере
       *#* обновлять внутренний указатель на поток, помещая его на новое доступное свободное место
      • Например, конвертирование 32-битного целого:


    1. После кодирования всех пунктов сообщения, это сообщение посылается.

[править] Стандартные программы преобразования в XDR

[править] Получение сообщения в XDR

  • Когда программа получается сообщение в XDR, она конвертирует каждый пункт данных в сообщении из XDR в свое внутреннее представление.
  • Шаги:
    1. Вызов xdrmem_create() для инициализации потока XDR , указав XDR_DECODE, как четвертый аргумент.
    2. Помещение полученного сообщения в буфер.
    3. Вызов подходящей стандартной программы преобразования для декодирования каждого пункта данных полученного сообщения.

Например, декодирование 32-битного целого:



[править] Ссылки



Пространства имён

Варианты
Просмотры
Действия