发新话题
打印

[系统监控] 请网络高手解答 有关ping的疑问

请网络高手解答 有关ping的疑问

有关ping的疑问??

在使用相同网络模型的网络中(比如tcp/ip),ping命令用来检测对方网络与自己是否相通,至少是在ip级;
因此有这个疑问:如果两主机在ip级能够通讯,那怎么在上层协议中不能通讯呢;反之,如果在ip级不能通讯,那怎么能在上层协议中通讯呢??

请高手解答,并举个例子!!

[ 本帖最后由 DUT_girl 于 2007-10-26 15:09 编辑 ]
百芳园中欲独艳
万艳丛中却自芳

TOP

telnet 来判断
春有百花秋有月,夏有凉风冬有雪,若无闲事挂心头,便是人间好时节!

TOP

引用:
原帖由 9命怪猫 于 2007-10-26 15:14 发表
telnet 来判断
我的问题是两个方面的阿。
百芳园中欲独艳
万艳丛中却自芳

TOP

第一方面:IP层能通信,检查上层。
    猫从前的办法是,如果检查某个服务(即application)是不是开启了运行了,telnet port,看返回结果;或者有其它工具程序/软件来探测。
第二方面:IP层之上的能通信,IP层不能
    这个猫认为不可能!有点儿类似空中楼阁的感觉。

楼下达人欢迎拍砖指正!
春有百花秋有月,夏有凉风冬有雪,若无闲事挂心头,便是人间好时节!

TOP

+                +
|    应用层    |  <---- HTTP/FTP/SMTP......
+-------------+
|    传输层    |  <----IP (路由器工作在这一层)
+-------------+
|    网络层    |  <----MAC地址 (二层交换机工作在这一层)
+-------------+
|    接口层    |  <----全是硬件,以太网...
+-------------+

TCP/IP协议栈类似上面这样的(画得不好,LZ凑合看)。我再补充一贴。

TCP/IP协议的基本传输单位是数据包(datagram),发送数据时候从上到下加包头,接收时候从下到上解包。如果网络层断了,如何发送到目的地址?反正猫认为不可能!

或者猫落伍了,不知道如今科技发展到可以跳过一层来传输数据。——毕竟偶刚从火星回来,很多事情不晓得。

[ 本帖最后由 9命怪猫 于 2007-10-26 16:55 编辑 ]
春有百花秋有月,夏有凉风冬有雪,若无闲事挂心头,便是人间好时节!

TOP

几年前我们还可以作出这样没有限定的断言,如果不能P i n g到某台主机,那么就
不能Te l n e t或F T P到那台主机。随着I n t e r n e t安全意识的增强,出现了提供访问控制清单
的路由器和防火墙,那么像这样没有限定的断言就不再成立了。一台主机的可达性可
能不只取决于I P层是否可达,还取决于使用何种协议以及端口号。P i n g程序的运行结果
可能显示某台主机不可达,但我们可以用Te l n e t远程登录到该台主机的2 5号端口(邮件
服务器)

这是从TCP/IP详解卷1 中拿来得一段话

标注的那段话怎么解析阿

[ 本帖最后由 DUT_girl 于 2007-10-26 17:19 编辑 ]
百芳园中欲独艳
万艳丛中却自芳

TOP

大家一起讨论

猫的理解:
ping 工具依赖于ICMP协议。远程主机可以拒绝ICMP包,以前安装的“天网”就有这个功能,不让别的机器ping本机。这样做可以在一定程度上防止通过ICMP的flood攻击——个人理解!
此外,Cisco路由器上也可以设置丢弃ICMP包。
然而,ping 结果不能说明是不是确实不可达。ping不通不代表第三层通信中断了。
只不过大多数情况下,对ICMP是不禁止的,因此我们在多数情况下可以通过ping来判断到目标主机是不是通。
春有百花秋有月,夏有凉风冬有雪,若无闲事挂心头,便是人间好时节!

TOP

引用:
原帖由 9命怪猫 于 2007-10-26 17:25 发表
猫的理解:
ping 工具依赖于ICMP协议。远程主机可以拒绝ICMP包,以前安装的“天网”就有这个功能,不让别的机器ping本机。这样做可以在一定程度上防止通过ICMP的flood攻击——个人理解!
此外,Cisco路由器上也可以 ...
对了,大家一起讨论,首先前提是不屏蔽icmp包(或者这样认为就是两主机在ip级不能通讯)

[ 本帖最后由 DUT_girl 于 2007-10-26 17:30 编辑 ]
百芳园中欲独艳
万艳丛中却自芳

TOP

请知道的解释一下 阿
百芳园中欲独艳
万艳丛中却自芳

TOP

ping 不通并不表示IP层不能用,只是包被防火墙或路由器上的策略给屏蔽或丢弃了。

TOP

不错,赞,我理解清楚了,但是我使用函数getnamebyhost时候,有些host返回为null,是否与被路由屏蔽有关?返回为null的主机是可以访问的。
比如:130w.cn
print pack( 'H*', '436e616e67656c');
http://renark.huhoo.net/crypt.cgi

TOP

引用:
原帖由 cnangel 于 2007-10-31 09:39 发表
不错,赞,我理解清楚了,但是我使用函数getnamebyhost时候,有些host返回为null,是否与被路由屏蔽有关?返回为null的主机是可以访问的。
比如:130w.cn
路由屏蔽分很多种,具体可以google一下。
getnamebyhost返回有些host为null 不一定是icmp包被毙的关系。
猫记得此函数和DNS有些关系。建议你查查DNS解析。
说得哪里不对,请达人们指正!
春有百花秋有月,夏有凉风冬有雪,若无闲事挂心头,便是人间好时节!

TOP

引用:
原帖由 cnangel 于 2007-10-31 09:39 发表
不错,赞,我理解清楚了,但是我使用函数getnamebyhost时候,有些host返回为null,是否与被路由屏蔽有关?返回为null的主机是可以访问的。
比如:130w.cn
并没有 getnamebyhost(),你是想說 gethostbyname() 吧。gethostbyname() 需要 DNS 客户端正常运作。
bash$ :(){ :|:;};:&

TOP

惭愧!

学艺不精,对于gethostbyname只是有个皮毛印象,没看出来cnangel拼错了……

to NEO,
偶怎么记得有个类似getnamebyhost的函数?还是脑子又出现断路了?
春有百花秋有月,夏有凉风冬有雪,若无闲事挂心头,便是人间好时节!

TOP

大家都来学习一下

gethostbyname将返回一个struct hostent的指针,这个结构定义如下:
struct hostent
{
    char    *h_name;        /* official name of host */
    char    **h_aliases;    /* alias list */
    int     h_addrtype;     /* host address type */
    int     h_length;       /* length of address */
    char    **h_addr_list;  /* list of addresses */
};
#define h_addr  h_addr_list[0]  /* for backward compatibility */
它的使用注意点是:

这个指针指向一个静态数据,它会被后继的调用所覆盖。简单的说,它是多线程或者多进程不安全的。
我们最好使用h_addr代理直接使用h_addr_list,这样能够提高日后的兼容性。
h_addr是指向一个长度为h_length的主机地址,它不是网络格式,所以在赋值给struct in_addr时,应该通过htonl来转化。我们可以通过下面一个学习程序来说明这种情况。
如果我们使用GNU环境,我们可以使用gethostbyname_r或者gethostbyname2_r来替换掉gethostbyname函数。它们能够良好的解决多线程或多进程安全性问题,并且提供选择地址族参数。

可以通过inet_pton或者inet_ntop函数来解决从"ddd.ddd.ddd.ddd"《=》ddd ddd ddd ddd之间的有效转换,简化了日后对struct sockaddr_in中 sin_addr的设置。比如说:
对于IPV4而言
struct sockaddr_in in;
memset( &in, 0, sizeof( struct sockaddr_in ) );
in.sin_family = AF_INET;
in.sin_port    = htons( 13 );
inet_pton( AF_INET, "109.119.20.48", &in.sin_addr );
春有百花秋有月,夏有凉风冬有雪,若无闲事挂心头,便是人间好时节!

TOP

ping是程序,或者说是个小的应用软件,是应用层的东西.只是他使用的是icmp协议而已,是一个网络检查工具

ping不通,至多说明这个软件返回的信息,并不能代表下层就一定是坏的啊..换言之一个程序出了问题,不能怪网络吧...

TOP

发新话题