XDR

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

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

External Data Representation (XDR) - це стандарт IETF з 1995 року. Він дозволяє даним бути упакованими не залежно від архітектури, таким чином, дані можуть передаватися між гетерогенними комп'ютерними системами.

  • Перетворення з локального представлення до XDR називається кодуванням.
  • Перетворення з 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.
  • Кроки конвертації
    1. Надання буфера для зберігання всієї інформації повідомлення, яка повинна бути надіслана.
    2. Виклик xdrmem_create () для ініціалізації потоку XDR.

Наприклад: xdrmem_create () повертає вказівник на порожній потік.

  • Виклик стандартної програми в XDR для перетворення кожного пункту інформації. Вона буде дописувати закодовану інформацію в кінець потоку наступним чином:
    1. Поміщати закодовану інформацію в наступне доступне місце в буфері
    2. Оновлювати внутрішній вказівник на потік, поміщаючи його на нове доступне вільне місце
    3. Наприклад, конвертація 32-бітного цілого:
  • Після кодування всіх пунктів сполучення, це повідомлення надсилається.

Стандартні програми перетворення в XDR[ред.ред. код]

Одержання повідомлення в XDR[ред.ред. код]

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

Посилання[ред.ред. код]