https://www.bilibili.com/video/BV1vt411g7iX?p=1
开源、嵌入式、TCP IP协议,以STM32为例
P1网络协议简介
1 常用网络协议:TCP/IP协议族--TCP IP UDP ARP HTTP FTP MQTT嵌入式用的多
2 分层模型:应用层--DNS域名解析 HTTP FTP SMTP邮件;传输层--TCP UDP;网络层--IP ICMP ARP;链路层--MAC层;物理层--传输介质;
3 协议层报文间的封装与拆装:层层封装
P2 LwIP简介
1 LwIP简介:Light weight IP、轻量化TCP/IP、小型、开源免费、实现大部分协议、占用40k空间;文件目录--doc文档、test测试协议 一般不用、src源码 api操作系统用 apps应用 core核心代码。
2 vs code查看代码:右键打开文件夹
3 LwIP的三种编程接口:RAW/Callback API--效率高、不依赖操作系统、逻辑复杂;NETCONN API--需要RTOS基础、基于操作系统IPC 信号量 邮箱、也需要内核pbuf netbuf、效率和消耗介于RAW与Socket;Socket API--高级抽象、可移植性强、基于NETCONN API
P3 开发平台介绍
1 以太网简介:IEEE802.3、局域网;PHY层--传输介质、编码、CSMA/CD;MAC层--功能、数据包。
2 STM32的ETH外设与PHY:内核、DMA、ETH、外部PHY;LAN8720A物理层芯片
3 软件设计:LwIP仅有底层网卡接口
P4 LwIP的网络接口管理
1 netif结构体与使用:LwIP使用netif描述网卡、屏蔽硬件差异
2 netif相关底层函数:low_level_init--以太网驱动初始化;low_level_output low_level_input--网卡收发数据;ethernetif_init
3 ethernetif.c文件内容:?
一讲代码就感觉乱糟糟的
P5 LwIP的内存管理
1 LwIP的几种内存分配策略:内存池、内存堆、C库 不推荐;
2 动态内存池:代码--预处理、初始化、内存分配 释放;基于RTOS,会用就行;
3 动态内存堆:代码--结构体、初始化、内存分配 释放 内存切割
4 使用C库的malloc和free进行分配:不建议使用;同时存在内存池和内存堆,但可能互有干扰;
P6 网络数据包
1 分层思想:标准TCP/IP层次清晰、LwIP交叉存取数据 极力避免拷贝
2 LwIP的线程模型:协议与线程严格对应;协议与线程融合;LwIP的协议与操作系统隔离
3 pbuf结构体:代码
4 pbuf类型:RAM--内存堆;POOL--内存池、固定大小;ROM REF--FLASH、不含数据区域、只有pbuf结构体;1个数据包可能是多个不同类型pbuf;
5 pbuf_alloc:
6 pbuf_free:
7 其他pbuf操作函数:
8 网卡中使用的pbuf:
P7 网络数据包1
1 分层思想:
2 LwIP的线程模型:
3 pbuf结构体:
4 pbuf类型:
5 pbuf_alloc:数据包申请;代码--不同类型pbuf代码不同
6 pbuf_free:数据包释放;代码--注意引用次数为0才可以删除、注意链表
7 其他pbuf操作函数:pbuf_realloc--重新定义长度;pbuf_header--调整数据区域指针;pbuf_take--向数据区域拷贝数据
8 网卡中使用的pbuf:代码--这么讲效果很差啊
P21 IP协议
1 IP地址:软件地址、IP-ARP-MAC、点分十进制、分类编址ABCDE、无分类编址、特殊IP--受限广播 直接广播 多播 环回 本网络本主机
2 局域网 广域网:内网LAN、外网WAN、互联网
3 网络地址转换:NAT、公网IP端口号与内网IP对应
4 IP数据报
P22 IP协议1
1 IP地址:
2 局域网 广域网:
3 网络地址转换:
4 IP数据报:IP分组;IP首部分析;数据结构--看代码、结构体、宏定义;数据报分片--链路层单帧1500byte、8byte整数倍、端系统重装、分片flag和偏移
P23 IP协议2
1 IP地址:
2 局域网 广域网:
3 网络地址转换:
4 IP数据报:IP不可靠;分片源码 ip4_frag();数据报发送ip4_output();
代码讲的太乱了
P24 IP协议3
1 IP地址:
2 局域网 广域网:
3 网络地址转换:
4 IP数据报:数据报接收ip4_input()--流程图、源码
代码讲的真无聊
P28 TCP协议
非常重要
1 TCP服务简介:传输层、面向连接、可靠字节流;编号、确认;
2 TCP特性:连接机制;确认与重传;缓冲机制;全双工;流量控制;差错控制;拥塞控制
3 端口号的概念:传输层与上层协议通过端口号识别;
4 TCP报文段结构:
5 TCP连接:
6 TCP状态:
7 TCP中的数据结构:
8 窗口的概念:
9 TCP报文段处理:
P29 TCP协议1
非常重要
1 TCP服务简介:
2 TCP特性:
3 端口号的概念:
4 TCP报文段结构:源 目标端口号;20字节首部含义;wireshark抓包分析、相对序列号设置
5 TCP连接:
6 TCP状态:
7 TCP中的数据结构:
8 窗口的概念:
9 TCP报文段处理:
P30 TCP协议2
非常重要
1 TCP服务简介:
2 TCP特性:
3 端口号的概念:
4 TCP报文段结构:
5 TCP连接:三次握手建立连接、抓包示例,flow graph;四次挥手终止连接、全双工双向断开
6 TCP状态:
7 TCP中的数据结构:
8 窗口的概念:
9 TCP报文段处理:
P31 TCP协议3
非常重要
1 TCP服务简介:
2 TCP特性:
3 端口号的概念:
4 TCP报文段结构:
5 TCP连接:
6 TCP状态:11个状态、稳定连接;状态转移
7 TCP中的数据结构:源码--结构体成员介绍、TCP控制块tcp_pcb
8 窗口的概念:
9 TCP报文段处理:
P32 TCP协议4
非常重要
1 TCP服务简介:
2 TCP特性:
3 端口号的概念:
4 TCP报文段结构:
5 TCP连接:
6 TCP状态:
7 TCP中的数据结构:源码--结构体成员介绍、监听TCP控制块tcp_pcb_listen
8 窗口的概念:动态变化;发送窗口、接收窗口
9 TCP报文段处理:报文段缓冲队列
P33 TCP协议5
非常重要
1 TCP服务简介:
2 TCP特性:
3 端口号的概念:
4 TCP报文段结构:
5 TCP连接:
6 TCP状态:
7 TCP中的数据结构:
8 窗口的概念:
9 TCP报文段处理:TCP报文段发送tcp_output()、tcp_input()、源码讲解
P47 HTTP协议
1 什么是HTTP协议:超文本传输协议、基于TCP/IP、基于客户端/服务器、应用层;特点--简单、快捷、灵活、1.1之后 持久连接、无状态 引入cookie记录信息;
2 URL与资源:URI=URL+URN;URL统一资源定位符、绝对地址;URN与位置无关,暂未推广;组件
3 HTTP报文:
4 使用Postman获取论坛数据:
5 使用开发板获取论坛数据:
P48 HTTP协议1
1 什么是HTTP协议:
2 URL与资源:
3 HTTP报文:起始行+首部+数据主体;请求报文--方法、URL、版本;应答报文--状态码、原因短语;
4 使用Postman获取论坛数据:下载Postman,对照操作;可输入URL转换为各种语言的代码
5 使用开发板获取论坛数据:
P49 HTTP协议2
1 什么是HTTP协议:
2 URL与资源:
3 HTTP报文:
4 使用Postman获取论坛数据:
5 使用开发板获取论坛数据:流程--创建连接结构、连接域名服务器、发HTTP请求报文、等待应答 接收数据;代码讲解--选择一个DNS的IP地址、DNS配置、使用postman生成的HTTP代码、开发板串口打印返回的论坛数据
P50 HTTP服务器
1 Hello World网页demo:论坛抓包分析HTTP协议通信过程;步骤--创建NETCONN_TCP、本地IP绑定连接结构、监听客户端、处理连接、发送接收数据;
2 提供网页控制LED功能:POST
P51 MQTT协议
1 MQTT简介:消息队列遥测传输协议;物联网 应用层、依赖TCP、一般用JSON格式发送数据;比HTTP轻量、长连接
2 MQTT通信模型:一对多、基于客户端 服务器;三种身份--发布者、订阅者、服务器;客户端--发布、订阅、取消订阅、终止连接;服务器--一般为云服务器;
3 消息主题与服务质量:主题过滤器、通配符;服务质量--只发送1次QoS0、最少发送1次QoS1、仅到达1次QoS2;
4 MQTT控制报文:
5 移植MQTT:
6 cJSON移植:
P52 MQTT协议1
1 MQTT简介:
2 MQTT通信模型:
3 消息主题与服务质量:
4 MQTT控制报文:固定报头--2字节、报文类型、报文标志、剩余长度;可变报头--非必须、报文标识符;数据区域;MQTT中文版pdf;
5 移植MQTT:
6 cJSON移植:
感觉没有好好备课,屏幕毫无必要的来回晃,找东西也找半天
P53 MQTT协议2
1 MQTT简介:
2 MQTT通信模型:
3 消息主题与服务质量:
4 MQTT控制报文:CONNACK报文、有效载荷
5 移植MQTT:github开源库;下载、部分拷贝;讲代码transport.c
6 cJSON移植:
讲的太乱了,晃来晃去
P54 MQTT协议3
1 MQTT简介:
2 MQTT通信模型:
3 消息主题与服务质量:
4 MQTT控制报文:
5 移植MQTT:使用MQTT库;mqttclient.c代码
6 cJSON移植:云平台常用JSON;github开源、cJSON.c cJSON.h;移植、封装;
不知所云
P59 连接到阿里云物联
1 使用阿里云物联并用软件测试连接:阿里云网址、创建产品、添加设备、保存秘钥、自定义Topic;MQTT.fx软件、Password小工具、按官方文档操作
2 开发板连接阿里云物联:
3 阿里云物联的规则引擎:
P60 连接到阿里云物联1
1 使用阿里云物联并用软件测试连接:
2 开发板连接阿里云物联:看开发板串口输出信息
3 阿里云物联的规则引擎:JSON 二进制、转发Topic、SQL语法