lwip ---(十二)ICMP处理
目前,IP层的东西基本讲解完,数据包的发送或分片发送没有具体涉及到。数据包的发送,与上层协议密切相关,即 传输层 ,后面的内容就是讨论传输层的东西了。这里先讲解传输层协议中比较简单的 ICMP 协议。 ICMP(Internet Control Message Protocol) 是Internet控制报文协议 ,用于在IP主机、路由器之间传递控制消息。 控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息 。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 在以前讲解IP层 ip_input 函数时,已经三次涉及到了 ICMP 的东西,第一次在数据包转发过程中,需要将数据包的 TTL 值减 1 ,若此时 TTL 值变为 0 则用 icmp_time_exceeded 函数向源主机返回一份超时 ICMP 信息;还有 两次是 ip_input 函数通过IP报文头部的协议字段值判断该数据包是交给哪个上层协议 的, 若是 ICMP 协议,则调用 icmp_input 函数 ; 若没有一个协议能接受这个数据包,则调用 icmp_dest_unreach 函数向源主机返回一个协议不可达 ICMP 差错控制包 。这里先讲解 icmp_time_exceeded 和 icmp_dest_unreach 函数是怎样发送 ICMP 信息包的。