Linux 网络基础:IP、子网掩码、网关

| 不讲复杂的路由协议,只讲日常配网络需要理解的概念。


从一个场景开始

你有一台服务器,要配 IP:

ip addr add 192.168.1.100/24 dev eth0

192.168.1.100 是 IP,/24 是什么意思?为什么不是 /16/32?网关又是什么?


IP 地址:机器在网络中的"门牌号"

IPv4 地址格式

192.168.1.100
│  │   │   └── 主机号(这台机器的编号)
│  │   └────── 网络号(这个网段的编号)
│  └────────── 网络号
└───────────── 网络号

IP 地址由 4 个 8 位二进制数组成,每个 0~255。

私有 IP vs 公网 IP

类型 范围 用途
公网 IP 全网唯一 能被互联网访问
私有 IP 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 内网使用,不能直接访问互联网

你家里的路由器、公司内网用的都是私有 IP。要访问互联网,需要经过 NAT(网络地址转换)。


子网掩码:划分网络范围

/24 是什么意思

/24 表示前 24 位是网络号,后 8 位是主机号。

192.168.1.100/24
二进制:11000000.10101000.00000001.01100100
         └───────24位网络号──────┘ └─8位主机号─┘

常见的子网掩码

CIDR 子网掩码 可用主机数 典型用途
/8 255.0.0.0 1677 万 超大型网络
/16 255.255.0.0 6.5 万 大型公司网络
/24 255.255.255.0 254 小型办公室、家庭网络
/32 255.255.255.255 1 单台主机

/24 网络的例子

网段:192.168.1.0/24
网络号:192.168.1.0
广播地址:192.168.1.255
可用 IP:192.168.1.1 ~ 192.168.1.254(共 254 个)

注意.0 是网络号,.255 是广播地址,不能分配给主机。

为什么需要子网掩码

子网掩码告诉机器"哪些位是网络号,哪些位是主机号"。机器判断两个 IP 是否在同一个网段,就是看网络号是否相同。

192.168.1.100/24  和  192.168.1.200/24
网络号都是 192.168.1.0 → 同一个网段,可以直接通信

192.168.1.100/24  和  192.168.2.100/24
网络号不同 → 不同网段,需要经过网关

网关:通往外界的门

网关是什么

网关是一个路由器或三层交换机,负责把你的数据包转发到其他网络。

你的电脑 (192.168.1.100)
    │
    └── 网关 (192.168.1.1)
            │
            └── 互联网

什么时候需要网关

  • 访问同一个网段的机器(如 192.168.1.200):不需要网关,直接发
  • 访问不同网段的机器(如 8.8.8.8):需要网关转发

配置网关

# 临时配置(重启失效)
ip route add default via 192.168.1.1

# 永久配置(Ubuntu)
vim /etc/netplan/00-installer-config.yaml
network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
# 永久配置(CentOS)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes

DNS:域名解析

DNS 是什么

DNS 把域名(如 www.example.com)解析成 IP 地址(如 93.184.216.34)。

配置 DNS

# 临时修改
echo "nameserver 8.8.8.8" > /etc/resolv.conf

# 永久修改(Ubuntu)
vim /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8 8.8.4.4
# 永久修改(CentOS)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=8.8.8.8
DNS2=8.8.4.4

测试 DNS

nslookup www.example.com
dig www.example.com

完整的网络配置示例

Ubuntu

# 查看当前配置
ip addr show
ip route show

# 修改配置文件
sudo vim /etc/netplan/00-installer-config.yaml
network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
# 应用配置
sudo netplan apply

CentOS

# 查看当前配置
ip addr show
ip route show

# 修改配置文件
sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
ONBOOT=yes
# 重启网络服务
sudo systemctl restart network

常用网络命令

# 查看网卡和 IP
ip addr show
# 或
ifconfig

# 查看路由表
ip route show
# 或
route -n

# 查看网络连接
ss -tlnp
# 或
netstat -tlnp

# 测试连通性
ping 8.8.8.8

# 测试端口
telnet 192.168.1.100 3306
# 或
nc -zv 192.168.1.100 3306

# 追踪路由路径
traceroute 8.8.8.8

# 查看网关
ip route | grep default

常见问题

能 ping 通 IP 但 ping 不通域名

DNS 配置有问题。检查 /etc/resolv.conf 或网络配置文件中的 DNS 设置。

能 ping 通网关但 ping 不通外网

可能是网关配置错了,或者网关本身没有外网连接。

# 检查网关是否可达
ping 192.168.1.1

# 检查路由表
ip route show

同一个网段的两台机器 ping 不通

检查:

  1. 防火墙是否放行 ICMP
  2. 两台机器的子网掩码是否一致
  3. 是否有 VLAN 隔离

IP 冲突

两台机器用了同一个 IP,会导致网络异常。

# 检查 IP 是否被占用
arping -D -I eth0 192.168.1.100

总结

概念 作用 常见值
IP 地址 机器在网络中的标识 192.168.1.100
子网掩码 划分网络范围 /24、255.255.255.0
网关 通往其他网络的出口 192.168.1.1
DNS 域名解析 8.8.8.8

配网络时记住:

  1. IP 和子网掩码决定你在哪个网段
  2. 网关决定你怎么去别的网段
  3. DNS 决定你怎么访问域名

配完这三样,网络基本就能用了。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐