IP协议——网段划分

删除吗

大家好,又见面了,我是你们的朋友全栈君。

 IP地址

        在根据TCP/IP协议进行通信时,要用IP地址来标识主机或路由器。在IPv4中,IP地址是一个32位的整数。所以最多可以表示的数字IP地址是:2^32(大约是43亿)。

        IP地址由网络号和主机号两部分来标识。处于不同网段内的主机必须有不同的网络标识。而处于同一网段内的主机的网络号表示相同,但主机号标识必须不同。所以,在某网段内新增一台主机后,该主机的网络号与该网段的网络号相同,但是主机号不能与该网段里的其他主机的主机号相同。

        通过合理设置网络号和主机号,就可以保证在相互连接的网络中,每台主机的IP地址都是唯一的。

        有一种DHCP技术,可以自动为网段内新增结点主机分配IP地址。一般的路由器都带有DHCP功能,因此路由器可以看做一个DHCP服务器。

         通过将IP地址划分为网络号和主机号来标识,可以有如下特点:

(1)IP地址管理机构在分配IP地址时只分配网络号。剩下的主机号由得到该网络号的单位自行分配,这样就方便了管理就够的管理;

(2)路由器在寻找目的主机的IP地址时,只需找到目的主机所在的局域网,再在该局域网内寻找目的主机。

(3)具有不同网络号的局域网必须有路由器进行连接,所以路由器总是有两个或两个以上网络号不同的IP地址

        那么该如何划分网络号和主机号呢?

IP地址分类

        IP地址可以分为五类:A~E类。各类别的网络号和主机号分别对应如下:

IP协议------网段划分

        各类地址的表示范围是:

A类:0.0.0.0~127.255.255.255

B类:128.0.0.0~191.255.255.255

C类:192.0.0.0~223.255.255.255

D类:224.0.0.0~239.255.255.255

E类:240.0.0.0~247.255.255.255

        A类地址的网络号占1个字节,只有7位可以使用。可以指派的A类网络号为126(2^7-2)个。A类IP地址中网络字段全0表示的是“本网络(A类网络)”的意思,不用于分配给具体的主机。IP地址中网络号全1表示的是本地环回地址,用于测试本主机的进程之间的通信,即网络号为127的IP地址。A类地址的主机号占3个字节,所以一个A类网络中可以连接的最大主机数为:2^24-2。主机号全0表示该主机连接的单个网络地址(某个A类网络),主机号全1表示该网络中的所有主机。

        B类地址的网络号占2个字节,只有14位可以使用。可以指派的B类网络号为2^14-1(128.0.0.0)不用,最小的网络号为:128.1.0.0。每一个B类网路可以连接的最大主机数为:2^16-2=65534。(扣除主机号全0和全1的IP地址)。

        C类地址的网络号占3个字节,只有21位可以使用。可以指派的C类网络号为2^21(192.0.0.0不用),最小的网络号为:192.0.1.0。每一个C类主机可以连接的最大主机数为:2^8-2=254(扣除主机号为全0和全1的IP地址)。

        在上述的分类中,存在以下问题:

(1)IP地址空间的利用率降低:一个B类网络中最多可以表示的IP地址为65534个,而某些种类网络由于链路的特点能够连接的结点个数有限,所以就会造成大量的IP地址浪费;由于C类网络能连接的结点个数有限。所以,单位会申请B类网络,但一般又用不了这么多的IP地址,所以会造成IP地址的浪费。同理,A类网络的IP地址也会造成大量的浪费;

(2)如果给每一个物理网络都分配一个网络号,就会导致路由表过大。此时就会造成路由表的管理成本增加,同时查询的效率也会增加。

(3)当一个单位申请了一个网络号。他想将该网络能表示的IP地址再分给它下属的几个小单位时。如果在申请新的网络就会造成浪费。

        为了解决上述的问题,引入子网划分的概念。

子网划分和子网掩码

子网划分

        子网划分实际是在将原A类,B类,C类网络中的主机号的部分作为子网号,将原来的ABC类网络细化的过程,将原来的一个网络分为多个网络,但是在对外表现上,还是表现为原来的一个网络。

        所以,此时,IP地址组成为:网络号+子网号+主机号。

        在数据进行通信的过程中,首先根据目的IP地址找到目标主机所在的网络(路由器),再根据目的IP地址的子网号找到目标主机所在的子网,最后找到目标主机。

        比如,一个B类IP地址为:192.168.0.0。先将该网络划分多个子网,假定子网号占用了8位。由于原B类网络中主机号一共占用了16位,子网络拿走8位之后,一个子网中的主机号所占的位数就变成了8位。假定其中一个子网为192.168.5.0。在数据通信时,目的主机为该子网中的IP地址为192.168.5.8的主机。因此,在数据传输过程中,首先会根据目的IP地址找到该主机所在的网络192.168.0.0(其实是找到该网络上的路由器),再通过IP地址找到目的主机所在的子网192.168.5.0。最后在该子网内找到目的主机。

        此时,可以将网络号和子网号统一为网络标识。

子网掩码

        当数据报到达目的主机所在网络的路由器时,如何将它转发到子网上呢?

        为了使目的主机所在网路的路由器能够很方便的找到目的子网,引入“子网掩码”的概念。子网掩码也是一个32位的整数,它是由一串1和一串0构成,1对应于目的主机所在的网络号和子网号,0对应于目的主机所在的主机号。对于没有划分子网的网络号,也有子网掩码,此时子网掩码中的1对应于网络号,0对应于主机号。将网络号和子网号统称为网络号后,子网掩码中的1就对应于网络号,0对应于主机号。

        将目的主机的IP地址与子网掩码进行按位与操作,便可以确定目的主机所在的网络号

        如下图:

IP协议------网段划分

        此时,将目的主机IP与子网掩码按位与之后得到就是该目的主机所在的网络地址IP。在本例中,该子网的主机IP的表示范围是:145.13.3.0~145.13.3.255。能够连接的主机个数为254台(去除主机号为全0和全1的IP地址)。

        上述中,子网掩码与主机IP按位与之后得到网络地址,然后主机号由全0到全1即表示该子网的地址范围。

        子网掩码除了上述的表示方法外,还有一种表示方法:在每个IP地址之后追加网络地址的位数。如上例中:

145.13.3.10/24。表示的是IP地址为145.13.3.10的主机IP,子网掩码的高24位为全1。因此网络地址的高24位与该IP地址相同即145.13.3.0。

        所以,在路由表中既要有目的网络地址,也要有该网络的子网掩码。才能判断目的IP是否与目的网络地址对应。

特殊的IP地址

        与上述的ABC类相同,主机号为全0的表示“该网络”,主机号为全1的表示“所有主机”即广播地址。127.开头的为本机环回测试,一般为127.0.0.1。

CIDR

        由于A类的所能派发的网络号有限,而C类网络能连接的主机个数有相对较少,所以一般的单位在申请网络时,都会申请B类网络,这就导致了B类网络的严重缺乏。

        所以,开始放弃IP地址的分类,采用任意长度分割IP地址的网络标识和主机标识,它与ABC类的划分没有任何关系。称为CIDR。它可以不受IP地址分类的限制,自由进行分配。

        此时的IP地址可以表示为:网络号+主机号(这个网络号可以是任意长度的)。

        当申请到一个任意长度的网络号之后,也可以在网络内进行子网划分。所以对于任一个子网也对应一个子网掩码。使用方法与上述相同。

        CIDR更有效的利用了当前的IPv4地址,同时也减轻了路由器的负担。它可以将多个连续C类地址合并为一个网络(和你宝贵的个数以2,4,8,…呈现)。例如:将两个C类网络:192.168.224.0和192.168.225.0合并为一个网络。此时合并后的网络中可以连接的主机数增加到2^9-2=510台。在未合并之前,需要在路由表中占用两行来表示两个C类网络,合并后只需用一行就可以表示。




       







版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124749.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于伯努利原理的速度监测芯片可用于天然气管道泄露检测

    基于伯努利原理的速度监测芯片可用于天然气管道泄露检测基于伯努利原理的速度监测芯片跟杭州迈煌科技用光纤水听器侦听传感技术类似,可用于天然气管道泄露检测。安装操作简单,可在不破坏现有管道下安装,工程易实现。

    2022年6月17日
    31
  • Python字符串总结大全

    Python字符串总结大全目录操作符标准类型操作符对象值的比较布尔类型序列操作符切片([]和[:])成员操作符(in,notin)连接符(+)运行时刻字符串连接编译时字符串连接普通字符串转化为Unicode字符串重复操作符(*)只适用于字符串的操作符格式化操作符(%)字符串模板:更简单的替代品原始字符串操作符(r/R)Unicode字符串操作符(u/U)常见的转义字符字符串索引编解码内建函数序列类型函数len()max()和min()en

    2022年6月9日
    28
  • VM安装Mac os x10.11的诸多坑人问题[通俗易懂]

    VM安装Mac os x10.11的诸多坑人问题[通俗易懂]注意事项1.首先,下载vm14,这里虚拟机的版本要高一点,不然激活成功教程后, MAcOSX没有高版本(10.11以上的不出现,先更新VM)2.下载完,进行激活成功教程.从网上找一个unlocker文件,发现运行 老失败,提示找不到drawin.*文件 原因大概率是exe文件兼容行问题,这个时候,编辑win_install那个文件 把所有exe都改成python运行对应py脚本就可以完美…

    2022年9月27日
    0
  • WebGame开发总结

    WebGame开发总结项目基本情况:  服务器端采用c++和c#混合开发,网络层采用c++开发,业务逻辑用c#开发。客户端采用silverlight。数据库采用mysql。GM工具用Asp.net,GM工具盒服务器通讯用wcf,基本把微软的东西都用遍了。  服务器端在开始的时候,使用了某位同事之前开发的一款服务器端引擎,改引擎曾经开源但现在基本不再更新。引擎地址:http://mmorpg.codeplex.com/  这款引擎在使用上只满足了部分需求,再加上原作者又跳槽,引擎基本是我在维护和改进,不过基本上都往里面

    2022年5月2日
    46
  • NeatUpload的安装使用

    NeatUpload的安装使用版本:NeatUpload-1.2.32,用于文件上传。可传大文件。1.在VS工具箱中点右键选“选择项”……将Brettle.Web.NeatUpload.dll添加到工具箱。可以在添加后的工具箱看到

    2022年7月2日
    26
  • vscode 使用flake8和yapf[通俗易懂]

    vscode 使用flake8和yapf[通俗易懂]vscode使用flake8和yapf

    2022年9月12日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号