1. IP 协议
IP 协议是网络层协议,主要负责在不同网络设备之间,进行数据包的地址分配和路由选择。
-
地址分配:为每个连接到公网的设备分配一个唯一的 IP 地址,确保数据能被准确地发送到目标设备。
-
数据分片和组装:当发送的数据包大小大于
mtu
时,本地 IP 协议会将其分成几个片段,并在目的地的网络层再重新组装。整个数据包的重组依赖于所有分片的成功传输。如果其中一个分片丢失,整个数据包将无法重组,导致数据传输失败。
-
路由选择:根据目标 IP 地址,确定数据包通过何种路径,从本地设备传输到目标设备。
-
无连接:IP 协议是无连接的,每个数据包独立传输,不保证顺序性和可靠性。
IP 协议提供了将数据跨网络、从本地设备传输到目标设备的能力。
TCP 协议能确保,数据传输的顺序性和可靠性。
因此,TCP/IP 能将数据可靠地 从 本地设备
传输到 目标设备
。
2. IP 地址基础
IP 地址分为两个部分, 网络号
和 主机号
。
- 网络号:用于标识一个网络,保证相互连接的两个网段,具有不同的网络号。
- 主机号:用于标识网络中的某一具体设备。同一网段内,主机之间具有相同的网络号,和不同的主机号。
- 子网:把相同网络号的主机放在一起。
如果在子网内新增一台主机,这台主机的网络号与子网的网络号保持一致,但主机号不能与子网中其他主机的主机号重复。
- DHCP:能够自动地给子网内新增主机节点分配 IP 地址。路由器通常都具有 DHCP 功能。
3. 网络分段
网段划分是将一个大的 IP 网络划分为多个较小的子网络的过程。这种方式可以有效分配 IP 地址,避免地址浪费,特别是在 IPv4 地址资源有限的情况下。
3.1 CIDR
CIDR
通过使用斜线表示法(CIDR 记法)和子网掩码长度,灵活划分 IP 地址空间,而不遵循固定的地址分类规则。
- 子网掩码(subnet mask):区分网络号和主机号。
- 子网掩码是一个 32 位的正整数,通常用一串 "0" 结尾。
- 将 IP 地址与子网掩码进行按位与
&
操作,得到网络号。
举例:192.168.1.2/24
的网络地址是 192.168.1.0
,子网掩码长度为 24 位(高 24 位为 1,即子网掩码为 255.255.255.0
)。
1100 0000. 1010 1000. 0000 0001. 0000 0010
1111 1111. 1111 1111. 1111 1111. 0000 0000
------------------------------------------ &
1100 0000. 1010 1000. 0000 0001. 0000 0000
对应的网络号为 192. 168. 1. 0
可用地址范围:192. 168. 1. 0
~ 192. 168. 1. 255
3.2 特殊 IP 地址
将 IP 地址中的主机地址设为全 0,就是 网络号
,代表这个局域网。
将 IP 地址中的主机地址设为全 1,就是 广播地址
,用于给同一个链路中的、相互连接的所有主机发送数据包。
127.*
的地址用于本地环回测试,常见为 127.0.0.1
。
4. 公网 IP 和 私网 IP
4.1 公网 IP
公网 IP 是指全球唯一的、可以在互联网上访问的 IP 地址。每一个连接到互联网的设备,都需要一个公网 IP 地址,以便其它设备可以与之通信。
4.2 私网 IP
私网 IP 是指在局域网内使用的、不直接连到互联网上的 IP 地址。
私网 IP 可以在不同的局域网内重复使用,不需要全球唯一性。
私网 IP 的范围:
10.* /8
:前 8 位是网络号。172.16.* /12
~172.31.* /12
:前 12 位是网络号。192.168.* /16
:前 16 位是网络号。
包含在这个范围内的 IP 都称为私网 IP,其余都为公网 IP 。
5. NAT 技术
一个路由器可以配置两个 IP 地址:WAN 口 IP
和 LAN 口 IP
。
路由器 LAN 口连接的主机,都属于当前路由器的子网主机。
同一子网内, IP 不能重复;不同字网间,可以有相同的 IP 。
家用路由器 通常是 运营商路由器 子网中的某一节点;最外层运营商路由器的 WAN 口 IP ,为公网 IP。
NAT
:子网内的主机和公网设备进行通信时,路由器会将数据包中的 源 IP 地址
,替换为路由器的 WAN 口 IP 地址
;逐级替换,最终数据包中的 源 IP 地址
为一个 公网 IP 。
6. 路由
路由表是存储在路由器中的数据库,记录了到达不同网络目标的路径信息。
每当路由器接收到数据包时,会查阅路由表,以决定将数据包转发到哪个接口。
在 Linux 中,可以使用
route
指令查看路由表。
Destination
:目标网络地址Gateway
:子网掩码Genmask
:下一跳地址
如果目的 IP 命中了路由表,则直接转发。
当 目的地址 与 路由表中其它行 都不匹配时,按 缺省路由条目规定的接口
发送到 下一跳地址。
举例:
目的 IP 为 10.1.2.3
。
10.1.2.3
&255.255.255.0
!=192.168.1.0
10.1.2.3
&255.0.0.0
==10.0.0.0
匹配
下一跳为 192.168.1.2
,通过 Ethernet0
接口转发。