网络基础
主要是记录一些网络知识的基础概念。
IP 地址
IPv4 是 32 位的长度,而 Ipv6 则是 128 位的长度。
IPv4 地址
通常采用点分四组或和点分十进制表示法。例如:165.195.130.107
。里面的每个数字范围是 [0,255]
。实际上这种结构是二进制结构的简单写法。
下民看看点分四组同二进制表示法的区别
点分四组 | 二进制表示 |
---|---|
0.0.0.0 | 00000000 00000000 00000000 00000000 |
1.2.3.4 | 00000001 00000010 00000011 00000100 |
255.255.255.255 | 11111111 11111111 11111111 11111111 |
IPv6 地址
通常由四个称之为块或者字段的十六进制数字组成,由冒号分割。但是因为太长了,通常可以简写。规则如下:
- 一个块中的前导零必须省略。例如:
5f05:2000:80ad:5800:58:800:2023:1d71
非省略写法为5f05:2000:80ad:5800:0058:0800:2023:1d71
。 - 全零的块可以省略,可以使用
::
代替,但是每个地址只能用一次,而且只能用在影响最大的地方。比如:2001:0db8:0:0:0:0:0:2
简写为2001:0db8::2
。 - IPv6 内嵌入 IPv4 地址使用混合符号形式,紧接着 IPv4 部分的地址块的值为
ffff
,地址的其余部分使用点分四组的方式。例如:::ffff:10.0.0.1
可表示 IPv4 地址10.0.0.1
。 a
到f
的十六进制数字都应该使用小写表示。
十六进制表示 | 二进制表示 |
---|---|
5f05:2000:80ad:5800:0058:0800:2023:1d71 | 0101111100000101 0010000000000000 1000000010101101 0101100000000000 0000000001011000 0000100000000000 0010000000100011 0001110101110001 |
::1 | 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000001 |
这里还要注意一个事情,就是因为 IPv6 使用 :
分割,那么在包含地址的 URL 时可能会跟其他的分隔符混淆,所以需要使用括号字符 []
包围 IPv6 地址。
1 | http://[f05:2000:80ad:5800:0058:0800:2023:1d71]:443/ |
分类寻址
每个单播 IP 地址都有一个网络
部分,用于表示接口使用的 IP 地址在那个网络中可被发现;以及一个主机地址,用于识别出网络部分给出的网络中的特定主机。IPv4 地址空间最初分为五类,此处说的标志位其实指的是二进制的前导数字:
类 | 网络标志位 | 地址范围 | 适用范围 |
---|---|---|---|
A | 0 | 0.0.0.0 ~ 127.255.255.255 | 大量主机的大型网络 |
B | 10 | 128.0.0.0 ~ 191.255.255.255 | 中等规模主机的网络 |
C | 110 | 192.0.0.0 ~ 223.255.255.255 | 小型局域网 |
D | 1110 | 224.0.0.0 ~ 239.255.255.255 | 组播地址 |
E | 11110 | 240.0.0.0 ~ 255.255.255.255 | 保留 |
A,B,C 类用于为单播地址中的接口分配地址。D 类为组播地址。0.0.0.0
是特殊地址,表示本网主机。
子网掩码
子网掩码是由一台主机或路由器使用的分配位,以确定如何从一台设备中获取对应 IP 地址中获取网络和子网信息。前面说到,IP 地址实际上是二进制数字的十进制表示。当前子网掩码是由一些 1 后跟一些 0 构成。
点分十进制表示 | 容易记的格式 | 二进制表示 |
---|---|---|
128.0.0.1 | /1 | 10000000 00000000 00000000 00000000 |
255.0.0.0 | /8 | 11111111 00000000 00000000 00000000 |
255.192.0.0 | /10 | 11111111 11000000 00000000 00000000 |
255.255.255.0 | /24 | 11111111 11111111 11111111 00000000 |
255.255.255.255 | /32 | 11111111 11111111 11111111 11111111 |
通过子网掩码可以确定一个 IP 地址的网络和子王部分的结束和主机部分开始。
比如说我的本地 IP 是 192.168.1.12/24
。 通过下面的这样就可以分析:
1 | 地址: 11000000 10101000 00000001 00001100 192.168.1.12 |
这里的结果
是地址
和子网掩码
进行与
运算。
广播地址
子网广播地址通过将 IPv4 地址的网络/子网部分设置为适当值。以及主机部分的所有制设置为1而形成。
比如说我的本地 IP 是 192.168.1.12/24
。 通过下面的这样就可以分析:
1 | 地址: 11000000 10101000 00000001 00001100 192.168.1.12 |
子网广播地址由子网掩码首先取反,然后与 IPv4 地址进行或运算构建而成。
除了子网广播,特殊用途地址 255.255.255.255
被保留为本地网络广播。它不会被路由器转发。
IPv6 没有任何广播地址,广播地址可用于 IPv4 中,而 IPv6 仅使用组播地址。
特殊用途的 IP 地址
TODO