LwIP协议栈的学习与应用docx- nxp-lpc(3)

2020-04-14 16:51

整个内存池的大小又可以根据组件的需要而调整,比如,如果你不需要UDP,那么只要把LWIP_UDP定义为0。用宏定义来实现用起来方便,改起来容易,就是看起来头大。

memp_num

这个静态数组用于保存各个组件的成员数目,与memp_memory类似也是用宏实现的。

memp_sizes

这个静态数组用于保存各个组件的结构大小,与memp_memory类似也是用宏实现的。

memp_init

内存池的初始化,主要是为每种内存池建立链表memp_tab,其链表是逆序的,此外,如果有统计功能使能的话,也把记录了各种内存池的数目。

memp_malloc

如果相应的memp_tab链表还有空闲的节点,则从中切出一个节点返回,否则返回空。

memp_free

把释放的节点添加到相应的链表memp_tab头上。 pbuf

pbuf是lwIP包的内部表示,被设计为最小化栈的特殊需要。pbufs类似于BSD实现中的mbufs。pbuf结构支持为包内容动态分配内存和让包数据驻留在静态内存中。pbufs能被一个称为pbuf链的链接到一个链表中,以至一个包能跨越多个pbufs。

11

pbufs有三种类型:PBUF_RAM,PBUF_ROM和PBUF_POOL。图1表示PBUF_RAM类型,包含有存在内存中由pbuf子系统管理的包数据。图2显示了一个pbuf链表,第1个是PBUF_RAM类型,第2个是PBUF_ROM类型,意味着它包含有不被pubf子系统管理的内存数据。图3描述了PBUF_POOL,其包含有从固定大小pbuf池中分配来的pbuf。一个pbuf链可以包含多个不同类型的pbuf。

这三种类型有不同的用处。PBUF_POOL类型主要由网络设备驱动使用,因为分配单个pbuf快速且适合中断句柄使用。PBUF_ROM类型由应用程序发送那些在应用程序内存空间中的数据时使用。这些数据不会在pbuf递交给TCP/IP栈后被修改,因此这个类型主要用于当数据在ROM中时。PBUF_ROM中指向数据的头部被存在链表中其前一个PUBF_RAM类型的pbuf中,如图2所示。

PBUF_RAM类型也用于应用程序发送动态产生的数据。这情况下,pbuf系统不仅为应用程序数据分配内存,也为将指向(prepend)数据的头部分配内存。如图1所示。pbuf系统不能预知哪种头部将指向(prepend)那些数据,只假定最坏的情况。头部的大小在编译时确定。

本质上,进来的pbuf是PBUF_POOL类型,而出去的pbuf是PBUF_ROM或PBUF_RAM类型。

从图1,图2可以看出pbuf的内部结构。pbuf结构包含有两个指针,两个长度字段,一个标志字段,和一个参考计数。next字段指向统一链表中的下一个pbuf。有效载荷指针指向该pbuf中数据的起始点。Len字段包含有该pbuf数据内同的长度。tot_len字段是当前pbuf和所有链表接下来中的len字段值的总和。简单说,tot_len字段是len字段及下一个pbuf中tot_len字段值的总和。flags字段表示pbuf类型而ref字段包含一个参考计数。next和payload字段是本地指针,其大小由处理器体系结构决定。两个长度字段是

12

16位无符号整数,而flags和ref字段都是4比特大小。pbuf的总大小决定于使用的处理器体系结构。在32位指针和4字节校正的体系结构上,总大小是16字节,而在16位指针和1自己校正的体系结构上,总大小是9字节。

pbuf模块提供了操作pbuf的函数:

pbuf_alloc()可以分配前面提到的三种类型的pbuf。 pbuf_ref()增加引用计数,

pbuf_free()释放分配的空间,它先减少引用计数,当引用计数为0时就释放pbuf。 pbuf_realloc()收缩空间以使pbuf只占用刚好的空间保存数据。

pbuf_header()调整payload指针和长度字段,以使一个头部指向pbuf中的数据。pbuf_chain()和pbuf_dechain()用于链表化pbuf。

第二章 ARP

ARP协议(Address Resolution Protocol),或称地址解析协议。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。他是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被icmp v6所替代。 功能

在局域网中,网络中实际传输的是“帧”(frame),帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址,但这个目标MAC地址是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。 原理

13

在每台安装有TCP/IP协议的电脑或 route 里都有一个ARP缓存表,表里的IP地址与MAC地址是一对应的,如表甲所示。 主机名称 A B C D E ...

IP地址

MAC地址

192.168.38.10 00-AA-00-62-D2-02 192.168.38.11 00-BB-00-62-C2-02 192.168.38.12 00-CC-00-62-C2-02 192.168.38.13 00-DD-00-62-C2-02 192.168.38.14 00-EE-00-62-C2-02

...

以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.38.11的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.38.11的MAC地址是(00-BB-00-62-C2-02)”。这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

ARP协议是一个网络层的协议,实现的功能是网络设备的MAC地址到IP地址的映射。在以太网中每个网络设备都有一个唯一的48位(6字节)MAC地址,数据报都是按照MAC

14

地址发送的,其地址范围是由相关组织按照不同设备制造商统一分配的,这样保证了网络上设备地址不会冲突。但是TCP/IP协议是以32位(4字节)IP地址作为通讯地址的,怎样使MAC地址和IP地址对应上呢,这里就用到了ARP协议。

ARP的工作过程大致是这样的:比如网络中的一台主机想要知道MAC地址为01:02:03:04:05:06的机器的IP地址,于是它就向网上发送一个ARP查询数据报(目标MAC全为FF的广播报文),网络上的所有机器收到这个广播后将查询的MAC与自己的MAC比对,如果不一致,则不回应该报文。若一致则向该主机发出ARP回复数据报(这时就是只针对发送方的单播报文了),告诉主机自己的IP(比如192.9.200.128)。这样主机就会在ARP映射表中记录这一项192.9.200.128-----〉01:02:03:04:05:06。以后,发往这个IP地址的IP/TCP/UDP等数据报就会对应到它的MAC地址。在Windows命令提示符窗口输入arp -a查询ARP表项可以看到 MAC-〉IP的映射。

第三章 ICMP

15


LwIP协议栈的学习与应用docx- nxp-lpc(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:聚四氟乙烯的表面处理与粘接(hao)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: