IP的定义

ip 是32位无符号整数,最小,最大分别是
- 0.0.0.0 - 255.255.255.255 具体来说,由一个ip由 Net-ID+Host-ID 两部分组成,Net-ID 相同,那么就说明在一个网段内,可以用mac数据帧直接通信。

给定一个Net-ID

  • host-ID全为0的ip,(192.168.2.0)代表整子小网络,
  • host-ID全为1的ip,是这个子网络的广播地址

ip总共就32个字节,当 HostID 所占用的位越大,亦即 HostID 数量越多时,表示同一个网络内可用以设定主机的 IP 数量越多

国际NIC组织把ip分成5类

  • Class A : 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的开头是 0
    |--net--|---------host------------|
  • Class B : 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的开头是 10
    |------net-------|------host------|
  • Class C : 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的开头是 110
    |-----------net-----------|-host--|
  • Class D : 1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的开头是 1110
  • Class E : 1111xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的开头是 1111

class D用作特殊用途,class E保留,因此,能够用来设定在一般系统上面的,就只有 Class A、B、C 三种等级的IP。

Netmask

这个数值就是用一种很直观的方式表明Net-ID/Host-ID各有多少位

netmark的定义非常简单,netmask 也是 32 位,在数值上,位于 Net-ID 的为 1 而 Host-ID 为 0

例如一个常见的C类IP地址

net-id=24位,host-id=8位,拥有2**8-2=254个ip

一个传统的c类网络,比如 192.168.10.0,它的netmark是必然是255.255.255.0 如果在把这个网络分成2个子网络,很简单,设定net-id使用25位,host-id就只有7位了 那么这个时候的 netmark= 255.255.255.1 0000000 = 255.255.255.128,这次划分得到的两个子网分别是

  • 129.168.10.0/25
  • 192.168.10.128/25

python 自带的bin函数,可以非常方便的把int转换为二进制字符串表示

很显然,/25就是标示 这个ip中net-id 占用的位数(这2个ip的host-id全部为0,所以这两个ip代表的是其所在的子网络)

这种表示方法很好计算子网络的规模,例如

  • 192.168.0.0/27 表示2的5(32-27=5)次方-2(每个网段的第一个和最后一个地址都被特殊用途占用)=62个ip
  • 192.168.0.0/28,表示2的4(32-28=4)次方-2=30个ip

所以 192.168.1.1/24 标示的是一个子网络192.168.1.0(拥有254个ip地址: 从192.168.1.1到192.168.1.254)

本文地址: http://lutaf.com/86.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接