XDR
XDR (англ. External Data Representation) - міжнародний стандарт передачі даних в Інтернет і, використовується в різних RFC для опису типів. XDR дозволяє організувати не залежну від платформи передачу даних між комп'ютерами в гетерогенних мережах.
Модель TCP/IP (RFC 1122) |
---|
Прикладний рівень |
Транспортний рівень |
Мережевий рівень |
Канальний рівень |
External Data Representation (XDR) - це стандарт IETF з 1995 року. Він дозволяє даним бути упакованими не залежно від архітектури, таким чином, дані можуть передаватися між гетерогенними комп'ютерними системами.
- Перетворення з локального представлення до XDR називається кодуванням.
- Перетворення з XDR в локальне представлення називається декодуванням.
- XDR виконаний як портативна (переносна) бібліотека функцій між різними операційними системами і так само не залежить від транспортного рівня.
Серед програм, що використовують XDR можна назвати наступні:
- Sun RPC
- NetCDF
- Мова програмування R
- SpiderMonkey
- Ganglia
Типи даних у XDR
- boolean
- Int (32-ве ціле число)
- Hyper (64-ве ціле число)
- float
- double
- enumeration
- Structure
- string
- Масиви фіксованої довжини
- Масиви змінної довжини
- Неформатовані («сирі») дані
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, як четвертий аргумент.
- Приміщення отриманого повідомлення в буфер.
- Виклик підходящої стандартної програми перетворення для декодування кожного пункту даних отриманого повідомлення.
Посилання
- Http://docs.freebsd.org/44doc/psd/25.xdrrfc/paper.pdf
- Http://www.comp.hkbu.edu.hk/ ~ comp2650/lecture/notes/Chapter9.pdf