massage).
Tất cả các thông điệp trong giao thức hệ thống tên miền sử dụng định dạng duy nhất. Khung này được gửi bởi các bộ phân giải tới các máy chủ tên. Chỉ có thành phần đầu và thành phần câu hỏi được sử dụng để tạo thành truy vấn. Trả lời và chuyển tiếp của truy vấn được sử dụng các khung tương tự, nhưng với nhiều phần điền vào ( câu trả lời/ quyền/ phần cộng thêm).
Hình 5: Định dạng thông điệp DNS.
Header format: Phần đầu luôn hiện hữu và có độ dài cố định 12 bytes. Các phần khác có chiều dài thay đổi.
ID: Một định danh 16-bit được gán bởi chương trình. Định danh này được sao chép trong các trả lời tương ứng cảu các máy chủ tên và có thể được dùng cho sự khác biệt của các đáp ứng khi nhiều truy vấn là còn tồn tại cùng một lúc.
29
Trong đó:
- QR: Cờ xác định một truy vấn (0), hoặc đáp ứng (1).
- Op Code: Một trường 4-bit quy định cụ thể các loại truy vấn: + 0 : truy vấn chuẩn ( Standard query – QUERY).
+ 1: truy vấn đảo ngược ( Inverse query – IQUERY).
+ 2: yêu cầu trạng thái máy chủ ( Server status request – STATUS). Các giá trị khác được dành riêng để sử dụng trong tương lai:
AA – Authoritative flag: Cờ trả lời có thẩm quyền. Nếu được đặt trong một đáp ứng, cờ
này quy định rằng các máy chủ tên đáp ứng có quyền cho tên miền gửi truy vấn.
TC- Truncation flag: Cờ rút gọn. Thiết lập nếu tin nhắn dài hơn cho phép trên kênh vật
lý.
RD- Recursion desired flag: cờ yêu cầu đệ quy. Bit này phát tín hiệu đến các máy chủ
tên yêu cầu đệ quy. Bit được sao chép trong các đáp ứng.
RA – Recursion available flag: Cờ đệ quy có sẵn. Cho biết tên máy chủ hỗ trợ phân
giải đệ quy.
Zero: 3 bits dành riêng cho sử dụng trong tương lai. Phải là số 0. Rcode : mã đáp ứng 4-bit. Giá trị có thể là:
+ 0 – Không nỗi.
+ 1- Định dạng lỗi. Các máy chủ không thể làm rõ thông điệp.
+ 2- Lỗi máy chủ. Thông điệp không được xử lý bởi vấn đề với máy chủ. + 3 – Lỗi tên. Tên miền trong truy vấn không tồn tại.
+ 4- Lỗi không thực thi. Các loại yêu cầu của truy vấn không phải là được thực hiện bởi máy chủ.
30
riêng để sử dụng trong tương lai.
QDcount: Một số nguyên không dấu 16-bit quy định cụ thể số lượng các mục trong
phần câu hỏi.
ANcount: Một số nguyên không dấu 16-bit quy định cụ thể số lượng RRs trong phần trả
lời.
NScount: Một số nguyên không dấu 16-bit quy định cụ thể số lượng các máy chủ tên
RRs trong phần thẩm quyền.
ARcount: Một số nguyên không dấu 16-bit quy định cụ thể số lượng RRs trong phần
bản ghi bổ sung.
Phần câu hỏi ( Question section): Phần tiếp theo chứa các truy vấn cho máy chủ tên.
Nó chưa Qdcount ( thường là 1) các mục.
Hình 6: Định dạng câu hỏi DNS.
Trong đó:
Length: Một byte đơn cho biết độ dài của nhãn tiếp theo.
Lable: Một thành phần của đặc tính tên miền ( ví dụ: ibm từ ral.ibm.com). Tên miền
được suy ra từ câu hỏi được lưu trữ như một chuỗi các nhãn có chiều dài thay đổi mỗi thứ bậc chiều dài 1byte.
31
Type: Loại 2bytes xác định kiểu truy vấn. Nó có thể có bất kỳ giá trị tư trường Type
trong bản ghi tài nguyên.
Class: 2 bytes xác định loại truy vấn. Đối với truy vấn Internet, nó sẽ là IN.
Ví dụ: Tên miền mydiv.mycorp.com được mã hóa như sau: X „05‟ “mydiv” X „06‟ “mycorp” X „03‟ “com” X „00‟
Do đó các mục trong phần câu hỏi cho mydiv.mycorp.com yêu cầu 22bytes: 18bytes để lưu trữ tên miền, 2 bytes cho Qtype và 2 bytes cho các lĩnh vực Qclass.
Phần trả lời, quyền hạn, và tài nguyên bổ sung ( Answer, authority, and additional resource sections)
Có ba phần chứa có chứa một số biến các bản ghi tài nguyên. Các số được quy định trong trường tương ứng của header.
32
Hình 7: DNS: Định dạng mục bản ghi trả lời.
Trong đó các trường trước trường TTL có cũng ý nghĩa như mục câu hỏi và:
- TTL: giá trị tim-to-time 32 bit trong vài giây cho mỗi bản ghi. Điều này định nghĩa nó được coi là hợp lệ trong bao lâu.
- Rdlength: Chiêu dài 16-bit cho trương Rdata.
- Rdata: Một chuỗi chiều dài biến giải thích sự phụ thuộc vào trường Type
Nén thông điệp ( Message compression)
Để giảm kích thước thông điệp, một chương trình nén được sử dụng để loại bỏ sự lặp lại của tên miền trong các RRs khác nhau. Bất kỳ tên miền trùng lặp hoặc danh sách các nhãn được thay thế bằng một con trỏ trỏ tới sự xuất hiện trước đó. Các con trỏ có dạng trường 2 bytes.
33
Trong đó:
- Hai bit đầu tiên phân biệt con trỏ từ một nhãn bình thường, cái mà được hạn chế với chiều dài 63- byte cộng với byte chiều dài trước đó ( trong đó có một giá trí < 64).
- Trường offset quy định một khoảng trống cụ thể từ đầu thông điệp. Trường offset 0 quy định byte đầu tiên là của trường ID trong header.
- Nếu quá trình nén được dùng một trường Rdata của phần trả lời, thẩm quyền, hoặc bổ sung của thông điệp, trường Rdlegth chứa độ dài thực sau khi nén.
Sử dụng định dạng tài nguyên đồng dạng DNS - Using the DNS Uniform Resource Identified (URI).
Một DNS cũng có thế được truy vấn bằng cách sử dụng URI này được định nghĩa trong RFC 4501. Tuân theo các định dạng:
“dns:” + [ “//” + dnsauthority + “:” + port + ”/” ] + dnsname + [ “?” + dnsquery ]
Trong đó:
Dnsauthority: Các máy chủ DNS mà truy vấn được gửi đến. Nếu Dnsauthority trống,
truy vấn được gửi đến máy chủ DNS mặc định.
Dnsname: Tên hoặc địa chỉ IP được truy vấn.
Dnsquery: Kiểu truy vấn được thực hiện. Nó có thể được kết hợp hoạc phân cách bởi
dấu chấm phẩy (;) trong đó:
+ Class: Thường là IN cho Internet, class của truy vấn. + Type: Các loại bản ghi tài nguyên mong muốn.
Ví dụ: Một truy vấn dùng URI để phân giải tên www.myCorp.com tới địa chỉ IP có thể xuất hiện như sau:
dns:www.mycorp.com
Ngoài ra các yêu cầu tương tự có thể được gửi tới máy chủ tại 10.1.2.3 trên cổng 5353 sử dụng:
34
dns://10.1.2.3:5353/www.mycorp.com
Cuối cùng, cùng một truy vấn có thể được thực hiện chỉ định một Class của IN trong một Type của A:
35