ping命令返回结果分析
- 格式:docx
- 大小:26.11 KB
- 文档页数:9
ping命令的实现过程-回复"ping命令的实现过程"引言:在计算机网络中,ping命令是一种常见的网络诊断工具,用于测试主机之间的连接性以及网络延迟。
它通过发送ICMP(Internet Control Message Protocol)请求报文,并等待目标主机返回相应。
本文将一步一步地解析ping命令的实现过程,帮助读者深入了解这个常用工具背后的原理。
一、环境准备要实现ping命令,我们首先需要了解网络协议栈和操作系统网络接口的基本知识。
同时,为了简化实现过程,我们将使用一些常见的网络库、工具和编程语言,例如Python或C语言的套接字编程接口。
二、发送ICMP请求报文在实现ping命令时,我们要首先构造ICMP请求报文,并通过网络发送给目标主机。
这个过程可以分为以下几个步骤:1. 创建套接字:使用socket库创建一个原始套接字,以便可以直接访问网络层。
通常,这个套接字的协议类型应为ICMP。
2. 构造IP报文头:创建IP报文头以封装ICMP请求报文。
这需要设置源IP地址、目标IP地址以及其他相关网络参数。
3. 构造ICMP请求报文:创建ICMP请求报文,其中包括报文类型(通常为Echo Request)、标识符(用于匹配请求和响应报文)、序列号(用于区分不同的ping请求)等字段。
还要计算校验和,确保报文的完整性。
4. 发送报文:通过上述套接字将构造的IP报文头和ICMP请求报文发送给目标主机。
三、接收ICMP响应报文发送ICMP请求报文后,我们需要等待目标主机的响应,并分析返回的ICMP响应报文。
下面是实现这一步的具体过程:1. 准备套接字:在接收ICMP响应报文之前,我们首先需要准备接收这些报文的套接字。
同样,我们使用一个原始套接字,并设置其协议类型为ICMP。
2. 接收报文:使用套接字的接收函数,等待目标主机的ICMP响应报文,并将其存储在缓冲区中。
3. 解析报文:解析接收到的ICMP响应报文,提取其中的关键信息,如标识符、序列号以及时间戳等。
ping -s的用法-回复Ping是计算机网络领域中常用的命令和协议之一,用于测试网络连接是否正常以及测量网络连接的延迟和丢包率。
在本文中,我们将详细讨论ping 命令的用法,并探讨其在网络故障排查和性能优化中的重要性。
一、什么是Ping?Ping是一个基于Internet控制消息协议(ICMP)的命令和协议,用于向目标主机发送网络数据包并等待回应。
通常情况下,这些数据包是以小的字节大小发送的,目的是测试主机之间的连接以及测量网络性能。
Ping命令最早由美国互联网大佬迈克尔·米尔斯(Michael Mills)创造于1983年,起初是为了测试协议栈以及整个网络堆栈的可用性。
随着互联网的普及,Ping命令也成为最常见的网络工具之一。
二、Ping的用途是什么?Ping命令主要有以下用途:1. 测试网络可达性:通过向目标主机发送ICMP Echo Request数据包,并等待目标主机返回ICMP Echo Reply数据包,Ping命令能够判断目标主机是否能够正常访问。
如果一定次数的Ping请求没有得到回应(超时),则可以推断目标主机可能无法到达或存在故障。
2. 测试网络延迟:Ping命令还可以用来测量网络连接的时延。
当发送一个Ping请求后,Ping会记录下发送和接收数据包的时间戳,并计算两个时间戳之间的差值,即往返时间(RTT)。
通过多次Ping请求的RTT值的统计,可以获得平均延迟、最小延迟和最大延迟等指标,从而评估网络连接的质量。
3. 测试网络丢包率:发送大量的Ping请求并对其进行计数,可以统计出目标主机对Ping请求的回应次数。
如果回应的次数远少于发送的次数,可以推断出网络存在较高的丢包率。
这对于网络管理员来说,是判断网络故障的重要依据。
三、Ping命令的基本语法在Windows操作系统中,使用Ping命令非常简单。
只需要在命令提示符窗口中输入“ping 目标主机地址”即可。
例如,要Ping一个名为"ping在大多数Unix/Linux操作系统中,Ping命令的使用方法也类似。
Ping的返回信息- -Ping的返回信息有"Request Timed Out"、"Destination Net Unreachable"和"Bad IP address"还有"Source quench received"。
"Request Timed Out"这个信息表示对方主机可以到达到TIME OUT,这种情况通常是为对方拒绝接收你发给它的数据包造成数据包丢失。
大多数的原因可能是对方装有防火墙或已下线。
"Destination Net Unreachable"这个信息表示对方主机不存在或者没有跟对方建立连接。
这里要说明一下"destination host unreachable"和"time out"的区别,如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其它原因不可到达,这时候会出现"time out",如果路由表中连到达目标的路由都没有,那就会出现"destination host unreachable"。
"Bad IP address" 这个信息表示你可能没有连接到DNS服务器所以无法解析这个IP地址,也可能是IP地址不存在。
"Source quench received"信息比较特殊,它出现的机率很少。
它表示对方或中途的服务器繁忙无法回应。
下面是摘自微软高校论坛里的关于TTL的具体含义的帖子的部分内容简单来说,TTL全程Time to Live,意思就是生存周期。
首先要说明ping命令是使用的网络层协议ICMP,所以TTL指的是一个网络层的网络数据包(package)的生存周期,这句话不懂的先回去复习OSI7层协议去。
第一个问题,为什么要有生存周期这个概念。
ping -s的用法-回复Ping是一种网络工具,用于测试网络连接是否正常以及测量网络延迟和丢包率。
它通过向特定的目标IP地址发送数据包,然后等待目标IP地址的回复来确定网络是否可达。
Ping工具常用于排查网络问题以及评估网络性能。
在本文中,我将详细介绍Ping的用法及其在网络诊断中的作用。
一、Ping的基本原理Ping工具是基于ICMP(Internet Control Message Protocol,互联网控制消息协议)实现的。
当发送方的主机向目标主机发送一个ICMP Echo Request(回显请求)消息时,如果目标主机正常工作且网络连接正常,它将返回一个ICMP Echo Reply(回显应答)消息。
通过解析回显应答消息,Ping工具可以计算出往返时间RTT(Round-Trip Time)和丢包率。
二、使用Ping的命令行语法Ping工具在各种操作系统中都存在,包括Windows、macOS和Linux。
下面是常见的Ping命令行语法:Windows:ping [-t] [-a] [-n 第几次] [-l 包字节数] [-f] [-i TTL] [-v TOS] [-r 路由记录数目] [-s 日期时间] [-w 超时] [-R] [-S 源地址或主机名] [-j 主机列表] [-k 使用无故障转移源路由] [-x 使用SIT的目标主机列表] [-4] [-6] 目标名称/IP地址macOS/Linux:ping [-c 次数] [-i 时间间隔] [-s 数据字节数] [-W 超时时间] 目标名称/IP地址根据不同操作系统的命令行参数,我们可以控制Ping工具的行为。
以下是一些主要的参数:-t:持续Ping目标,直到手动中止。
-a:尝试解析IP地址为主机名。
-n:指定要发送的Ping请求次数。
-l:指定要发送的数据包的字节数。
-f:设置“不分段”标志,发送较大的数据包。
-i:设置初始存活时间(Time to Live,TTL)。
ping命令的主要功能,语法格式和常用参数以及信息的含义Ping命令的主要功能、语法格式和常用参数以及信息的含义Ping命令是网络中常用的一种网络诊断工具,它可以测试计算机和网络之间的连通性,并能够测量网络的延迟和丢包率。
本文将介绍Ping命令的主要功能、语法格式和常用参数,以及各个参数返回的信息的含义。
一、主要功能Ping命令的主要功能是测试主机之间的连通性。
它通过发送ICMP (Internet Control Message Protocol)回显请求报文,然后等待目标主机返回回显应答报文,从而判断主机之间是否能够互相通信。
通过Ping 命令,我们可以快速检测网络是否正常、服务器是否能够连接以及测量延迟和丢包率等重要指标。
二、语法格式Ping命令的语法格式如下:ping [参数] [目标主机]参数可以有多个,用空格分隔。
下面是常用的参数介绍:1. -t:连续发送ICMP回显请求报文,直到手动停止;2. -n count:指定发送回显请求报文的次数,count为次数;3. -l size:设置发送的回显请求报文的大小,size为字节数;4. -f:在数据包中设置“不分段”(Don't Fragment)位;5. -i TTL:设置IP数据包的存活时间(Time-To-Live),TTL为秒数;6. -v TOS:设置IP Type of Service(服务类型),TOS为十六进制值;7. -r count:设置路由跟踪记录的最大跃点数,count为数值;8. -w timeout:设置等待每次回复的超时时间,timeout为毫秒;9. -4:强制使用IPv4;10. -6:强制使用IPv6。
三、常用参数和信息含义1. 延迟(Latency):通过Ping命令可以测量出从发送ICMP报文到收到目标主机回应的时间,单位为毫秒。
延迟越小,表示网络传输速度越快。
2. 丢包率(Packet Loss):通过Ping命令可以检测出在传输过程中丢失的数据包的比例,丢包率为百分比。
课程实验报告
实验课程网络及其计算实验
实验名称 ping命令实验
实验地点
实验时间
学生班级
学生学号
学生姓名
XXXX年 XX 月 XX 日
实验目的:
(1)掌握ping命令及常用参数的用法。
实验器材:
一台连网的Windows操作系统的PC机。
实验内容:
使用ping命令及各常用参数去ping一些站点,观察并分析结果。
实验结果(附数据和图表):
打开运行窗口,快捷键windows键+R,输入cmd
ping命令
1.输入ping /?(得到ping命令使用方法)
2.ping+网址
3.ping -t +网址Ctrl+C时停止
4.ping -n count 衡量网络速度
5.ping -l size
实验结果分析及结论:
Ping命令基于ICMP协议,在源站点执行,向目的站点发送ICMP回送请求报文,目的站点在收到报文后向源站点返回ICMP回送回答报文,源站点把返回的结果信息显示出来。
该命令用于测试站点之间是否可达,若可达,则可进一步判断双方的通信质量包括稳定性等。
实验心得体会和建议:
通过本次实验简单的了解了ping命令的使用方法以及地址问题,注意到网络之间的安全性,对网络有了更深刻的认识。
在解决实验中发生的问题时,更让人具有成就感和继续学习的渴望。
实验评价及结论:
实验指导老师签字:年月日。
ping命令详解(最新)通过几个Ping命令判断网络故障篇一局域网内电脑不能上网大致可分以下几个原因,系统的IP设置、网卡、路由器网关和线路故障。
排除硬件及线路的故障问题,我们可以利用Ping命令来快速检测网络状况。
首先,我们点击系统中开始里的运行,在运行栏中输入cmd命令,操作系统中的DOS窗口就会弹出,在这里我们可以直观和方便地输入各种DOS命令。
接着,我们可以在DOS里输入Ping 127.0.0.1,该地址是本地循环地址,如发现本地址无法Ping通,就表明本地机TCP/IP协议不能正常工作,此时应检查本机的操作系统安装设置。
如果上面的操作成功,可Ping通的话,我们接下来可以输入IPConfig来查看本地的IP地址,然后Ping该IP(如 192.168.0.100),通则表明网络适配器(网卡或MODEM)工作正常,不通则是网络适配器出现故障,可尝试更换网卡或驱动程序。
然后Ping 一台同网段计算机的IP,不通则表明网络线路出现故障;若网络中还包含有路由器,则应先Ping路由器在本网段端口的IP,不通则此段线路有问题,应检查网内交换机或网线故障。
如果内网计算机能ping通则再Ping欣联的路由器(网关),(如192.168.0.1)如不通,则是路由器出现故障,可更换连接路由器的网线,或用网线将PC机直接连接至路由器,如能ping通,则应检查路由器至交换机的网线故障,如无法ping通,可尝试更换计算机再ping,若还不能 ping通,则应检查路由器故障。
最后,如果到路由器都正常,可再检测一个带DNS服务的网络,在上一步Ping通了目标计算机的IP地址后,仍无法连接到该机,则可Ping该机的网络名,比如Ping ,正常情况下会出现该网址所指向的IP,这表明本机的DNS设置正确而且DNS服务器工作正常,反之就可能是其中之一出现了故障;同样也可通过Ping计算机名检测WINS解析的故障(WINS是将计算机名解析到IP地址的服务)。
常用网络命令的使用的实验总结与感悟在进行网络管理和故障排查时,常用网络命令是非常重要的工具。
通过实验的方式学习和掌握这些命令的使用,可以提高我们对网络的理解和掌握,同时也可以更高效地解决网络问题。
在我进行实验的过程中,我总结了一些常用网络命令的使用方法和感悟。
首先,ping命令是最常用的网络命令之一。
通过向目标主机发送ICMP Echo 请求,我们可以测试其是否可达。
在实验中,我首先使用ping命令测试了我的本地主机是否能够访问外部网络。
通过指定目标IP地址或域名,我可以判断网络是否正常工作。
如果ping命令返回的结果是“请求超时”,则说明目标主机无法访问。
通过不断测试不同的IP地址或域名,我可以确定网络中的故障点,并及时修复。
其次,traceroute命令也是一个非常有用的网络命令。
通过追踪数据包的路由路径,我们可以了解到数据包在网络中的传输情况。
在实验中,我使用traceroute命令追踪了一个目标主机的路由路径。
通过查看每个跃点的IP地址和响应时间,我可以确定数据包在网络中的传输情况。
如果某个跃点的响应时间过长或丢包率过高,那么就说明网络中存在问题,需要进行进一步的排查和修复。
另外,nslookup命令也是一个常用的网络命令。
通过查询DNS服务器,我们可以获取到指定域名的IP地址。
在实验中,我使用nslookup命令查询了百度的IP地址。
通过输入“nslookup ”,我可以获取到百度的IP地址。
这对于解决一些域名解析问题非常有帮助。
如果我们无法访问某个域名,可以使用nslookup命令来检查域名解析是否正确。
此外,netstat命令也是一个非常有用的网络命令。
通过查看网络连接状态和路由表信息,我们可以了解到当前系统的网络情况。
在实验中,我使用netstat命令查看了当前系统的网络连接状态。
通过输入“netstat -an”,我可以获取到当前系统的所有网络连接。
这对于排查网络连接问题和监控网络流量非常有帮助。
LINUX下ping命令的使用祥解ping是一个很常用的小工具,它主要用于确定网络的连通性问题使用ping命令后,常见的出错信息通常分为3种:1、unknown host:不知名主机,该远程主机的名字不能被域名服务器DNS转换成IP地址,故障原因可能是域名服务器有故障,或者目标主机的名字不正确,或者网络管理员的系统与远程主机之间的通信线路有故障。
2、Destination Host Unreachable:此错误信息表明执行命令的计算机没能将信息发送到对方那里。
大多数情况是自己一方的计算机LAN连接线掉线,或者由于IP设置不对,而无法进行正常通信。
3、Request time out:表示在规定时间内因某种原因没有返回ping命令的应答,这种情况很可能是对方的计算机没有运行,或者中间线路不通致使信息没有到达对方那里。
大多数情况下是企业防火墙等阻挡了ping命令中使用的ICMP信息。
在这种情况下即便通信对象正在工作,也会有这种结果显示。
(echo包顺利到达目的主机,且目的主机也向源主机返回echo-reply包,但是echo-reply包在半路上丢失,无法到达源主机。
)如何用ping命令查找无法上网的原因1.Ping命令的语法格式:有必要先给不了解Ping命令的人介绍一下Ping命令的具体语法格式:ping目的地址[参数1J[参数2]……其中目的地址是指被测试计算机的IP地址或域名主要参数有:a:解析主机地址c:数据:发出的测试包的个数,缺省值为无限pingl:数值:所发送缓冲区的大小1以上面的结果为例1.Reply from 61.135.179.166: bytes=10240 time=48ms TTL=5010240的网络包用48毫秒完成了一次网络交互TTL=50表示服务器的操作系统是Linux,中间经过了14个网络设备2.Packets: Sent = 100, Received = 100, Lost = 0 (0% loss)发送了100个包,接收到100个回应,丢包率0%(一般应该在5%以内)3.Minimum = 48ms, Maximum = 50ms, Average = 48ms最短交互时间48毫秒,最长50毫秒,平均48毫秒平均时间如果跟最短很接近,表示速度比较均匀,偶尔时间长些平均时间如果跟最长很接近,一般认为网络忙的可能性比较大了推算速度网络速度≈包大小/交互时间 k字节/s例如上面的结果,网络速度≈ 10240/48 = 213 k/s = 1704K BIT/s 速度很好,肯定比1M 的ADSL是达不到这个速度的几个结果分析网络速度不稳定Minimum = 33ms, Maximum = 179ms, Average = 62ms最短、最长、平均,三个时间很开,说明网络速度不稳定,波动很大网络链接突然断开Reply from xxx.xxx.xx.xx: bytes=990 time=11ms TTL=108Reply from xxx.xxx.xx.xx: bytes=990 time=7ms TTL=108Request timed out.Reply from xxx.xxx.xx.xx: bytes=990 time=12ms TTL=108Reply from xxx.xxx.xx.xx: bytes=990 time=10ms TTL=108响应时间变化不大,突然出现一个超时,一般是中间某一个网络设备导致网络链接突然断开网络速度不稳定Reply from xxx.xxx.xx.xx: bytes=990 time=182ms TTL=108Request timed out.Reply from xxx.xxx.xx.xx: bytes=990 time=448ms TTL=108Reply from xxx.xxx.xx.xx: bytes=990 time=61ms TTL=108Request timed out.Reply from xxx.xxx.xx.xx: bytes=990 time=8ms TTL=108响应时间变化很大,时不时出现超时,一般是接触不良、网络设备处理不过来、网络繁忙等在ping的结果基础上,可以用 tracert 或者 pathping 进一步分析网络问题出在哪个网络设备上。
2.键入Ping 192.192.225.225就可以了Ping 192.192.225.225 with 32 byteS of dara:Reply from 192.192.225.225:bytes=32 time<10ms TTL=128Reply from 192.192.225.225:bytes=32 time<10ms TTL=128Reply from 192.192.225.225:bytes=32 time<10ms TTL=128Reply from 192.192.225.225:bytes=32 time<10ms TTL=128Ping StatiStiCe for 192.192.225.225:PacketS:Sent=4,ReceiVed=4,LOSt=0 0%lOSSApproximate round trip timeS in milli-secondS:Minimum=Oms,Maximum=1mS,Average=OmS以上返回了4个测试数据包,其中bytes=32表示测试中发送的数据包大小是32个字节,“time<10ms表示与对方主机往返一次所用的时间小于10毫秒,TTL=128表示当前测试使用的TTL Time to Live 值为128 系统默认值如果网络有问题,则返回如下所示的响应失败信息:Pinging 192.192.225.225 with 32 bytes of dataRequest timed out.Request timed out.Request timed out.Request timed out.Ping StatiStiCe for 192.192.225,225:PacketS:Sent=4,ReceiVed=0,lost\=4 100%lossMinimum‘0ms,Maximum=OmS,Average’0mS网络故障:出现第二种情况时,建议从以上几个方面来着手排查:一是看被测试计算机是否已安装了TCP/IP协议:二是检查一下被测试计算机的网卡安装是否正确且是否已经连通:三是看被测试计算机的TCP/IP协议是否与网F有效的绑定具体方法是通过选择“开始一设置一控制面板一网络”来查看:如果通过以上几个步骤的检查还没有发现问题的症结,建议重新安装并设置一,‘厂TCP/”协议,如果是TCP/IP协议的问题,这时绝对可以彻底解决按照上述方法,我们还可以用Ping命令来检查任意一台客户湍计算机上TCP/IP的工作情况例如我们要检查网络任一客户端“机房0厂上的TCP/IP协议的配置和工作情况,可直接在该台机器上Ping本机的IP地址,若返回成功的信息,说明IP地虹LB己置无误,若失败则应检查IP地址的配置?赏ü 韵虏街杞校菏紫认燃觳橐弧げ氛鐾纾氐?nbsp;看一下该IP地址是否正在被其他用户使用,然后再看一下该工作站是否已正确连入网络很多情况下用户没有登陆网络也会出现此种情况,这可是低级错误啊最后检查网—E的I/0地址lIRQ值和DMA值,这些值是否与其他设备发生了冲突其中最后一项的检查非常重要,也常被许多用户所忽视,即使是Ping成功后也要进行此项的检查因为当Ping本机的IP地址成功后,仅表明本机的IP地址配置没有问题,但并不能说明网卡的配置完全正确这时虽然在本机的“网上邻居”中能够看到本机的计算机名,可就是无法与其他的用户连通,不知问题出在何处,其实问题往往就出在网卡上简单来说,TTL全程Time to Live,意思就是生存周期首先要说明ping命令是使用的网络层协议ICMP,所以TTL指的是一个网络层的网络数据包package 的生存周期,这句话不懂的先回去复习OSI7层协议去第一个问题,为什么要有生存周期这个概念很显然,一个package从一台机器到另一台机器中间需要经过很长的路径,显然这个路径不是单一的,是很复杂的,并且很可能存在环路如果一个数据包在传输过程中进入了环路,如果不终止它的话,它会一直循环下去,如果很多个数据包都这样循环的话,那对于网络来说这就是灾难了所以需要在包中设置这样一个值,包在每经过一个节点,将这个值减1,反复这样操作,最终可能造成2个结果:包在这个值还为正数的时候到达了目的地,或者是在经过一定数量的节点后,这个值减为了0 前者代表完成了一次正常的传输,后者代表包可能选择了一条非常长的路径甚至是进入了环路,这显然不是我们期望的,所以在这个值为0的时候,网络设备将不会再传递这个包而是直接将他抛弃,并发送一个通知给包的源地址,说这个包已死其实TTL值这个东西本身并代表不了什么,对于使用者来说,关心的问题应该是包是否到达了目的地而不是经过了几个节点后到达但是TTL值还是可以得到有意思的信息的每个操作系统对TTL值得定义都不同,这个值甚至可以通过修改某些系统的网络参数来修改,例如Win2000默认为128,通过注册表也可以修改而Linux大多定义为64 不过一般来说,很少有人会去修改自己机器的这个值的,这就给了我们机会可以通过ping的回显TTL来大体判断一台机器是什么操作系统以我公司2台机器为例看如下命令D:Documents and Settingshx>ping 61 152 93 131Pinging 61 152 93 131 with 32 bytes of data:Reply from 61 152 93 131: bytes=32 time=21ms TTL=118Reply from 61 152 93 131: bytes=32 time=19ms TTL=118Reply from 61 152 93 131: bytes=32 time=18ms TTL=118Reply from 61 152 93 131: bytes=32 time=22ms TTL=118Ping statistics for 61 152 93 131:Packets: Sent = 4,Received = 4,Lost = 0 0% lossApproximate round trip times in milli-seconds:Minimum = 18ms,Maximum = 22ms,Average = 20msD:Documents and Settingshx>ping 61 152 104 40Pinging 61 152 104 40 with 32 bytes of data:Reply from 61 152 104 40: bytes=32 time=28ms TTL=54Reply from 61 152 104 40: bytes=32 time=18ms TTL=54Reply from 61 152 104 40: bytes=32 time=18ms TTL=54Reply from 61 152 104 40: bytes=32 time=13ms TTL=54Ping statistics for 61 152 104 40:Packets: Sent = 4,Received = 4,Lost = 0 0% lossApproximate round trip times in milli-seconds:Minimum = 13ms,Maximum = 28ms,Average = 19ms第一台TTL为118,则基本可以判断这是一台Windows机器,从我的机器到这台机器经过了10个节点,因为128-118=10 而第二台应该是台Linux,理由一样64-54=10了解了上面的东西,可能有人会有一些疑问,例如以下:1,不是说包可能走很多路径吗,为什么我看到的4个包TTL都是一样的,没有出现不同这是由于包经过的路径是经过了一些最优选择算法来定下来的,在网络拓扑稳定一段时间后,包的路由路径也会相对稳定在一个最短路径上具体怎么算出来的要去研究路由算法了,不在讨论之列2,对于上面例子第二台机器,为什么不认为它是经过了74个节点的Windows机器因为128-74=54对于这个问题,我们要引入另外一个很好的ICMP协议工具不过首先要声明的是,一个包经过74个节点这个有些恐怖,这样的路径还是不用为好要介绍的这个工具是tracert *nix下为traceroute ,让我们来看对上面的第二台机器用这个命令的结果D:Documents and Settingshx>tracert 61 152 104 40Tracing route to 61 152 104 40 over a maximum of 30 hops1 13 ms 16 ms 9 ms 10 120 32 12 9 ms 9 ms 11 ms 219 233 244 1053 12 ms 10 ms 10 ms 219 233 238 1734 15 ms 15 ms 17 ms 219 233 238 135 14 ms 19 ms 19 ms 202 96 222 736 14 ms 17 ms 13 ms 202 96 222 1217 14 ms 15 ms 14 ms 61 152 81 868 15 ms 14 ms 13 ms 61 152 87 1629 16 ms 16 ms 28 ms 61 152 99 2610 12 ms 13 ms 18 ms 61 152 99 9411 14 ms 18 ms 16 ms 61 152 104 40Trace complete从这个命令的结果能够看到从我的机器到服务器所走的路由,确实是11个节点上面说10个好像是我犯了忘了算0的错误了,应该是64-54+1,嘿嘿,而不是128的TTL经过了70多个节点既然已经说到这里了,不妨顺便说说关于这两个ICMP命令的高级一点的东西首先是ping命令,其实ping有这样一个参数,可以无视操作系统默认TTL值而使用自己定义的值来发送ICMP Request包例如还是用那台Linux机器,用以下命令:D:Documents and Settingshx>ping 61 152 104 40 -i 11Pinging 61 152 104 40 with 32 bytes of data:Reply from 61 152 104 40: bytes=32 time=10ms TTL=54Reply from 61 152 104 40: bytes=32 time=13ms TTL=54Reply from 61 152 104 40: bytes=32 time=10ms TTL=54Reply from 61 152 104 40: bytes=32 time=13ms TTL=54Ping statistics for 61 152 104 40:Packets: Sent = 4,Received = 4,Lost = 0 0% loss ,Approximate round trip times in milli-seconds:Minimum = 10ms,Maximum = 13ms,Average = 11msD:Documents and Settingshx>这个命令我们定义了发包的TTL为11,而前面我们知道,我到这台服务器是要经过11个节点的,所以这个输出和以前没什么不同现在再用这个试试看:D:Documents and Settingshx>ping 61 152 104 40 -i 10Pinging 61 152 104 40 with 32 bytes of data:Reply from 61 152 99 94: TTL expired in transitReply from 61 152 99 94: TTL expired in transitReply from 61 152 99 94: TTL expired in transitReply from 61 152 99 94: TTL expired in transitPing statistics for 61 152 104 40:Packets: Sent = 4,Received = 4,Lost = 0 0% loss ,Approximate round trip times in milli-seconds:Minimum = 0ms,Maximum = 0ms,Average = 0msD:Documents and Settingshx>可以看到,结果不一样了,我定义了TTL为10来发包,结果是TTL expired in transit 就是说在到达服务器之前这个包的生命周期就结束了注意看这句话前面的ip,这个ip恰好是我们前面tracert结果到服务器之前的最后1个ip,包的TTL就是在这里减少到0了,根据我们前面的讨论,当TTL减为0时设备会丢弃包并发送一个TTL过期的ICMP反馈给源地址,这里的结果就是最好的证明通过这里再次又证明了从我机器到服务器是经过了11个节点而不是70多个,呵呵最后再巩固一下知识,有人可能觉得tracer这个命令很神奇,可以发现一个包所经过的路由路径其实这个命令的原理就在我们上面的讨论中想象一下,如果我给目的服务器发送一个TTL为1的包,结果会怎样根据前面的讨论,在包港出发的第一个节点,TTL就会减少为0,这时这个节点就会回应TTL 失效的反? 飧龌赜Π 松璞副旧淼膇p地址,这样我们就得到了路由路径的第一个节点的地址因此,我们继续发送TTL=2的包,也就受到第二个节点的TTL失效回应依次类推,我们一个一个的发现,当最终返回的结果不是TTL失效而是ICMP Response的时候,我们的tracert也就结束了,就是这么简单顺便补一句ping命令还有个-n的参数指定要发包的数量,指定了这个数字就会按照你的要求来发包了而不是默认的4个包如果使用-t参数的话,命令会一直发包直到你强行中止它ping的后台执行过程就以这样一个网络作为例子:假设有A、B、C、D四台机器,一台路由RA,子网掩码均为255.255.255.0,默认网关是192.168.0.1。