XDR () — международный стандарт передачи данных в Интернете, используемый в различных RFC для описания типов. XDR позволяет организовать не зависящую от платформы передачу данных между компьютерами в гетерогенных сетях.
External Data Representation (XDR) — это стандарт IETF с 1995 года. Он позволяет данным быть упакованными не зависящим от архитектуры способом, таким образом, данные могут передаваться между гетерогенными компьютерными системами. Преобразование из локального представления в XDR называется кодированием. Преобразование из XDR в локальное представление называется декодированием. XDR выполнен как портативная (переносная) библиотека функций между различными операционными системами и так же не зависит от транспортного уровня.
Среди использующих XDR программ можно назвать следующие: Sun RPC NetCDF Язык программирования R
SpiderMonkey Ganglia Interactive Data Language (IDL)
Типы данных в 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. Шаги конвертирования Предоставление буфера для хранения всей информации сообщения, которая должна быть послана. Вызов xdrmem_create() для инициализации потока XDR. Например: xdrmem_create() возвращает указатель на пустой поток. Вызов стандартной программы в XDR для преобразования каждого пункта информации. Она будет дописывать закодированную информацию в конец потока следующим образом: *#* помещать закодированную информацию в следующее доступное место в буфере *#* обновлять внутренний указатель на поток, помещая его на новое доступное свободное место Например, конвертирование 32-битного целого: После кодирования всех пунктов сообщения это сообщение посылается.
Получение сообщения в XDR
Когда программа получает сообщение в XDR, она конвертирует каждый пункт данных в сообщении из XDR в своё внутреннее представление. Шаги: Вызов xdrmem_create() для инициализации потока XDR , указав XDR_DECODE, как четвёртый аргумент. Помещение полученного сообщения в буфер. Вызов подходящей стандартной программы преобразования для декодирования каждого пункта данных полученного сообщения.
Например, декодирование 32-битного целого:
Ссылки http://docs.freebsd.org/44doc/psd/25.xdrrfc/paper.pdf https://web.archive.org/web/20110303205629/http://www.comp.hkbu.edu.hk/~comp2650/lecture/notes/Chapter9.pdf
Категория:Интернет-протоколы Категория:Протоколы представительского уровня Категория:Языки моделирования данных