交流一个 IP 地址,计算 10.1.1.30/8 的 网段区间

2020-12-11 11:37:17 +08:00
 daijinming

又拿起 TCP/IP 教程学习起来,这种 IP 地址的写法感觉还不是太熟悉,哪位能给分析下,这个 IP 如何计算网段区间

3582 次点击
所在节点    程序员
27 条回复
lululau
2020-12-11 11:44:36 +08:00
slash 后面的数是个十进制表示的数,它表示的是 IP 数值的二进制表示的位数
Te11UA
2020-12-11 11:45:04 +08:00
百度 ip 地址计算
这些工具都很明晰地告诉你是怎么算的
ThirdFlame
2020-12-11 11:45:06 +08:00
10.0.0.0~10.255.255.255
wql
2020-12-11 11:53:27 +08:00
/8 就是点分十进制的第一段,10.0.0.0-10.255.255.255
Wincer
2020-12-11 12:07:19 +08:00
python:
```
from ipaddress import IPv4Network
net = IPv4Network("10.1.1.30/8", strict=False)
>>> net.network_address, net.broadcast_address
(IPv4Address('10.0.0.0'), IPv4Address('10.255.255.255'))
```
Dvel
2020-12-11 12:09:48 +08:00
子网掩码的另一种写法。
写 x.x.x.x/8 和 255.0.0.0 是一样的。
xgfan
2020-12-11 12:13:27 +08:00
/8 就是前 8 位不变动,只变后面 24 位。
/24 就是前 24 位不动,只动后面 8 位,最常见就是 192.168.1.x/24 。
ccbikai
2020-12-11 12:16:48 +08:00
关键字 IP CIDR
user8341
2020-12-11 12:17:18 +08:00
3 、4 、5 、6 楼都对。
user8341
2020-12-11 12:17:41 +08:00
漏了一个,7 楼也对
sdh
2020-12-11 12:20:08 +08:00
9,10 楼也对
user8341
2020-12-11 12:35:57 +08:00
10 PRINT "对"
20 GOTO 10
JJstyle
2020-12-11 12:48:52 +08:00
8 楼也算对这是 ip 或者 ip 范围的一种表达方式,这种表达方式就叫 cidr
fasionchan
2020-12-11 13:13:40 +08:00
来关注我的网络协议教程,快写到 IP 了: https://www.yuque.com/coding-fan/network
huaxing0211
2020-12-11 13:20:22 +08:00
综上,楼上都对!
mcone
2020-12-11 13:28:21 +08:00
@fasionchan 要是真的有干货,不需要每个回帖都推广的,你这样每个回帖都是推广,还推广不到点子上(例如你这个链接哪里解决楼主的问题了?),只会引来更多人的反感。

@livid 这个 ID 的发帖和回帖放在一起,似乎可以做一个很好的 spam pattern 了……
Livid
2020-12-11 13:30:44 +08:00
@mcone 谢谢举报。这种就是这里所描述的链接搬运:

https://www.v2ex.com/help/spam

看了一下,那个账号之前已经有过违规记录,这次就彻底 ban 了。
iptables
2020-12-11 13:53:39 +08:00
mijazz
2020-12-11 14:15:41 +08:00
10.1.1.30 参考 4 楼的说法, 这四个数字是为了给人能看清楚来划分的.
点分十进制的意思就是, ipv4 地址共有 32bit 组成, 分出来 4 段, 所以每一段长度为 8bit, 最高表示十进制的 255. 并且根据 ABC 类地址来划子网
10.1.1.30 其实是
0000 1010 0000 0001 0000 0001 0001 1110 来组成的
每 8bit 取一断点化十进制就是 ipv4 地址的常见形式.
这个时候为了建立子网来进行路由, 进而有子网掩码这东西, 假设你的子网掩码(subnet mask)在这里是 255.0.0.0
其实就是
1111 1111 0000 0000 0000 0000 0000 0000
上述两个二进制, 你如果对他们做 AND 运算, 你得到的就是 5 楼给你的 IPv4Address
0000 1010 0000 0000 0000 0000 0000 0000 -> 10.0.0.0
, 我没记错的话他叫网络地址, 在这个 10.0.0.0/255.0.0.0 的网络之外, 它只是一个大子网, 对于外部来说会减少路由表的 entry 增加效率, 因为我只需要知道这个网络下对应的 ip 硬怼给它就行了, 没必要一个 ip 多开一个路由表 entry.
相对应的网络里最后一个主机号 / 或者是网络号后的 bit 全填 1, 就是用于 broadcast, 在这里就是
0000 1010 (第 9 位开始全是 1) 1111 1111 1111 1111 1111 1111 -> 10.255.255.255
所以有 10.0.0.0/255.0.0.0 <=>10.0.0.0/8 <=> 10.0.0.0 ~ 10.255.255.254
然后 VLSM/Variable Length Subnet Mask, 因为发现直接通过 ABC 类地址划出来的子网太浪费?
然后就有引入 CIDR/无分类编址
划分网络 /辨认主机可以使用网络号和主机号, 此时他们两个的分界线就是 /后面的这个十进制数 8
10.0.0.0/8 <=> 10.0.0.0/255.0.0.0
如果是 /20, subnetmask 的前 20 位就都是 1, 假设里面有个地址是 172.17.3.1, 按你题目的表示就是 172.17.3.1/20
1010 1100 0001 0001 0000 0011 0000 0001 (ip)
1111 1111 1111 1111 1111 0000 0000 0000 (/20) <=> 255.255.240.0
做 AND 可以很容易得到
1010 1100 0001 0001 0000 0000 0000 0000 -> 172.17.0.0(网络号)
还是上面的操作, 第 21 位开始全是 1
1010 1100 0001 0001 0000 (21 位开始) 1111 1111 1111 -> 172.17.15.255
所以
172.17.0.0/20 <=> 172.17.0.0/255.255.240.0 <=> 172.17.0.0 ~ 172.17.15.255
小弟还是个在校大学生 hhhh 如果错误请指出
iptables
2020-12-11 14:17:34 +08:00
IP 地址 10.1.1.30/8

/8 也就是 255.0.0.0 (二进制前 8 位为 1,后面都是 0 )
子网掩码和 IP 转换成二进制,分别是

11111111 . 00000000 . 00000000 . 00000000
00001010 . 00000001 . 00000001 . 00011110

按位与( AND )运算:
00001010 . 00000000 . 00000000 . 00000000
也就是十进制的 10.0.0.0,得到网络地址

子网掩码等于 0 的部分是后 24 位,因此将网络地址后 24 位设置为 1,即
00001010 . 11111111 . 11111111 . 11111111
也就是十进制的 10.255.255.255 ,得到广播地址

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/734432

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX