TCP/IP illustrated 阅读笔记(六) ICMP协议

1. ICMP简介(ICMPv4)

ICMP全称为Internet ControlMessage Protocol

ICMP为IP协议提供控制信息和diagnostic

ICMP装在IP数据包中,但是不是传输层协议(该层的协议为应用进程提供端到端的通信服务)也不是网络层协议(网络层提供路由和寻址的功能),算2.5层

需要注意的是,路由器由于拥塞丢包的行为不会生成ICMP message

Type表明ICMP类型,Code表明细分类型

2. ICMP功能

ICMP分为两类:errormessage 和  query/informationalmessage

ICMP错误消息中携带了发生错误的IP数据包的部分数据(包括IP header,大概500字节)

哪些些数据包不会引发ICMP error message

ICMPv4error message

IPv4目的地址为广播地址或者多播地址

数据链路层广播

fragment数据包非第一个包(应该指的是IP分段四层包)

源地址(没有指明是否为IP地址,应该包括二层地址)不是指向单个host(比如广播、全0地址,多播地址等)

当系统进行ICMP生成速率限制时也不会每个数据包都产生ICMP(避免ICMP占用过多网络资源)

3. 常用ICMP error message类型

3.1 Destination Unreachable(Type3)

Host Unreachable (Code1)

在direct delivery情况下,无法delivery 给目的IP(比如发送ARP消息,但是ARP的目标IP地址不存在)

Communication Administratively Prohibited (Code 13)

通信被管理员级别的对象阻止了,通常是防火墙导致的

Port Unreachable

数据包到达了目的host,但是端口不不可达,即没有应用程序当前从这个端口接受数据包(如UDP协议的端口)

3.2 Redirect (Type 5)

host发送数据包时的下一跳路由器不是正确的路由器,当前路由器会将这个数据不傲转发给正确的路由器,并使用ICMP将这个消息告诉host,让host知道数据包下一跳应该是哪个路由器(IP地址),比如一个网络中有两个网关,一个host发错网关了,这个时候就可以产生重定向了(没有试验过,看描述是这样的)

3.3 Time Exceeded(Type 11)

ttl耗尽了,路由器丢掉这个数据包是就会发一个Time Exceeded ICMP

traceroute 使用这个ICMP来获取路径,traceroute先发一个ttl为1的UDP包,的获得第一跳(第一跳路由器就会吧这个包丢掉,并发ICMP),,然后发一个ttl为2的UDP包,获取第二跳路由器,以此类推,直到到达最终目的地。

3.4 Parameter Problem (Type 12)

如果IP包中有些域出错了,并且没有合适的ICMP消息去告知这个错误,就使用这个ICMP告诉源主机是哪个域出错了

4. 常用ICMP query/informational message类型

Echo Request/Reply (Type 0/8) ,对,就是ping用的

发送一个Request 然后接收Reply,这就是ping

Request中使用Identifier域来标识不同的Echo Request包(通常用进程的pid来作为identifier)

Reqeust包中存了发送时的时间,Reply时会复制Request的内容,所以一并复制了发送时的时间,Reply接收者(发送Request的人),读取时间然后和当前时间相减就获得RTT(round-trip time)了

Router DIscovery(type9,10)

用于路由发现,不过现在IPv4中基本由DHCP来做,Mobile IP中涉及到了这个消息类型,没有细说,后面可能会看到吧。


猜你喜欢

转载自blog.csdn.net/damontive/article/details/52971206
今日推荐