XDR (англ.External Data Representation) - міжнародний стандарт передачі даних в Інтернет і, використовується в різних RFC для опису типів. XDR дозволяє організувати не залежну від платформи передачу даних між комп'ютерами в гетерогенних мережах.
External Data Representation (XDR) - це стандарт IETF з 1995 року. Він дозволяє даним бути упакованими не залежно від архітектури, таким чином, дані можуть передаватися між гетерогенними комп'ютерними системами.
Перетворення з локального представлення до XDR називається кодуванням.
Перетворення з XDR в локальне представлення називається декодуванням.
XDR виконаний як портативна (переносна) бібліотека функцій між різними операційними системами і так само не залежить від транспортного рівня.
Серед програм, що використовують XDR можна назвати наступні:
XDR вказує представлення для більшості типів даних в C.
Закодована інформація містить тільки дані, вона не містить інформації про тип даних. Наприклад, після кодування 32-бітного integer, результатом буде 32-бітний integer в XDR. Не буде інформації про те, що це integer. Клієнти і сервери, що використовують XDR, повинні погоджувати тип даних повідомлень, якими вони обмінюються.
Мотивація використання XDR
Різні комп'ютери можуть мати різне внутрішнє представлення інформації.
Наприклад, 32-бітний Integer має 2 можливі форми подання:
Порядок байтів від старшого до молодшого (Motorola 68000)
Прямий порядок байтів (Intel 80x86)
Для деяких функцій WinSock, їхні аргументи (тобто параметри функцій), повинні зберігатися у зворотному порядку.
Сервер і клієнт можуть обмінюватись різними типами даних.
Якщо сервер і клієнт виконуються на двох відповідних машинах, використовуючи різне внутрішнє представлення даних, то вони повинні узгоджувати точне представлення всіх даних, що передаються між ними.
Sun Microsystems розробила external data representation (XDR), який визначає представлення для різних типів даних (integer, enumeration)
XDR став стандартом де-факто для більшості клієнт-серверних додатків:
- Програма перетворює повідомлення зі свого внутрішнього представлення до XDR для подальшої передачі. Це називається кодуванням.
- Одержувач перетворює отримане повідомлення з XDR у власне представлення. Це називається декодування.
Програмна підтримка використання XDR
XDR визначає представлення для кожного типу даних.
Наприклад, 32-бітний integer має порядок байтів від старшого до молодшого.
Для сприяння програмістам, XDR забезпечує бібліотеку стандартних програм для конвертації представлення даних.
Здійснення повідомлення в XDR
Відправлене повідомлення може складатися з кількох пунктів даних (items).
Наприклад, повідомлення містить інформацію про студента. Воно складається з трьох пунктів:
- Ім'я (рядок символів)
-ID (ціле)
-Сукупний GPA (floating-point number)
Перед посилкою повідомлення програма (клієнт або сервер) конвертує всю інформацію пунктів з внутрішнього представлення до XDR.
Кроки конвертації
Надання буфера для зберігання всієї інформації повідомлення, яка повинна бути надіслана.
Виклик xdrmem_create () для ініціалізації потоку XDR.
Наприклад: xdrmem_create () повертає вказівник на порожній потік.
Виклик стандартної програми в XDR для перетворення кожного пункту інформації. Вона буде дописувати закодовану інформацію в кінець потоку наступним чином:
Поміщати закодовану інформацію в наступне доступне місце в буфері
Оновлювати внутрішній вказівник на потік, поміщаючи його на нове доступне вільне місце
Наприклад, конвертація 32-бітного цілого:
Після кодування всіх пунктів сполучення, це повідомлення надсилається.
Стандартні програми перетворення в XDR
Одержання повідомлення в XDR
Коли програма отримує повідомлення в XDR, вона конвертує кожен пункт даних у повідомленні з XDR у своє внутрішнє представлення.
Кроки:
Виклик xdrmem_create () для ініціалізації потоку XDR, вказавши XDR_DECODE, як четвертий аргумент.
Приміщення отриманого повідомлення в буфер.
Виклик підходящої стандартної програми перетворення для декодування кожного пункту даних отриманого повідомлення.