记一次Multicast DNS(mdns)的问题-(linux 下ifconfig),mdnsifconfig


前言:近期在查询mdns的问题过程一波三折,问题总结下来可以分为三块,都是比较基础性的问题:

1.网关ifconfig查询地址

2.多个程序同时占用一个端口号占用编码问题

3.mdns协议及实现源码

mdns是用于局域网发现的一种协议,网关搭载的linux系统,首先得确定其使用的是哪个地址作为通讯,说一个最简单的指令:ifconfig,虽然早就知道这个指令,但是其实这个指令包含比较多的基础知识。

用我使用的openwrt路由器输入ifconfig:

br-lan    Link encap:Ethernet  HWaddr 04:A1:51:9A:03:67  
          inet addr:198.100.100.1  Bcast:198.100.100.255  Mask:255.255.255.0
          inet6 addr: fdbb:e076:9029::1/60 Scope:Global
          inet6 addr: fe80::6a1:51ff:fe9a:367/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:37358673 errors:0 dropped:0 overruns:0 frame:0
          TX packets:49805372 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:10001210378 (9.3 GiB)  TX bytes:49536338006 (46.1 GiB)

eth0      Link encap:Ethernet  HWaddr BE:7F:7D:5D:09:D9  
          inet6 addr: fe80::bc7f:7dff:fe5d:9d9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:71274265 errors:0 dropped:0 overruns:383 frame:0
          TX packets:67972711 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:23375869 (22.2 MiB)  TX bytes:4047624223 (3.7 GiB)
          Interrupt:4 

eth0.1    Link encap:Ethernet  HWaddr BE:7F:7D:5D:09:D9  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:27485423 errors:0 dropped:0 overruns:0 frame:0
          TX packets:32246955 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:8388027931 (7.8 GiB)  TX bytes:32142311436 (29.9 GiB)

eth0.2    Link encap:Ethernet  HWaddr 04:A1:51:9A:03:68  
          inet addr:193.168.1.125  Bcast:193.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::6a1:51ff:fe9a:368/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:43788842 errors:0 dropped:0 overruns:0 frame:0
          TX packets:35727507 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:46186987470 (43.0 GiB)  TX bytes:10288278423 (9.5 GiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:10489 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10489 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1066479 (1.0 MiB)  TX bytes:1066479 (1.0 MiB)

wlan0     Link encap:Ethernet  HWaddr 04:A1:51:9A:03:67  
          inet6 addr: fe80::6a1:51ff:fe9a:367/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4839004 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5852922 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:670518236 (639.4 MiB)  TX bytes:1589348208 (1.4 GiB)

wlan1     Link encap:Ethernet  HWaddr 04:A1:51:9A:03:69  
          inet6 addr: fe80::6a1:51ff:fe9a:369/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5443036 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9474688 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1115674576 (1.0 GiB)  TX bytes:1268032438 (1.1 GiB)

此处br-lan,eth0,eth0.1…代表的是什么意思呢?

通过查阅,知道了其实在系统文件(network ,wireless)中针对有线和无线早有配置。

root@OpenWrt:/etc/config# cat network 

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fdbb:e076:9029::/48'

config interface 'lan'
        option ifname 'eth0.1'
        option force_link '1'
        option type 'bridge'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option macaddr '04:a1:51:9a:03:67'
        option ipaddr '198.100.100.1'

config interface 'wan'
        option ifname 'eth0.2'
        option proto 'dhcp'
        option macaddr '04:a1:51:9a:03:68'

config interface 'wan6'
        option ifname 'eth0.2'
        option proto 'dhcpv6'

config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'switch0'
        option vlan '1'
        option ports '0t 1 2 3 4'

config switch_vlan
        option device 'switch0'
        option vlan '2'
        option ports '0t 5'

root@OpenWrt:/etc/config# cat wireless 

config wifi-device 'radio0'
        option type 'mac80211'
        option hwmode '11g'
        option path 'platform/ar934x_wmac'
        option htmode 'HT20'
        option txpower '22'
        option country 'US'
        option channel '6'

config wifi-device 'radio1'
        option type 'mac80211'
        option channel '36'
        option hwmode '11a'
        option path 'pci0000:00/0000:00:00.0'
        option htmode 'HT20'
        option txpower '14'
        option country 'US'

config wifi-iface
        option device 'radio1'
        option network 'lan'
        option mode 'ap'
        option ssid 'jthlw-cj5G'
        option encryption 'psk-mixed'
        option key '11223344'

config wifi-iface
        option device 'radio0'
        option mode 'ap'
        option network 'lan'
        option ssid 'jthlw-cj'
        option encryption 'psk-mixed'
        option key 'cjcjcj12345'

首先粘贴一张盗版的openwrt的架构:

\

网关的两个网卡:eth0,eht2分别为一个有线一个无线网卡,这是两个真实的网卡,是有对应的mac地址的。

通过配置

config interface 'lan'

       option ifname 'eth0.1'

       option force_link '1'

       option type 'bridge'

       option proto 'static'

       option netmask '255.255.255.0'

       option ip6assign '60'

       option macaddr '04:a1:51:9a:03:67'

       option ipaddr '198.100.100.1'

 

config interface 'wan'

       option ifname 'eth0.2'

       option proto 'dhcp'

       option macaddr '04:a1:51:9a:03:68'

可以看出:eth0是有线网卡,eth0.1,eth0.2从上面通过switch虚拟出来,eth0.1对应LAN口,eth0.2对应WAN口,其地址都可以手动修改。

而radio0, radio1对应的是无线网卡(2.4G ,5G)

而br-lan是虚拟出来的,用于统一管理LAN

root@OpenWrt:/etc/config# brctl show
bridge name     bridge id               STP enabled     interfaces
br-lan          7fff.04a1519a0367       no              eth0.1
                                                        wlan1
                                                        wlan0

所以可以看出,eth0.2用于WAN口,其上一级的IP为:193.168.1.125;eth0.1用于管理LAN口,子LAN口的IP都由198.100.100.1进行分配。

(以上只是自己对网关很浅的一些认识,更多的可以关注下面引用的博客,并且诸如防火墙(firewall的设置可以参见:、etc/config 下面的firewall文件)))

相关内容