LwIP源代码分析
有时需要偏执狂
一定要搞懂,千万不要心存侥幸,否则一些问题会让你痛苦不堪(源码面前,了无秘密)。
拥有一某三分地不容易,贵在坚持。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LwIP动态内存管理
网络字节序采用大端方式。对于0x12345678,需要发送到一个网络,高字节优先发送存储在B的A,下一个就是A+1.然后A+2等等,那么就是高字节存储在低地址,刚刚好类似于大端模式。若处理器是小端格式,那么就需要将接收的数据从大端模式转换为小端模式,才能参加运算,否则肯定出错。动态内存管理 由于LwIP需要处理TCP/IP协议栈大量数据,所以动态内存管理尤其重要。内存管理策略、内存管理分配效率是原创 2017-09-28 16:24:58 · 909 阅读 · 0 评论 -
LwIP裸机ping问题
ping设备的时候,时间会越来越长,从几毫秒到几百毫秒,有时候甚至无ping响应。这里的原因在于,他使用了中断的方式接收网卡数据包,在每次中断中只读取网卡的一个数据包。如果一次中断发生,而网卡内事实上可能存在有多个数据包,这样如果只读一个,最终导致网卡内数据包积压,所以会出现ping延迟的现象。如果数据包长期积压,还可能出现因网卡缓冲区满而无法接收数据的情况,由于无接收中断产生,控制器也不会处理积压转载 2017-10-10 15:22:46 · 2091 阅读 · 0 评论 -
LwIP之ICMP
关于ICMP理论部分查看这里 LwIP仅仅实现ICMP协议部分功能: 1、目地站不可达差错报文(类型3的0,1,2,3,4,5)、数据报超时差错报文(类型11的0,1)。 2、查询报文即请求回显报文(类型8)(ping命令)。源码分析:原创 2017-10-10 16:14:28 · 2173 阅读 · 0 评论 -
LwIP之debug.h文件解析
相关宏定义使用技巧Debug调试宏作用在于,可以在代码运行过程中返回出错信息。 当出现错误时,通过打印功能,将错误代码的文件名及其在文件名中的行号打印出来已达到调试代码的作用。这个功能在大型开源项目里面经常运用到,因为一些逻辑错误是很难查找出来的。#define LWIP_PLATFORM_ASSERT(x) \ do \ { printf("Assertion \"%s\"原创 2017-10-13 20:04:59 · 2110 阅读 · 0 评论 -
LwIP之UDP协议实现
UDP理论UDP控制块 每一个UDP连接都对应一个UDP控制块,UDP协议的实现就是对这些控制块结构成员进行操作。为什么需要控制块链表?为了让协议栈可以实现多个连接,可以多个网络进程同时进行。最后这些控制块通过链表连接在一起。其中链接属性为外部的udp_pcbs是一个全局变量,指向控制块变量首地址。即这是一个指针变量,其数值是链表首地址。extern struct udp_pcb *udp_p原创 2017-10-13 14:22:30 · 17074 阅读 · 1 评论 -
LwIP之TCP
TCP协议理论支撑TCP控制块 和UDP控制块类似,对TCP的操作实际上就是对TCP结构中各个字段的操作。//11种状态枚举定义enum tcp_state { CLOSED = 0,//没有连接 LISTEN = 1,//服务器进入侦听,等待客户机连接 SYN_SENT = 2,//连接请求发送,等待确认 SYN_RCVD = 3,//已收到原创 2017-10-16 17:10:07 · 5569 阅读 · 0 评论
分享