->>Ping命令简介
ping 命令概述:
ICMP协议是“Internet Control Message Ptotocol”(因特网控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
Ping(Packet Internet Groper),因特网包探索器,用于验证网络连接(TCP/IP)的连通性。使用Ping命令向目标主机或IP地址发送ICMP回应请求,验证主机能否连接到TCP/IP网络和网络资源,也可以用其隔离网络硬件和不兼容配置。根据返回的信息,可以推断TCP/IP参数是否配置正确,以及运行是否正常、网络是否通畅等。
其实,Ping就是一个测试程序,通常用Ping目标主机的IP地址或域名地址,看它是否响应,来判断网络的连通性。如果Ping运行正确,大体上就可以排除网络访问层、网卡、MODEM的输入输出线路、电缆和路由器等存在的故障,从而缩小问题范围。但由于可以自定义所发数据报的大小及无休止的高速发送,ping也被某些别有用心的作为DDOS(拒绝服务攻击)的工具;
ping 命令原理:
- 源主机(输ping命令的主机)向目标主机发送一个ICMP定长的echo数据包,若目标主机存活,会返回同样大小ICMP协议的echo-reply数据包,若在特定时间内没有返回,就是“超时”,会被认为指定的网络地址不存在。
- ICMP协议通过IP协议发送,IP协议是一种无连接的,不可靠的数据包协议。在Unix/Linux,序号从0开始计数,依次递增。而Windows ping程序的ICMP序列号是没有规律。
- ICMP协议在实际传输中数据包:20字节IP首部 + 8字节ICMP首部 + 1472字节<数据大小>38字节。
- ICMP报文格式:IP首部(20字节) + 8位类型 + 8位代码 + 16校验和 + (不同类型和代码,格式也有所不同)。
ping 命令参数以及描述:
命令格式如下:
ping 目标主机地址(IP或者域名)[参数]
-
- -t:不断向指定的主机发送报文,直到终止反复;
- -a:解析主机名的ip地址;
- -n:指定要发送的请求报文的数目;
- -l:设置发送缓冲区的大小;
- -f:在报文中设置不分段标志(一般你所发送的数据包都会通过路由分段再发送给对方,加上此参数以后路由就不会再分段处理。);
- -i:TTL设置报文在网络中的生存时间(Time to Live);
- -v:TOS服务类型(Type of Service);
- -r:记录指定个数的路由段的路由情况;
- -s:指定个数的路由时间戳;
- -j:host-list由指定的路由发送报文,但不强求一致;
- -k:host-list严格按指定路由发送报文;
- destination-list:指定要Ping的目标主机名或IP地址
下图显示了一些有用的Ping命令选项
测试方式:
出现提示消息如下:
- Destination net unreachable(目标网络不可到达):响应表明没有到目标位置的路由。需要检查在“Destination net unreachable(目标网络不可到达)”消息的“Reply from(回答来自)”地址中列出的路由器的路由表。
- Request timed out(请求超时):响应表明在默认的时间期间(1 秒钟)内没有对 ping 作出响应。对于“请求超时”可以检查以下原因:
- 目标主机关闭,或者网络上根本没有这个地址;物理验证主机正在运行或通过其他协议检查连通性。
- 路由器问题,对方与自己不在同一个网段内,通过路由无法找到对方;要检查在源和目标之间的路径中的路由器,请使用 tracert 命令。
- 对方确实存在,但设置了ICMP数据包过滤(比如防火墙设置)。
- 响应的等待时间多于一秒。使用 ping 命令上的 -w 选项增加超时。例如,要允许在 5 秒钟内响应,请使用 ping -w 5000
- Bad IP address:没有连接到DNS服务器,所以无法解析这个IP地址,也可能是IP地址不存在。
- Source quench received:表示对方或中途的服务器繁忙无法回应。
- Unknown host:远程主机的名字不能被域名服务器(DNS)转换成IP地址。故障原因可能是域名服务器有故障,或者其名字不正确,或者网络管理员的系统与远程主机之间的通信线路有故障。
- No answer:本地系统有一条通向中心主机的路由,但却接收不到它发给该中心主机的任何信息。故障原因可能是下列之一:中心主机没有工作;本地或中心主机网络配置不正确;本地或中心的路由器没有工作;通信线路有故障;中心主机存在路由选择问题。
- no rout to host:网卡工作不正常。
- transmit failed,error code:10043网卡驱动不正常。
- unknown host name:DNS配置不正确。
ping 示例:
示例:有A、B、C、D四台机子(其中A、B的IP分别为192.168.0.4-192.168.0.5,子网掩码均为255.255.255.0;C、D的IP分别为192.168.1.3-192.168.1.4,子网掩码均为255.255.255.0),一台路由RA连接以上两个子网。
1)、在同一网段
在主机A上运行“Ping 192.168.0.5”后,都发生了些什么呢? 首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.0.5”一起交给IP层协议(和 ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“192.168.0.5”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并想办法得到192.168.0.5的MAC地址(物理地址,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),以便交给数据链路层构建一个数据帧。关键就在这里,IP层协议通过对比机器B的IP地址、自己的IP地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络内查找这台机器的MAC。如果以前两机有过通信,在A机的ARP缓存表应该有B机IP与其MAC的映射关系;如果没有,就发一个ARP请求广播,得到B机的MAC, 一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。
2)、在不同网段
在主机A上运行“Ping 192.168.1.4”后,开始跟上面一样,到了怎样得到MAC地址时,IP协议通过计算发现D机与自己不在同一网段内,就直接将交由路由处理,也就是将路由的MAC取过来,至于怎样得到路由的MAC,跟上面一样,先在ARP缓存表找,找不到就广播吧。路由得到这个数据帧后,再跟主机D进行联系,如果找不到,就向主机A返回一个超时的信息。