Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Giriş
Bu belge, Azure Depolama Blob, Dosya ve DFS API'leri tarafından istek içeriği üzerinde verimli kontrol toplamı hesaplamasını desteklemek için kullanılan Yapılandırılmış Gövde formatını tanımlar. Bu, verileri (örneğin, blob veya dosya içeriği) takip eden kontrol toplamlarıyla kontrol toplamı bazında kodlayan özel bir ikili formattır. Bu formata kodlanan şeyin istek gövdesinin kendisi olduğunu unutmayın.
Bu dokümantasyon öncelikle Azure Storage REST API'lerini doğrudan kullanan müşterilere yöneliktir. Desteklenen Azure Depolama SDK'sı kullanan müşterilerin istekleri otomatik olarak bu formatta kodlanacaktır.
Şu anda Azure Storage yalnızca bu formatın 1. sürümünü destekliyor, o da yalnızca crc64 kontrol toplamlarını destekliyor. Yapılandırılmış mesaj formatının kullanımı isteğe bağlıdır.
Specification
Bölümler
Şifrelenmiş bir mesajın üç bölümü vardır.
| Bölüm | Description |
|---|---|
| Header | Başlık, şema versiyonu (1), mesaj uzunluğu, seçenekler ve segment sayısını içerir. |
| Segment(ler) | Her mesajın bir veya daha fazla segmenti vardır ve her segment segment #, veri ve isteğe bağlı takip eden meta verileri içerir. V1 için desteklenen tek fragman crc64 kontrol toplamı. |
| Treyler | Her mesajın isteğe bağlı takip meta verileri vardır. V1 için desteklenen tek fragman crc64 kontrol toplamı. |
İkili Format, v1
Structured Body v1 ikili formatı şu şekilde tanımlanır:
Header:
uint8 message-version
uint64 message-length
uint16 message-flags
uint16 num-segments
Segment(s):
uint16 segment-num
uint64 segment-data-length (dl)
byte[dl] segment-data
byte[8] [optional] segment-data-crc64
Trailer:
byte[8] [optional] message-data-crc64
Tüm tamsayı veri türleri little-endian olarak kodlanır.
Saha Referansı
| Veri Alanı | Türü | Description |
|---|---|---|
message-version |
uint8 |
Mesajın şema versiyonu. Bu olmalıdır 1. |
message-length |
uint64 |
Tam mesajın uzunluğu. Bir HTTP mesajında bu başlıkla Content-Length eşleşmelidir. |
message-flags |
uint16 |
Bu mesaj için bayraklar (seçenekler) etkinleştirildi. Sürüm 1 sadece kontrol toplamları için tek bir bayrak crc64 desteğini verir.
Bayraklara bakınız. |
num-segments |
uint16 |
Mesajda yer alan segment sayısı. Bu en azından 1öyle olmalı.
Bölümlere bakınız |
segment-num |
uint16 |
Mevcut bölüm #. İlk segment, 1 sonraki her segment için artmalıdır ve artmalıdır. |
segment-data-length (dl) |
uint64 |
Segmentin blob/dosya verisinin uzunluğu, bayt cinsinden. |
segment-data |
byte[dl] |
Blob/dosya veri baytları. |
segment-data-crc64[^1] |
byte[8] |
Segmentin için datacrc64 kontrol toplamı hesaplandı. |
message-data-crc64[^1] |
byte[8] |
Mesaj verisi için hesaplanmış crc64 kontrol toplamı (tüm segmentler' data.) |
[^1]: Seçenekle include-crc64 belirtildiğinde CRC64 kontrol toplamları mevcuttur.
Bayraklara bakınız.
Flags
Alan, message-flags kodlanmış mesaj için seçenekler belirtmek için kullanılır. Sürüm 1 yalnızca tek bir seçeneği destekler, include-crc64ancak kalan bitler diğer kontrol toplamı algoritmaları ve meta veriler gibi gelecekteki seçenekler için ayrılmıştır.
| Değer | İsim | Description |
|---|---|---|
0x0001 |
include-crc64 |
crc64 kontrol toplamlarını segmentlere ve mesaj fragmanına ekleyin. |
0x0002-0x8000 |
Gelecek sürümler için ayrılmıştır. |
Segmentler
Kodlanmış mesajlar bir veya daha fazla segmente ayrılır. Her segment kendi segment #, segment verisi ve bir kontrol toplamı[^1] içerir. Bu tasarım, büyük talepler için artılı bütünlük doğrulamasına olanak tanır ve kısmi indirmelerin yeniden başlatılması için faydalıdır.
Uyarı
Segmentler ile 1başlayan şekilde numaralandırılır. Segmentlerin en fazla sayısı .65535
Boş Segmentler
Segmentlerin boş segment-data bir alanı olabileceğini unutmayın. Tek ve boş bir segmente sahip olan boş blob örneğine bakınız. Boş segmentlerde bir segment-data-length ' 0 olmalı ve eğer include-crc64 etkinleştirilmişse, geçerli kontrol toplamı da içermelidir.
Segment Boyutu
HTTP isteğinde uygun ayar bulunan bir GetBlob veya ReadFile isteğinde x-ms-structured-body , hizmet blob veya dosya verisini kodlanmış yanıtta 4MiB segmentlere böler. Mesaj maksimum segment sayısını aşarsa, segment boyutu artırılır.
Bir istemciden yüklenen blob veya dosya verileri için, hizmet herhangi bir boyutta veya farklı boyutta segmentleri kabul eder. Önerilen 4MiB veya daha büyük segment boyutlarının kullanılmasıdır. SDK'lar varsayılan olarak 4MiB segment boyutlarını kullanır.
CRC64 içerik doğrulaması
CRC64 içerik doğrulaması, Azure Storage REST API'sinde desteklenen API'ler için kontrol toplamı doğrulamasını sağlayan bir özelliktir. CRC64 algoritmalarının birçok varyantı vardır. CRC64 kontrol toplamları CRC64-NVME (diğer adıyla CRC64-Rocksoft) kullanılarak hesaplanır. Bu özellik, aktarılan içeriğin bütünlüğünü doğrulamak için özel bir CRC64 polinomu kullanır. Bu kontrol toplamının iki şekilde kullanılabileceği iki yöntem vardır:
- Yapılandırılmış gövde: CRC64 kontrol toplamları, veri akışı sırasında kontrol toplamlarının doğrulanmasına olanak tanıyan API isteğinin gövdesine gömülüşüdür.
- İşlemsel CRC64 kontrol toplamları (yalnızca yüklemelerde desteklenir): Her bireysel API isteği için, istemci CRC64 kontrol toplamını hesaplar ve değeri başlığa ayarlar.
x-ms-content-crc64Depolama hizmeti, alınan baytların kontrol toplamının başlıkta sağlanan kontrol toplamıyla eşleştiğini doğrular.
Polinom
Bu CRC64 varyantı bit-yansıtıcıdır (yansıtılmayan polinom 0xad93d23594c93659 temelinde) ve CRC giriş ve çıkış bitlerini ters çevirir.
Örnekler
Örnek - Boş Kodlanmış Mesaj
Bu örnek, veri olmadan yapılandırılmış gövde formatıyla kodlanmış bir mesajı gösterir. Mesajın boş bir segment içermesi gerektiğini unutmayın.
// header: 13 bytes
0x01, // message-version: 1
0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // message-length: 39
0x01, 0x00, // message-flags: 1 (include-crc64)
0x01, 0x00, // num-segments: 1
// segment 1: 18 bytes
0x01, 0x00, // segment-num: 1
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // segment-data-length: 0
// segment-data: empty
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // segment-data-crc64: 0
// trailer: 8 bytes
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // message-data-crc64: 0
Örnek - crc64 olmadan boş kodlanmış mesaj
Bu örnek, veri olmadan ve seçeneği include-crc64 etkin olmayan kodlanmış bir mesajı gösterir.
// header: 13 bytes
0x01, // message-version: 1
0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // message-length: 23
0x00, 0x00, // message-flags: 0 (none)
0x01, 0x00, // num-segments: 1
// segment 1: 10 bytes
0x01, 0x00, // segment-num: 1
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // segment-data-length: 0
// segment-data: empty
// trailer: empty
Örnek - İki Segmentli Kodlanmış Mesaj ve crc64 Kontrol Toplamı
// header: 13 bytes
0x01, // message-version: 1
0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // message-length: 59
0x01, 0x00, // message-flags: 1 (include-crc64)
0x02, 0x00, // num-segments: 2
// segment 1: 19 bytes
0x01, 0x00, // segment-num: 1
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // segment-data-length: 1
0x11, // segment-data
0xd0, 0x61, 0x67, 0x57, 0xb4, 0x5f, 0x54, 0xd2, // segment-data-crc64
// segment 2: 19 bytes
0x02, 0x00, // segment-num: 2
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // segment-data-length: 1
0x22, // segment-data
0xd8, 0x4a, 0xfb, 0x9e, 0xa0, 0x4f, 0xc6, 0xda, // segment-data-crc64
// trailer: 8 bytes
0xe2, 0xa6, 0x37, 0x74, 0x50, 0xad, 0xc2, 0xef // message-data-crc64