ローカルエリアネットワークUDPマルチキャストとデバイス自動検出テスト

3727 ワード

AirKiss、SmartConfigのようなネットワーク応用技術に加えて、従来のTCP/UDP接続をテストするために、できるだけ手元のオープンソースハードウェアを利用する必要があります.その中でUDPのマルチキャストはユビキタスネットワーク応用において一定の重要な意義を持っている.主なUDPマルチキャストアプリケーションプロトコルは以下のとおりです.
  • mDNS
  • SSDP/uPnP
  • Apple AirPlay
  • DLNA、各種メディアプレーヤー
  • IPマルチキャストとIGMP


    IGMP(Internet Group Management Protocol)プロトコルは、あるサブネット内にあるマルチキャストグループに送信されたデータに興味を持つクライアントがいることをルータに伝え、そのグループのデータが到着すると、ルータは興味のあるすべてのクライアントに転送される.

    Windowsの失敗原因


    Windowsホストが参加するIPマルチキャストはすべて失敗していることがわかりました.まずWiFiルータがIGMPとuPnPサービスを禁止しているのではないかと疑って、テストしてみると、同じWiFiローカルエリアネットワーク内では、テレビや携帯電話のメディアプッシュに問題はありません.
    しかし、WindowsのBonjourサービスを開始し、ファイアウォールを閉鎖しても失敗した.Windows 10およびUbuntuサブシステムがマルチキャストメッセージをリスニングおよびプッシュできない要因として、Windowsのネットワーク構成に依然として問題があると推測される.Windows 10に付属のUbuntuサブシステムは、オペレーティングシステムのファイアウォールによって制御されており、マルチキャストメッセージの送受信ができない.エラー:
    allankliu@allankliu-HP:/mnt/c/Users/allankliu$ iperf -s -u -B 224.0.67.67 -i 1
    bind failed: Cannot assign requested address
    

    Windowsで動作する仮想マシンは、ネットワーク構成がブリッジモードであるため、Ubuntu仮想マシンはルータから直接IPアドレスを取得することができ、Windowsファイアウォールは機能しません.マルチキャストメッセージを送受信できます.
    今朝Ubuntu 12.04(WindowsのVirtualBoxの仮想マシン)とベリーパイRaspbianをテストしましたが、Linux間のマルチキャストには何の問題もありませんでした.テストツールはiperfを使用しており、次はPython socketを使用してテストします.

    iperf for Linux

    pi@raspberrypi ~ $ iperf -c 224.0.67.67 -u --ttl 5 -t 10
    ------------------------------------------------------------
    Client connecting to 224.0.67.67, UDP port 5001
    Sending 1470 byte datagrams
    Setting multicast TTL to 5
    UDP buffer size:  160 KByte (default)
    ------------------------------------------------------------
    [  3] local 192.168.1.25 port 35294 connected with 224.0.67.67 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec
    [  3] Sent 893 datagrams
    
    allankliu@ubuntu-server-vm:~$ iperf -s -u -B 224.0.67.67 -i 1
    ------------------------------------------------------------
    Server listening on UDP port 5001
    Binding to local address 224.0.67.67
    Joining multicast group  224.0.67.67
    Receiving 1470 byte datagrams
    UDP buffer size:  160 KByte (default)
    ------------------------------------------------------------
    [  3] local 224.0.67.67 port 5001 connected with 192.168.1.25 port 35294
    [ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
    [  3]  0.0- 1.0 sec   128 KBytes  1.05 Mbits/sec   1.017 ms    0/   89 (0%)
    [  3]  1.0- 2.0 sec   129 KBytes  1.06 Mbits/sec   0.972 ms    0/   90 (0%)
    [  3]  2.0- 3.0 sec   128 KBytes  1.05 Mbits/sec   0.723 ms    0/   89 (0%)
    [  3]  3.0- 4.0 sec   128 KBytes  1.05 Mbits/sec   6.029 ms    0/   89 (0%)
    [  3]  4.0- 5.0 sec   128 KBytes  1.05 Mbits/sec   1.236 ms    0/   89 (0%)
    [  3]  5.0- 6.0 sec   128 KBytes  1.05 Mbits/sec   2.518 ms    0/   89 (0%)
    [  3]  6.0- 7.0 sec   129 KBytes  1.06 Mbits/sec   1.097 ms    0/   90 (0%)
    [  3]  7.0- 8.0 sec   128 KBytes  1.05 Mbits/sec   1.024 ms    0/   89 (0%)
    [  3]  8.0- 9.0 sec   128 KBytes  1.05 Mbits/sec   0.697 ms    0/   89 (0%)
    [  3]  9.0-10.0 sec   128 KBytes  1.05 Mbits/sec   1.586 ms    0/   89 (0%)
    [  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec   1.577 ms    0/  893 (0%)
    

    以上はベリーパイ、Ubuntu収、逆も同様です.

    ESP8266


    マルチキャストベースのmDNS/SDPがIoTとして最大のメリットは、この2つのサービスを通じて、会社、家庭、工業、農業、軍事など、地元のIoT設備生態を構築できることです.いずれもIPv 4/v 6マルチキャストにより自動アクセスを実現し、その後、TCP/UDPのユニキャストを利用して後続の認証と協同を行うことができる.
    ESP 8266にはmDNS/SDPの例が付属している.マルチキャストに興味があるのは、自分が製品を作るための実験です.

    iperfの他のバージョン


    iperfはフランス人が書いたもので、最初のLinuxのほか32 bit/64 bit Windows、Android、iOS、Macなど、主流プラットフォームがサポートされています.Chrome/Android/iOSモバイル側のJavaScript runtimeがマルチキャストをサポートしている場合は、Java/C/C+/Pythonの参加を必要としなくてもいいです.