【lwip】10-ICMP协议&源码分析( 二 )


  1. 携带ICMP差错报文的数据报 。
  2. 不是某数据报第一个分片的分片数据报 。
  3. 具有多播地址的数据报 。
  4. 具有其它特殊目的地址的数据报 。(如环回、多播、广播地址等等)
10.3.1 目的不可达类型代码描述查询差错3目的不可达:0网络不可达√1主机不可达√2协议不可达√3端口不可达√4需要进行分片 , 但设置不了分片比特√5源站选路失败√6目的网络不认识√7目的主机不认识√8源主机被隔离(作废不用)√9目的网络被强制禁止√10目的主机被强制禁止√11由于服务类型TOS,网络不可达√12由于服务类型TOS,主机不可达√13由于过滤,通信被强制禁止√14主机越权√15优先权中止生效√当路由器不能给数据报找到合适的路由路径,或者主机不能将数据报递交给上层协议时,相应的IP数据报就会被丢弃,然后返回给源主机一个目的站不可达的ICMP差错控制报文 。
ICMP 目的不可达报文首部剩下的 4 字节全部未用:目的不可达的ICMP报文格式:
【lwip】10-ICMP协议&源码分析

文章插图
10.3.2 源站抑制类型代码描述查询差错40源站抑制√ICMP源站抑制报文格式参考 目的不可达的ICMP报文格式 。
ICMP源站抑制报文的目的就是告诉源主机,数据降速,这边快处理不过来了 。
源站抑制详细描述:
如果网关没有必要的缓冲区空间 , 则可以丢弃Internet数据报 , 以便将数据报排队输出到目的地网络路由上的下一个网络 。
如果网关丢弃一个数据报,它可以向该数据报的Internet源主机发送一个源站抑制消息 。
如果数据报到达得太快而无法处理,目标主机也可以发送源抑制消息 。
源站抑制消息是向主机发出的请求,要求它降低向Internet目的地发送通信的速度 。
网关可以为它丢弃的每一个消息发送一个源站抑制消息 。
在接收到源站抑制消息时,源主机应该降低它向指定目的地发送通信的速率,直到它没有收到源站抑制消息为止 。
然后,源主机可以逐渐增加它向目标发送流量的速度,直到它再次接收到源站抑制消息为止 。
网关或主机可以在接近其容量限制时发送源站抑制消息,而不是等待直到容量超过再发 。
因为这样可以触发源站抑制的数据报可以被交付 。
代码0可以从网关或主机接收 。
10.3.3 重定向(改变路由)类型代码描述查询差错5重定向:0对网络重定向√1对主机重定向√2对服务类型和网络重定向√3对服务类型和主机重定向√数据包格式:
【lwip】10-ICMP协议&源码分析

文章插图
在以下情况下,网关会向主机发送重定向消息 。
网关Gl从网关所连接的网络上的主机接收互联网数据报,然后检查自己的路由表,得到数据报internet目的网络X的路由上的下一个网关G2的地址 。
如果G2与数据报internet源地址标识的主机在同一网络上,则向该主机发送重定向消息 。
重定向消息建议主机将其网络X的流量直接发送到网关G2 , 因为这是到达目的地的较短路径 。
网关将原始数据报的数据转发到其internet目的地 。
对于带有IP源路由选项和目的地址字段中网关地址的数据报,即使到达最终目的地的路由比源路由中的下一个地址有更好的路由,也不发送重定向消息 。
可以从网关接收编码0、1、2和3 。
10.3.4 超时类型代码描述查询差错11超时:0传输期间TTL为0√1分片数据报重装超时√10.3.5 参数错误类型代码描述查询差错12参数问题:0IP首部异常√1缺少必须的选项√IP 数据报在网络中传输的时候,都是根据其首部进行识别的 , 如果首部出现错误,那么就会产生严重的问题,因此如果 IP 数据报首部出现错误就会丢弃数据报,并且向源主机返回一个 ICMP参数错误报文 。
10.4 ICMP查询报文常见的ICMP查询报文:
  1. 回显请求或回答 。
  2. 路由器查询和通告 。
  3. 时间戳请求或回答 。
  4. 信息请求或回答 。
  5. 地址掩码请求或回答 。
10.4.1 回显这是当前lwip唯一实现的ICMP查询报文 。
类型代码描述查询差错00回显应答(如ping应答)√80请求回显(如ping请求)√报文格式:
【lwip】10-ICMP协议&源码分析

文章插图
标识符和序列号没有具体范围要求,符合字节限制即可 。发送方可以自由使用这两个字段 。
如该标识符可能被用作TCP或UDP中的端口来标识会话,而序列号可能会在每次发送回显请求时递增 。

推荐阅读