lwIP(TCP/IP)小知识
来源:互联网 发布:阿里云ssh连接不上 编辑:程序博客网 时间:2024/06/01 08:51
lwIP是瑞士计算机科学院(Swedish Institute of Computer Science)的Adam Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。Lwip既可以移植到操作系统上,又可以在无操作系统的情况下独立运行.
LwIP的特性如下:
(1) 支持多网络接口下的IP转发
(2) 支持ICMP协议
(3) 包括实验性扩展的的UDP(用户数据报协议)
(4) 包括阻塞控制,RTT估算和快速恢复和快速转发的TCP(传输控制协议)
(5) 提供专门的内部回调接口(Raw API)用于提高应用程序性能
(6) 可选择的Berkeley接口API(多线程情况下)
(7) 在最新的版本中支持ppp
(8) 新版本中增加了的IP fragment的支持.
(9) 支持DHCP协议,动态分配ip地址.
/** X.x.x: Major version of the stack */
#define LWIP_VERSION_MAJOR 1U
/** x.X.x: Minor version of the stack */
#define LWIP_VERSION_MINOR 3U
/** x.x.X: Revision of the stack */
#define LWIP_VERSION_REVISION 2U
LWIP_VERSION_REVISION << 8 | LWIP_VERSION_RC)
移植中碰到的问题总结
1)对齐问题
PBUF_LINK_HLEN 16
static u8_t ip_reassbitmap[MEM_ALIGN_SIZE(IP_REASS_BUFSIZE / (8 * 8))];
在调试的时候经常碰到内存访问错误的异常,最后查得原因是内存的起始地址不再4的倍数上,导致不能访问。因为内存申请时有字节数来的,有时要强制转换为某种结构。为了保证地址不错,PBUF_LINK_HLEN 定义为16,ip_reassbitmap的大小也变成4的倍数。因为它的大小不是4的倍数,就导致附近的内存分配起始不是4的倍数。这个解决办法由点不好,但是没有办法,我用 align 等声明没有作用。
2)大端小端问题
#define BYTE_ORDER LITTLE_ENDIAN //定义小端模式
3)LWIP配置问题
在LWIP中的'lwipopts.h' 头文件内配置,例如
#define NO_SYS 1
#define MEM_ALIGNMENT 4 //内存对齐
#define MEM_SIZE 8*1204
4)大包ping问题(早期版本)
原因是以太网络中,最大允许的包大小为1514字节,若用pc机ping –l 2000 ip地址 测试,pc会把ip包分解成多个发送,lwIP接受后会把他数据合成方在pbuf中,并直接发送出去,可惜程序中不会把包分解发送。导致发送网络不允许的包。这样不但pc接受不到包,而且lwIP也出现问题。
解决方法,在发送的地方,若包大于1514就不给发送。虽然解决不了大包ping不通问题,但至少lwIP不会死。
- lwIP(TCP/IP)小知识
- lwIP RAW TCP/IP接口
- lwIP RAW TCP/IP接口 .
- lwIP RAW TCP/IP接口
- lwIP(TCP/IP)协议栈移植
- TCP/IP协议栈lwip的移植
- lwIP相关TCP/IP应用函数
- LWIP 修改ip TCP发送 连接状态
- TCP/IP协议栈lwip的移植
- TCP/IP协议栈lwip的移植
- BSD TCP/IP协议栈 uC/IP LwIP uIP TinyTcp
- BSD TCP/IP协议栈 uC/IP LwIP uIP TinyTcp
- TCP/IP几点小知识
- TCP/IP相关知识
- TCP小知识
- lwIP――TCP/IP协议栈的一种实现
- lwIP(TCP/IP)协议栈移植(转)
- lwIP(TCP/IP)协议栈移植(不包括网卡驱动)
- 如何点对点实现多线程断点续传
- 学会消气
- 软件开发生活感悟--太累加太辛苦
- free使用
- 抢占式内核(Preemptive Kernel)
- lwIP(TCP/IP)小知识
- SSIS中的原始文件源和目标
- 位图的光栅操作及ROP码解析
- 逆向最长匹配算法的实现
- 巨形水母“入侵”日本:身怀毒素成群结队(图)
- NetBeans 时事通讯(刊号 # 60 - Jun 21, 2009)
- telnet远程登录乱码问题
- getAttribute和getParameter的区别
- Singleton