1.学习一个东西,先了解这个东西是干哪些用的linux内核中网络协议的设计与实现,什么场景会用到它,与自己早已把握的其他知识的联系
a.诸如:LWIP这个东西是干哪些用的:他就是一个裁切后保持大部份TCP/IP功能的合同。用少量的资源消耗实现一个较为完整的TCP/IP合同栈,其中“完整”主要指的是TCP合同的完整性,实现的重点是在保持TCP合同主要功能的基础上降低对RAM的占用。据悉LwIP既可以移植到操作上运行,也可以在无操作系统的情况下独立运行。
b.诸如:什么场景会用到LWIP这个合同:基本上假如你想实现TCP/IP这个合同,就可以用到这个。例如TCP,UDP合同,例如工业总线上的Modbus,例如想要实现网段路由的功能,只要是用到以太网的,都可以实现功能,还有一些物联网像MQTT等。
c.诸如:他与linux上直接编撰TCP/IP合同的区别:Linux系统中有完整的TCP/IP合同的实现。并且可执行代码常常有数兆之大。须要高效的处理器通读和大量的外存、内存开支。所以假如芯片是基于Linuxkernel的话,就没必要在重复造轮子。LWIP最大优势可以移植到操作系统上,也可以在无操作系统的情况下独立运行,且代码量小。是目前在嵌入式网路领域被讨论和使用很广泛的一个合同栈。开源特点和快速的版本更新效率。新版本还支持DNS、SNMP、DHCP、IGMP等中级应用功能。在资源有限的情况下实现TCP合同的主要功能。有自己的数据包和显存管理机制。所以LWIP须要依照自己的需求,移植相关的代码。
2.对要学的东西梳理出一个大约的框架(这个框架是(理论框架+应用框架[code逻辑]))2.1.LWIP的理论构架
a.LWIP的网路分层模型:就是TCP/IP的网路分层模型
b.LwIP符合TCP/IP模型构架,规定了数据的格式、传输、路由和接收,以实现端到端的通讯。(netif拿来描述一个网卡)
2.2LWIP的应用code构架:(下载一个相对完整的代码,去看一下这个功能的实现逻辑)
a.LWIP的软件构架:
参考:
LITIECX/lwip_linux:lwip合同栈的linux移植学习()
LwIP合同栈粗解
b.LWIP中三种API所在的构架层次:
3.在框架体系中,找到一条尽早熟悉构架的线,可以以一个想要实现的功能为攻占对象。由于框架内的内容大部份都是重复使用的deepin linux,所以只要捋清楚一条线,其他的也就迎刃而解。
a.诸如:我想做一个基于LWIP合同中TCP功能的实现;
4.在确定自己要实现的功能后linux内核中网络协议的设计与实现,先去理解这个功能的原理
a.诸如:TCP的原理是怎样实现的。
参考:【lwip】12-一文解决TCP原理
5.基于我找到的那条线,梳理出这个东西若果依照步骤是如何运作的。(以结果为导向,剖析问题的时侯就要想这个原理和步骤之间有哪些关系)
a.诸如:实现TCP的设计方案;下边只是一个很粗糙的流程图,还须要具体的深入研究,基于LWIP的TCP是怎样实现的。
6.基于这条线的框架,将其拆解成各个模块,然后再按照各个模块补充细节
a.诸如:如上图的设计方案可以看出马哥linux,首先TCP我须要分为顾客端与服务端。
TCP传输须要涉及到Socket编程
b.基于理论的实现流程,合同层报文间的封装与拆封流程图:
c.基于应用code的实现流程,LWIP合同中TCP的数据收发实现的流程图:
TCP服务端
TCP顾客端
7.通过给自己提问,带着问题一层一层的挖每位模块更细节的内容
a.诸如:LWIP是软件这么而如何让硬件和软件无缝联接上去呢?网卡又多种多样,如何能够让LWIP使用同样的软件兼容不同的硬件平台?
参考:LWIP中netif结构体的介绍
LWIP中使用了一个netif结构体来描述网卡并且网卡是直接和硬件平台打交道的:
LWIP中的etherneif.c文件的函数一般为硬件打交道的底层函数,当有数据须要通过网卡接收或则发送数据的时侯才会被调用,通过LWIP的合同栈的内部进行处理后,从应用层能够得到数据或则可以发送数据。
b.诸如:LWIP中的TCP是怎样实现三次握手和四次挥手的
参考:【lwip】12-一文解决TCP原理
8.最后依据这条线,将所有的树干全部理解后,整理下来,这样就基本理解了这块功能,其他模块也都一通百通。最后自己在手写一份代码,基本就差不多了。
本文原创地址://gulass.cn/rhzlxtzsxtxy.html编辑:刘遄,审核员:暂无