二、 IP 地址的基础知识( 八 )


由此,根据 ICMP 不可达的具体消息,发送端主机也就可以了解此次发送不可达的具体原因 。
举例 6 种常见的目标不可达类型的代码:
a. 网络不可达代码为 0:
IP 地址是分为网络号和主机号的,所以当路由器中的路由器表匹配不到接收方 IP 的网络号,就通过 ICMP 协议以网络不可达()的原因告知主机 。
自从不再有网络分类以后,网络不可达也渐渐不再使用了 。
b. 主机不可达代码为 1:
当路由表中没有该主机的信息,或者该主机没有连接到网络,那么会通过 ICMP 协议以主机不可达( Host
)的原因告知主机 。
c. 协议不可达代码为 2
当主机使? TCP 协议访问对端主机时,能找到对端的主机了,可是对端主机的防?墙已经禁? TCP 协议访问,那么会通过 ICMP 协议以协议不可达的原因告知主机 。
d. 端口不可达代码为 3:
当主机访问对端主机 8080 端口时,这次能找到对端主机了,防火墙也没有限制,可是发现对端主机没有进程监听8080 端口,那么会通过 ICMP 协议以端口不可达的原因告知主机 。
e. 需要进行分片但设置了不分片位代码为 4:
发送端主机发送 IP 数据报时,将 IP 首部的分片禁止标志位设置为 1。根据这个标志位,途中的路由器遇到超过MTU 大小的数据包时,不会进行分片,而是直接抛弃 。
随后,通过?个 ICMP 的不可达消息类型,代码为 4 的报文,告知发送端主机 。
原点抑制消息(ICMP) —— 类型 4:
在使用低速广域线路的情况下,连接 WAN 的路由器可能会遇到网络拥堵的问题 。
ICMP 原点抑制消息的目的就是为了缓和这种拥堵情况 。
当路由器向低速线路发送数据时,其发送队列的缓存变为零而无法发送出去时,可以向 IP 包的源地址发送?个
ICMP 原点抑制消息 。
收到这个消息的主机借此了解在整个线路的某?处发生了拥堵的情况,从而增? IP 包的传输间隔,减少网络拥堵的情况 。
然而,由于这种 ICMP 可能会引起不公平的网络通信,?般不被使用 。
重定向消息(ICMP) —— 类型 5
如果路由器发现发送端主机使用了不是最优的路径发送数据,那么它会返回?个 ICMP 重定向消息给这个主机 。
在这个消息中包含了最合适的路由信息和源数据 。这主要发生在路由器持有更好的路由信息的情况下 。路由器会通过这样的 ICMP 消息告知发送端,让它下次发给另外?个路由器 。
好比,本可以过条马路就能到的地方,但不知道,所以绕了?圈才到,后?知道后,下次就不会那么傻再绕?圈了 。
超时消息(ICMP Time) —— 类型 11
IP 包中有?个字段叫做 TTL ( Time To Live,生存周期),它的值随着每经过?次路由器就会减 1,直到减到
0 时该 IP 包会被丢弃 。
此时,路由器将会发送?个 ICMP 超时消息给发送端主机,并通知该包已被丢弃 。
设置 IP 包生存周期的主要目的,是为了在路由控制遇到问题发生循环状况时,避免 IP 包无休止地在网络上被转发 。
此外,有时可以用 TTL 控制包的到达范围,例如设置?个较小的 TTL 值 。
ping —— 查询报文类型的使用
接下来,我们重点来看 ping 的发送和接收过程 。
同个子网下的主机 A 和 主机 B,主机 A 执行ping 主机 B 后,我们来看看其间发送了什么?
ping 命令执行的时候,源主机首先会构建?个 ICMP 回送请求消息数据包 。
ICMP 数据包内包含多个字段,最重要的是两个:
每发出一个请求数据包,序号会自动加 1。为了能够计算往返时间 RTT,它会在报文的数据部分插?发送时