免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1838 | 回复: 5

对“设置不标准子网的问题”中的几个地方有疑问 [复制链接]

论坛徽章:
0
发表于 2004-03-05 20:47 |显示全部楼层

williamCU:
8= 00001000
240=11110000
2项 and 的结果为 全0
你看这样能行吗?

为什么不行?结果本来就应该是0啊,IP地址与MASK做与运算得到的就是网络地址啊,8正好是0/28这个网络里的地址啊。


williamCU:
sorry,我说错了,不是and。计算结果后四位是1000,应该可以的。

晕,到底应该是怎么样?我一下子昏了头了。难道不是IP地址与MASK做与运算得到网络地址?我以前好象一直是这么算的啊


williamCU:
判断子网是否非标准,不仅要看子网掩码,也要看ip地址的网络部分。
比如15.30.104.88 netmask 255.255.255.240可以
218.1.131.88 netmask 255.255.255.240就不行
TCP/IP有一套标准,什么样的子网是否标准,有一套算法。不是简单的看掩码就行的。

为什么前一个可以后一个不行?我觉得既然有MASK了就是有类地址啊,不存在ABC类地址的分别了吧?15和218有什么区别?MASK是240的话88这个地址应该可以在80网络里吧?有什么问题么?


tc:
楼主,你说得情况偶算了一下,如果你使用255.255.255.240作为子网掩码,那么子网ID占用4个为,网络ID占用4个ID,并且,子网0000,1111是不可用的,子网中0000,1111也是不可用的。
218.1.131中的8是在第一个不可用的子网中,所以设置的时候会出现错误。

8为什么在第一个不可用的子网里?是当8作为网络地址的时候才不可用吧,可是在0/28网络里只是个普通的地址呀。

另外,ip_check_subnet_addr到底是做什么用的呢?从字面上来看是检查子网地址,那它是去算子网的什么东西?到底什么样的子网地址才是可用的呢?如果在这个问题里将它设置成1那它限制8不能做IP,这样可以起到什么作用呢?那不是会浪费好多象8,16,32这样的地址?

论坛徽章:
0
发表于 2004-03-05 21:13 |显示全部楼层

对“设置不标准子网的问题”中的几个地方有疑问

我现在没有HPUX环境,在SUN上做了个实验,也是虚拟网口的:
# ifconfig hme0:1 plumb
# ifconfig hem0:1
hme0:1: flags=1000842<BROADCAST,RUNNING,MULTICAST,IPv4>; mtu 1500 index 2
        inet 0.0.0.0 netmask 0
# ifconfig hme0:1 202.103.44.8 netmask 255.255.255.240
# ifconfig hme0:1
hme0:1: flags=1000842<BROADCAST,RUNNING,MULTICAST,IPv4>; mtu 1500 index 2
        inet 202.103.44.8 netmask fffffff0 broadcast 202.103.44.255
# ifconfig hme0:1 202.103.44.8 netmask 255.255.255.224
# ifconfig hme0:1
hme0:1: flags=1000842<BROADCAST,RUNNING,MULTICAST,IPv4>; mtu 1500 index 2
        inet 202.103.44.8 netmask ffffffe0 broadcast 202.103.44.255
# ifconfig -a hme0:1 202.103.44.8 netmask 255.255.255.248
ifconfig: hme0:1: bad address

大家看到了吧,系统将广播地址都算成255了,其实不应该是这样,240时广播地址是15,224时广播地址是31才对啊。这让我似乎想起来在无类地址中有一个0能不能做子网地址的配置,但是具体的记不起来了。SUN下面也没有那样一个ip_check_subnet_addr的参数,所以我也没试,也不知道有哪个参数可以对应那个0能不能做子网地址的,如果哪位知道的,贴出来大家一起试试看。

这样想来,HP上那个8的IP的问题,也就是ip_check_subnet_addr的参数可能跟这个有关,也许HP上就是这个参数决定0能不能做子网地址的。大家能不能帮我确定一下?

论坛徽章:
0
发表于 2004-03-08 14:22 |显示全部楼层

对“设置不标准子网的问题”中的几个地方有疑问

2bedodo:
你好!关于你的几个问题,我的看法如下,供参考:
1.可能你对我的意思有所误解。
  我是为了计算IP地址中的host 位,而不是subnet位,才做如下计算的:
8= 00001000
240=11110000
我是这么计算host位的,先看子网掩码最后有几位是0,这里是4个0。然后看IP地址的最后4位是什么,这个数值就是host位。
一开始我看错了,将8看成00010000了,这样host位为全0,当然不行了。
但第二次我发现了8换算成2进制后最后4位的结果是1000,所以认为这样的IP地址应该是正确的。
这样看来,这样的计算host位的方法不是and,而是or,你说对吗?
当然,计算子网(subnet)时还应该是您所说的and.

2.至于什么样的子网才是符合标准的子网,应该由RFC的标准文档来决定。
但是RFC的标准文档里指定了不同的标准,例如,在RFC1878和RFC1122里面对可变长子网的定义制定了不同的标准。

参见http://www.rfc.net
看一下RFC1878 和RFC1122的定义
这2个RFC文档对IP子网有不同的定义。

HP的参数ip_check_subnet_addr设置不同的值,其实是对应不同的RFC协议标准。值为0时对应RFC1878,值为1对应RFC1122.
当遵循RFC1122标准时,检查子网位的设置,此时不允许有全0或全1的子网位。

例如,在上例中,当掩码为255.255.255.240,IP地址最后一位为8时,
换算如下:

IP地址:8= 00001000
子网掩码:240=11110000
这样子网地址为2项做and运算,结果为全0.所以在RFC1122(ip_check_subnet_addr=1)的标准下,这样的子网是不合法的。

同理可证明,在子网掩码不变的情况下,如果遵循RFC1122的标准,IP地址在1-15的情况下都是不合法的。(当然16也不合法,因为此时host位为全0,此时2种RFC标准都不支持。)

以上可以通过如下试验证明:
首先。证明RFC1122(ip_check_subnet_addr为1时)下,子网位为全0或全1时IP地址为不合法:
先运行:
#ndd -set /dev/ip ip_check_subnet_addr 1
使用如下方法设置IP地址:
#ifconfig lan1:1 218.1.131.8 netmask 255.255.255.240
A.在子网掩码255.255.255.240不变的情况下,设置IP地址最后一位为1-15时都不行,这是因为子网位为全0;
B.子网掩码不变,设置IP地址为17-238。
结果是都可以(这里还要剔除31,32,47..239等等ip地址后4位为全0或全1的地址。这些地址2种协议都不支持),因为此时子网位不是全0了。
C.子网掩码不变,IP地址最后一位修改,从241开始,又不行了。因为此时子网位又为全1。

其次。证明RFC1878下,支持子网为全0或全1:
#ndd -set /dev/ip ip_check_subnet_addr 0
使用ifconfig配置IP地址,在上例A,C的测试中,结果都成功。因为此时支持全0或全1的子网位。

最后补充说明一下,我前面 一个帖子里,以下说法有误,很抱歉收回。
比如15.30.104.88 netmask 255.255.255.240可以
218.1.131.88 netmask 255.255.255.240就不行


谢谢!!

论坛徽章:
0
发表于 2004-03-08 14:24 |显示全部楼层

对“设置不标准子网的问题”中的几个地方有疑问

还有什么不明之处,欢迎大家继续展开讨论。
谢谢!
--WilliamCU

论坛徽章:
0
发表于 2004-03-15 08:57 |显示全部楼层

对“设置不标准子网的问题”中的几个地方有疑问

由于上周出差,无法上网。非常报歉对你如此耐心的回答没有及时回应。同时向你表示感谢!
你的解释与回答,让我基本清楚了问题的存在原因。其实上周我自己也做了思考,得到的结论和你说的基本一致,但对最后你补充的一点有了新的疑问。即我原先对
比如15.30.104.88 netmask 255.255.255.240可以
218.1.131.88 netmask 255.255.255.240就不行

的怀疑在HP B2000 UX11.00上被打破,当ip_check_subnet_addr=1时,以上现象确实存在,也就是说你第一次提出这种说法是正确的。由于我目前手上没有空余的HP主机可再次验证(所有的都是生产用机,不敢动),如果有不一致情况,请指出。谢谢!对于这种现象,我猜想在你提到的rfc1122中可能会有相应说明,因周一早上时间紧张,我没有仔细看,先将问题提出,如果你已有解释,谢谢说明。

另:我想在lan0:1上试验,但是好象hpux上执行ifconfig lan0:1 unplumb不能生效,除非执行ifconfig lan0 unplumb,所以不敢做,请教如何只删除子口配置?

论坛徽章:
0
发表于 2004-03-16 20:06 |显示全部楼层

对“设置不标准子网的问题”中的几个地方有疑问

williamCU最近不来了么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP