Extern datarepresentation
XDR ( Engelska External Data Representation - extern datarepresentation ) är en internationell standard för dataöverföring på Internet , som används i olika RFC :er för att beskriva typer. XDR möjliggör plattformsoberoende kommunikation mellan datorer i heterogena nätverk.
External Data Representation (XDR) har varit en IETF- standard sedan 1995. Det gör att data kan paketeras på ett arkitekturoberoende sätt så att data kan överföras mellan heterogena datorsystem.
- Transformationen från lokal representation till XDR kallas kodning.
- Omvandlingen från XDR till lokal representation kallas avkodning.
- XDR är designad som ett portabelt (portabelt) bibliotek av funktioner mellan olika operativsystem och är dessutom oberoende av transportskiktet.
Bland de program som använder XDR finns följande:
Datatyper i XDR
Motivation för att använda XDR
Olika datorer kan ha olika intern representation av information. Till exempel har ett 32-bitars heltal 2 möjliga representationsformer:
- Byteordning från hög till låg (Motorola 68000)
- Big endian (Intel 80x86)
För vissa WinSock-funktioner måste deras argument (det vill säga funktionsparametrar) lagras i omvänd ordning.
- Server och klient kan utbyta olika typer av data.
- Om servern och klienten körs på två respektive maskiner med olika intern representation av data, måste de komma överens exakt om representationen av all data som skickas mellan dem.
- Sun Microsystems har utvecklat en extern datarepresentation (XDR) som definierar en representation för olika datatyper (heltal, uppräkning...)
- XDR har blivit de facto-standarden för de flesta klient-serverapplikationer:
- Programmet konverterar meddelanden från sin interna representation till XDR för efterföljande överföring. Detta kallas kodning. - Mottagaren konverterar det mottagna meddelandet från XDR till sin egen representation. Detta kallas avkodning.
Datatyper i XDR
XDR anger en representation för de flesta datatyper i C :
Den kodade informationen innehåller endast data, den innehåller inte information om datatypen. Till exempel, efter att ha kodat ett 32-bitars heltal, blir resultatet ett 32-bitars heltal i XDR. Det kommer inte att finnas någon information om att det är ett heltal. Klienter och servrar som använder XDR måste komma överens om datatypen för meddelandena de utbyter.
Programvarustöd för att använda XDR
- XDR definierar en representation för varje datatyp.
- Till exempel är ett 32-bitars heltal i big-endian byteordning.
- För att hjälpa programmerare tillhandahåller XDR ett bibliotek med rutiner för konvertering av datarepresentation.
Skickar ett meddelande till XDR
- Det skickade meddelandet kan bestå av flera dataposter (objekt).
- Ett meddelande innehåller till exempel information om en elev. Den består av tre artiklar:
- namn (teckensträng) -ID (heltal) -kumulativ GPA (flyttal)
- Innan meddelandet skickas konverterar programmet (klient eller server) all artikelinformation från den interna representationen till XDR.
- Konverteringssteg
- Tillhandahållande av en buffert för att hålla all meddelandeinformation som ska skickas.
- Anrop xdrmem_create() för att initiera en XDR-ström.
Till exempel: xdrmem_create() returnerar en pekare till en tom ström.
- Anropa ett standardprogram i XDR för att konvertera varje informationspost. Den kommer att lägga till den kodade informationen i slutet av strömmen enligt följande:
*#* placera den kodade informationen på nästa tillgängliga plats i bufferten
*#* uppdatera den interna strömpekaren till det nya lediga utrymmet
- Till exempel, konvertera ett 32-bitars heltal:
- När alla meddelandeobjekt har kodats skickas meddelandet.
Standardkonverteringsprogram till XDR
Får ett meddelande i XDR
- När ett program tar emot ett meddelande i XDR, konverterar det varje dataelement i XDR-meddelandet till dess interna representation.
- Steg:
- Anrop xdrmem_create() för att initiera en XDR-ström, och ange XDR_DECODE som det fjärde argumentet.
- Placera det mottagna meddelandet i bufferten.
- Anropa en lämplig konverteringsrutin för att avkoda varje datapost i det mottagna meddelandet.
Till exempel, avkodning av ett 32-bitars heltal:
Länkar