|
uIP是专为8/16位嵌入式微处理器设计的轻量级TCP/IP协议栈。uIP本身的源代码和占用的内存资源都非常少,其源代码只有几KB,RAM仅占几百字节。
1、不支持动态内存分配机制,使用单一的全局缓冲区uip_buf收发网络数据;
2、着重实现了与完整TCP/IP通信所必需的ARP(地址解析协议)、IP(网际互联协议)、TCP(传输控制协议),而UDP(用户数据包协议)、ICM P(网络控制报文协议)只作为可选模块;
3、各层协议紧密耦合,应用协议也参与了部分协议栈功能的实现。
uIP协议栈处于网络通信的中间层,移植的时候需要为uIP提供底层网卡驱动程序和定时器驱动程序。
而uIP为底层系统提供了4个接口函数:uip_init完成协议栈的初始化;uip_input用于处理从以太网接收到的IP数据包;uip_perio dic用于协议内核周期性地对各TCP连接的轮询;uip_udp_periodic则用于UDP服务下对各UDP连接的轮询。其中,uip_input和uip_per iodic在协议的内部采用同一个函数void uip_process(u8_t flag)实现,区别在于调用的参数不同。
思考一个问题:客户端建立一个socket连接后,怎么监听到服务端过来的数据?
==〉最直观就是网卡驱动程序注册的回调函数里面监听到,即:
当网卡驱动收到一个输入包时,将放入全局缓冲区uip_buf中,包的大小由全局变量uip_len约束。同时将调用uip_input()函数,这个函数将会根据包首部的协议处理这个包和需要时调用应用程序。
如uIP在MT7681平台上的应用:
当uip_input()返回时,一个输出包同样放在全局缓冲区uip_buf里,大小赋给uip_len。如果uip_len是0,则说明没有包要发送。否则调用底层系统的发包函数将包发送到网络上。
|
|