Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Đặt tên khi không có máy chủ DNS

    Tác giả:
    Trần Lâm Đăng Khoa

    ĐẶT TÊN KHI KHÔNG CÓ MÁY CHỦ DNS

    1. Không gian tên Zeroconf:
    - Để đặt tên cho các thiết bị tham gia vào mạng cục bộ. Zeroconf sử dụng công nghệ của DNS để đặt tên cho các thiết bị trong mạng. Điểm khác biệc chủ yếu giữa các thiết bị đặt tên bằng cơ chế của Zeroconf và các thiết bị đặt tên bằng DNS server là trong mạng Zeroconf có thể có hoặc không có sự tồn tại của máy chủ DNS. Khi máy chủ DNS không tồn tại thì các thiết bị vẫn hoạt động tốt và vẫn lấy được tên tham chiếu.
    1.1 Miền local:
    - Để phân biệt các tên miền cục bộ so với các tên miền đã tồn tại khác, Zeroconf cung cấp một tên miền cấp cao giả có tên là .local. Giống như các giá trị địa chỉ trong miền 169.254 chỉ là các địa chỉ cục bộ và không phải là địa chỉ duy nhất trên thế giới các tên miền thuộc miền .local cũng chỉ mang ý nghĩa cục bộ. Điểm thuận lợi của các tên miền này là không cần phải có người đứng ra cấp quyền và không phải trả tiền để có thể sử dụng chúng. Tuy nhiên, cũng chính vì điều này mà chúng ta cũng không có quyền chiếm giữ một tên nào mà chúng ta thích và không cho người khác sử dụng nó, nhưng nó cũng bao gồm một vài quy tắc cho phép các thiết bị phát hiện ra sự xung đột khi mà có hai thiết bị trùng tên tại cùng một thời điểm. Quy tắc đặt tên chính là chọn một tên sao cho nó có thể gợi nhớ đến chức năng của các thiết bị trong mạng.
    - Cơ chế tìm kiếm các tên trong nhóm .local luôn là multicast. Còn trong cấu trúc chuẩn của DNS. Các tên luôn được truy vấn bằng các gói tin unicast gửi trực tiếp đến máy chủ DNS. Vào một thời điểm nào nó, nếu máy chủ DNS hư hoặc không thể kết nối được đến Internet để truy vấn một địa chỉ nằm ngay trong mạng Ethernet của bạn. Lúc này người sử dụng có thể chọn cơ chế multicast để truy vấn trực tiếp đến các thiết bị có tên tương ứng. Các thiết bị giao tiếp ngang hàng với nhau và điểm đặt biệt là vẫn có thể truy cập đến một thiết bị dựa trên tên mà máy chủ DNS đã cung cấp cho nó trước đó.
    1.2 Multicast DNS:
    - Multicast DNS (mDNS) là một dịch vụ DNS chạy trên từng máy, đảm bảo cho quá trình phân giải tên trong mạng cục bộ. Các yêu cầu được gửi đến một địa chỉ Multicast và nếu thiết bị nào có tên trùng với tên yêu cầu thì sẽ trả lời thông tin phản hồi lại cho phía gửi.
    - Bất cứ truy vấn nào kết thúc bằng .local đều gửi đến địa chỉ 224.0.0.251 là địa chỉ IPv4 dành riêng cho multicast DNS. Trong IPv6 địa chỉ multicast là FF02::FB .Các khái niệm về phân giải địa chỉ là như nhau trong các câu truy vấn mDNS kể cả trong IPv4 hay IPv6.
    - Bởi vì các địa chỉ 224.0.0.251 và FF02::FB là các địa chỉ dành riêng cho liên kết cục bộ nên nó sẽ không bao giờ được gửi ra ngoài phạm vi của một mạng liên kết nội hoặc gửi từ bên ngoài vào trong mạng này.
    - Các câu truy vấn Multicast DNS bao gồm ba loại: một câu truy vấn có một câu trả lời, một câu truy vấn có nhiều câu trả lời và câu truy vấn ‘ongoing’.
    - Câu truy vấn thuộc loại đầu tiên thực hiện như sau: DNS client thực hiện truy vấn thông qua cổng 5353, nếu tên kết thúc bằng local thì địa chỉ của DNS server được đặt là 224.0.0.251. Khi có thông tin trả lời đến DNS client xử lí nó như là các yêu cầu DNS thông thường. Nếu không có câu trả lời thì DNS client gửi yêu cầu truy vấn thêm vài lần khác như là Unicast DNS thông thường.
    - Dạng thứ hai một câu truy vấn có nhiều hơn một câu trả lời. DNS client gửi yêu cầu đến 224.0.0.251. Khi DNS client gửi truy vấn đi thì nó nhận đươc nhiều hơn một câu trả lời. Lúc này DNS client phải chờ trong một khoảng thời gian để có thể nhận hết tất cả các gói tin đến. Bởi vì DNS client phải gửi lại câu truy vấn nhiều lần nêu sẽ có trường hợp cùng một nút mạng đáp ứng nhiều hơn một lần. Để tránh trường hợp này, mỗi nút mạng có một danh sách gọi là Known Answer. Nếu một nút mạng đã trả lời câu truy vấn đến từ địa chỉ nào đó, nó sẽ đánh dấu lại để lần sau không gửi tiếp thông tin này đi nữa.
    - Loại thứ ba là các câu truy vấn liên tục.Nếu muốn xem danh sách các thiết bị trong mạng, chúng ta thực hiện truy vấn đến mDNS . Sau khi có các kết quả trả về trong một khoảng thời gian nhất định, có thể sau khoảng thời gian này, danh sách này đã không còn phản ánh được trạng thái hiện tại.Vì vậy việc duy trì thông tin cập nhật bằng cách gửi tuần tự các yêu cầu truy vấn là cần thiết. Mỗi record được trả về có thời gian tồn tại nhất định trước khi bị xóa khỏi cache của client và thực hiện truy vấn lại.
    - Do các câu truy vần đến và đi trong cùng một địa chỉ multicast nên khi mạng có sự thay đổi. một đối tượng trong mạng gửi câu truy vần đến địa chỉ multicast và nhận được các câu trả lời thì các thiết bị khác tuy rằng không gửi câu truy vấn nhưng vẫn có thể nhận được câu trả lời và cập nhật lại trạng thái của mạng. Điều này làm giảm băng thông cần thiết để phục vụ cho multicast DNS và tăng khả năng cập nhật thông tin của các thiết bị.

    (còn tiếp)
    Last edited by thanhsang_truong; 24-10-2006, 06:21 AM.

  • #2
    2. Giảm tải cho mạng:
    - Có một vài phương pháp giúp ngăn chặn sự tiêu tốn băng thông trên mạng do gửi các thông tin dư thừa.
    - Một trong số đó chính là duy trì một danh sách các câu trả lời đã biết để tránh gửi lại thông tin đi. Một cách khác là khi một thiết bị gửi câu truy vấn DNS vào trong mDNS nó gửi luôn thông tin trong bảng Known Answer của nó. Mỗi trường trong bảng này có chứa một giá trị thời gian nhất định. Một thiết bị trả lời các yêu cầu mDNS chỉ gửi thông tin đi khi mà trường chứa thông tin của nó có giá trị thời gian là nhỏ hơn một nửa so với giá trị quy định. Nếu bảng Known Answer có quá nhiều giá trị thì bit TC trong gói tin sẽ được bật lên cho biết là gói tin tiếp theo sẽ chứa một phần tiếp của bảng Known Answer.
    - Thêm nữa là khi một câu truy vấn được gửi đến địa chỉ multicast, câu trả lời sẽ không chỉ gửi đến một thiết bị duy nhất mà toàn bộ các thiết bị đều nhận được câu trả lời. Các thiết bị cần biết thông tin này sẽ cập nhật câu trả lời này mà không cần phải hỏi lại lần thứ hai. Nếu một thiết bị ra khỏi mạng. Nó sẽ gửi một gói tin đến địa chỉ multicast với giá trị thời gian là 0.Điều này khiến cho các thông tin trong cache của các thiết bị khác bị loại bỏ. Nếu thiết bị không được tắt đúng quy định hay gặp sự cố thì tên của nó vẫn bị xóa khỏi cache của các thiết bị khác sau khi giá trị thời gian đếm về 0 nhưng sẽ lâu hơn một ít so với khi nhận gói tin có giá trị là 0.
    3. Xác định tên cục bộ:
    - Một khi thiết bị chọn được một tên làm tên đại diện, nó tạo một trường trong mDNS cục bộ và ánh xạ địa chỉ IP vào trong tên này. Sau khi tạo một trường để thử, chúng ta cần xem xét xem trong mạng đã có thiết bị nào có cùng tên này hay không. Lúc này cần gửi một ca7u truy vấn mDNS để xác định cho tên mà chúng ta chọn lựa. Câu truy vấn này có thể là HINFO để tìm thông tin về tên thiết bị, hoặc T_ANY để tìm bất cứ thông tin nào có chứa tên mà chúng ta quan tâm.
    - Nếu không có bất cứ sự xung đột nào xảy ra, thiết bị chờ trong khoảng thời gian là 250ms sau khi gửi yêu cầu thứ nhất, tiếp tục gửi yêu cầu thứ hai và lại chờ 250ms trước khi gửi yêu cầu thứ ba. Sau thời gian chờ tổng cộng của ba câu truy vấn là 750ms . Nếu không có sự tranh chấp về tên thiết bị sẽ sử dụng tên này làm tên chính thức cho nó và bắt đầu quá trình quảng bá tên của mình. Nếu trong quá trình xác thực có bất cứ một tranh chấp nào thì thiết bị sẽ chọn một tên mới và bắt đầu quá trình truy vấn lại.
    - Nếu hai thiết bị cùng một tên truy vấn trong cùng một thời điểm, không ai trong số chúng trả lời cho câu truy vấn của phía bên kia vì lúc này chúng chưa xác địch được tên mình. Nếu lỗi này xảy ra mDNS có định nghĩa một trường mới để giải quyết xung đột này. mDNS sẽ so sánh các giá trị trong cả hai record theo thứ tự từ điển. Cái nào có giá trị lớn hơn thì sẽ tiếp tục quá trình nhận tên, thiết bị còn lại sẽ quay lại chọn một tên khác.
    4. Quảng bá tên miền:
    - Trong bước này, mDNS sẽ gửi một số các câu trả lời vào trong mạng với mục đích là cập nhật lại giá trị cache của các thiết bị khác trong mạng. Quá trình này thường nhiều hơn một lần để hạn chế số các gói bị mất trong quá trình gửi.
    Khi nhận được gói tin này các thiết bị lân cận sẽ xóa các trường cũ ra khỏi cache của nó và cập nhật các giá trị mới vào.
    - Mỗi thiết bị phải luôn kiểm tra tên của mình trong suốt thời gian nó hoạt động. Nếu phát hiện một thiết bị khác trong mạng sử dụng cùng giá trị tên này thì cả hai thiết bị đặt lại giá trị của các trường về trạng thái tìm kiếm và bắt đầu quá trình đặt tên lại.
    5. Cấu trúc của thông điệp Multicast DNS:
    - Cấu trúc thông điệp của mDNS gần giống như thông điệp của Unicast DNS, nhưng cũng tồn tại một vài điểm khác biệt:
    • Các gói tin Unicast DNS bị giới hạn trong 512 byte trong khi các gói tin Multicast có thể lên đên 9000 byte. Nhưng các khuyến nghị cho rằng chỉ nên sử dụng các gói tin mDNS nhỏ để có thể chứa vừa trong một gói tin IP mà không phải gây ra hiện tượng phân mảnh. Trong mạng Ethernet thì giá trị này vào khoảng 1472 byte vì kích thước tối đa của một khung Ethernet là 1500byte.
    • Multicast DNS sử dụng cổng 5353 UDP để liên lạc trong mạng thay vì cổng 53 như DNS.
    • Multicast DNS sử dụng UTF-8 để mã hóa các thông điệp truyền đi. Các thông điệp có trong Unicast DNS thì được mã hóa bằng nhiều dạng khác nhau để bảo đảm tính tương thích, còn mDNS được xây dựng mới hoàn toàn nên không cần phải quan tâm đến tương thích ngược.
    • Unicast DNS chỉ cho phép chứa một câu truy vấn trong một gói tin, Multicast DNS cho phép các gói tin có thể chứa rất nhiều mẫu tin khác nhau.
    - MultiDNS mượn một bit cao nhất trong trường rrclass và định nghĩa nó thành cờ cache flush, và cờ này có tác dụng thông báo đến phía bên nhận rằng các record đang tới sẽ thay thế các record hiện đang có trong cache thay vì thêm vào bên cạnh các record cũ.

    Comment

    Working...
    X