1. 程式人生 > >【玩轉開源】BananaPi R2 —— 第二篇 Openwrt 網口配置分析

【玩轉開源】BananaPi R2 —— 第二篇 Openwrt 網口配置分析

sign ati arr asi 1.0 tran spa 們的 errors

上次和大家分享了如何燒錄和安裝Openwrt到BananaPi R2,運行Openwrt的R2目前就具備路由器的功能了,這次我們來看看R2運行Openwrt的性能如何,同時也會講解一些常用的網絡知識。

首先看一下硬件上的設計:

技術分享圖片

可以看出硬件上,R2設計了一個wan口和4個lan口;

這裏可能有人會有疑問,什麽是wan口,什麽是lan口?
wan(Wide Area Network)表示廣域網,lan(Local Area Network)表示局域網;簡單的講就是wan口是連接Internet上網用的,lan口是R2的局域網口。

接下來,我們再來看一下軟件,執行命令“ifconfig”

root@LEDE:/# ifconfig
br-lan    Link encap:Ethernet  HWaddr 6A:2D:BB:A5:19:51  
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0
carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) eth0 Link encap:Ethernet HWaddr 6A:2D:BB:A5:19:51 inet6 addr: fe80::682d:bbff:fea5:1951/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0
overruns:0 frame:0 TX packets:17 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:1834 (1.7 KiB) Interrupt:211 eth1 Link encap:Ethernet HWaddr DA:65:D4:6A:B6:96 inet6 addr: fe80::d865:d4ff:fe6a:b696/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:187 errors:0 dropped:0 overruns:0 frame:0 TX packets:44 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:61769 (60.3 KiB) TX bytes:4958 (4.8 KiB) Interrupt:211 lan0 Link encap:Ethernet HWaddr 6A:2D:BB:A5:19:51 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) lan1 Link encap:Ethernet HWaddr 6A:2D:BB:A5:19:51 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) lan2 Link encap:Ethernet HWaddr 6A:2D:BB:A5:19:51 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) lan3 Link encap:Ethernet HWaddr 6A:2D:BB:A5:19:51 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 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:28 errors:0 dropped:0 overruns:0 frame:0 TX packets:28 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:2364 (2.3 KiB) TX bytes:2364 (2.3 KiB) wan Link encap:Ethernet HWaddr DA:65:D4:6A:B6:96 inet addr:192.168.2.144 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::d865:d4ff:fe6a:b696/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:187 errors:0 dropped:0 overruns:0 frame:0 TX packets:37 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:58403 (57.0 KiB) TX bytes:3774 (3.6 KiB)

命令執行完後可以看到R2有1個wan,4個lan,1個網橋br-lan,2個網卡eth0,eth1,1個本地環回lo網口;

這裏註意看每個網口的HWaddr即mac地址,可以發現wan的HWaddr與eth1是一樣的,br-lan,lan0~lan3的HWaddr與eth0是一樣的,由此可初步斷定,wan口是由網卡eth1生成的虛擬網卡,br-lan和lan0~lan3則是由eth0生成的;接下來再查看一下網口配置文件 "/etc/config/network" 來確定網口是如何配置的,是否和我們的初步判斷是一致的;

root@LEDE:/# cat /etc/config/network 
config interface loopback
        option ifname lo
        option proto static
        option ipaddr 127.0.0.1
        option netmask 255.0.0.0

config interface lan
        option type bridge
        option ifname lan0 lan1 lan2 lan3
        option proto static
        option ipaddr 192.168.1.1
        option netmask 255.255.255.0
        option ip6assign 60

config interface wan
        option ifname wan
        option proto dhcp

從配置文件可以看出,一共定義了3個網口 loopback,lan,wan;lan的類型(option type)是網橋(bridge),一共定義了4個虛擬網口(option ifname ‘lan0 lan1 lan2 lan3‘),采用靜態IP(option proto ‘static‘);wan口就是wan,IP采用動態分配(dhcp)的方式。

如果想了解更多/etc/config/network,可查看這裏:https://openwrt.org/docs/guide-user/base-system/basic-networking

這裏留個問題,這裏的網絡配置是如何與網卡驅動對應起來的呢?思考一下這個問題,後續分析代碼的時候會講解到。

接下來我們來評測一下R2性能的好壞,那麽如何去檢測呢?這裏引申一個概念benchmark,那麽什麽是benchmark,顧名思義就是基準的意思,而Linux有豐富的工具來測試benchmark,這裏我們測試網絡就需要用到其中一個工具“iperf”;不解釋過多,先簡單感受一下;用“iperf”測試網口通信性能,需要兩臺設備處於同一個局域網,一臺作為server,一臺作為client,這裏我用PC作為server端,R2作為client端,測試R2 wan的網口性能:

  • 創建server端
jack@jack: iperf3 -s    #創建服務器端
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
  • 在R2上創建client端,測試TCP的傳輸速率
root@LEDE:/# iperf3 -c 192.168.2.148            #PC server的IP為192.168.2.148
Connecting to host 192.168.2.148, port 5201
[  5] local 192.168.2.166 port 49034 connected to 192.168.2.148 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  66.5 MBytes   557 Mbits/sec    0    331 KBytes       
[  5]   1.00-2.00   sec  65.2 MBytes   547 Mbits/sec    0    331 KBytes       
[  5]   2.00-3.00   sec  65.6 MBytes   550 Mbits/sec    0    331 KBytes       
[  5]   3.00-4.00   sec  65.4 MBytes   548 Mbits/sec    0    331 KBytes       
[  5]   4.00-5.00   sec  65.2 MBytes   547 Mbits/sec    0    331 KBytes       
[  5]   5.00-6.00   sec  65.3 MBytes   548 Mbits/sec    0    331 KBytes       
[  5]   6.00-7.00   sec  65.4 MBytes   548 Mbits/sec    0    331 KBytes       
[  5]   7.00-8.00   sec  65.7 MBytes   551 Mbits/sec    0    331 KBytes       
[  5]   8.00-9.00   sec  65.4 MBytes   549 Mbits/sec    0    331 KBytes       
[  5]   9.00-10.00  sec  65.3 MBytes   548 Mbits/sec    0    331 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   655 MBytes   549 Mbits/sec    0             sender
[  5]   0.00-10.00  sec   654 MBytes   549 Mbits/sec                  receiver
  • 在R2上創建client端,測試UDP的傳輸速率
root@LEDE:/# iperf3 -u -c 192.168.2.148
Connecting to host 192.168.2.148, port 5201
[  5] local 192.168.2.166 port 43646 connected to 192.168.2.148 port 5201
[ ID] Interval           Transfer     Bitrate         Total Datagrams
[  5]   0.00-1.00   sec   129 KBytes  1.05 Mbits/sec  91  
[  5]   1.00-2.00   sec   127 KBytes  1.04 Mbits/sec  90  
[  5]   2.00-3.00   sec   129 KBytes  1.05 Mbits/sec  91  
[  5]   3.00-4.00   sec   127 KBytes  1.04 Mbits/sec  90  
[  5]   4.00-5.00   sec   129 KBytes  1.05 Mbits/sec  91  
[  5]   5.00-6.00   sec   129 KBytes  1.05 Mbits/sec  91  
[  5]   6.00-7.00   sec   127 KBytes  1.04 Mbits/sec  90  
[  5]   7.00-8.00   sec   129 KBytes  1.05 Mbits/sec  91  
[  5]   8.00-9.00   sec   127 KBytes  1.04 Mbits/sec  90  
[  5]   9.00-10.00  sec   129 KBytes  1.05 Mbits/sec  91  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-10.00  sec  1.25 MBytes  1.05 Mbits/sec  0.000 ms  0/906 (0%)  sender
[  5]   0.00-10.00  sec  1.25 MBytes  1.05 Mbits/sec  0.016 ms  0/906 (0%)  receiver

這裏看出R2的wan口,TCP的速率大約為549Mbits/s,速度性能初步去看不能算特別好,後續分析一下代碼的時候,我們再回來看這個問題,是什麽原因導致的。

Openwrt相關資源:https://openwrt.org/

歡迎大家批評指正,轉載請註明出處,多謝。

【玩轉開源】BananaPi R2 —— 第二篇 Openwrt 網口配置分析