IP地址相当于互联网上的门牌号, 计算机在启动的时候可以从磁盘(无盘系统例外)上读取该主机的IP配置。IP地址由4个字节(也就是32位)的二进制码组成,包含了网络号( net-id )
和主机号( host-id )
。但现实中,我们经常还需要再继续划分“子网”
,这时就需要借用主机号的一部分充任子网号,这样IP地址也就可以看成由标准网络号、子网号、主机号
3部分组成的了,即IP地址=标准网络号+子网号+主机号
。
网络号、子网号、主机号三者间的关系,形象的描述如下:假设你的住址IP是
武汉市文治街16号
,那么,
IP地址 = 武汉市文治街16号
网络号 = 武汉市
子网号 = 文治街
主机号 = 16号
IP地址种类 | 二进制组成(前缀位+网络位+主机位) | IP范围 | 网络数 | 主机数/网络 |
---|---|---|---|---|
A类地址 | 0 +7位网络号+24位主机号 |
1.0.0.0 - 127.255.255.255 | 2 7 − 2 2^7-2 27−2 | 2 24 − 2 2^{24}-2 224−2 |
B类地址 | 10 +14位网络号+16位主机号 |
128.0.0.0 - 191.255.255.255 | 2 14 − 1 2^{14}-1 214−1 | 2 16 − 2 2^{16}-2 216−2 |
C类地址 | 110 +21位网络号+8位主机号 |
192.0.0.0 - 223.255.255.255 | 2 21 − 1 2^{21}-1 221−1 | 2 8 − 2 2^8-2 28−2 |
D类地址 | 1110 +多播地址(用于多播) |
224.0.0.0 - 239.255.255.255 | - | - |
E类地址 | 1111 +保留位(不开放, 保留使用) |
240.0.0.0-249.255.255.255 | - | - |
从表中可以看出,A类IP的第1位(二进制位)必须是0,所以A类IP的第一个整数的范围是0000 0000 ~ 01111 11111
,转换为十进制就是0 ~ 127
,以此类推。
网络数就是一种网络的子网数, 比如A类地址, 可以分为多少个子网。看表格可以推出网络数的计算公式为: 2 网 络 号 位 数 2^{网络号位数} 2网络号位数。
规定网络地址全为0
的IP地址是保留地址,意思是“本网络”。
0.0.0.0
是不指派的,而可以指派的最小网络是 1.0.0.0
;网络地址为 127
的A类IP地址保留作为本地软件环回测试本主机的进程之间的通信(比如常用的 127.0.0.1
,但实际上网络地址为127
的都可以用作本地环回地址)。所以A类地址网络数为 2 7 − 2 2^7-2 27−2。128.0.0.0
是不指派的,而可以指派的最小网络是 `128.1.0.0,所以B类地址网络数是 2 14 − 1 2^{14} - 1 214−1。192.0.0.0
是不指派的,而可以指派的最小网络是 192.0.1.0,所以C类地址网络数是 2 21 − 1 2^{21}-1 221−1。主机数就是一个子网里面可以容纳多少台主机。看表格可以推出主机数的计算公式为: 2^主机号位数-2
。主机号全为0表示该网络,而主机号全为1表示广播地址,所以要排除掉这两个。比如A类地址 1.0.0.0
表示主机所在的网段的网络地址, 1.255.255.255
为该网段的广播地址。
经常可以看到192.168.1.101
这类的IP地址, 这些是私有IP地址, 专用地址, 也就是局域网内使用的的IP地址。
公网IP地址是需要向有关部门申请备案的,私有IP地址不用申请, 但是仅限内网使用, 也节约公网IP。
IP地址种类 | 私有IP范围 |
---|---|
A类地址 | 10.0.0.0 - 10.255.255.255 |
B类地址 | 172.16.0.0 - 172.31.255.255 |
C类地址 | 192.168.0.0 - 192.168.255.255 |
路由器看到专用地址就不转发,所以说专用地址作为目的地址是不可能在因特网上传送的。专用IP地址也可叫做可重用地址。那好,问题来了,如果配置了这些专用地址的主机想和因特网上的主机通信,怎么办呢?NAT(network address translation: 网络地址转换)在这种情况下就应运而生了。NAT就是将这种地址转换成有效的外部全球IP地址,使得整个专用网只需要一个全球IP地址就可以与因特网联通。
IP地址=标准网络号+子网号+主机号
。从IP分类可以很容易确定“标准网络号”,32bit
的IP地址除去前面的“标准网络号”之后,剩下的就是“子网号”和“主机号”,那么怎么确定“子网号”和“主机号”了? 这就需要借助“子网掩码”
了。子网掩码也是一个32bit(xxx.xxx.xxx.xxx
)的值,其中值为1的bit留给“标准网络号”和“子网号”,为0的bit留给“主机号”。我们可以将子网掩码和IP地址进行二进制“与运算”
,通过得到的结果来确定“子网号”。
以C类IP地址为例,对于规范的C类IP地址来说,规范子网掩码为255.255.255.0
,即用32比特IP地址的前24比特标识网络号,后8比特标识主机号。因而,每个C类网络下共可容纳254台主机( 2 8 − 2 2^8-2 28−2)。 如今,我们先思索借用2比特的主机号来充任子网络号的情形。
C类网络地址210.31.233.0
,我们借用2bit的主机号来充当子网号,子网的数目为 2 2 − 2 2^2-2 22−2(子网号无法全为0或1,所以减2).
为了借用原来8位主机号中的前2位充任子网络号,采用了新的非规范子网掩255.255.255.192。
采用了新的子网掩码后,借用的2位子网号可以用来标识两个子网:01子网和10子网(子网号无法全为0或1,因而00、11子网无法用)。
对于上图的01子网来说,其网络号的点分十进制的方式为:210.31.233.64
,该子网的最小IP地址为:210.31.233.65
,最大IP地址为:210.31.233.126
(主机号全为1位广播地址),共可容纳62台主机。对该子网的直接广播地址为:210.31.233.127
(主机号全为1)。
经常见到像
192.168.1.0/24
这样的写法,它的意思是网络号为192.168.1.0
;子网掩码为24位,即111111111 111111111 111111111 00000000
,转为点分十进制就为255.255.255.0
,没有借用主机号来充当子网号,可以拥有的主机数为 2 8 2^8 28-2.
你的住址IP是武汉市洪山区文治街16号
,你的父母只允许你和文治街的小朋友(同一个子网)一起玩耍,如果你想要去和别的街道(别的子网)的小朋友玩耍,你就需要经过你的父母的同意,由你的父母带你过去,这时候你的父母就充当了网关的角色,没有你的父母,你就不能和其他街道(其他子网)的小朋友玩耍。
相关文章:
WebRTC – IP地址
网络地址结构、转换函数介绍
debain 配置IP和DNS
当应用程序使用网络传送数据时,数据按照协议栈从上到下的顺序,逐次通过每一层。其中每一层对收到的数据都要增加一些首部信息(有时还增加尾部信息)。最终生成一串比特流通过以太网来传输,我们称这串比特流叫帧。
如图:
当数据报到达链路层时,链路层也要对IP数据包封装进行包装。链路层也要对IP数据包封装的方式主要有以太网IP数据包封装
(RFC894)、IEEE 802 IP数据报封装
(RFC1042)两种,最常使用的封装格式是以太网IP数据包封装(RFC894)。下图显示了这两种不同形式的封装格式:
从图中可以看到以太网封装
限制了数据帧的最大长度为1500字节,这个限制叫做MTU,最大传输单元(详见第四节)。
接收端收到帧之后,按照和上面相反的顺序(协议栈从下到上)来解包,依次解析每一层加入的头部(或尾部),最终将原始数据传给最上层应用程序。
如图:
因为传输层的TCP、UDP、ICMP等都有可能向网络层IP协议传送数据,这样在IP协议层解包的时候,需要知道这个包对应的上层协议是哪一个,因此IP协议必须在生成的IP首部加入某种标识,以表明数据的上一层的具体协议。为此,IP在首部中存入了一个长度为8bit的数值,称作协议域。常见的IP协议号有:
1表示ICMP协议,2表示IGMP协议,6表示TCP协议,17表示UDP协议。
完整的IP协议号见:IP协议号列表
前面第三节提到了以太网封装限制了数据帧的长度为1500字节,这个限制是在链路层封装IP数据报时作的。如果IP层的数据报比链路层的这个MTU值大,那么IP层就需要分片(英文:fragmentation),把数据报分成若干片,保证每一片的大小都小于MTU值。
netsh interface ipv4 show subinterfaces
netsh interface ipv4 set subinterface "本地连接" mtu=1480 store=persistent
文章参考:
https://m.vipcn.com/a/360973/
https://ahaochan.github.io/posts/IP_address,_subnet_mask,_gateway_Introduction.html
https://www.zhihu.com/question/20717354
《TCP/IP详解 卷1:协议》在线阅读地址:http://www.52im.net/topic-tcpipvol1.html