Summary
Bài viết này khám phá chi tiết về mDNS và cách thiết lập cũng như sử dụng nó trong mạng IoT. Tôi cảm thấy đây là một chủ đề cực kỳ quan trọng vì nó liên quan đến sự phát triển nhanh chóng của công nghệ IoT trong cuộc sống hàng ngày của chúng ta. Key Points:
- mDNS có thể được tích hợp với các giải pháp Zero Trust để tạo ra một mạng IoT an toàn hơn, chỉ cho phép các thiết bị được ủy quyền tương tác với nhau.
- Trong kiến trúc mạng lưới Mesh, mDNS giúp tự động cấu hình và phát hiện các thiết bị nút, làm cho việc kết nối trở nên dễ dàng và hiệu quả hơn trong môi trường phức tạp.
- Việc tích hợp mDNS với nền tảng đám mây IoT không chỉ tăng cường khả năng quản lý và giám sát mà còn mở rộng khả năng tương tác giữa các dịch vụ khác nhau.
Hiểu về mDNS qua ví dụ
Trong lĩnh vực mạng, sức mạnh đến từ việc trao đổi thông tin bằng một ngôn ngữ chung, điều này không chỉ đúng với con người mà còn cả với các thiết bị. Ngôn ngữ chung chính là phương tiện để phối hợp hành động và tổ chức hiệu quả. Các thiết bị cần phải giao tiếp với nhau bao gồm máy in, máy quét và ngày càng nhiều hơn nữa là các thiết bị Internet of Things (IoT). Những thiết bị này thường hoạt động trên cùng một mạng cục bộ; do đó, chúng cần thông báo sự có mặt của mình, yêu cầu cấu hình cũng như chia sẻ dữ liệu và dịch vụ với những thiết bị khác.
Một điểm đáng chú ý là mDNS sử dụng giao thức UDP để phát hiện các thiết bị trong mạng cục bộ mà không cần phải có máy chủ DNS trung gian. Điều này giúp cho quá trình tự động cấu hình địa chỉ IP cho các thiết bị thông minh trở nên dễ dàng hơn, đồng thời hỗ trợ nhiều loại dịch vụ đa dạng cho hệ sinh thái IoT như in ấn tài liệu hay chia sẻ tệp tin giữa các thiết bị khác nhau trên cùng một mạng. Với khả năng tự động phát hiện và quản lý địa chỉ IP linh hoạt, mDNS thực sự đóng vai trò quan trọng trong môi trường kết nối ngày nay.
Cơ bản về mDNS và Avahi
Kết luận về mDNS và IoT | Thông tin cơ bản | Lợi ích | Ứng dụng |
---|---|---|---|
mDNS là gì? | Hệ thống phát hiện dịch vụ dựa trên DNS trong mạng cục bộ. | Giúp tự động cấu hình thiết bị mà không cần máy chủ DNS trung gian. | Được sử dụng trong các thiết bị IoT như đèn thông minh, camera an ninh. |
Cách hoạt động của mDNS | Sử dụng giao thức UDP trên cổng 5353. | Cho phép phát hiện và quảng bá dịch vụ dễ dàng giữa các thiết bị. | Tích hợp với Matter và Thread trong tự động hóa nhà. |
Các loại bản ghi mDNS | Bản ghi PTR, SRV, AAAA và TXT để quản lý thông tin dịch vụ. | Giúp xác định địa chỉ IP, cổng kết nối và cấu hình dịch vụ một cách hiệu quả. | Cải thiện khả năng tương tác giữa các thiết bị khác nhau. |
Vai trò của Avahi và Wireshark | Avahi giúp quảng bá và tìm kiếm dịch vụ qua mDNS. | Wireshark cho phép theo dõi lưu lượng mạng để phân tích giao tiếp giữa các thiết bị. | Hỗ trợ hiểu rõ hơn về cách thức hoạt động của mạng lưới IoT. |
Triển vọng tương lai của mDNS trong IoT | Tiếp tục phát triển cùng với công nghệ mới như Matter và Thread. | Cải thiện khả năng giao tiếp giữa các thiết bị đa dạng từ nhiều nhà sản xuất khác nhau. | Khuyến khích sự đổi mới trong lĩnh vực tự động hóa gia đình. |
Thiết lập môi trường mDNS
Để tăng cường phần thiết lập môi trường mDNS này, chúng ta cũng nên biết rằng mDNS vận hành rất linh hoạt mà không cần cấu hình phức tạp. Nó hỗ trợ nhiều thiết bị như Raspberry Pi hay ESP8266, giúp người dùng dễ dàng triển khai trong các dự án IoT. Việc cấu hình địa chỉ IP tĩnh cho những thiết bị này cũng khá đơn giản và thực sự hữu ích cho việc duy trì kết nối ổn định trong suốt quá trình hoạt động của dịch vụ.
Ngoài ra, có những công cụ thú vị như Avahi hay Bonjour có thể hỗ trợ bạn rất nhiều trong việc quản lý và phát hiện dịch vụ thông qua mDNS, làm cho quá trình trở nên dễ dàng hơn bao giờ hết.
Cấu hình dịch vụ với Avahi
## Thiết lập công cụ mDNS
Để thiết lập công cụ mDNS cho cả dịch vụ quảng bá trên máy chủ M và khả năng duyệt dịch vụ trên máy chủ C, tôi đã sử dụng Avahi - một bộ công cụ được thiết kế dành riêng cho mDNS.
# Máy chủ M: Cài đặt daemon avahi
sudo apt install avahi-daemon avahi-utils
# Máy chủ M: Cấu hình thông tin dịch vụ bằng cách tạo tệp cấu hình
sudo tee /etc/avahi/services/myservice.service <<'EOF'
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h - Dịch vụ của tôi</name>
<service>
<type>_myservice._tcp</type>
<port>1234</port>
<txt-record>key1=value1</txt-record>
<txt-record>key2=value2</txt-record>
<txt-record>key3=value3</txt-record>
</service>
</service-group>
EOF
# Máy chủ M: Khởi động lại dịch vụ với tệp cấu hình mới
sudo systemctl restart avahi-daemon
# Máy chủ C: cài đặt các công cụ để duyệt tin nhắn mDNS
sudo apt install avahi-utils
Avahi không chỉ giúp quảng bá các dịch vụ mà còn hỗ trợ tìm kiếm chúng trong mạng cục bộ. Điều này thực hiện được nhờ vào giao thức DNS-SD (Service Discovery), cho phép người dùng dễ dàng phát hiện và kết nối đến các dịch vụ có sẵn mà không cần cấu hình phức tạp. Các tham số như `avahi-daemon.conf` cũng như tệp dịch vụ `.service` rất quan trọng để người dùng có thể tùy chỉnh theo nhu cầu của mình, từ đó tối ưu hóa quá trình hoạt động của hệ thống mạng cá nhân hoặc doanh nghiệp.

Tên dịch vụ mDNS và dữ liệu liên quan
1. **Phiên bản**: `
%h - My Service<\/name>` - Đây là một tên dễ nhận diện dành cho người dùng giúp họ nhận biết dịch vụ một cách dễ dàng hơn, ví dụ như "Máy in tầng 2". Tùy chọn `replace-wildcards` cho phép tên máy chủ (`%h`), như "matter-dev", tự động thêm trước "- My Service", tùy chỉnh tên của dịch vụ.
2. **Dịch vụ**: `_myservice._tcp<\/type>` - Loại hình dịch vụ này bắt đầu bằng dấu gạch dưới, theo sau là loại dịch vụ và kết thúc với giao thức "._tcp" hoặc "._udp" (cho tất cả các loại khác). Mã `_myservice._tcp` chỉ ra rằng loại hình dịch vụ là (_myservice) và giao thức (TCP), điều này giúp khách hàng dễ dàng tìm kiếm được dịch vụ này.
Hai thành phần trên kết hợp với tên máy chủ để tạo nên cái mà chúng ta gọi là "`matter-dev - My Service._myservice._tcp.local`". Tên quảng bá này còn được biết đến như "Tên phiên bản Dịch vụ" theo định nghĩa trong RFC 6763, bao gồm ba phần:
- **Phiên bản**: Được mô tả ở trên.
- **Dịch vụ**: Được mô tả ở trên.
- **Miền**: Miền mà trong đó dịch vụ được đăng ký, thường là "local." trong các mạng cục bộ.
Tất cả những yếu tố này cùng nhau tạo thành một Tên phiên bản Dịch vụ hoàn chỉnh phục vụ cho việc khám phá trong môi trường mạng. Tuy nhiên, việc phát hiện một dịch vụ không chỉ dừng lại ở cái tên của nó. Những chi tiết thiết yếu như số cổng tầng truyền tải, tên máy chủ, địa chỉ IP và cấu hình cũng rất quan trọng.
mDNS hoạt động dựa trên nguyên lý rằng các thiết bị có thể tự động phát hiện lẫn nhau mà không cần sự cấu hình tĩnh phức tạp nào. Điều này đặc biệt hữu ích trong các ứng dụng IoT nơi mà nhiều thiết bị cần phải tương tác với nhau một cách linh hoạt và nhanh chóng. Thông qua mDNS, mỗi thiết bị có thể quảng bá thông tin của chính mình tới mạng lưới xung quanh và đồng thời truy cập vào thông tin của các thiết bị khác nhằm phục vụ cho nhu cầu sử dụng hiệu quả hơn.
Khám phá các bản ghi DNS trong mDNS
` và ``. Tất cả thông tin này được liên kết với nhau qua một tập hợp các cấu trúc DNS chính thức, được gọi là bản ghi. Việc chuẩn hóa này cho phép sử dụng các kỹ thuật tự động để truy xuất thông tin dịch vụ từ các thiết bị khác. Đầu tiên, Bản ghi PTR chỉ đến một tên miền liên quan đến phiên bản dịch vụ. Điều này được sử dụng để phát hiện dịch vụ trong DNS-SD. Bản ghi PTR giúp chuyển hướng các yêu cầu tới một tên dịch vụ cụ thể hơn. Thông tin chi tiết hơn về tên dịch vụ đó được lưu trữ trong Bản ghi SRV, nó xác định vị trí của máy chủ cho một dịch vụ cụ thể, bao gồm tên máy chủ mục tiêu, cổng tầng vận chuyển và độ ưu tiên của dịch vụ. Những thông tin này gần như đủ để kết nối với dịch vụ mà bạn cần.
Để hiểu rõ hơn về cách hoạt động của các bản ghi này, có những loại bản ghi khác như A (địa chỉ IPv4), AAAA (địa chỉ IPv6) cũng đóng vai trò quan trọng trong việc xác định thiết bị trong mạng IoT. Mỗi loại bản ghi góp phần vào quá trình nhận diện và truy cập nhanh chóng vào các dịch vụ trên mạng. Ví dụ, bản ghi A sẽ cung cấp địa chỉ IP tương ứng với tên miền, còn bản ghi AAAA thì dành cho địa chỉ IPv6 hiện đại hơn.
Ngoài ra, có nhiều công cụ hữu ích mà bạn có thể sử dụng để kiểm tra và phân tích mDNS records như `avahi-browse`, `dns-sd`, hoặc thậm chí là Wireshark để theo dõi lưu lượng mạng và xem xét chi tiết từng gói dữ liệu giao tiếp giữa các thiết bị trong môi trường IoT.
Phương pháp phát hiện dịch vụ sử dụng avahi-browse
Khi một thiết bị muốn tìm kiếm dịch vụ, nó sẽ bắt đầu bằng cách kiểm tra bản ghi PTR để xác định tên miền của dịch vụ mong muốn. Tiếp theo, nó sẽ truy cập vào các bản ghi SRV để lấy thông tin về cổng và phương thức giao tiếp cần thiết cho việc kết nối đến dịch vụ đó. Cuối cùng, địa chỉ IP của máy chủ sẽ được lấy từ bản ghi AAAA. Tất cả những thông tin này sau đó sẽ được sử dụng cùng với dữ liệu từ bản ghi TXT để hoàn thành quá trình cấu hình và khởi động dịch vụ một cách chính xác.
Như vậy, việc sử dụng các loại bản ghi DNS khác nhau giúp đảm bảo rằng nhiều yếu tố cần thiết cho việc phát hiện và kết nối đến một dịch vụ đều được tổ chức rõ ràng và hiệu quả trong mạng LAN. Điều này không chỉ giúp tiết kiệm thời gian mà còn giảm thiểu khả năng xảy ra sai sót trong quá trình xác định và liên lạc với các dịch vụ khác nhau trên mạng.
Phân tích gói tin mDNS bằng Wireshark
$ avahi-browse -a -r
Kết quả trả về (đã chỉnh sửa để chỉ hiển thị kết quả từ giao diện ens33):
+ ens33 IPv6 matter-dev - My Service _myservice._tcp local=
ens33 IPv6 matter-dev - My Service _myservice._tcp
hostname = [matter-dev.local]
address = [fe80::bb63:fa10:f529:2e86]
port = [1234]
txt = ["key3=value3" "key2=value2" "key1=value1"]
Thông qua lệnh này, bạn có thể thấy được thông tin chi tiết về dịch vụ mà thiết bị đang quảng cáo, bao gồm cả địa chỉ IP và các thuộc tính khác liên quan đến dịch vụ đó.
Chi tiết giao tiếp giữa các thiết bị trong mạng cục bộ
Đầu tiên, gói (5A) thực hiện việc liệt kê các loại dịch vụ bằng cách sử dụng tên ngắn đặc biệt _services._dns-sd._udp.local. Gói thứ hai (5B) cho thấy giao tiếp mDNS diễn ra qua cổng 5353, điều này rất quan trọng vì nó là tiêu chuẩn cho giao thức này. Tiếp theo, ở gói (5C), địa chỉ IPv6 của host C được xác định rõ ràng; điều này giúp trong việc nhận diện và liên lạc giữa các thiết bị trong mạng.
Gói (5D) mang địa chỉ multicast dành riêng cho toàn bộ lưu lượng mDNS, một yếu tố không thể thiếu để đảm bảo rằng thông tin được phát đi đến tất cả các thiết bị đang lắng nghe. Đặc biệt cần chú ý là gói (5E), nơi mà ID giao dịch mDNS không được sử dụng – đây có thể là điểm khác biệt so với một số giao thức khác mà bạn đã từng biết.
Sau đó, ở gói (5F), địa chỉ IPv6 và cổng mDNS của host M cũng được nêu rõ, điều này giúp xác định nguồn gửi phản hồi cho yêu cầu từ host C. Gói tiếp theo (5G) là phản hồi từ host M đối với yêu cầu liệt kê dịch vụ của nó, bao gồm tên dịch vụ mà nó cung cấp. Cuối cùng, trong gói (5H), chúng ta thấy rằng host C đã yêu cầu thông tin chi tiết về dịch vụ của host M và ở gói cuối cùng (5I), thông tin cụ thể về dịch vụ của host M bao gồm cả địa chỉ và cấu hình cũng như cách hoạt động của nó trong mạng lưới.
Tóm lại, sự tương tác giữa các thiết bị qua giao thức mDNS này không chỉ đơn thuần là việc truyền tải dữ liệu mà còn đóng vai trò quan trọng trong việc phát hiện và quản lý các dịch vụ mạng hiệu quả hơn.
Kết luận và hướng đi tiếp theo
## Kết luận
Chúng ta đã khám phá cách thiết lập mDNS, cách thức truyền tải các thông điệp và cách lưu lượng truy cập đến các máy khác qua địa chỉ multicast. Các công cụ Avahi tạo ra và hiển thị quảng cáo dịch vụ, trong khi Wireshark cho phép chúng ta nhìn sâu vào hoạt động của mDNS. Điều này sẽ giúp chuẩn bị cho hai bài viết tiếp theo; bài viết kế tiếp nói về việc Matter sử dụng mDNS, còn bài thứ ba đề cập đến sự chuyển đổi của các quảng cáo mDNS khi di chuyển từ Ethernet sang Thread.
## Tài liệu tham khảo
- Multicast DNS [[RFC 6762]]
- DNS-SD Dịch vụ dựa trên DNS [[RFC 6763]]
Reference Articles
Multicast Domain Name System (mDNS)
Lập trình Arduino kết nối Wifi là khóa học IoT với Arduino nâng cao, giúp các bạn làm quen với các khái niệm về phần truyền và nhận dữ liệu lên Internet ...
Source: OhstemInternet Of Things (IoT) : cho người mới bắt đầu
Phần cứng sử dụng chính là System On Chip (SoC) ESP8266 - có khả năng kết nối WiFi và lập trình được với giá thành rẻ và phổ biến trên thế giới.
Source: GitHub PagesGIẢI PHÁP ĐIỀU KHIỂN TẮC NGHẼN TRONG MẠNG IoT ...
Chi tiết về các giao thức ở nhóm hạ tầng mạng như định tuyến, IPv4/IPv6, 6LoWPAN, WiFi (802.11), ZigBee. (802.15), LTE-A, Z-Wave có trong các tài liệu tiêu ...
Related Discussions