ping && url/uri/urn

OO~ posted @ 2013年3月18日 11:12 in 其他 , 2180 阅读

    这个标题很多人初次一瞥,可能会觉得没有什么可以说的。的确,这个问题是一个简单的问题,但是正是因为太简单了,所以,在编写程序时,往往不会注意到,我也其中一个,所以在此做点总结,用来警醒自己,也希望这篇文章能对初学者有些许帮助。

    通过维基百科,可以看到这样的定义“ping是:一个电脑网络工具,用来测试待定主机是否通过IP到达”,具体的工作原理是利用网络上机器IP地址的唯一性,给目标地址发送一个数据包,再要求对方发送同样大小的数据包来确定两台机器是否连通,时延是多少。

    其基本格式是ping [某个主机IP],根据结果的不同情况来判断网络情况以及故障原因。这里外加提一点,ping to death,其实是一些木马等病毒程序会不断给某服务器发送ping,抢占服务器资源,导致不能正常应答其他请求,最后整个系统崩溃不能工作。

    所以,在使用ping时,要注意,你ping的对象是否是一个IP地址,还是简单的url网络资源,例如:

ping http://music.baidu.com

ping http://music.baidu.com/top/dayhot

    第一个ping使用是可以ping通的,而后者是ping不通的,原因很简单,因为前者的地址对应的是一个服务器的IP地址,而后者对应的是一个url网络资源,不符合ping的基本“范式”。(我这几天因为这个东西犯错了,总结还是对url和ping的概念以及知识的掌握不够深入)


    除了上面的简单总结,我还想回顾一下uri,url和urn,加深印象。

  • URI:uniform resource identifier,统一资源标识符;
  • URL:uniform resource locator,统一资源定位符;
  • URN:uniform resource name,统一资源名称;

    其中,uri和urn是uri的子集,网络上每个资源,如html文档,图像,视频,表格,文字等,都是通过uri来进行定位的。这三者基本都是由三部分构成:协议/主机IP(端口)/主机资源目录(一般以目录形式存在)。可以这样来比喻,一个网站就是一个大屋子,uri就是这个屋子的大门,而url就是对屋子里的每个物品进行了标识,urn就是这些物品能被计算机理解的名字。

PS:这里我可能说的不是很充分,但是,我觉得只要记住这些就已经差不多了,主体就已经出来了。

 

Avatar_small
vx13 说:
2013年3月18日 16:24

貌似在 linux 下,第一个也是 ping 不符合命令格式的。 ping 的目标是主机,而不是主机上的某个服务,所以不能加 http 这种协议标识。
另外, ping to death 不太了解,是不是 ping of death ?
传统的 ping of death 是一种构造异常数据包,引发操作系统网络协议栈内部的漏洞,使操作系统崩溃掉的攻击。维基百科说近年来也有这种洪泛消耗资源的了。
http://zh.wikipedia.org/wiki/Ping_of_death

Avatar_small
sl 说:
2013年3月18日 19:00

ping是网络层的命令,用来确定主机之间的通讯是否正常,也就是通常说的ping某个ip。只不过ping还可以通过主机名解析来得到某个主机的ip再进行ping的操作,而这些主机名可以不是所谓的url。比如你可以ping localhost(通常用于测试协议栈是否正常工作),localhost会被解析为127.0.0.1接着ping会发送数据包给本机,并接受本机的回覆。
ping并不直接涉及任何url,uri,urn。这些统一资源(地址,id,名称)的使用应该归类到应用层,比如http,ftp,ssh等等都是应用层协议。端口扫描可能提供一些应用层资源的有效性信息,但是必须进一步通过协议通讯才能确定应用层资源的有效性。比如http通常工作在80端口,但是也有可能工作在8080端口,甚至可能其他任意端口,而80端口也可能运行其他服务。这些都不是ping所能完成的,也不是ping的目的。

当然,如果现有的网络协议最终在未来的某一天统一了,那么也许在那时会有一个类似ping的工具可以确定任意资源的有效性。

Avatar_small
OO~ 说:
2013年3月19日 08:46

@sl:膜拜,感觉楼主好像给我重新回顾了一下网络课的知识!经常不用,便忘了,在这里检讨检讨!

还有一点不明白的是,为什么ping localhost是检测协议栈呢?这个具体的包的路径是在那5层协议上形成了一个回路??

Avatar_small
OO~ 说:
2013年3月19日 08:57

@vx13: 楼主说的对,这里是不需要http://,我在看的时候没看仔细!sorry!

by the way,问下,因为加了一个协议前缀就成了一个主机上的服务么?这个不是太明白!

我个人觉得ping to death和楼主说的ping of death是不同的,我记得我们老师当年是这样说的,在某些肉机中的病毒,一直会请求服务器要求建立连接,根据三次握手协议,服务器会预留一些资源出来,如果这样的无效请求多了,会导致正常请求无法得到响应,最后系统崩溃!

Avatar_small
OO~ 说:
2013年3月19日 09:01

@vx13:看了一下ping of death,感觉和ping to death两种模式应该是不同的!前者是一次发送很大的数据包,超出了服务器的内存,导致崩溃,而后者应该是不断的发包,但是包的大小不是大的会超出服务器的内存!


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter