草庐IT

IPv4地址和子网掩码

JiuMeilove 2023-04-03 原文

如果两台计算机A和B的共有和私有地址是一样的,那么很明显,如果A计算机打开了一个网页,结果服务器发现B计算机的IP地址就是刚刚请求网页的地址,就有可能会把资源发送给B计算机,所以IP地址以及如何规划IP地址就有了存在的意义,

如果让大家说一个最熟悉的IP地址,大家能想到的大部分是192.168.0.1,会想到这个IP地址主要不是因为它经常出现,更重要的原因是因为这段IP地址是十进制的,我们生活中的数字就是用的十进制,因此我们对于十进制的数字更为敏感,但是众所周知,计算机识别的是二进制,IP地址的底层也是二进制的,因此想要理解IP地址就必须先简单的复习一下二进制
这里就偷个懒用别人的https://zhuanlan.zhihu.com/p/75291280

IP地址是由四组八位二进制表示的xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx,每一组八位二进制之间都由一个英文句号来分割,这样一个IPv4地址加起来一共有32位,就二进制来说,每一组最低可以由8个0组成,最高可以由8个1组成,8个0转换成十进制很明显就是0,8个1转换成十进制就是255,也就是说,这里每一组十进制数字的范围都是0~255加起来就是256了

从数字的层面了解了IP地址以后,现在最重要的就是IP地址的用途了,用途当然是区分地址信息了,

IP地址由两个部分组成,网络号和主机号,我们看下面这张地图,一共有四大洲,每个州都有各自的一些IP地址不难发现各个州里面的IP地址都是一样的开头,比如南詹部洲都是以130.20.11.1开头,只有后面的数字不同而已,

那么前面相同的部分就是网路号了,后面不同的部分就是主机号,每个洲都有各自的网络号来代表这整个洲属于同一个网络区域,每个洲里以不同的主机号来区分,这样层级的划分方便管理,现在我为每个洲分别加上一台路由器来统一管理整个洲的通信,每个洲之间的通信都需要各自的路由器来传达,每个洲内部的通讯也需要路由器来传达

现在花果山水帘洞的猴子们知道他们的老大孙悟空被困在五指山了,想寄点桃子过去,那么桃子首先得经过自己洲,东胜神洲的路由器,路由器查看了目标IP地址后发现不是自己洲的,(查看网络号,发现的)而是属于南瞻部洲的,于是就把桃子发往了南瞻部洲,南瞻部洲路由器在收到桃子后就先查看目标IP地址是不是自己洲的(查看网络号),结果是自己洲的,而且根据主机号显示是要送去五指山的,于是马上把桃子送往了五指山,这也是说明为什么IP地址总是会有网络号和主机号两个部分 ,

不过IP地址不一定是从中间分割一半为网络号一半为主机号,而是有分类的,
IP地址划分为A,B,C,D,E类,除了D和E是特殊类,我们把焦点放在每一类的网络数和主机数


可以看出,每一类的网络数要么很多要么很少,主机数也一样,

假设西游记的南瞻部洲被分配了一个C类网络号195.34.34.x,这个C类地址理论上可以有256个主机数,因为195.34.34.0到195.34.34.255,一共拥有256个主机数,
但是如果南瞻部洲一共有257个地址,那么我们需要再分配一个C类地址给南瞻部洲,那么就意味着理论上要浪费255个地址,因为新的C类地址也是同样分配了256个主机数,为了解决简单分类导致的IP分配不合理,就诞生了子网掩码

假设我们现在为东胜神州分配了一个C类地址192.168.0.x,但是东胜神州只有4台主机,只需要4个不同的IP,多了浪费,少了得补,我们知道这个X的范围可以是0到255,在这里我们部考虑特殊地址,先理解这个概念,因此可以只要0到3,剩下的4到255地址都不要,因为0到3就有4个地址了,这样我们就需要用一种方法来表示这4个IP来表示同一网络,因此就需要用到子网掩码了

子网掩码其实就是为了划分网络号和主机号的,要表示192.168.0.0到192.168.0.3的网络号,先把这些十进制的IP地址转换为二进制


上面写了,分配的地址为192.168.0.x,也就是前面192.168.0是不变的,一定要用来做网络号的部分,因此我们就用二进制的1来表示锁定前面三个部分的二进制,也就是锁定了24位二进制,现在剩下的8位二进制怎么表示呢?,可以看到前面的六位二进制数也是相同的,都是0,因此我们用1把这六位也锁起来,剩下的两位不需要锁定了,也不能锁定,因为剩下的都是主机号了因此用0来表示不锁定,现在有一锁定,零不锁定结合起来,就能非常清晰的表示网段了

现在我们把锁定部分的二进制转换成十进制,也就是255.255.255.252,那么这个255.255.255.252也就是子网掩码了
我们就可以把这些子网掩码和东胜神洲的IP放在一起,这样别人看到就能知道网络号和主机号的界限
不过这段子网掩码写起来很长,因此可以用CIDR的方式来表示,上面一共有30个1因此就用/30来表示子网掩码就好了
也就是用192.168.0.0/30就可以表示这四个主机号同属一个网络里了,要注意最后一位不写做1,或2,3,而是用起始0来表示
知道子网掩码的原理以后,我们就可以根据IP地址和子网掩码来区分网络号和主机号了

有关IPv4地址和子网掩码的更多相关文章

  1. 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

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

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

  3. ruby-on-rails - 从 Geocode 经纬度获取地址 - 2

    对于我的大部分应用程序,我从Geocoder获取城镇/城市的纬度、经度、邮政编码等。我只是投入城市和州,作为返回,我得到了我处于一个有field的场景中。该场所需要一个地址,我正在从另一个来源获取该场所的纬度和经度。使用Geocodergem,我可以通过给地址提供经纬度来获取地址吗? 最佳答案 在Rails控制台中运行。latitude=40.0397longitude=-76.30144geo_localization="#{latitude},#{longitude}"query=Geocoder.search(geo_loca

  4. 联通家庭宽带开启ipv6 - 2

    联通家庭宽带开启ipv6废话不多,直接开干首先登录联通光猫的后台,机身有写我的是http://192.168.1.1/CU.html广州家庭宽带账号密码CUAdmincuadmin00259e这里好像是默认设置,不大记得了。保存就好然后登陆路由器后台,我的是tp-link选桥模式这里的桥模式跟光猫的wan类型应该是互斥关系,光猫设置桥接,路由器就要设pppoe拨号,我没试过。然后在系统就可以查看了或者直接访问这个网址http://testipv6.com/注意1:如果你是便宜小米红米之类的路由器,他好像是默认不打开这个ipv6防火墙的,也就是你可能在系统上看到有ipv6地址,但实际上是不互通的

  5. ruby-on-rails - 如何将电子邮件地址放入 Rails 的 url 中 - 2

    我想邀请在这样的url中传递电子邮件的人:localhost:3000/invite_me/email@gmail.com我尝试了这个匹配,但它不起作用。match"/invite_me/:email"=>"application#invite_me",:constraints=>{:email=>'/.+@.+\..*/'}我收到以下错误:Noroutematches[GET]"/invite_me/waldyr.ar@gmail.com"rake路由输出:root/application#index/invite_me/:email(.:format)application#inv

  6. ruby - 如何在 ruby​​ 中获取 ip 地址、referer 和用户代理? - 2

    我想记录用户的ip地址、referer和用户代理。在PHP中,我可以从以下变量中获取它们:$_SERVER['REMOTE_ADDR']$_SERVER['HTTP_REFERER']$_SERVER['HTTP_USER_AGENT']如何在ruby​​中获取它们? 最佳答案 PHP嵌入在网络服务器中。Ruby是一种通用语言:如果您需要Web服务器上下文,则必须自己安装。幸运的是,这很容易。最简单的入门方法之一是使用Sinatra。安装gem:geminstallsinatra然后创建myapp.rb:require'sinatr

  7. ruby-on-rails - Ruby:强制 open-uri 返回 IPv4 地址 - 2

    在我们的Rails应用中,我们有一个ControllerAction,它打开一个外部URL,并将它作为JSON返回给我们的前端使用。今天,我收到以下错误:Errno::EAFNOSUPPORT:协议(protocol)不支持地址族-socket(2)我们的开发人员建议,如果地址同时返回IPv6响应和IPv4响应,这就是错误。我们不支持IPv6,所以这可以解释它。这是触发请求的方法:defmedline_responseopen("http://apps.nlm.nih.gov/medlineplus/services/mpconnect_service.cfm?mainSearchCr

  8. ruby - 邮件 gem 。将收件人显示名称和地址提取为单独的值 - 2

    使用邮件gem(即Rails+ActionMailer),是否有一种干净的方法来获取收件人的显示名称?我可以通过以下方式获取地址:mail.to.first我可以通过以下方式获取格式化的显示名称+地址:mail.header_fields.select{|f|f.name=="To"}.first.to_s但是我怎样才能得到显示名称部分(即在和>之前)。我知道有人会建议使用正则表达式,但这不是我想要的,因为我随后必须解析任何编码,而这正是Mailgem可能已经做的事情。我是一个流行的PHPMailer库的作者,我知道在之前假设位的缺陷。和>是人类可读的,在标题中,当8位字符开始发挥作用

  9. ruby-on-rails - 如何使用 Ruby/Tor 更改我的 IP 地址? - 2

    我正在使用Rails4.2.7,并且安装了几个Torgem。gem'tor'gem'tor_requests'gem'tor-privoxy'gem'net-telnet'我启动了我的Tor浏览器(在MacElCapitan上运行),我想定期(每20个请求)更改我的TORWeb请求的来源IP地址。所以我试了一下agent=TorPrivoxy::Agent.new'127.0.0.1','',{8118=>9151}do|agent|sleep1puts"NewIPis#{agent.ip}"end但是,这会导致以下错误。我很困惑我还需要如何配置才能完成上述工作。Errorduring

  10. ipv6外网能ping通,但无法访问服务(自建网站,远程桌面等) - 2

    1.当前环境及情况说明宽带:电信、光猫桥接、路由器拨号ipv6地址:在各大网站都能ping通这个ipv6地址,本机也能访问ipv6的网站问题:其它外网电脑除了能ping通这个ipv6地址之外什么都访问不了2.可能出现问题的原因本机防火墙拦截了(关闭防火墙也是一样的)×光猫防火墙拦截了(试了不行,貌似桥接后跟光猫就没关系了)×路由器防火墙拦截了(用的是小米AX6000,IPV6配置的地方有个防火墙没有关闭)√运营商拦截了(根据最终效果测试,80端口、443端口被拦截无法使用,尽量用些不常用的端口)×3.路由器设置(关闭IPV6防火墙) 不同路由器可能设置不同,根据情况处理,我这里做为一个参考关闭

随机推荐