本應用筆記介紹 RT-Thread NetUtils 的使用方法,幫助開發者更好地使用 RT-Thread NetUtils 組件來解決網絡開發過程中遇到的問題。
本文的目的和背景
在進行網絡相關的產品開發和調試時,一些好用的小工具往往能取到事半功倍的效果。 RT-Thread NetUtils 組件基于此應用場景,開發和封裝了一系列簡潔好用的網絡工具集合,為開發者提供便利。
為了方便用戶開發網絡應用,RT-Thread 將常用的網絡工具制作 NetUtils 組件包,通過 env 動態配置,即開即用, 有效降低資源的占用。
本文的結構
NetUtils 組件介紹
Ping 工具的配置和使用
NTP 時間同步工具的配置和使用
TFTP 文件傳輸工具的使用
Iperf 網絡帶寬測試工具的配置和使用
其他網絡調試工具的配置和使用
問題闡述
本應用筆記將圍繞下面幾個問題來介紹 RT-Thread NetUtils 組件。
RT-Thread NetUtils 主要包括哪些?分別有什么功能?
如何使用 Ping 工具診斷網絡穩定性?
如何測試網絡穩定性和帶寬?
如何通過網絡傳輸文件?
問題的解決
NetUtils 組件介紹
RT-Thread NetUtils 作為網絡工具合集,既有用于測試調試的 Ping 命令, 同步時間的 NTP 工具, 性能和帶寬測試的 Iperf 、 NetIO,還有在嵌入式系統中廣泛使用的輕量級文件傳輸工具 TFTP,方便地通過網絡完成兩個設備間的文件互傳。另外, RT-Thread 還針對開發中的實際問題,提供了一些高級的輔助工具,如可以遠程登錄到 RT-Thread Finsh/MSH Shell 的 Telnet 工具,以及基于 lwIP 的網絡抓包工具 tcpdump。
下面是 RT-Thread NetUtils的分類和簡介:
每個小工具可使用 menuconfig 獨立控制啟用/停用,并提供了 Finsh/MSH 的使用命令。首先打開 env 工具,進入 BSP 目錄,在 env 命令行輸入 menuconfig 進入配置界面配置工程,根據需求選擇合適的 NetUtils 功能,如圖所示(注意: Ping 和 TFTP 依賴于 lwIP,需要先開啟 lwIP 的依賴后才能顯示)
RT-Thread online packages -> IoT - internet of things -> netutils: Networking utilities for RT-Thread
Ping工具的配置與使用
介紹
Ping是一種網絡診斷工具,用來測試數據包能否通過 IP 協議到達特定主機。估算與主機間的丟失數據包率(丟包率)和數據包往返時間(網絡時延,Round-trip delay time)
使用
Ping 工具依賴 lwIP,需要先在 env 工具 開啟 lwIP 的依賴才可見,步驟如下:
-> RT-Thread Components -> Network stack -> light weight TCP/IP stack -> Enable lwIP stack
在NetUtils菜單欄使能 Ping 選項:
RT-Thread online packages -> IoT - internet of things -> netutils: Networking utilities for RT-Thread [*] Enable Ping utility
Ping 支持訪問IP 地址或域名,使用 Finsh/MSH 命令進行測試,大致使用效果如下:
Ping 域名
msh />ping rt-thread.org 60 bytes from 116.62.244.242 icmp_seq=0 ttl=49 time=11 ticks 60 bytes from 116.62.244.242 icmp_seq=1 ttl=49 time=10 ticks 60 bytes from 116.62.244.242 icmp_seq=2 ttl=49 time=12 ticks 60 bytes from 116.62.244.242 icmp_seq=3 ttl=49 time=10 ticks msh />
Ping IP
msh />ping 192.168.10.12 60 bytes from 192.168.10.12 icmp_seq=0 ttl=64 time=5 ticks 60 bytes from 192.168.10.12 icmp_seq=1 ttl=64 time=1 ticks 60 bytes from 192.168.10.12 icmp_seq=2 ttl=64 time=2 ticks 60 bytes from 192.168.10.12 icmp_seq=3 ttl=64 time=3 ticks msh />
NTP工具的配置與使用
介紹
NTP是網絡時間協議(Network Time Protocol),它是用來同步網絡中各個計算機時間的協議。在 RT-Thread 上實現了 NTP 客戶端,連接上網絡后,可以獲取當前 UTC 時間,并更新至 RTC 中。
使用
在 NetUtils 菜單欄使能 NTP 選項:
RT-Thread online packages -> IoT - internet of things -> netutils: Networking utilities for RT-Thread [*] Enable NTP(Network Time Protocol) client
獲取 UTC 時間UTC 時間又稱世界統一時間、世界標準時間、國際協調時間。北京時間為 UTC+8 時間,比 UTC 時間多 8 小時,或者理解為早 8 小時。
API:time_t time_t ntp_get_time(void)
參數 | 描述 |
---|---|
無 | 無 |
返回 | 描述 |
>0 | 當前 UTC 時間 |
=0 | 獲取時間失敗 |
示例代碼:
#include
獲取本地時間
本地時間比 UTC 時間多了時區的概念,例如:北京時間為東八區,比 UTC 時間多 8 個小時。
在menuconfig中可以設置當前時區,默認為8
API:time_t ntp_get_local_time(void)
該 API 使用方法與ntp_get_time()類似
同步本地時間至 RTC
如果開啟 RTC 設備,還可以使用下面的命令及 API 同步 NTP 的本地時間至 RTC 設備。
Finsh/MSH 命令效果如下:
msh />ntp_sync Get local time from NTP server: Sat Feb 10 15:22:33 2018 The system time is updated. Timezone is 8. msh />
API:time_t ntp_sync_to_rtc(void)
注意事項1、NTP API 方法執行時會占用較多的線程堆棧,使用時保證堆棧空間充足(≥1.5K);2、NTP API 方法不支持可重入,并發使用時,請注意加鎖。
TFTP工具的配置與使用
介紹
TFTP(Trivial File Transfer Protocol, 簡單文件傳輸協議)是 TCP/IP 協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務,端口號為69,比傳統的 FTP 協議要輕量級很多,適用于小型的嵌入式產品上。
RT-Thread 目前支持的是 TFTP 服務器。
使用
TFTP 工具依賴 lwIP,需要先在 env 工具 開啟 lwIP 的依賴才可見,步驟如下:
-> RT-Thread Components -> Network stack -> light weight TCP/IP stack -> Enable lwIP stack
在NetUtils菜單欄使能 TFTP 選項:
RT-Thread online packages -> IoT - internet of things -> netutils: Networking utilities for RT-Thread [*] Enable TFTP(Trivial File Transfer Protocol) server
安裝 TFTP 客戶端
安裝文件位于netutils/tools/Tftpd64-4.60-setup.exe,使用 TFTP 前,請先安裝該軟件。
啟動 TFTP 服務器
在傳輸文件前,需要在 RT-Thread 上使用 Finsh/MSH 命令來啟動 TFTP 服務器,大致效果如下:
msh />tftp_server TFTP server start successfully. msh />
傳輸文件
打開剛安裝的Tftpd64軟件,按如下操作進行配置:
1、選擇Tftp Client;2、在Server interfaces下拉框中,務必選擇好與 RT-Thread 處于同一網段的網卡;3、填寫 TFTP 服務器的 IP 地址。可以在 RT-Thread 的 MSH 下使用ifconfig命令查看;4、填寫 TFTP 服務器端口號,默認:69
發送文件到 RT-Thread
1、在Tftpd64軟件中,選擇好要發送文件;2、Remote File是服務器端保存文件的路徑(包括文件名),選項支持相對路徑和絕對路徑。由于 RT-Thread 默認開啟DFS_USING_WORKDIR選項,此時相對路徑是基于 Finsh/MSH 當前進入的目錄。所以,使用相對路徑時,務必提前切換好目錄;3、點擊Put按鈕即可。
如下圖所示,將文件發送至 Finsh/MSH 當前進入的目錄下,這里使用的是相對路徑:
注意:如果DFS_USING_WORKDIR未開啟,同時Remote File為空,文件會將保存至根路徑下。
從 RT-Thread 接收文件
1、在Tftpd64軟件中,填寫好要接收保存的文件路徑(包含文件名);2、Remote File是服務器端待接收回來的文件路徑(包括文件名),選項支持相對路徑和絕對路徑。由于 RT-Thread 默認開啟DFS_USING_WORKDIR選項,此時相對路徑是基于 Finsh/MSH 當前進入的目錄。所以,使用相對路徑時,務必提前切換好目錄;3、點擊Get按鈕即可。
如下所示,將/web_root/image.jpg保存到本地,這里使用的是絕對路徑:
msh /web_root>ls ##查看文件是否存在 Directory /web_root: image.jpg 10559 msh /web_root>
Iperf工具的配置與使用
介紹
Iperf是一個網絡性能測試工具。Iperf 可以測試最大 TCP 和 UDP 帶寬性能,具有多種參數和 UDP 特性,可以根據需要調整,可以報告帶寬、延遲抖動和數據包丟失。
使用
在NetUtils菜單欄使能 Iperf 選項:
RT-Thread online packages -> IoT - internet of things -> netutils: Networking utilities for RT-Thread [*] Enable iperf-liked network performance tool
Iperf 使用的是主從式架構,即一端是服務器,另一端是客戶端,我們提供的 Iperf 軟件包實現了 TCP 服務器模式和客戶端模式,暫不支持 UDP 測試。下面將具體講解 2 種模式的使用方法。
Iperf 服務器模式
獲取 IP 地址
需要在 RT-Thread 上使用 Finsh/MSH 命令來獲取 IP 地址,大致效果如下:
msh />ifconfig network interface: e0 (Default) MTU: 1500 MAC: 00 04 9f 05 44 e5 FLAGS: UP LINK_UP ETHARP ip address: 192.168.12.71 gw address: 192.168.10.1 net mask : 255.255.0.0 dns server #0: 192.168.10.1 dns server #1: 223.5.5.5
記下獲得的 IP 地址 192.168.12.71(按實際情況記錄)
啟動 Iperf 服務器
需要在 RT-Thread 上使用 Finsh/MSH 命令來啟動 Iperf 服務器,大致效果如下:
msh />iperf -s -p 5001
-s 表示作為服務器啟動-p 表示監聽 5001 端口
安裝 JPerf 測試軟件
安裝文件位于netutils/tools/jperf.rar,這個是綠色軟件,安裝實際上是解壓的過程,解壓到新文件夾即可。
進行 jperf 測試
打開jperf.bat軟件,按如下操作進行配置:
1、 選擇Client模式;2、 輸入剛剛獲得的 IP 地址 192.168.12.71(按實際地址填寫);3、 修改端口號為 5001;4、 點擊run Lperf!開始測試;5、 等待測試結束。測試時,測試數據會在 shell 界面和 JPerf 軟件上顯示。
Iperf 客戶端模式
獲取 PC 的 IP 地址
在 PC 的命令提示符窗口上使用 ipconfig 命令獲取 PC 的 IP 地址,記下獲得的 PC IP 地址為 192.168.12.45(按實際情況記錄)。
安裝 JPerf 測試軟件
安裝文件位于netutils/tools/jperf.rar,這個是綠色軟件,安裝實際上是解壓的過程,解壓到新文件夾即可。
開啟 jperf 服務器
打開jperf.bat軟件,按如下操作進行配置:
1、 選擇Server模式2、 修改端口號為 50013、 點擊run Lperf!開啟服務器
啟動 Iperf 客戶端
需要在 RT-Thread 上使用 Finsh/MSH 命令來啟動 Iperf 客戶端,大致效果如下:
msh />iperf -c 192.168.12.45 -p 5001
-c 表示作為客戶端啟動,后面需要加運行服務器端的pc的 IP 地址-p 表示連接 5001 端口等待測試結束。測試時,測試數據會在 shell 界面和 JPerf 軟件上顯示。
其他網絡調試工具的介紹和使用
除了上述常用的網絡工具,RT-Thread 也提供一些開發調試中比較實用的網絡工具,如 NetIO 工具、 Telnet 工具和 tcpdump 工具。
NetIO 工具
NetIO用于在 OS/2 2.x 、 Windows 、 Linux 和 Unix 上進行網絡性能測試的工具。它會通過 TCP/UDP 方式,使用不同大小的數據包進行網絡凈吞吐量測試。
RT-Thread 目前支持的是 NetIO TCP 服務器。
NetIO 的使用請參考組件目錄下的 README ,此處不再贅述。
Telnet 工具
Telnet協議是一種應用層協議,使用于互聯網及局域網中,使用虛擬終端機的形式,提供雙向、以文字字符串為主的交互功能。屬于 TCP/IP 協議族的其中之一,是 Internet 遠程登錄服務的標準協議和主要方式,常用于網頁服務器的遠程控制,可供用戶在本地主機運行遠程主機上的工作。
RT-Thread 目前支持的是 Telnet 服務器, Telnet 客戶端連接成功后,將會遠程連接到設備的 Finsh/MSH ,實現設備的遠程控制。
Telnet 的使用請參考組件目錄下的 README ,此處不再贅述。
tcpdump 工具
tcpdump 是一款基于 RT-Thread 的捕獲IP報文的小工具, 抓包的數據可以通過文件系統保存,或者通過 rdb 工具導入PC,利用 wireshark 軟件解析。
tcpdump 的使用請參考組件目錄下的 README ,此處不再贅述。
-
組件
+關注
關注
1文章
517瀏覽量
17922 -
RT-Thread
+關注
關注
31文章
1305瀏覽量
40384
原文標題:RT-Thread網絡工具集 (NetUtils) 應用筆記——周四RTOS專欄
文章出處:【微信號:elecfans,微信公眾號:電子發燒友網】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
網絡工具集 (NetUtils) 使用方法
RT-Thread文件系統的基本知識和使用方法
使用RT-Thread NetUtils組件來解決網絡開發過程中遇到的問題
RT-Thread編程指南
RT-Thread用戶手冊
移植RT-Thread的原理與方法
RT-Thread全球技術大會:Kconfig在RT-Thread中的工作機制
![<b class='flag-5'>RT-Thread</b>全球技術大會:Kconfig在<b class='flag-5'>RT-Thread</b>中的工作機制](https://file.elecfans.com/web2/M00/46/18/pYYBAGKQcvGAQEQrAAFnDo7l2-o172.png)
RT-Thread學習筆記 RT-Thread的架構概述
![<b class='flag-5'>RT-Thread</b>學習筆記 <b class='flag-5'>RT-Thread</b>的架構概述](https://file.elecfans.com/web2/M00/52/31/pYYBAGLKk5WAA__jAADjdAdXhIs410.jpg)
RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
![<b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論