源代码
直播中

贾永世

7年用户 1742经验值
私信 关注

PPP-Blinky - 串行端口上的TCP / IP网络连接

PPP-Blinky - 串行端口上的TCP / IP网络连接

源代码位于页面底部


概要

PPP-Blinky 通过仅使用串行端口任何mbed目标硬件上启用Internet协议 代码运行在只有8k RAM的处理器上,例如Nucleo-L053R8板卡。 PPP-Blinky使用行业标准的PPP(点对点)协议和一个小型的“无状态”TCP / IP协议栈。





不需要以太网端口

不需要以太网端口 - PPP-Blinky使用串行端口。

PPP-Blinky部分模拟标准拨号调制解调器,因此可以连接到Windows,Linux或Adroid。

代码应该在所有ARM mbed平台上运行,例如本图中的LPC11U24:https :

//developer.mbed.org/media/uploads/nixnax/blinky-to-laptop1.jpg

微型嵌入式Web服务器

PPP-Blinky包含足够的智能,可用于Internet Explorer,Mozilla Firefox,Google Chrome,Safari,Curl,wget,Lynx和Powershell Invoke-Webrequest命令等Web浏览器。

HTTP功能非常适用于在支持mbed的硬件上构建基于浏览器的GUI。

在下面的图片中,Internet Explorer显示一个嵌入在PPP-Blinky代码中的小型网页。

WebSocket服务

WebSocket是用于客户端和服务器之间的实时双向 TCP / IP通信的最流行的协议标准
在下面的图片中,一个小的Internet Explorer脚本已经连接到PPP-Blinky的WebSocket服务。
一个websocket消息随后被浏览器发送,并被WebSocket回显,触发脚本中的onmessage事件。
WebSocket服务通过JavaScript实现PPP-Blinky和浏览器DOM中的任何元素之间的双向实时交互
如果您已经启动并运行PPP-Blinky,可以使用以下命令测试WebSocket服务:http : //jsfiddle.net/d26cyuh2/
Websockets非常适合为mbed硬件构建基于浏览器的GUI。


你的 mbed板上尝试PPP-Blinky

您将需要一个支持mbed的硬件板:https//developer.mbed.org/platforms/

在主机PC和mbed板之间建立串行端口连接。最简单的方法是在USB串口调试端口上使用mbed硬件。我试过了ST-Micro Nucleo-L476RG,Nucleo-L152RE,Nucleo-F401RE,Nucleo-L432KC,Nucleo-L053R8,mbed-LPC11U24和mbed-LPC1768电路板,它们都是开箱即用的。使用mbed在线编译器编译目标板的软件。将编译的二进制文件保存到硬件中。

在建立网络连接之前,您可以通过打开终端程序(如Tera Term),并将mbed板上的COM端口的波特率设置为115200波特来验证代码的操作。~因为0x7E是PPP帧开始/结束标记,所以LED1应该为您输入的每两个0x7E()(即代字符)字符切换当您完成测试时,请不要忘记关闭端口,否则当您尝试连接时,Windows拨号网络会报告COM端口正在被另一个程序使用。

一旦您确定串行端口和固件正在工作,请继续在您的PC上创建新的网络连接 - 请参阅下文。

在Windows中创建拨号连接


在Windows 7或8 PC上设置拨号网络(DUN)基本上分为两步:首先,创建一个新的调制解调器设备,因为PPP-blinky部分模拟了标准Windows串行端口调制解调器设备。其次,您将创建一个与新的“调制解调器”关联的新Internet连接(实际上是一个新的网络适配器)。

有关如何在此处为PPP-Blinky配置Windows的逐步说明:/用户/ nixnax /代码/ PPP-的Blinky /维基/配置-Windows的拨号联网

此页面底部还有一个关于如何设置Linux拨号网络的屏幕

从您的PC连接到PPP-Blinky

一旦配置了Windows网络,您就可以通过USB虚拟串口建立到mbed板的拨号连接。

您手动分配给新拨号网络适配器(172.10.10.1)的IP地址充当该子网上任何有效IP地址的网关。在下面的屏幕截图中,我通过USB虚拟串行端口将Windows 8命令行中的ping发送到ST-Micro Nucleo-L476RG板。我还使用第二个串行端口和Tera Term从硬件上的第二个串行端口捕获调试输出。板上的可选调试输出打印出IP源和目标地址以及数据有效载荷的前几个字节。请注意,源是适配器IP地址(本例中为172.10.10.1),目的地是该子网上的某个其他地址 - 所有数据包到子网被发送到我们的mbed硬件。例如,您也可以ping 172.10.10.123,或者如果您的PPP-Blinky正在运行,只需点击此链接:http//172.10.10.123


平台很快!

在下面的图片中,通过从PC 发送100万个 ping来测试ICMP回应回复服务这花了几个小时。
在Windows 8 PC上使用的ping工具是来自PsTools的psping.exe,由Mark Russinovich - http://bit.ly/PingFast
短ping(4字节数据有效载荷)的平均回复时间为11.23毫秒,115200波特惊人的15美元的Nucleo-L476RG板 - 几乎没有足够的时间通过端口发送130字节!


监控PPP-Blinky数据包

下面的图片来自Microsoft网络监视器3.4捕获会话。

PPP-Blinky的响应以蓝色显示

第2帧 - IP 172.10.10.1(拨号适配器IP)上的Internet Explorer通过发送S(SYN)标志来请求TCP连接。
第3帧--PIP-Blinky在IP 172.10.10.2响应帧3中的ACK。现在建立链路的一个方向。
帧4 - PC确认帧3中由PPP-Blinky发送的SYN。现在TCP链路已完全建立。
第5帧 - 浏览器向P-Blinky“推送”(P标志设置)HTTP GET请求。
第6帧 - PPP-Blinky响应一个标准的HTTP响应“推”(P标志设置)返回一个小的网页。它还设置A(ACK)标志来确认在帧6中发送的消息。
第7帧 - PC确认接收到HTTP净荷。
第8帧 - PC通过发送FIN标志开始关闭TCP连接。
第9帧 - PPP-Blinky确认FIN请求 - 连接现在在一个方向上关闭。它还在请求关闭连接的相反方向的响应中设置FIN标志。
第10帧 - PC确认FIN请求。TCP连接的关闭现在已在两个方向上得到确认。

调试输出

PPP-Blinky可以将方便的调试信息输出到可选的第二个串行端口。
下图显示了完整HTTP对话的调试输出(Ident,Source,Destination,TCP Flags)。
PC消息显示为黑色。PPP-Blinky消息是蓝色的。
注意PPP-blinky在每次完整的HTTP会话后自动插入一个空行。

在Linux中创建拨号连接

下面的屏幕显示了从Linux机器连接到PPP-Blinky 所需的pppd命令。这比Windows更简单!mbed LPC1768板的USB串行端口在我的Linux机器上注册为/ dev / ttyACM0。做网络搜索pppd的,如果你想了解更多关于pppd的,Linux的PPP处理程序。在下面的屏幕底部附近,通过在命令行上使用curl命令获取两个网页(/和/ y)Gnome Webkit和Firefox也可以正常工作。也可以尝试echo GET / HTTP / 1.1 | 使用netcat的nc 172.10.10.2,网络工具的“瑞士军刀”。PPP-Blinky也通过Apache服务器基准软件ApacheBench进行了测试。提取100000次后,平均页面抓取率报告为小页面每秒抓取6页。

注意事项

PPP Blinky是一个非常稀疏的实现(1.5k行)的HTTP,WebSocket,TCP,UDP,ICMP,IPCP和LCP over PPP,需要大约8kB的RAM。实现建立连接所需的最小功能。对于小型项目而言,这些往往是可以接受的折衷方案,也是学习日常网络实施的实用细节的便捷工具。

1884c2a5c19c.zip (22.94 KB)
(下载次数: 1, 2018-5-7 19:11 上传)


更多回帖

发帖
×
20
完善资料,
赚取积分