Multicast Domain Name System (mDNS)

Trước khi tìm hiểu về mDNS là gì, ta hãy đi qua định nghĩa của DNS.

DNS là gì?

Khi tên miền (domain) chưa xuất hiện, người ta phải truy cập các trang web bằng cách gõ địa chỉ IP lên trình duyệt. Mà địa chỉ IP thì chẳng dễ nhớ chút nào. Đó là lý do tại sao tên miền được giới thiệu
Tuy nhiên, để gửi yêu cầu đến một trang web, máy tính của bạn vẫn cần phải biết địa chỉ IP của nó. Thế là DNS ra đời để giải quyết vấn đề này. Nó là viết tắt của Domain Name System, là nơi để ánh xạ tên miền của trang web sang địa chỉ IP của nó. Trên Internet, có rất nhiều máy chủ DNS. Mỗi máy chủ DNS có một danh sách dài các tên miền và địa chỉ IP tương ứng của chúng.
Bạn có thể so sánh DNS như danh bạ điện thoại, thay vì phải nhớ số giờ đây bạn chỉ cần tra cứu tên người cần liên lạc.
mdns là gì

mdns là gì

Khi bạn truy cập một trang web trong trình duyệt, trước tiên nó sẽ gửi một yêu cầu tới máy chủ DNS. Sau khi máy chủ DNS tra cứu và phản hồi lại địa chỉ IP, trình duyệt sẽ gởi yêu cầu đến đúng địa chỉ IP.

mDNS là gì?

Có rất nhiều máy chủ DNS trên Internet, nhưng hầu hết các mạng nội bộ (LAN) không có máy chủ DNS của riêng mình. Điều này có nghĩa là bạn không thể dùng tên miền để truy vấn đến các thết bị trong mạng nội bộ.
Có một cách khác đó là dùng mDNS (Multicast Domain Name System). mDNS sử dụng tên miền với đuôi là .local, ví dụ http: //blockynode.local . Nếu máy tính của bạn cần gửi yêu cầu đến một tên miền có đuôi là .local, nó sẽ gửi một truy vấn multicast đến tất cả các thiết bị khác trên mạng LAN có hỗ trợ mDNS, thiết bị sẽ tự nhận dạng tên miền của chính mình. Sau đó thiết bị có tên phù hợp sẽ phản hồn bằng cách gởi một multicast khác kèm địa chỉ IP của nó. Đến lúc này máy tính của bạn biết địa chỉ IP của thiết bị và có thể gửi các yêu cầu bình thường.

Thiết bị cần chuẩn bị

  • 1 x Node WiFi

Chương trình

Khai báo các thư viện cần thiết:

#include <ESP8266WiFi.h>                // Thư viện dùng để kết nối WiFi của ESP8266
#include <ESP8266WiFiMulti.h>           // Thư viện dùng để kết nối WiFi hỗ trợ đa cấu hình của ESP8266
#include <ESP8266mDNS.h>                // Thư viện dùng để thiết lập mDNS

Việc thiết lập tên miền đơn giản rất đơn giản bằng lệnh sau. Tên miền bạn đặt không kèm đuôi .local

MDNS.begin("your_domain");

Bạn dùng Arduino IDE để nạp chương trình sau:

Chú ý: Đối với Blocky Node WiFi bạn nhớ chọn board là NodeMCU 1.0 (ESP-12E Module) trên menu Arduino IDE > Tools > Board

#include <ESP8266WiFi.h>            // Thư viện dùng để kết nối WiFi của ESP8266
#include <ESP8266WiFiMulti.h>       // Thư viện dùng để kết nối WiFi hỗ trợ đa cấu hình của ESP8266
#include <ESP8266mDNS.h>            // Thư viện dùng để thiết lập mDNS

ESP8266WiFiMulti wifiMulti;         // Khởi tạo đối tượng wifiMulti từ ESP8266WiFiMulti

void setup() {
  Serial.begin(115200);             // Thiết lập kết nối Serial để truyền dữ liệu đến máy tính

  wifiMulti.addAP("Blocky AP Home", "password_ap1");        // Kết nối vào mạng WiFi ở nhà
  wifiMulti.addAP("Blocky AP Company", "password_ap2");     // Kết nối vào mạng WiFi ở công ty

  Serial.println("Connecting ...");
  // Chờ kết nối WiFi được thiết lập. Quét tìm mạng WiFi và kết nối với mạng mạnh nhất.
  while (wifiMulti.run() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("\n");
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());      // Cho biết tên mạng WiFi đã kết nối thành công
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());   // Gởi địa chỉ IP đến máy tinh

  if (!MDNS.begin("blockynode")) {  // Khởi tạo mDNS cho blockynode.local
    Serial.println("Error setting up MDNS responder!");
  }
  Serial.println("mDNS responder started");
}

void loop() {}

Sau khi nạp code thành công bạn thử ping đến blockynode.local:

C:\Users\user>ping blockynode.local

Pinging blockynode.local [172.16.0.137] with 32 bytes of data:
Reply from 172.16.0.137: bytes=32 time=30ms TTL=53
Reply from 172.16.0.137: bytes=32 time=31ms TTL=53
Chú ý: Nếu việc ping domain .local không thành công rất có thể máy bạn không hỗ trợ mDNS. Bạn cần cài thêm phần mềm để hỗ trợ sau tùy thuộc vào hệ điều hành bạn đang dùng:

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Fill out this field
Fill out this field
Vui lòng nhập địa chỉ email hợp lệ.
You need to agree with the terms to proceed

1 Bình luận.

  • Đây là khóa học IoT với Arduino phần 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 thông qua kết nối WiFi và nhiều phương thức (protocol) khác nhau.

Menu