User Tools

Site Tools


t-m-t-t-c-ph-p-c-ph-p-m-t-wikipedia

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

t-m-t-t-c-ph-p-c-ph-p-m-t-wikipedia [2018/11/17 09:54] (current)
Line 1: Line 1:
 +<​HTML>​ <​br><​div><​p><​b>​Tóm tắt Cú pháp Ký hiệu Một</​b>​ (<​b>​ASN.1</​b>​) là một ngôn ngữ mô tả giao diện chuẩn để xác định các cấu trúc dữ liệu có thể được tuần tự hóa và deserialized theo cách đa nền tảng. Nó được sử dụng rộng rãi trong viễn thông và mạng máy tính, và đặc biệt là trong mật mã.
 +</​p><​p>​Các nhà phát triển giao thức định nghĩa các cấu trúc dữ liệu trong các mô-đun ASN.1, thường là một phần của một tài liệu tiêu chuẩn rộng hơn được viết bằng ngôn ngữ ASN.1. Bởi vì ngôn ngữ là cả hai người có thể đọc được và có thể đọc được bằng máy, các mô-đun có thể được tự động chuyển thành các thư viện xử lý cấu trúc dữ liệu của chúng, sử dụng trình biên dịch ASN.1.
 +</​p><​p>​ASN.1 là tiêu chuẩn chung của Tổ chức tiêu chuẩn hóa quốc tế (ISO), Ủy ban kỹ thuật điện quốc tế (IEC) và Liên minh tiêu chuẩn viễn thông quốc tế (ITU-T), ban đầu được định nghĩa vào năm 1984 như một phần của CCITT X.409: 1984 .<sup id="​cite_ref-1"​ class="​reference">​[1]</​sup> ​ Năm 1988, ASN.1 chuyển sang tiêu chuẩn riêng của mình, <​i>​X.208</​i>,​ do khả năng ứng dụng rộng rãi. Phiên bản 1995 sửa đổi đáng kể được bao phủ bởi <​i>​X.680</​i>​ loạt <sup id="​cite_ref-2"​ class="​reference">​[2]</​sup>​. Bản sửa đổi mới nhất của loạt đề xuất X.680 là Phiên bản 5.0, được xuất bản vào năm 2015.
 +</p>
  
 +
 +<​h2><​span class="​mw-headline"​ id="​Language_support">​Hỗ trợ ngôn ngữ</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h2>​
 +<​p>​ASN.1 là ký hiệu khai báo kiểu dữ liệu. Nó không xác định cách thao tác một biến kiểu như vậy. Điều này thực sự được định nghĩa trong các ngôn ngữ khác như SDL (Đặc tả và Ngôn ngữ mô tả) cho mô hình thực thi hoặc TTCN-3 (Kiểm tra và Kiểm soát Ký hiệu) để kiểm tra sự phù hợp. Cả hai ngôn ngữ này đều hỗ trợ các khai báo ASN.1. Có thể nhập một mô-đun ASN.1 và khai báo biến của bất kỳ kiểu ASN.1 nào được khai báo trong mô-đun.
 +</p>
 +<​h2><​span class="​mw-headline"​ id="​Applications">​Các ứng dụng</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h2>​
 +<​p>​ASN.1 được sử dụng trong các ứng dụng rất đa dạng như theo dõi bưu kiện, phân phối điện và biomedicine. Việc sử dụng rộng rãi nhất của nó tiếp tục ở các giao thức viễn thông tiêu chuẩn như mạng thông minh, UMTS, Voice over IP, truyền hình tương tác và HiperAccess.
 +</​p><​p>​ASN.1 được sử dụng trong X.509, định nghĩa định dạng chứng chỉ được sử dụng trong giao thức HTTPS để duyệt web an toàn và trong nhiều hệ thống mã hóa khác.
 +</​p><​p>​Nó cũng được sử dụng trong nhóm tiêu chuẩn mã hóa PKCS, thư điện tử X.400, X.500 và Giao thức truy cập thư mục hạng nhẹ (LDAP), H.323 (VoIP), Kerberos, BACnet, Giao thức quản lý mạng đơn giản (SNMP) và - và các công nghệ truyền thông không dây thế hệ thứ tư (UMTS, LTE và WiMAX 2).<sup id="​cite_ref-3"​ class="​reference">​[3]</​sup></​p>​
 +<​h2><​span class="​mw-headline"​ id="​Encodings">​Mã hóa</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h2>​
 +<​p>​ASN.1 được liên kết chặt chẽ với một bộ quy tắc mã hóa chỉ định cách biểu diễn cấu trúc dữ liệu dưới dạng một chuỗi các byte. Các quy tắc mã hóa ASN.1 chuẩn bao gồm:
 +</p>
 +<​p>​Các quy tắc mã hóa hoàn toàn độc lập với nền tảng và có thể được sử dụng trên nhiều phần cứng và phần mềm khác nhau.
 +</​p><​p>​Định dạng PEM thường được sử dụng để đóng gói các chứng chỉ ASN.1 được mã hóa bằng DER và các khóa theo định dạng chỉ ASCII. Phiên bản PEM của thông điệp DER bao gồm mã hóa base64 của thông báo DER, trước bởi &​quot;​----- BEGIN FOO -----&​quot;​ và tiếp theo là &​quot;​----- END FOO -----, &​quot;​trong đó&​quot;​ FOO &​quot;​có thể cho biết&​quot;​ CHỨNG NHẬN &​quot;,&​quot;​ CÔNG KHÓA, &​quot;&​quot;​ PRIVATE KEY &​quot;​hoặc nhiều loại nội dung khác.
 +</p>
 +<​h3><​span class="​mw-headline"​ id="​Encoding_Control_Notation">​Mã hóa kiểm soát ký hiệu</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h3>​
 +<​p>​Đề xuất ASN.1 cung cấp một số quy tắc mã hóa được xác định trước. Nếu không có quy tắc mã hóa hiện tại nào thỏa mãn Mã hóa kiểm soát mã hóa cung cấp cách để người dùng xác định quy tắc mã hóa tùy chỉnh của riêng mình.
 +</p>
 +<​h3><​span class="​mw-headline"​ id="​Generic_String_Encoding_Rules">​Quy tắc mã hóa chuỗi chung</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h3>​
 +<​p><​i>​Quy tắc mã hóa chuỗi chung (GSER)</​i>​ là một bộ quy tắc mã hóa ASN.1 để tạo cú pháp truyền văn bản có thể đọc được, có thể đọc được cho các cấu trúc dữ liệu được mô tả trong ASN.1. Mục đích của GSER là đại diện cho dữ liệu được mã hóa cho người dùng hoặc dữ liệu đầu vào từ người dùng, theo một định dạng rất đơn giản. GSER ban đầu được thiết kế cho Giao thức truy cập thư mục hạng nhẹ (LDAP) và hiếm khi được sử dụng bên ngoài nó. Việc sử dụng GSER trong các giao thức thực tế không được khuyến khích vì không phải tất cả các mã hóa chuỗi ký tự được ASN.1 hỗ trợ đều có thể được sao chép trong nó. Các quy tắc mã hóa GSER được quy định trong RFC 3641 và không giống như các loại quy tắc mã hóa phổ biến khác, không được ITU-T chuẩn hóa.
 +</p>
 +<​h3><​span class="​mw-headline"​ id="​Packed_Encoding_Rules">​Quy tắc mã hóa đóng gói</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h3>​
 +<​p><​i>​Quy tắc mã hóa đóng gói (PER)</​i>​ là các quy tắc mã hóa ASN.1 để tạo cú pháp chuyển giao nhỏ gọn cho các cấu trúc dữ liệu được mô tả trong ASN.1, được định nghĩa vào năm 1994.
 +</​p><​p>​Khuyến nghị này hoặc tiêu chuẩn quốc tế mô tả một bộ quy tắc mã hóa có thể được áp dụng cho các giá trị của tất cả các loại ASN.1 để đạt được một biểu diễn nhỏ gọn hơn nhiều so với BER đạt được và các dẫn xuất của nó (được mô tả trong ITU-T Rec. X.690 | ISO / IEC 8825-1).
 +</​p><​p>​Nó sử dụng thông tin bổ sung, chẳng hạn như giới hạn dưới và trên cho các giá trị số, từ đặc tả ASN.1 để biểu diễn các đơn vị dữ liệu sử dụng số bit tối thiểu. Sự nhỏ gọn đòi hỏi rằng bộ giải mã biết cú pháp trừu tượng hoàn chỉnh của cấu trúc dữ liệu được giải mã, tuy nhiên.
 +</​p><​p>​Có hai biến thể của quy tắc mã hóa được đóng gói: không được căn chỉnh và căn chỉnh. Với mã hóa chưa được ký hiệu, các bit được đóng gói không liên quan đến các ranh giới octet (byte). Với mã hóa liên kết, một số loại cấu trúc dữ liệu nhất định được căn chỉnh trên các đường biên octet, có nghĩa là có thể có một số bit đệm bị lãng phí. Mã hóa không được ký hiệu sử dụng số bit ít nhất, nhưng có lẽ là một số chi phí trong thời gian xử lý.
 +</​p><​p>​Các quy tắc mã hóa được đóng gói cũng xác định một bộ quy tắc mã hóa bị hạn chế, được gọi là <​b>​CANONICAL-PER</​b>,​ được thiết kế để chỉ tạo ra một mã hóa duy nhất có thể cho bất kỳ cấu trúc dữ liệu cụ thể nào. Do đó, vai trò của CANONICAL-PER tương tự như vai trò của DER hoặc CER.
 +</p>
 +<​h3><​span class="​mw-headline"​ id="​Octet_Encoding_Rules">​Quy tắc mã hóa Octet</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h3>​
 +<​p>​Các <​i>​Quy tắc mã hóa Octet (OER)</​i>​ được thiết kế để dễ triển khai và để sản xuất mã hóa nhỏ gọn hơn so với các mã được sản xuất bởi Quy tắc mã hóa cơ bản (BER). Ngoài việc giảm nỗ lực phát triển bộ mã hóa / giải mã, việc sử dụng OER có thể làm giảm việc sử dụng băng thông (mặc dù không nhiều như Quy tắc mã hóa đóng gói), lưu chu kỳ CPU và độ trễ mã hóa / giải mã thấp hơn.
 +</p>
 +<​h3><​span class="​mw-headline"​ id="​JSON_Encoding_Rules">​Quy tắc mã hóa JSON</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h3>​
 +<​p>​ITU-T đang chuẩn hóa<sup id="​cite_ref-15"​ class="​reference">​[15]</​sup> ​ cái mới <​i>​Quy tắc mã hóa JSON (JER)</​i>,​ chỉ định cách mã hóa các giá trị trừu tượng ASN.1 trong JSON, sao cho các bảng mã kết quả có thể được đọc bởi bất kỳ trình đọc JSON nào. Khi một lược đồ ASN.1 hiện có được sử dụng với JER, một mã hóa JER mặc định được tạo ra, nhưng tác giả của lược đồ ASN.1 cũng sẽ có thể thay đổi cấu trúc của các mã hóa JER theo những cách cụ thể bằng cách bao gồm <​i>​Hướng dẫn mã hóa JER</​i>​ trong lược đồ. Điều này sẽ cho phép ASN.1 được sử dụng như một ngôn ngữ lược đồ cho JSON.
 +</p>
 +<​h2><​span class="​mw-headline"​ id="​Example">​Thí dụ</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h2>​
 +<​p>​Đây là một mô-đun ASN.1 ví dụ xác định các thông điệp (cấu trúc dữ liệu) của một Giao thức Foo hư cấu:
 +</p>
 +<​pre>​FooProtocol ĐỊNH NGH ::A :: = BEGIN
 +
 +    FooQuestion :: = SEQUENCE {
 +        trackingNumber INTEGER,
 +        câu hỏi IA5String
 +    }
 +
 +    FooAnswer :: = SEQUENCE {
 +        questionNumber INTEGER,
 +        trả lời BOOLEAN
 +    }
 +
 +KẾT THÚC</​pre>​
 +<​p>​Đây có thể là đặc điểm kỹ thuật được xuất bản bởi người sáng tạo của Giao thức Foo. Luồng cuộc trò chuyện, giao điểm trao đổi và các trạng thái không được định nghĩa trong ASN.1, nhưng được để lại cho các ký hiệu khác và mô tả văn bản của giao thức.
 +</​p><​p>​Giả sử một thông điệp tuân thủ Giao thức Foo và thông báo sẽ được gửi đến bên nhận, thông báo cụ thể này (đơn vị dữ liệu giao thức (PDU)) là:
 +</p>
 +<​pre>​myQuestion FooQuestion :: = SEQUENCE {
 +    trackingNumber 5,
 +    câu hỏi &​quot;​Có ai ở đó không?&​quot;​
 +}</​pre>​
 +<​p>​ASN.1 hỗ trợ các ràng buộc về giá trị và kích cỡ, và khả năng mở rộng. Thông số kỹ thuật ở trên có thể được thay đổi thành
 +</p>
 +<​pre>​FooProtocol ĐỊNH NGH ::A :: = BEGIN
 +
 +    FooQuestion :: = SEQUENCE {
 +        trackingNumber INTEGER (0..199),
 +        câu hỏi IA5String
 +    }
 +
 +    FooAnswer :: = SEQUENCE {
 +        questionNumber INTEGER (10..20),
 +        trả lời BOOLEAN
 +    }
 +
 +    FooHistory :: = SEQUENCE {
 +        câu hỏi SEQUENCE (SIZE (0..10)) của FooQuestion,​
 +        trả lời SEQUENCE (SIZE (1..10)) của FooAnswer,
 +        anArray SEQUENCE (SIZE (100)) của INTEGER (0..1000),
 +        ...
 +    }
 +
 +KẾT THÚC</​pre>​
 +<​p>​Thay đổi này ràng buộc theo dõiNumbers để có một giá trị từ 0 đến 199, và questionNumbers để có một giá trị từ 10 đến 20 bao gồm. Kích thước của mảng câu hỏi có thể nằm trong khoảng từ 0 đến 10 phần tử, với mảng câu trả lời giữa 1 và 10 phần tử. Trường anArray là một mảng nguyên tố có độ dài cố định 100 của các số nguyên phải nằm trong khoảng từ 0 đến 1000. Dấu chỉ mở rộng &#​39;​...&#​39;​ có nghĩa là đặc tả thông báo FooHistory có thể có các trường bổ sung trong một phiên bản tương lai của đặc tả; các hệ thống tương thích với một phiên bản sẽ có thể nhận và truyền các giao dịch từ một phiên bản sau, mặc dù chỉ có thể xử lý các trường được chỉ định trong phiên bản cũ hơn. Các trình biên dịch ASN.1 tốt sẽ tạo ra (trong C, C ++, Java, vv) mã nguồn sẽ tự động kiểm tra xem các giao dịch có nằm trong các ràng buộc này hay không. Các giao dịch vi phạm các ràng buộc sẽ không được chấp nhận, hoặc được trình bày, ứng dụng. Quản lý hạn chế trong lớp này đơn giản hóa đáng kể đặc tả giao thức vì các ứng dụng sẽ được bảo vệ khỏi các vi phạm ràng buộc, giảm rủi ro và chi phí.
 +</​p><​p>​Để gửi thông báo myQuestion thông qua mạng, thông báo được tuần tự hóa (được mã hóa) thành một chuỗi các byte sử dụng một trong các quy tắc mã hóa. Đặc tả giao thức Foo nên đặt tên một bộ quy tắc mã hóa để sử dụng, để người dùng giao thức Foo biết được giao thức nào họ nên sử dụng và mong đợi.
 +</p>
 +<​h3><​span class="​mw-headline"​ id="​Example_encoded_in_DER">​Ví dụ được mã hóa trong DER</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h3>​
 +<​p>​Dưới đây là cấu trúc dữ liệu được hiển thị ở trên được mã hóa theo định dạng DER (tất cả các số đều ở dạng thập lục phân):
 +</p>
 +<​pre>​30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f</​pre><​p>​DER là một kiểu mã hóa kiểu giá trị độ dài, vì vậy chuỗi trên có thể được giải thích, với tham chiếu đến các kiểu SEQUENCE, INTEGER và IA5String tiêu chuẩn, như sau:
 +</​p><​pre>​30 - thẻ loại cho biết SEQUENCE
 +13 - chiều dài trong octet giá trị sau
 +  02 - thẻ loại cho biết INTEGER
 +  01 - chiều dài trong octet giá trị sau
 +    05 - giá trị (5)
 +  16 - loại thẻ cho biết IA5String
 +     (IA5 nghĩa là tập hợp ISO 646 7 bit đầy đủ, bao gồm các biến thể,
 +      nhưng nói chung là US-ASCII)
 +  0e - chiều dài trong octet có giá trị sau
 +    41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f - giá trị (&​quot;​Có ai ở đó không?&​quot;​)
 +</​pre>​
 +<​h3><​span class="​mw-headline"​ id="​Example_encoded_in_XER">​Ví dụ được mã hóa trong XER</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h3>​
 +<​p>​Ngoài ra, có thể mã hóa cùng cấu trúc dữ liệu ASN.1 với Quy tắc mã hóa XML (XER) để đạt được khả năng đọc lớn hơn của con người &​quot;​trên dây&​quot;​. Sau đó nó sẽ xuất hiện như sau 108 octet, (số không gian bao gồm các khoảng trống được sử dụng cho thụt lề):
 +</p>
 +<div class="​mw-highlight mw-content-ltr"​ dir="​ltr"><​pre><​span/><​span class="​nt"><​FooQuestion></​span>​
 +    <span class="​nt"><​trackingNumber></​span>​5<​span class="​nt"></​trackingNumber></​span>​
 +    <span class="​nt"><​question></​span>​Ai có?<​span class="​nt"></​question></​span>​
 +<span class="​nt"></​FooQuestion></​span>​
 +</​pre></​div>​
 +<​h3><​span id="​Example_encoded_in_PER_.28unaligned.29"/><​span class="​mw-headline"​ id="​Example_encoded_in_PER_(unaligned)">​Ví dụ được mã hóa bằng PER (chưa được ký)</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h3>​
 +<​p>​Ngoài ra, nếu các Quy tắc mã hóa đóng gói được sử dụng, 122 bit sau (16 octet đến 128 bit, nhưng ở đây chỉ có 122 bit mang thông tin và 6 bit cuối cùng chỉ là đệm) sẽ được tạo:
 +</p>
 +<​pre>​01 05 0e 83 bb ce 2ngày f9 3c a0 e9 a3 2f 2c af c0</​pre>​
 +<​p>​Trong định dạng này, nhập thẻ cho các phần tử được yêu cầu không được mã hóa, vì vậy nó không thể được phân tích cú pháp mà không biết các lược đồ dự kiến ​​được sử dụng để mã hóa. Ngoài ra, các byte cho giá trị của IA5String được đóng gói bằng các đơn vị 7-bit thay vì các đơn vị 8-bit, bởi vì bộ mã hóa biết rằng mã hóa một giá trị byte IA5String chỉ yêu cầu 7 bit. Tuy nhiên, byte dài vẫn được mã hóa ở đây, ngay cả đối với thẻ số nguyên đầu tiên 01 (nhưng một trình đóng gói PER cũng có thể bỏ qua nó nếu nó biết phạm vi giá trị được phép phù hợp với 8 bit và thậm chí có thể thu nhỏ giá trị đơn lẻ là 05 với ít hơn hơn 8 bit, nếu nó biết rằng các giá trị được phép chỉ có thể vừa với phạm vi nhỏ hơn).
 +</​p><​p>​Cũng lưu ý rằng 6 bit cuối cùng trong PER được mã hóa được đệm bằng các bit rỗng trong 6 bit quan trọng nhất của byte cuối c0: các bit thừa này có thể không được truyền hoặc được sử dụng để mã hóa thứ gì khác nếu chuỗi này được chèn vào như một phần của một chuỗi PER không được ký hiệu dài hơn.
 +</​p><​p>​Điều này có nghĩa rằng dữ liệu PER chưa được gán về cơ bản là luồng bit được đặt hàng và không phải là luồng byte được đặt hàng như với PER phù hợp và sẽ phức tạp hơn một chút để giải mã bằng phần mềm trên bộ vi xử lý thông thường. dịch chuyển và che và không trực tiếp địa chỉ byte (nhưng cùng một nhận xét sẽ đúng với bộ vi xử lý hiện đại và bộ nhớ / đơn vị lưu trữ có đơn vị địa chỉ tối thiểu lớn hơn 1 octet). Tuy nhiên, bộ xử lý tín hiệu và bộ xử lý tín hiệu hiện đại bao gồm hỗ trợ phần cứng để giải mã nội bộ nhanh các luồng bit với việc xử lý tự động các đơn vị tính toán vượt qua ranh giới của các đơn vị lưu trữ địa chỉ (điều này là cần thiết để xử lý hiệu quả trong các codec dữ liệu để nén / giải nén hoặc với một số mã hóa / thuật toán giải mã).
 +</​p><​p>​Nếu cần phải căn chỉnh ranh giới octet, bộ mã hóa PER phù hợp sẽ tạo ra:
 +</p>
 +<​pre>​01 05 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f</​pre>​
 +<​p>​(trong trường hợp này, mỗi octet được đệm riêng lẻ với các bit rỗng trên các bit không được sử dụng quan trọng nhất của chúng).
 +</p>
 +
 +<​p>​Hầu hết các công cụ hỗ trợ ASN.1 đều làm như sau:
 +</p>
 +<​ul><​li>​phân tích cú pháp các tệp ASN.1,</​li>​
 +<​li>​tạo khai báo tương đương trong ngôn ngữ lập trình (như C hoặc C ++),</​li>​
 +<​li>​tạo ra các chức năng mã hóa và giải mã dựa trên các khai báo trước đó.</​li></​ul><​p>​Có thể tìm thấy danh sách các công cụ hỗ trợ ASN.1 trên trang web Công cụ ITU-T.
 +</p>
 +<​h2><​span class="​mw-headline"​ id="​Comparison_to_similar_schemes">​So sánh với các sơ đồ tương tự</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h2>​
 +<​p>​ASN.1 tương tự với mục đích và sử dụng cho các bộ đệm giao thức và Apache Thrift, cũng là các ngôn ngữ mô tả giao diện cho việc tuần tự hóa dữ liệu đa nền tảng. Giống như các ngôn ngữ đó, nó có một lược đồ (trong ASN.1, được gọi là một &​quot;​mô-đun&​quot;​),​ và một bộ mã hóa, thường là các kiểu mã hóa giá trị kiểu dài. Tuy nhiên, ASN.1, được định nghĩa vào năm 1984, có trước nhiều năm. Nó cũng bao gồm nhiều loại dữ liệu cơ bản hơn, một số trong số đó đã lỗi thời và có nhiều tùy chọn hơn cho khả năng mở rộng. Một thông điệp ASN.1 duy nhất có thể bao gồm dữ liệu từ nhiều mô đun được xác định trong nhiều tiêu chuẩn, thậm chí cả các tiêu chuẩn được xác định năm ngoài. ASN.1 cũng bao gồm hỗ trợ tích hợp cho các ràng buộc về các giá trị. Ví dụ, một mô-đun có thể chỉ định một trường số nguyên phải nằm trong khoảng 0 đến 100.
 +</​p><​p>​ASN.1 tương tự trực quan với dạng Augus Backus-Naur (ABNF), được sử dụng để định nghĩa nhiều giao thức Internet như HTTP và SMTP. Tuy nhiên, trong thực tế chúng khá khác nhau: ASN.1 định nghĩa cấu trúc dữ liệu, có thể được mã hóa theo nhiều cách khác nhau (ví dụ: JSON, XML, nhị phân). Mặt khác, ABNF định nghĩa mã hóa (&​quot;​cú pháp&​quot;​) đồng thời nó định nghĩa cấu trúc dữ liệu (&​quot;​ngữ nghĩa&​quot;​). ABNF có xu hướng được sử dụng thường xuyên hơn để xác định các giao thức văn bản, con người có thể đọc được, và thường không được sử dụng để xác định các kiểu mã hóa giá trị kiểu dài.
 +</​p><​p>​Nhiều ngôn ngữ lập trình xác định các định dạng tuần tự hóa theo ngôn ngữ cụ thể. Ví dụ, mô-đun &​quot;​pickle&​quot;​ của Python và mô-đun &​quot;​Marshal&​quot;​ của Ruby. Các định dạng này nói chung là ngôn ngữ cụ thể. Chúng cũng không yêu cầu lược đồ, điều này làm cho chúng dễ sử dụng hơn trong các kịch bản lưu trữ đặc biệt, nhưng không phù hợp với các giao thức truyền thông.
 +</​p><​p>​JSON và XML tương tự không yêu cầu lược đồ, làm cho chúng dễ sử dụng. Tuy nhiên, chúng là cả hai tiêu chuẩn đa nền tảng, và được phổ biến rộng rãi cho các giao thức truyền thông, đặc biệt khi kết hợp với lược đồ XML hoặc lược đồ JSON.
 +</​p><​p>​Để biết thêm chi tiết, hãy xem So sánh các định dạng tuần tự hóa dữ liệu.
 +</p>
 +<​h2><​span class="​mw-headline"​ id="​References">​Tài liệu tham khảo</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h2>​
 +
 +<​h2><​span class="​mw-headline"​ id="​External_links">​liện kết ngoại</​span><​span class="​mw-editsection"><​span class="​mw-editsection-bracket">​[[</​span>​chỉnh sửa<​span class="​mw-editsection-bracket">​]</​span></​span></​h2>​
 +
 +
 +<​!-- ​
 +NewPP limit report
 +Parsed by mw1264
 +Cached time: 20181026161255
 +Cache expiry: 1900800
 +Dynamic content: false
 +CPU time usage: 0.156 seconds
 +Real time usage: 0.195 seconds
 +Preprocessor visited node count: 435/1000000
 +Preprocessor generated node count: 0/1500000
 +Post‐expand include size: 9205/​2097152 bytes
 +Template argument size: 92/2097152 bytes
 +Highest expansion depth: 7/40
 +Expensive parser function count: 0/500
 +Unstrip recursion depth: 1/20
 +Unstrip post‐expand size: 11087/​5000000 bytes
 +Number of Wikibase entities loaded: 0/400
 +Lua time usage: 0.067/​10.000 seconds
 +Lua memory usage: 1.72 MB/50 MB
 +-->
 +<!--
 +Transclusion expansion time report (%,​ms,​calls,​template)
 +100.00% ​ 132.246 ​     1 -total
 + ​87.07% ​ 115.149 ​     1 Template:​Reflist
 + ​73.86% ​  ​97.674 ​     2 Template:​Cite_web
 + ​12.86% ​  ​17.009 ​     1 Template:​Data_Exchange
 +  9.95%   ​13.158 ​     1 Template:​Navbox
 +  2.37%    3.131      1 Template:​Main_other
 +-->
 +
 +<!-- Saved in parser cache with key enwiki:​pcache:​idhash:​75625-0!canonical and timestamp 20181026161254 and revision id 860530895
 + ​-->​
 +</​div></​pre>​
 + </​HTML> ​
t-m-t-t-c-ph-p-c-ph-p-m-t-wikipedia.txt · Last modified: 2018/11/17 09:54 (external edit)