写这个是因为之前在用dirsearch时,dirsearch无法连接到dns服务器,但是虚拟机ping命令可以ping通
Ping命令
DNS和Ping
Ping命令
在了解ping之前要先了解一下ICMP协议,因为ping 是基于 ICMP协议工作的。
ICMP(Internet Control Message Protocol,互联网控制报文协议)
ICMP报的作用:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。(因为IP协议并不提供可靠传输,如果丢包了,IP协议也不能通知传输层是否丢包以及丢包的原因)在IP通信中如果某个IP包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责通知。
注意:
- ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此人们仍然把他归类为网络层协议
- ICMP只能搭配IPV4使用,如果是IPV6的情况下,需要是用ICMPV6
ICMP 包
ICMP 报文是封装在 IP 包里面,工作在网络层。
实际
ICMP 包头的类型字段,大致可以分为两大类:
- 一类是用于诊断的查询消息,也就是「查询报文类型」
- 另一类是通知出错原因的错误消息,也就是「差错报文类型」
- 0:回送应答 查询报文类型
- 3:目标不可达 差错报文类型
- 4:原点抑制 差错报文类型
- 5:重定向或改变路由 差错报文类型
- 8:回送请求 查询报文类型
- 9:路由器公告 差错报文类型
- 10:路由器请求 差错报文类型
- 11:超时 差错报文类型
- 17:地址子网请求 查询报文类型
- 18:地址子网应答 差错报文类型
- 回送消息(以ping为例) —— 类型 0 和 8:
- 回送消息用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息, ping 命令就是利用这个消息实现的。
- 相比原生的 ICMP,这里多了两个字段:
- 标识符:用以区分是哪个应用程序发 ICMP 包,比如用进程 PID 作为标识符;
- 序号:序列号从 0 开始,每发送一次新的回送请求就会加 1 , 可以用来确认网络包是否有丢
失。 - 在选项数据中, ping 还会存放发送请求的时间值,来计算往返时间,说明路程的长短。
- 几个常用的 ICMP 差错报文的例子:
- 目标不可达消息 —— 类型 为 3
- 原点抑制消息 —— 类型 4
- 重定向消息 —— 类型 5
- 超时消息 —— 类型 11
- 目标不可达消息(Destination Unreachable Message) —— 类型为 3:
- IP 路由器无法将 IP 数据包发送给目标地址时,会给发送端主机返回一个目标不可达的 ICMP 消息,并在这个消息中显示不可达的具体原因,原因记录在 ICMP 包头的代码字段。
- 由此,根据 ICMP 不可达的具体消息,发送端主机也就可以了解此次发送不可达的具体原因。
- 网络不可达代码为 0:
- IP 地址是分为网络号和主机号的,所以当路由器中的路由器表匹配不到接收方 IP 的网络号,就通过ICMP 协议以网络不可达( Network Unreachable )的原因告知主机。
- 自从不再有网络分类以后,网络不可达也渐渐不再使用了。
- 主机不可达代码为 1:
- 当路由表中没有该主机的信息,或者该主机没有连接到网络,那么会通过 ICMP 协议以主机不可达
( Host Unreachable )的原因告知主机。
- 当路由表中没有该主机的信息,或者该主机没有连接到网络,那么会通过 ICMP 协议以主机不可达
- 协议不可达代码为 2:
- 当主机使用 TCP 协议访问对端主机时,能找到对端的主机了,可是对端主机的防火墙已经禁止 TCP 协议访问,那么会通过 ICMP 协议以协议不可达的原因告知主机。
- 端口不可达代码为 3:
- 当主机访问对端主机 8080 端口时,这次能找到对端主机了,防火墙也没有限制,可是发现对端主机没有进程监听 8080 端口,那么会通过 ICMP 协议以端口不可达的原因告知主机。
- 这里可以用于端口扫描
- 需要进行分片但设置了不分片位代码为 4:
- 发送端主机发送 IP 数据报时,将 IP 首部的分片禁止标志位设置为1 。根据这个标志位,途中的路由
器遇到超过 MTU 大小的数据包时,不会进行片,而是直接抛弃。 - 随后,通过一个 ICMP 的不可达消息类型,代码为 4 的报文,告知发送端主机。
- 发送端主机发送 IP 数据报时,将 IP 首部的分片禁止标志位设置为1 。根据这个标志位,途中的路由
- 个人理解就是网络0、主机1、协议2、端口3,这个四个啥没有返回啥不可达,然后数据分片4,返回这个数据包超过MTU大小要分片。
- 原点抑制消息(ICMP Source Quench Message) —— 类型 4:
- 在使用低速广域线路的情况下,连接 WAN 的路由器可能会遇到网络拥堵的问题。ICMP 原点抑制消息的目的就是为了缓和这种拥堵情况。
- 当路由器向低速线路发送数据时,其发送队列的缓存变为零而无法发送出去时,可以向 IP 包的源地址发送一个 ICMP 原点抑制消息。
- 收到这个消息的主机借此了解在整个线路的某一处发生了拥堵的情况,从而增大 IP 包的传输间隔,减少网络拥堵的情况。
- 然而,由于这种 ICMP 可能会引起不公平的网络通信,一般不被使用。
- 个人理解路由器收的包太多了存不下了,叫其他主机发慢点,发太多直接丢了。
- 重定向消息(ICMP Redirect Message) —— 类型 5:
- 如果路由器发现发送端主机使用了「不是最优」的路径发送数据,那么它会返回一个 ICMP 重定向消息给这个主机。
- 在这个消息中包含了最合适的路由信息和源数据。这主要发生在路由器持有更好的路由信息的情况下。路由器会通过这样的 ICMP 消息告知发送端,让它下次发给另外一个路由器。
- 换条路。
- 超时消息(ICMP Time Exceeded Message) —— 类型 11:
- IP 包中有一个字段叫做 TTL ( Time To Live ,生存周期),它的值随着每经过一次路由器就会减1,直到减到 0 时该 IP 包会被丢弃。
- 此时,路由器将会发送一个 ICMP 超时消息给发送端主机,并通知该包已被丢弃。
- 设置 IP 包生存周期的主要目的,是为了在路由控制遇到问题发生循环状况时,避免 IP 包无休止地在网络上被转发。
- 此外,有时可以用 TTL 控制包的到达范围,例如设置一个较小的 TTL 值。
- 这里还有一点traceroute命令。(下面字多可以跳过看总结)
- 过程字太多了,总结一下
- traceroute命令将TTL初始设为1,使用与ping相同的ICMP回送请求报文
- 向目标地址发包,根据途径路由器返回超时报文,返回一次TTL加一,直到到达目标服务器
- 由于每次路由器都会返回超时报文,也就能够知道一条路由链路
- 不同操作系统的实现方法不同,也可用UDP实现
下面学习下DNS相关内容。
DNS和Ping
怎么说呢。看了些资料,dns是应用层的一个软件系统,ping也是应用层的程序,dns在工作时候发的报文和ping又不同
ping是利用了网络层的icmp协议,dns有自己的报文格式。
回到最开始的问题:为什么ping通了,dns请求却失效了?可能是dns请求被dns服务器当做噪声,而ping是用网络层的icmp协议,这个没有被禁。在延伸一下,为什么不用禁止ip的方式呢?如果dns服务器直接禁止ip访问了,那么dns请求和ping应该都会失效,但是这样子也导致一个问题,会导致用户都无法再使用dns服务器,这也是防御过度了吧。dns请求当做噪声过滤时,用户过上一段时间就又能继续使用该dns服务器。
参考链接
听说你 ping 用的很 6 ?给我图解一下 ping 的工作原理! (qq.com)