博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

Linux & Technology

邻窝 - http://muddoghole.spaces.live.com/
  muddogxp.cublog.cn

关于作者
姓名:muddog
职业:linux programer
年龄:24
位置:Suzhou
个性介绍:
|| << >> ||
我的分类


lwIP ICMP协议分析

ICMP协议分析

- ICMP 数据结构

类型8的回显请求
struct icmp_echo_hdr {
  u16_t _type_code;
  u16_t chksum;
  u16_t id;
  u16_t seqno;
};
类型3的目的不可达应答
struct icmp_dur_hdr {
  u16_t _type_code;
  u16_t chksum;
  u32_t unused;
};
类型11的超时应答
struct icmp_te_hdr {
  u16_t _type_code;
  u16_t chksum;
  u32_t unused;
};

- ICMP 处理函数

void icmp_input(struct pbuf *p, struct netif *inp);
lwIP ICMP只接受类型为8的ECHO。函数首先从pbuf中去除IP头,获得ICMP头。只有当type为ECHO时才处理。
首先忽略源ip为广播或多播的分组(ICMP协议规定)。检查校验和是否正确。然后准备回显分组,其实就是将接受到的分组的IP源/目的地址交换,设置ICMP报头类型为0,重新计算校验和。最后发送ECHO回应。
 
void icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t);
发送主机不可达的ICMP回应。分配一个IP分组缓冲区,然后填充成ICMP错误报文。再交至ip_output发送。
该函数被ip_input及udp_input调用,来处理ip头中无效protocol域,发送无效协议ICMP及UDP包的目的地址是广播或多播地址,发送端口不可达ICMP分组。
 
void icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t);
发送TTL超时错误报文,和icmp_dest_unreach处理方式一样。
该函数被ip_forward调用,如果TTL为0,则发送超时ICMP分组

发表于: 2006-02-23,修改于: 2006-02-23 22:01,已浏览761次,有评论8条 推荐 投诉


网友评论
网友: 小马 时间:2006-03-05 16:28:53 IP地址:61.183.148.★
写的不错,是一个学习lwip协议栈的好地方。斑竹有没有lwip内存管理等其他方面的学习心得啊。自己也正在整理一些,一起交流一下拉

网友: 小马 时间:2006-03-05 16:29:18 IP地址:61.183.148.★
写的不错,是一个学习lwip协议栈的好地方。斑竹有没有lwip内存管理等其他方面的学习心得啊。自己也正在整理一些,一起交流一下拉

网友: 小马 时间:2006-03-05 16:29:19 IP地址:61.183.148.★
写的不错,是一个学习lwip协议栈的好地方。斑竹有没有lwip内存管理等其他方面的学习心得啊。自己也正在整理一些,一起交流一下拉

网友: 小马 时间:2006-03-05 16:29:20 IP地址:61.183.148.★
写的不错,是一个学习lwip协议栈的好地方。斑竹有没有lwip内存管理等其他方面的学习心得啊。自己也正在整理一些,一起交流一下拉

网友: muddogxp 时间:2006-03-06 20:53:13 IP地址:218.94.81.★
不好意思,lwip我看的不够深入,现在研究linux的协议栈,呵呵

网友: 小娅 时间:2006-03-13 20:20:48 IP地址:222.28.72.★
调试LWIP在linux下的版本遇到了一些困难,郁闷之中!

网友: sunrise 时间:2006-05-29 22:33:24 IP地址:218.94.136.★
写得不错,受益匪浅,有问题希望能共同探讨

网友: 浪天涯 时间:2008-04-15 09:13:54 IP地址:59.38.184.★
你们好,我现在正在AT7X256上 基于ucos移植lwip,现在已经可以ping通了 ,也就是icmp协议是好的了,可是当我测试上层tcp udp时 写一个创建socket的函数,程序就死掉了,不知道各位碰到过没,我QQ 49329745 希望得到指点

 发表评论