Networking

用於檢測網路中設備的協議(或服務發布/發現)

  • September 27, 2012

我們將一些嵌入式設備連接到網路中。我現在正在尋找的是一種查找設備 IP 並辨識它們的方法。我們使用 Windows PC,我即將編寫一個 C# 工具來執行此操作。

  1. 我考慮過發送一個 udp 廣播,並且在 ack 中,即設備的 ip,這意味著設備需要一個守護程序執行來分配一個 ip。
  2. 在設備上執行服務(如列印機),並在 PC 上查找服務。

我讀到了一些東西,比如 apipa、zeroconf、ipv4 本地連結、bonjour、dns-sd、mdns、bonjour;他們可以自動分配 IP 並在網路中發布服務。

我的問題是,有人可以推薦我什麼對我的任務有好處嗎?- 協議或服務的資源(記憶體/cpu 使用)使用率應該很低。

  • 有一些標準協議可以使用嗎?

  • DNS 是一個好主意,還是只是為了查找設備的 IP 而消耗資源?

  • 當周圍沒有 dhcp 伺服器時也應該工作。

編輯:澄清一下:IP配置是自動的。需要關注的問題是如何告訴 PC 網路中的哪個 IP(或者這個花瓶中的直接連接只有一個)屬於設備(身份)。

我的問題是,有人可以推薦我什麼對我的任務有好處嗎?- 協議或服務的資源(記憶體/cpu 使用)使用率應該很低。- 有一些標準協議可以使用嗎?

在乙太網上檢測設備(及其屬性,例如管理 IP 地址)的標準方法是使用LLDP

您可以在此處找到 lldp 守護程序列表

乙太網 Vlan 中的所有主機都將看到 LLDP 公告,因為它們被發送到多播 MAC 地址;這也意味著 LLDP 公告的範圍僅限於一個 Vlan。如果您需要跨 Vlan 的設備註冊和檢測,則需要建構自己的 IP 公告協議……UDP 將是傳輸的不錯選擇。

DNS 是一個好主意,還是僅僅為了查找設備的 IP 而消耗資源?

如果您只是在尋找一個 IP 地址,而不關心您是否能判斷該設備是否是您的嵌入式系統之一,您可以使用mDNS;但是,這樣做的風險更大,因為您無法保證不會在客戶 LAN 中發生命名空間衝突。

如果客戶沒有 DHCP 伺服器,OP 的嵌入式系統應該如何獲得 IPv4 地址?

如果 DHCP 伺服器不可用,RFC 3330會分配 169.254.0.0/16 用於單鏈路上的通信。經過反思,這可能是最安全的地址塊;但是,您的公司應該鼓勵您的客戶自己使用 DHCP 分配地址,而不是在 169.254.0.0/16 子網中進行某種形式的自動配置。

如何在 169.254.0.0/16 內分配單個 IP 地址是一個我們無法為您決定的問題……有幾種可能性:

  • 通過散列您的 mac-address 值來分配 169.254.0.0/16 內的特定地址,這樣在任何客戶的 vlan 上,您的系統的預期最大數量不太可能發生衝突
  • 偵聽系統的多個 LLDP hello 間隔,並從 169.254.0.0/16 分配一個尚未使用的地址

引用自:https://serverfault.com/questions/432129