注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

jasonyang9的博客

随便写写

 
 
 

日志

 
 

关于“子网掩码和合并计算”的问题  

2011-08-29 11:23:23|  分类: Network |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

许一君同学在一篇博文http://jeffyyko.blog.51cto.com/28563/143173中写到了关于“子网掩码合并计算”的问题,摘要如下:

  

子网掩码,简单来说就是在两台主机通信时,系统或网络设备会对各自标记的IP地址还有携带的子网掩码进行AND也就是“与逻辑运算”,来确定各自的Network ID是否一致,如一致则直接可以通讯,否则就需要另外的设备进行转换,比如路由器等。这样的过程,我们称之为“合并”,就是IP地址和自己子网掩码,两者必须成对出现。IP地址的A、B、和C类都有各自默认的子网掩码,也就是我们在填写完IP后,之后用TAB自动输入的掩码。

再来说说“合并”,IP地址到底怎么合并呢?举个例子:现在网络里有两个IP地址,192.168.0.5和192.168.5.20,掩码均为默认的255.255.255.0。此时,两者为不同的网络中,显然无法互访。

那如果我把掩码都改成255.255.248.0后,它们能不能互访呢?先别急这猜测,我们来“合并”一下,看看是不是同一样网络ID,就知道答案了。这里的合并,就是指把IP地址和自己的掩码进行“与逻辑运算”。OK,来一起做吧

1、首先,将IP和掩码都转换成二进制,方法不详述,网上有很多教程。

192.168.0.5的二进制:

11000000.10101000.00000000,00000101

192.168.5.20的二进制:

11000000.10101000.00000101,00010100

掩码地址255.255.248.0的二进制:

11111111.11111111.11111000.00000000

与逻辑运算的法则很简单,1与0=0;1与1=1;0与0=0。OK,知道计算法则,我们来计算一下。

192.168.0.5和255.255.248.0进行与运算,如下图:(图片略)

192.168.5.20和255.255.248.0进行与运算,如下图:(图片略)

请大家对比一下结果,两者的网络ID都是192.168.0.0,可见,这两个看似不在同一网段的IP,在255.255.248.0这个子网掩码的配合下就可以互相通信,其实不止这两个IP可以,还也有很多,如192.168.4.50和192.168.1.29,只要是在192.168.0.1---192.168.7.255之间任意两个ip,只要是使用这个掩码都处在同一网段。具体什么原因,分析一下上面的图就知道为什么了。

先到这里,关于IP方面还有很多东西值得认真讨论,这些也仅仅是冰山一角。

 

作者写的基本正确。子网掩码是用来确定互相通讯的两个设备是否在同一网络号内的。网络号就是设备IP地址与子网掩码的逻辑与运算的结果。如在同一网络号内,则用MAC地址进行直接通讯。如不在同一网络号内,则需要网关的帮助,通过网关将数据转发出去。

网络号就是设备IP地址与子网掩码的逻辑与运算的结果。但到底是谁的IP同谁的子网掩码进行与运算呢?

例如:主机A(192.168.1.100,掩码:255.255.0.0)和主机B(IP:192.168.1.200,掩码:255.255.255.0)能否直接通讯?由于主机A的网络号为192.168.0.0,而主机B的网络号为192.168.1.0,如果按照“网络号匹配则能直接通讯,不匹配则不能直接通讯”的原则,这两台主机是不能直接通讯的。

但实际上,主机A和主机B是可以直接通讯的。关键就在于子网掩码并不在网络上传输。所以,主机A要判断能否直接与主机B通讯,只好用自己的掩码计算主机B的网络号(255.255.0.0逻辑与192.168.1.200),得出的结果192.168.0.0和自己的一样,那么它就会直接用ARP求得主机B的MAC地址进行通讯。同理,主机B也用自己的掩码计算主机A的网络号(255.255.255.0逻辑与192.168.1.100),得出的结果192.168.1.0和自己的一样,它会直接用ARP求得主机A的MAC地址进行通讯。

所以,在判断两台主机是否能够直接通讯时,并不是用各自的IP和掩码算出各自网络号后比较的。

扩展开来讲,掩码是为了划分子网的。划分子网主要是为了划分广播域的。广播域太大,会导致网络传输效率下降等问题。

当两台主机判断互相处于同一子网内,他们可以直接通讯。这里的“直接通讯”指不需要通过网关的转发即可收发数据包。某台主机发送数据时,将目的主机的IP和MAC地址打包在一起发送。目的主机收到数据包后,首先查看MAC地址,如果是自己就继续拆包(如果不是就丢弃),接着,查看IP地址,如果IP地址也是自己就将数据包收下,并进行相应的处理。

当两台主机判断互相不处于同一子网内,他们不可直接通讯,须借助网关的帮助。发送数据的主机将网关的MAC地址和目的主机的IP地址打包在一起,发送给网关。网关接收到这个数据包后,发现MAC地址就是自己,继续拆包后发现IP地址不是自己,就查看路由表。如果有相应的路由条目,就将数据包通过对应的接口转发出去(如果没有路由条目就丢弃囧)。如果目的IP是某直连网络的话,网关会将数据包中的MAC地址替换(用ARP查询)为目的主机的MAC地址(IP地址不变)转发出去,这样,目的主机就能正确收到数据包。如果目的IP不是该网关某直连网络的话,网关会将数据包中的MAC地址替换为下一跳网关的MAC地址(IP地址不变),后转发出去(“接力”)。当数据包被后续的网关接收到后,它也会重复以上的步骤,来判断要么继续“接力”,要么发送给目的主机完成路由。

 

  评论这张
 
阅读(185)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017