Reprezentarea datelor externe
XDR ( în engleză External Data Representation - reprezentare externă a datelor ) este un standard internațional pentru transmisia de date pe Internet , utilizat în diferite RFC -uri pentru a descrie tipuri. XDR permite comunicarea independentă de platformă între computere din rețele eterogene.
Reprezentarea datelor externe (XDR) este un standard IETF din 1995. Permite împachetarea datelor într-o manieră independentă de arhitectură, astfel încât datele să poată fi transferate între sisteme computerizate eterogene.
- Transformarea de la reprezentarea locală la XDR se numește codificare.
- Conversia de la XDR la reprezentarea locală se numește decodare.
- XDR este conceput ca o bibliotecă portabilă (portabilă) de funcții între diferite sisteme de operare și este, de asemenea, independentă de stratul de transport.
Printre programele care folosesc XDR sunt următoarele:
Tipuri de date în XDR
Motivația pentru utilizarea XDR
Calculatoare diferite pot avea o reprezentare internă diferită a informațiilor. De exemplu, un număr întreg de 32 de biți are 2 forme de reprezentare posibile:
- Ordinea octetilor de la mare la mic (Motorola 68000)
- Big Endian (Intel 80x86)
Pentru unele funcții WinSock, argumentele lor (adică parametrii funcției) trebuie stocate în ordine inversă.
- Serverul și clientul pot face schimb de diferite tipuri de date.
- Dacă serverul și clientul rulează pe două mașini respective folosind o reprezentare internă diferită a datelor, atunci trebuie să fie de acord exact cu privire la reprezentarea tuturor datelor transmise între ele.
- Sun Microsystems a dezvoltat o reprezentare externă a datelor (XDR) care definește o reprezentare pentru diferite tipuri de date (întreg, enumerare...)
- XDR a devenit standardul de facto pentru majoritatea aplicațiilor client-server:
- Programul convertește mesajele din reprezentarea sa internă în XDR pentru transmiterea ulterioară. Aceasta se numește codificare. - Receptorul convertește mesajul primit de la XDR în propria sa reprezentare. Aceasta se numește decodare.
Tipuri de date în XDR
XDR specifică o reprezentare pentru majoritatea tipurilor de date în C :
Informația codificată conține doar date, nu conține informații despre tipul de date. De exemplu, după codificarea unui număr întreg de 32 de biți, rezultatul va fi un număr întreg de 32 de biți în XDR. Nu vor exista informații că este un număr întreg. Clienții și serverele care utilizează XDR trebuie să convină asupra tipului de date al mesajelor pe care le schimbă.
Suport software pentru utilizarea XDR
- XDR definește o reprezentare pentru fiecare tip de date.
- De exemplu, un număr întreg de 32 de biți este în ordinea octeților big-endian.
- Pentru a ajuta programatorii, XDR oferă o bibliotecă de rutine pentru conversia reprezentării datelor.
Trimiterea unui mesaj către XDR
- Mesajul trimis poate consta din mai multe elemente de date (articole).
- De exemplu, un mesaj conține informații despre un student. Este format din trei articole:
- nume (șir de caractere) -ID (întreg) - GPA cumulativ (număr în virgulă mobilă)
- Înainte de a trimite mesajul, programul (client sau server) convertește toate informațiile despre articol din reprezentarea internă în XDR.
- Etape de conversie
- Furnizarea unui buffer pentru a păstra toate informațiile despre mesaj care urmează să fie trimise.
- Apelați xdrmem_create() pentru a inițializa un flux XDR.
De exemplu: xdrmem_create() returnează un pointer către un flux gol.
- Apelarea unui program standard în XDR pentru a converti fiecare element de informație. Acesta va adăuga informațiile codificate la sfârșitul fluxului, după cum urmează:
*#* puneți informațiile codificate în următoarea locație disponibilă din buffer
*#* actualizați indicatorul de flux intern la noul spațiu liber disponibil
- De exemplu, conversia unui număr întreg pe 32 de biți:
- După ce toate elementele de mesaj au fost codificate, mesajul este trimis.
Programe standard de conversie în XDR
Primirea unui mesaj în XDR
- Când un program primește un mesaj în XDR, acesta convertește fiecare element de date din mesajul XDR în reprezentarea sa internă.
- Pași:
- Apelați xdrmem_create() pentru a inițializa un flux XDR, specificând XDR_DECODE ca al patrulea argument.
- Puneți mesajul primit în buffer.
- Apelarea unei rutine de conversie adecvate pentru a decoda fiecare element de date din mesajul primit.
De exemplu, decodificarea unui număr întreg pe 32 de biți:
Link -uri