
图10-1 uIP代码库
uIP协议处于网络通信的中间层,其上层协议在这里被称为应用程序,而下层硬件或固件被称为网络设备驱动程序,uIP协议栈可以看作是为系统提供某些功能的代码库,uIP、底层系统和应用程序之间的关系如图10-1 所示。uIP 协议栈为底层系统提供三个函数:uip_init()、uip_input()和uip_periodic()。应用程序必须为uIP协议提供回调函数,出现网络或定时器事件时,将调用该回调函数,uIP协议栈为应用程序提供了许多与协议栈交互的函数。(https://www.xing528.com)
uIP协议栈既可以作为多任务系统中的任务运行,也可以作为单任务系统中的主程序运行。在这两种情况下,主控制循环重复执行两项操作:检查数据分组是否从网络到达,检查是否发生了周期性超时。如果数据分组已到达,则应由主控制循环调用输入处理函数uip_input()。输入处理函数永远不会阻塞,但会立即返回,当它返回时,输入数据分组所针对的协议栈或应用程序可能产生一个或多个应该发送的应答数据分组。如果是这样,则应调用网络设备驱动程序以发送这些数据分组。周期性超时用于驱动依赖于定时器的TCP 机制,例如延迟确认、重传和往返时间估计等。当主控制循环推断周期性定时器应该触发时,它应该调用定时器处理函数uip_periodic()。因为TCP/IP协议栈可以在处理定时器事件时执行重传,所以应该调用网络设备驱动程序以发送可能已经生成的分组。
要注意的是,为了提高执行速度、代码效率和协议栈的使用,uIP协议提供的大多数函数使用C 宏实现。TCP/IP 协议簇中的MAC 层协议由uIP 协议之下的设备驱动程序实现,应用层协议如HTTP、FTP、SMTP 协议等可由ulP 协议之上的应用程序实现。这种设计方式大大减小了协议代码量和RAM 占用量。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
