DNS Query Message Format

Giới thiệu
Bài này chúng ta sẽ đi vào phân tích các gói dữ liệu DNS (DNS packet). Chúng ta sẽ được thấy cách mà các thông điệp DNS được định dạng nên cùng với các các tùy chọn (Option) và các biến chứa trong những thông điệp đó. Để hiểu 1 giao thức, bạn phải hiểu thông tin mà giao thức đó mang từ 1 máy đến máy khác.
Bởi vì các định dạng thông điệp DNS có thể khác nhau, tùy thuộc vào đó là truy vấn hay là câu trả lời, nên tôi sẽ chia bài phân tích này thành 2 phần. Phần 1 phân tích định dạng DNS của 1 truy vấn, nói cách khác là sẽ cho thấy gói dữ liệu trông như thế nào khi chúng ta yêu cầu 1 máy chủ DNS phân giải 1 tên miền. Phần 2 phân tích định dạng DNS của 1 câu trả lời, chính là trả lời của máy chủ DNS về truy vấn của chúng ta.

Phân tích DNS - Host Query
Như đã đề cập trong bài trước, 1 truy vấn DNS được tạo ra khi 1 máy cần phải phân giải 1 tên miền thành 1 địa chỉ IP. Kết quả này có được là do việc bạn nhập "www.firewall.cx" trong thanh địa chỉ ở trên trình duyệt web của bạn hoặc chỉ đơn giản là bằng cách chạy 1 chương trình sử dụng Internet và từ đó tạo ra các truy vấn DNS để có thể giao tiếp thành công với máy chủ cần thiết.
Bây giờ tôi sẽ đưa ra 1 ví dụ để các bạn có thể hiểu rõ hơn. Hãy thử xem 1 gói tin có chứa truy vấn DNS trông sẽ như thế nào khi đang được truyền trên mạng:


Đây là gói tin đã được chụp lại và chúng ta sẽ chuẩn bị phân tích nó. Để tạo ra gói tin này, tôi đã gõ "ping www.firewall.cx". Dòng lệnh tạo ra gói tin này, bắt nguồn từ mạng của tôi và điểm đến của nó là 1 name server có địa chỉ ở Úc. Chú ý là cổng đích của gói tin này được thiết lập là 53, chính là cổng mà DNS hoạt động, và giao thức được sử dụng cho truy vấn DNS đó là UDP.



Ethernet 2 là loại phổ biến nhất của Frame được tìm thấy ở trên mạng LAN, trên thực tế nó có thể là loại duy nhất bạn sẽ tìm thấy trong tổng số 95% các mạng và nếu bạn chỉ chạy giao thức TCP/IP cùng với các thiết bị Windows và UNIX. Ở hình trên ta có thể thấy Frame có chứa DNS Section, nó có thể là 1 truy vấn hoặc đáp ứng. Ở đây chúng ta sẽ giả định nó là 1 truy vấn.
Chúng ta sẽ lấy DNS Section ra để phân tích nội dung của nó (đã được thể hiện trong hình có nhãn Capture).
Chúng ta có thể vẽ lại mô hình trên dưới dạng 3D:


Mỗi khối 3D được phân tích trong ô bên trái ở hình dưới đây để bạn có thể hiểu được chức năng của từng trường và DNS Query Section được chụp lại trong ô bên phải:


Tất cả các trường trong DNS Query Section ngoại trừ trường DNS Name (được gạch dưới màu đỏ ở trong ô bên phải hình trên) đã được thiết lập độ dài. Trường DNS Name không được thiết lập độ dài bởi vì độ dài tên miền là khác nhau.
Ví dụ, 1 truy vấn tới www.cisco.com sẽ yêu cầu trường DNS Name nhỏ hơn 1 truy vấn tới support.novell.com đơn giản chỉ vì tên miền thứ 2 dài hơn.

Trường DNS Name
Để chứng minh điều này tôi đã chụp 2 gói tin tới 2 tên miền có độ dài khác nhau mà tôi vừa đề cập đến nhưng bởi vì DNS section trong 1 gói tin không cung cấp trường Length (để hiển thị độ dài của DNS section), nên chúng ta cần phải xét đến UDP Header để tính toán chiều dài của DNS section. Bằng cách trừ đi chiều dài của UDP Header (luôn luôn là 8 bytes) từ số bytes trong trường Length, chúng ta được chiều dài của DNS section:


Hai ví dụ rõ ràng cho thấy trường Length trong UDP Header thay đổi tùy thuộc vào tên miền mà chúng ta đang cố gắng phân giải. UDP Header là 8 bytes trong cả 2 ví dụ và tất cả các trường trong DNS section, ngoại trừ trường DNS Name, luôn là 2 bytes.

Trường Flags/Parameters
Trường Parameter (hay là Flag) là 1 trong những trường quan trọng nhất trong DNS bởi vì nó chịu trách nhiệm cho phép các máy chủ hoặc máy khách biết rất nhiều thông tin quan trọng về các gói tin DNS. Ví dụ, nó có chứa thông tin về việc liệu gói tin DNS là 1 truy vấn hay là 1 đáp ứng (trả lời) và trong trường hợp là 1 truy vấn thì nó là truy vấn đệ quy hay không đệ quy. Điều này là quan trọng nhất bởi vì như chúng ta đã thấy, nó xác định cách máy chủ xử lý truy vấn như thế nào.
Chúng ta hãy cùng đi vào phân tích các cờ và giải thích ý nghĩa của mỗi cờ. Hình dưới đây cho thấy các bit được sử dụng trong truy vấn DNS. Bên phải sẽ là phần giải thích ý nghĩa của các bit.


Như bạn có thể thấy, chỉ có các bit 1, 2-5, 7, 8, 12 được sử dụng trong truy vấn này. Các bit còn lại sẽ là sự kết hợp của các bit dự trữ và các bit được sử dụng trong gói tin đáp ứng. Khi bạn đọc bài "Định dạng thông điệp DNS Respond", bạn sẽ nhìn thấy gói tin tương tự với gói tin truy vấn trên (chính là gói tin trả lời truy vấn trên) và các bit còn lại sẽ được phân tích.

Lược dịch từ bài gốc: Click Here

Bài tiếp theo: DNS Response Message Format








2 nhận xét:

  1. My videos and Videos by mmo5 - Videodl.cc
    Watch my video from your computer or phone. youtube to mp3 player youtube 4.2.1; youtube 0.6.2. 2; youtube 0.6.4; youtube 0.6.3.

    Trả lờiXóa
  2. rất hay, tại sao các kiến thức này, không được đưa vào giảng dạy ở các trường học nghề, đại học...

    Trả lờiXóa