开发者学堂课程【HaaS 物联网应用开发课程:4_2_AliOS Things 操作系统网络篇之 lwIP】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/801/detail/13836
4_2_AliOS Things 操作系统网络篇之 lwIP
内容介绍:
一、lwIP 基本介绍
二、lwIP 使用方法
三、lwIP 分析手段
一、lwIP 基本介绍
1. lwIP 简介
网络连接能力是万物互联的最重要的基础能力之一。AliOS Things 从诞生演进到今天,网络相关有两个模块至关重要,一个是提供配网连接能力的Netmgr模块,另一个是提供数据通信能力的 lwIP 模块。其中 Netmgr 是负责控制链路,lwIP 是负责数据链路。
本次主要介绍 lwIP 模块。lwIP(Light Weight Internet Protocol)是瑞士计算机科学院 Adam Dunkels 等人开发开源协议栈。它的设计初衷是为了一个低 RAM 和低 ROM 的协议栈。只需几十 KB 的 RAM 和40 KB 左右的 ROM,目前已大量使用在嵌入式系统中。
2. lwIP 架构图
可分为四个层次:虚线层为底层接口,最上层 application 层支持 SNTP,iPerf,SNMPv2c 等应用层协议,传输层支持UDP,TCP,网络层支持 ICMP,ARP,iPv4,iPv6,它相当于提供了 osi 模型中关于网络层之上的协议。
3. lwIP 数据收发介绍
UDP 和 TCP 都是基于 WiFi 的网络接口进行介绍。
二、lwIP 使用方法
1. lwIP API 介绍
LWIP 提供三种 APl ∶
1) RAW API
2) lwip API
3) BSD API
API |
进程 |
优点 |
缺点 |
RAW API |
协议栈和应用程序放到一个进程 |
收发数据高效 |
无法并行,并行性能容易下降 |
lwIP API |
多个进程 |
接收与协议处理分开 |
有一定的资源占用 |
BSD API |
UNX标准API |
方便移植 |
资源占用多 |
2.socket API
名称 |
作用 |
socket |
创建一个socket套接字 |
bind |
将端口号和IP地址绑定带指定套接字上 |
listen |
开始监听 |
accept |
接受连接请求 |
connect |
建立连接 |
send |
面向连接的发送数据( tcp ) |
recv |
面向连接的接收数据( tcp ) |
sendto |
无连接的发送数据( udp ) |
recvfrom |
无连接的接收数据( udp ) |
read |
从文件描述符中读取数据 |
write |
将数据内容写入文件描述符 |
writev |
从各缓冲区中聚集输出数据到文件描述符中发送 |
select |
查询它的可读性、可写性及错误状态信息 |
closesocket |
关闭socket |
shutdown |
按设置关闭套接字 |
gethostbyname |
通过域名获取主机的IP地址等信息 |
gethostbyname_r |
通过域名获取主机的IP地址等信息 |
getaddrinfo |
通过域名获取主机的IP地址等信息 |
freeaddrinfo |
此函数释放addrinfo结构体 |
getsockname |
获取本地主机的信息 |
getpeername |
获取连接的远程主机的信息 |
ioctlsocket |
设置套接字控制模式 |
fnctl |
执行命令 |
eventfd |
创建事件的文件描述符 |
setsockopt |
设置socket属性 |
getsockopt |
获取socket属性 |
3、lwIP 使用方法 TCP@UDP 方式
UDP 分为 Server 和 Client 进行数据交付 Server 端会先创建一
个 socket,然后绑定地址,然后接收来自 Client 端的请求。当 Client
端先创建 socket 然后调用 send to 发送数据到 Server,Server
处于 block 状态,收到消息解除后进行处理。
TCP 不同在于创建了 socket 之后需要进行 setsockopt 进行绑定信息,目的是便于 Client 访问之后,会有多个Client便于管理。然后调用 listen 接收来自 Client 端的请求。然后调用 accept 分发请求,最后进行 send 和 receive 数据,完成数据收发。
4.DHCP 介绍
DHCP ( Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配 IP 地址,使网络环境中的主机动态的获得 IP 地址、Gateway 地址、DNS 服务器地址等信息,并能够提升地址的使用率。
首次获取 IP 地址分为四个阶段。首先由客户端发起 DHCP 服务,请求寻找,DHCP 服务器收到请求后会回应DHCP 服务发现的响应。
如果 IP 地址租约到期,当租约时间过了50%,客户端发起请求,DHCP
服务器分配地址给 DHCP 响应,从而更新租约。
三、lwIP 分析手段
1.常用命令之 ifconfig
敲入 ifconfig 命令后,显示网卡名称,状态,IP地址,网关以及子网掩码等信息
如果网络断开,网卡将处于 down 的状态。
2. 常用命令之 ping
参数 |
说明 |
-c |
指定ping包个数 |
-i |
指定ping包时间间隔,单位毫秒 |
-S |
指定ping包大小 |
-w |
指定ping包超时认定时间 |
-h |
显示帮助 |
-e |
退出ping |
常用命令∶
开始 ping : ping www.aliyun.com
停止 ping : ping -e
ping -c 3-i 100 -s 1300 -w 1000 www.aliyun.com
3. 常用命令之 pktprint
命令 |
说明 |
pktprint -t 0 |
不打印数据包 |
pktprint -t 1 |
显示SYN/SYNACK/RST/FINACK以及特定端口的数据包 |
pktprint -t |
显示所有的数据包 |
[LwlP]LwlP_send, pkt:1001e3c0, netif(10007014), IPID(8),68->67,DHCP_BOOTREQ(336)
[LwlP]LwlP_recv, pkt:1001e3c0, netif(10007014), IPID(1c89),67->68, DHCP_BOOTREP(359)
[ LwlP]LwlP_send, pkt:1001e5d8, netif(10007014),IPID(9),68->67,DHCP_BOOTREQ(336)
[ LwlP] LwlP_recv, pkt:1001e3cO, netif(10007014),IPID(1c8a),67->68, DHCP_BOOTREP(359)
[LwlP ]LwlP_send, pkt:100235e8, netif(10007014),IPID(a),23575->53,DNS(94)
[ LwlP]LwlP_recv, pkt:1001e980, netif(10007014),IPID(0),53->23575, DNS(65422)
[ LwlP]LwlP_send, pkt:10023850, netif(10007014), IPID(b),S:196d, A:0,W:4380, :0, 58258->1883,TCP_SYN(44)
说明︰
LwIP_send/LwIP_recv |
pkt:1001e3co |
netif(10007014) |
IPID(8) |
68 -> 67 |
DHCP_BOOTREQ(336) |
数据包发送/数据包接收 |
当前数据包pbuf指针H指向的地址 |
收发数据包经过的网卡 |
数据包的IPID |
源读口->目的端口 |
应用层协议以及P数据包长度 |
S:196d |
A:0 |
W:4380 |
1:0 |
TcP_SYNACK(44) |
|
sequence number |
ACK确认 |
窗口大小 |
payload长度 |
应用层协议以及IP数据包的长度 |
pktprint 在定位数据包容的过程中非常方便,它省去了通过无线进行抓包并且进行解密的过程,从而非常方便地可视化地看到数据。