草庐IT

详解IP地址、子网掩码、网络号、主机号、网络地址、主机地址

无名之辈 2023-03-28 原文

详解IP地址、子网掩码、网络号、主机号、网络地址、主机地址



概念

  • IP地址:一般是指逻辑ip;
  • 子网掩码:将IP划分为网络号和主机号的IP;
  • 网络号/主机号:子网掩码转成二进制后,连续全1的是网络号,后面的是主机号;
  • 网络/广播/主机地址:在二进制下,主机位全为零就是网络地址,主机位全为1就是广播地址,其它就是主机地址。

相关计算

根据IP地址和子网掩码,求网络地址和广播地址

一个主机的IP地址是202.112.14.137,掩码是255.255.255.224,要求计算这个主机所在网络的网络地址和广播地址?

  1. 根据子网掩码可知网络号有27位,主机号有5位!

    255.255.255.224  --> 11111111 11111111 11111111 11100000    # 子网掩码
    
  2. 网络地址(把IP地址转成二进制和子网掩码进行 与运算

    202.112.14.137   --> 11001010 01110000 00001110 10001001    # ip地址
    
    255.255.255.224  --> 11111111 11111111 11111111 11100000    # 子网掩码
    
    202.112.14.128   <-- 11001010 01110000 00001110 10000000    # 与操作
    

    即网络地址: 202.112.14.128

  3. 广播地址(网络地址的主机位有5位,全部变成1)

    202.112.14.128   --> 11001010 01110000 00001110 10000000    # 网络地址
    
                                    ||
    
    202.112.14.159   <-- 11001010 01110000 00001110 10011111    # 广播地址
    

    即广播地址: 202.112.14.159

  4. 主机数

    2^5 - 2 = 30


根据每个网络的主机数量,计算子网掩码和子网地址的规划

比如一个子网有10台主机,那么对于这个子网需要的IP地址是?

  • ip所需总数:
    10 + 1 + 1 + 1 =13

    Tips:三个 1 分别是指网关地址网络地址广播地址

  • 子网掩码(因为 13 < 16(2^4=16),所以主机位为4位,网络位28位):

    11111111 11111111 11111111 11110000 --> 255.255.255.240
    

    或者根据主机位:
    2^8 - 2^4 = 256 - 16 = 240

  • 结果

    所以该子网掩码为 255.255.255.240

    Tips: 如果一个子网有14台主机,不少人常犯的错误是:依然分配具有16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,因为:


根据IP地址和子网掩码,计算网络地址、广播地址、地址范围、主机数

IP地址为 128.36.199.3 子网掩码是 255.255.240.0 , 算出网络地址、广播地址、地址范围、主机数

128.36.199.3    --> 10000000 00100100 11000111 00000011    # IP地址

255.255.240.0   --> 11111111 11111111 11110000 00000000    # 子网掩码

128.36.192.0    <-- 10000000 00100100 11000000 00000000    # 与操作

Tips:子网掩码连续全1的是网络号,后面的是主机号

  1. IP地址和子网掩码进行与运算,结果是网络地址

    即网络地址: 128.36.192.0

  2. 将运算结果中的网络地址不变,主机地址变为1,结果就是广播地址(由子网掩码可知主机号为12位)

    10000000 00100100 11000000 00000000 --> 10000000 00100100 11001111 11111111 --> 128.36.207.255
    

    即广播地址: 128.36.207.255

  3. 地址范围就是含在本网段内的所有主机

    地址范围是: 网络地址+1 至 广播地址-1

    网络地址: 128.36.192.0,广播地址: 128.36.207.255

    所以本例的网络范围是:128.36.192.1 至 128.36.207.254

    Tips: 网络地址+1 即第一个主机地址,广播地址-1 即最后一个主机地址

  4. 主机的数量

    主机的数量 = 2^主机号-2

    即:主机的数量 = 2^12-2 = 4096-2 =4094

    Tips:减2是因为主机不包括网络地址广播地址

从上面两个例子可以看出不管子网掩码是标准的还是特殊的,计算网络地址、广播地址、地址数时只要把地址换算成二进制,然后从子网掩码处分清楚连续1以前的是网络地址,后是主机地址进行相应计算即可。


206.110.4.0/18被划分成16个子网,求每个子网掩码?

划分成16个子网,根据子网掩码/18就表示有18个1,就要从的IP地址的主机位借4位来用作网络位

  1. 由前缀长度18,得掩码是 255.255.192.0

    11111111 11111111 11000000 00000000 -->  255.255.192.0
    

    Tips:206.110.4.0/18 由前缀长度/18,可得网络位是18位,主机位是14位(其中1代表网络位,0代表主机位)

  2. 切分成16个子网(2^4=16)

    • 可以看出能操作的位数就是后面的14个0,即可以在里面划分出几位作为子网的网络位,进而来划分子网。

    • 要求是切分成16个子网,而2的4次方刚好等于16,则:

      1. 子网的网络位: 18+4 = 22
      2. 子网的主机位: 32-22 = 10
      11111111 11111111 11111100 00000000 -->  255.255.252.0
      

结果:

  • 子网掩码是: 255.255.252.0
  • 每个子网可以容纳的主机数是: 2^10-2 = 1024-2, 即 1022台;


Via

有关详解IP地址、子网掩码、网络号、主机号、网络地址、主机地址的更多相关文章

  1. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  2. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  3. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  4. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  5. ruby - 允许主机名包含下划线的 URI.parse 的替代方法 - 2

    我正在使用DMOZ的listofurltopics,其中包含一些具有包含下划线的主机名的url。例如:608609TheOuterHeaven610InformationandimagegalleryofMcFarlane'sactionfiguresforTrigun,Akira,TenchiMuyoandotherJapaneseSci-Fianimations.611Top/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures612虽然此url可以在网络浏览器中使用(或者至少在我的浏览器中可以使用:

  6. ruby-on-rails - 验证电子邮件地址是 Paypal 用户 - 2

    我想验证一个电子邮件地址是否是PayPal用户。是否有API调用来执行此操作?是否有执行此操作的ruby​​库?谢谢 最佳答案 GetVerifiedStatus来自PayPal'sAdaptiveAccounts平台会为您做这件事。PayPal没有任何codesamples或SDKs用于Ruby中的自适应帐户,但我确实找到了编写codeforGetVerifiedStatusinRuby的人.您需要更改该代码以检查他们拥有的帐户类型的唯一更改是更改if@xml['accountStatus']!=nilaccount_status

  7. ruby - 检查网络文件是否存在,而不下载它? - 2

    是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby​​不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案

  8. ruby - 404 未找到,但可以从网络浏览器正常访问 - 2

    我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT

  9. ruby - 在 TCPServer (Ruby) 中,我如何从客户端获取 IP/MAC? - 2

    我想在Ruby的TCPServer中获取客户端的IP地址。以及(如果可能的话)MAC地址。例如,Ruby中的时间服务器,请参阅评论。tcpserver=TCPServer.new("",80)iftcpserverputs"Listening"loopdosocket=tcpserver.acceptifsocketThread.newdoputs"Connectedfrom"+#HERE!HowcanigettheIPAddressfromtheclient?socket.write(Time.now.to_s)socket.closeendendendend非常感谢!

  10. Ruby 服务器在本地主机(teambox)之外非常慢 - 2

    我刚刚在我的Ubuntu9.10服务器上安装了TeamBox。我使用提供的服务器脚本在端口3000上启动并运行它。它的运行速度非常慢,从另一台计算机连接时每个HTTP请求最多需要30秒。我使用链接从shell加载TeamBox,一点也不花时间。然后我设置了一个SSH隧道,它再次运行得非常快。我通过此服务器上的apache以及SAMBA等运行了大约30个虚拟主机,没有任何问题。我该如何解决这个问题? 最佳答案 我的redmine(ruby,webrick)太慢了。现在我解决了这个问题:apt-getinstallmongrelruby

随机推荐