【ZYNQ入门】第八篇、基于Lwip构建TCP服务器

服务器 0

目录

第一部分、基础知识

1、小白入门必看文章

2、什么是Lwip?

3、什么是TCP/IP协议?

4、MAC地址、IP地址、子网掩码、网关

4.1、MAC地址

4.2、IP地址

4.3、子网掩码

4.4、网关

第二部分、硬件搭建

第三部分、软件代码

1、SDK工程的建立

2、利用工具测试 TCP 链路性能

2.1、利用电脑直接去ping

2.2、用iperf软件工具去测试

第四部分、总结

1、测试工具下载链接

2、交流群


第一部分、基础知识

        作为一个本科没有学过计算机网络这门课程的开发小白来说,想一时半会把所有的TCP/IP协议里面的知识都全部弄明白,这太难了。

        但是在FPGA开发的过程中,很多时候学的东西没有理论知识做铺垫的。而且我个人在学习的过程中,如果目前学的东西我没有一点理论基础,我是真的学不了一点。我非要掌握一点理论知识我才有兴趣继续往下学。哎,如果我有一个过目不忘的脑袋那就好了。🧠🧠🧠

1、小白入门必看文章

        第一篇、 太棒了!TCP/IP协议 (图解+秒懂+史上最全)_图解tcpip-CSDN博客

        第二篇、太厉害了,终于有人能把TCP/IP 协议讲的明明白白了 - 知乎 (zhihu.com)

        第三篇、用大白话解释什么是Socket - 知乎 (zhihu.com)

        第四篇、正点原子实验手册

        经过上面这三篇文章再配上正点原子的数据手册后,我对TCP/IP的就有了一个模糊的认知。

2、什么是Lwip?

        LwIP 全名:Light weight IP,意思是轻量化的TCP/IP协议栈,是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈

        LwIP的设计初衷是:用少量的资源消耗实现一个较为完整的TCP/IP协议栈其中“完整”主要指的是TCP协议的完整性,实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用。此外LwIP既可以移植到操作系统上运行,也可以在无操作系统的情况下独立运行

        优点:

        支持的协议较为完整。几乎支持TCP/IP中所有常见的协议,这在嵌入式设备中早已够用。

        开源、免费,用户可以不用承担任何商业风险地使用它。

3、什么是TCP/IP协议?

        TCP/IP 协议又名网络通讯协议,可以单独指:由网络层的 IP 协议和传输层的 TCP 协议组成。也可以指:利用 IP 进行通信时所必须用到的协议群的统称。(图片来源于这篇文章:太厉害了,终于有人能把TCP/IP 协议讲的明明白白了 - 知乎 (zhihu.com))

4、MAC地址、IP地址、子网掩码、网关

4.1、MAC地址

        MAC地址也叫物理地址、硬件地址,长度为 48 位,这个是唯一。只要不更改自己的 MAC 地址,MAC 地址在世界是唯一的。形象地说,MAC地址就如同身份证上的身份证号码,具有唯一性。

        例如我电脑WiFi的MAC地址如下图:

MAC地址查看方法:step1、win + Rstep2、输入"cmd"step3、输入"ipconfig/all"

4.2、IP地址

        IP地址为32 位的编号, IP 地址是软件层面上的,可以随时修改,MAC 地址一般是无法修改的。

        如上图,我电脑WiFi模块的IP地址为192.168.166.221。

4.3、子网掩码

        用来区分两个不同IP地址的联网设备是否处于同一网段。

        将源 IP 与目的 IP 分别同这个子网掩码进行与运算,相等则是在一个子网,不相等就是在不同子网,就这么简单。例如:

        A电脑:192.168.0.1 & 255.255.255.0 = 192.168.0.0
        B电脑:192.168.0.2 & 255.255.255.0 = 192.168.0.0
        C电脑:192.168.1.1 & 255.255.255.0 = 192.168.1.0
        D电脑:192.168.1.2 & 255.255.255.0 = 192.168.1.0

        那么 A 与 B 在同一个子网,C 与 D 在同一个子网,但是 A 与 C 就不在同一个子网,与 D 也不在同一个子网,以此类推。

4.4、网关

        当两个通信设备在同一网段,那网关就用不上,当两个互相通信的设备不处于同一网段时,就需要网关来实现两者之间的通信。

第二部分、硬件搭建

第一步、根据自己的FPGA原理图来配置管脚

第二步、只保留最小系统,取消无关端口 

第三步、最终生成的最小系统 

第四步、Create HDL Wrapper

 第五步、生成bitstream文件

第三部分、软件代码

1、SDK工程的建立

第一步、新建一个应用工程,选择freertos10,不用standalong。

第二步、选择创建FreeRTOS lwip TCP Perf Server

第三步、啥也不用改,进行DEBUG,来测试链路带宽

2、利用工具测试 TCP 链路性能

第一步、Debug并运行,等待串口打印消息

第二步、电脑与FPGA之间连接网线,打开网络,修改电脑以太网配置参数 

第三步、选择未识别的以太网,右键属性进行修改

第四步、选择IPv4,点击属性

第五步、修改属性如下

2.1、利用电脑直接去ping

方法:step1、win + Rstep2、输入"cmd"step3、输入"ping 192.168.1.10 -t"

链路连接测试成功后的截图

注意:若出现请求超时的问题,那就重新拔插网线,保证网线连接没有问题 

2.2、用iperf软件工具去测试

step1、输入"cd + 软件路径"//该命令指示 iperf 以客户端模式启动,连接到服务器 192.168.1.10,//指定 TCP 窗口大小为 2Mbyte(参数-w 2M) ,// 测试 30 秒( -t 30),//每隔 5 秒打印一次输出( -i5)。step2、输入"iperf -c 192.168.1.10 -p 5001 -i 5 -t 30 -w 2M"

我的电脑带宽测试结果为500MB,我记得我第一次测才400MB,挺奇怪的 

        如果上面的步骤你都测了,那就证明整个工程已经跑成功了。

第四部分、总结

        这篇博客简单介绍了一些关于TCP/IP协议的一些理论知识以及ZYNQ如何构建基于Lwip的TCP服务端

1、测试工具下载链接

        关于测试工具的免费下载链接如下:Iperf测试工具,防止大家找不到。

2、交流群

         QQ交流群聊号码1020775171,有疑问的小伙伴可以加入哦,但是我不太爱在群聊里说话,我觉得在群聊里说话有好多人看,有点抗拒,不太喜欢这种感觉,等我有时间了我再尝试尝试😅😅😅

        

也许您对下面的内容还感兴趣: