DNS Response Message Format

Giới thiệu
Bài trước chúng ta đã được giới thiệu về định dạng của thông điệp truy vấn DNS. Chúng ta đã phân tích khá chi tiết và cho thấy cách 1 máy sử dụng cờ Flags/Parameters để lựa chọn những tùy chọn (Option) khác nhau.
Trong bài này, chúng ta sẽ xem và phân tích những đáp ứng nhận được từ những truy vấn ở bài trước. Những đáp ứng của 1 truy vấn, trong trường hợp của 1 truy vấn đệ quy, đến trực tiếp từ máy chủ DNS mà chúng ta đã gửi truy vấn và trong trường hợp của 1 truy vấn không đệ quy sẽ đến từ các máy chủ DNS gần đây nhất mà các máy khách liên hệ để có được thông tin cần thiết.
Bài này là sự tiếp nối của bài trước đó, vì vậy hãy chắc chắn rằng các bạn đã hiểu được những bài trước của loạt bài DNS này để khi đọc bài này chúng ta có thể hiểu được 1 cách sâu sắc.

Phân tích DNS - Server Response
Đây là câu trả lời (được tô màu xanh) của truy vấn trước đó gửi đến 1 máy chủ DNS ở Úc (139.130.4.4), là nơi tôi yêu cầu phân giải tên miền www.firewall.cx:


Có 1 chi tiết đáng chú ý là thời gian để truy vấn này trở lại với máy của tôi. Thời gian từ lúc mà máy của tôi gửi gói tin cho đến khi nhận được câu trả lời 0.991 giây.
Trong 1 thời gian ngắn mà gói tin di chuyển từ Hy Lạp đến Úc, truy cập máy chủ DNS và máy chủ DNS đó đã gửi các truy vấn của nó cho đến khi tìm được câu trả lời và sau đó tạo ra 1 đáp ứng DNS để gửi trở lại Hy Lạp (nơi mạng gia đình của tôi).
Có rất nhiều yếu tố góp phần nên phản ứng khá nhanh này. Giao thức vận chuyển UDP, là giao thức không yêu cầu quá trình bắt tay 3 bước; tải trọng của máy chủ DNS mà tôi đã gửi truy vấn; tải trọng của các máy chủ DNS khác mà nó đã gửi yêu cầu; tốc độ của tất cả các máy chủ và của chính mạng gia đình và tải trọng chung giữa các router mà gói tin đã phải di chuyển qua để đến được các địa điểm khác nhau.

Như bạn có thể thấy rõ, tất cả những điều này xảy ra chỉ để có 1 truy vấn DNS và 1 đáp ứng DNS. Hãy thử tưởng tượng điều gì xảy ra nếu bạn có 20.000.000 truy vấn DNS xảy ra cùng 1 lúc trên Internet và bạn sẽ thấy giao thức này cùng với công nghệ hạ tầng đã được thiết kế tốt như thế nào.
Dưới đây là 1 gói tin Ethernet II truyền trên mạng nội bộ. Cấu trúc thì giống nhau, nhưng khác biệt là ở kích thước, bất kể đó là 1 truy vấn hay đáp ứng:


Bây giờ, để làm cho việc phân tích DNS section dễ dàng hơn tôi có 2 hình dưới đây, phần truy vấn DNS ở bên phía tay trái, còn phần đáp ứng DNS ở bên phía tay phải. Chúng ta có thể so sánh những gì chúng ta đã gửi và những gì chúng ta nhận được:


Bằng cách so sánh 2 gói tin, bạn có thể thấy rằng có 1 số trường trong đáp ứng DNS (đánh dấu bằng mũi tên màu xanh lá cây) không tồn tại ở trong truy vấn DNS. Chúng ta hãy xem lại từng trường có ý nghĩa gì và phân tích lại 1 lần nữa như chúng ta đã từng làm ở bài trước.
DNS Section trong 1 gói tin đáp ứng lớn hơn và phức tạp hơn so với 1 gói tin truy vấn. 
Đây là DNS Section của 1 đáp ứng DNS:


Chúng ta so sánh hình này với hình ở trong bài trước, và có thể thấy rõ ràng rằng có 3 khối mới đằng sau khối DNS Query Section. Bây giờ chúng ta sẽ tập trung đi vào phân tích 3 khối mới này.

DNS Response Section
Vì các định dạng ở trong mỗi khối 3D là giống hệt nhau cho nên ở đây tôi sẽ không phân tích cả 3 khối, chỉ 1 ít để giúp bạn nắm được vấn đề cốt lõi.
Biều đồ dưới đây sẽ cho bạn thấy nội dung của 3 khối: Answer Section, Authoritative Name Servers và Additional Records.


Chúng ta cần phải hiểu là 3 phần này đều có các trường giống hệt nhau. Mặc dù các thông tin chứa trong chúng có vẻ như là có 1 chút khác nhau, nhưng thực sự thì các trường chính xác là giống nhau.
Trong hình trên, tôi chỉ mở rộng phần đầu tiên (được gạch chân) của phần Answer để bạn có thể so sánh các trường trong đó với các trường có trong hình bên trái.
Hình tiếp theo dưới đây cho ta thấy các mục đầu tiên của cả 2 phần Answer và Authoritative. Chúng ta có thể thấy các trường ở trong 2 mục này là giống nhau, chỉ khác nhau về thông tin chứa trong chúng.


Nếu nhìn kỹ bạn sẽ thấy được trường Resource Data nằm ở đầu tiên. Sự thực là nó có vị trí cuối cùng trong phần này, tuy nhiên chương trình sniffer muốn làm cho dữ liệu dễ đọc hơn và ít gây nhầm lẫn hơn cho nên nó đã đẩy trường đó lên trình bày đầu tiên. Đây cũng là lý do dòng đầu tiên của mỗi mục trong từng phần được sử dụng để cung cấp cho bạn 1 bản tóm tắt nhanh chóng về thông tin thu được.
Ví dụ, nhìn vào dòng 1, mục 1 trong phần Answer (được gạch chân màu xanh lá cây), bạn sẽ có được 1 bản tóm tắt như sau: www.firewall.cx, class INET, cname firewall.
Bạn cũng có thể thắc mắc là tại sao chỉ có 2 mục trong 1 phần?
Liệu có thể có nhiều hoặc ít mục hơn không, tùy thuộc vào tên miền hay chỉ luôn luôn có 2 mục ở trong mỗi phần?
Câu trả lời rất đơn giản như sau: tùy thuộc vào thiết lập cài đặt của Domain sẽ có số mục trong mỗi phần là bao nhiêu. Ví dụ, nếu tôi có nhiều hơn 2 Name Server cho Firewall.cx Domain, bạn sẽ có nhiều hơn 2 mục trong phần Authoritative nameserver và trong các phần khác.
Chúng ta hãy cùng thử xem ví dụ dưới đây:


Như bạn có thể thấy, truy vấn tới IBM.COM cho chúng ta phản hồi có 4 mục trong mỗi phần.
Từng mục trong mỗi phần có các trường giống hệt nhau, nhưng có thông tin/giá trị khác nhau.
Trong tất cả các đáp ứng DNS bạn sẽ tìm thấy các phần có số lượng các mục là giống nhau.
Ví dụ, hình ở trên cho ta thấy các phần Answer, Authoritative nameservers và Additional records đều có 4 mục và điều này không phải là ngẫu nhiên.
Lý do cho việc không phải là ngẫu nhiên này là bởi vì có trường Type, sẽ được giải thích ngay dưới đây.

Trường Type
Trường Type xác định loại thông tin hoặc 1 phần của thông tin mà chúng ta yêu cầu cần biết về 1 Domain. Một ví dụ đơn giản, khi chúng ta có Type = A thì chúng ta sẽ có được địa chỉ IP của domain hoặc là host (nhìn vào phần Answer ở hình trên), trong khi Type = NS, chúng ta sẽ biết được các máy chủ nào có trách nhiệm với Domain đó (nhìn vào phần Authoritative nameservers ở hình trên).
Nhìn vào hình dưới đây, là từ ví dụ đầu tiên của chúng ta (truy vấn cho firewall.cx) chúng ta có thể biết chính xác được trường Type chịu trách nhiệm về dữ liệu chúng ta nhận được về 1 miền như thế nào:


Như các bạn có thể thấy, trường Type ở trong mục đầu tiên của phần Authoritative nameservers được thiết lập là NS, có nghĩa là mục này chứa thông tin về các máy chủ tên có thẩm quyền về miền được truy vấn.
Đi vào mục đầu tiên của phần Additional records, chúng ta có thể thấy trường Type ở đây được thiết lập là A, có nghĩa là các dữ liệu chứa trong mục này là 1 địa chỉ IP cho 1 máy cụ thể nào đó.
Dưới đây là bảng mô tả về các giá trị khác nhau trong trường Type, nó sẽ cung cấp cho các bạn một cái nhìn sâu sắc về các thông tin mà chúng ta yêu cầu và nhận được về 1 Domain bất kỳ:


End!

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











1 nhận xét: