指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

关于linux网络配置的分析,先从几个命令开始:

查看/管理网卡 IP 地址

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether f4:6b:8c:89:58:f6 brd ff:ff:ff:ff:ff:ff
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether e0:0a:f6:78:3b:1d brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.17/24 brd 192.168.5.255 scope global dynamic noprefixroute wlp2s0
       valid_lft 81898sec preferred_lft 81898sec
    inet6 fe80::76cf:e344:df5b:cd7d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: br-331156baf737: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:68:b9:16:de brd ff:ff:ff:ff:ff:ff
    inet 192.168.49.1/24 brd 192.168.49.255 scope global br-331156baf737
       valid_lft forever preferred_lft forever
5: br-7cbb16a986d6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:9e:f7:3d:7c brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-7cbb16a986d6
       valid_lft forever preferred_lft forever
    inet6 fe80::42:9eff:fef7:3d7c/64 scope link 
       valid_lft forever preferred_lft forever
6: br-e6742f9d2eb1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:63:76:d0:bc brd ff:ff:ff:ff:ff:ff
    inet 172.20.0.1/16 brd 172.20.255.255 scope global br-e6742f9d2eb1
       valid_lft forever preferred_lft forever
    inet6 fe80::42:63ff:fe76:d0bc/64 scope link 
       valid_lft forever preferred_lft forever
7: br-fab0b27bf071: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:62:ab:2b:c9 brd ff:ff:ff:ff:ff:ff
    inet 172.19.0.1/16 brd 172.19.255.255 scope global br-fab0b27bf071
       valid_lft forever preferred_lft forever
    inet6 fe80::42:62ff:feab:2bc9/64 scope link 
       valid_lft forever preferred_lft forever
8: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:d8:b0:1c:e7 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:d8ff:feb0:1ce7/64 scope link 
       valid_lft forever preferred_lft forever
...
...

查看/管理路由表

$ ip r
default via 192.168.5.1 dev wlp2s0 proto dhcp metric 600 
169.254.0.0/16 dev wlp2s0 scope link metric 1000 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
172.18.0.0/16 dev br-7cbb16a986d6 proto kernel scope link src 172.18.0.1 
172.19.0.0/16 dev br-fab0b27bf071 proto kernel scope link src 172.19.0.1 
172.20.0.0/16 dev br-e6742f9d2eb1 proto kernel scope link src 172.20.0.1 
192.168.5.0/24 dev wlp2s0 proto kernel scope link src 192.168.5.17 metric 600 
192.168.49.0/24 dev br-331156baf737 proto kernel scope link src 192.168.49.1 linkdown 

查看默认网关

$ ip route | grep default
default via 192.168.5.1 dev wlp2s0 proto dhcp metric 600

解析:
默认网关 (default via 192.168.5.1)

这表示所有 非本地子网 的网络流量(即访问外部网络的流量)默认会通过 192.168.5.1 进行转发。
192.168.5.1 通常是你的路由器 IP 地址,宿主机通过这个网关访问外部互联网。
dev wlp2s0

这里的 wlp2s0 是你的 无线网卡接口,表示这个默认网关适用于你的无线网络连接。
如果你使用的是有线网络,可能会看到 eth0 之类的接口名称。
proto dhcp

表示这个默认网关是通过 DHCP(动态主机配置协议)分配的。
metric 600

metric 表示 优先级,数值越低,优先级越高。
这里的 600 说明 这个路由的优先级比更低的 metric(如 100、200)低,但仍然是默认路由。

查看宿主机所有的IP

$ hostname -I
192.168.5.17 192.168.49.1 172.18.0.1 172.20.0.1 172.19.0.1 172.17.0.1

其中192.168.5.17和172.17.0.1比较重要,在docker容器里面可以直接通过这两个IP访问宿主机的服务;同时,在宿主机萨和嗯访问容器服务的时候,是通过172.17.0.1这个docker网关通过NAT实现的。

关于子网络掩码计算(时间太久了,忘了不少)

假如我的网络信息如下:
wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 3c:e9:f7:65:75:d9 brd ff:ff:ff:ff:ff:ff
    inet 188.188.55.68/23 brd 188.188.55.255 scope global dynamic noprefixroute wlp0s20f3
       valid_lft 4311sec preferred_lft 4311sec
    inet6 fe80::67c5:fbe6:2207:8de/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

而 $ ip route | grep default
default via 188.188.54.1 dev wlp0s20f3 proto dhcp metric 600
188.188.55.68/23 和188.188.54.1 关系


解析188.188.55.68/23:
inet 188.188.55.68/23 brd 188.188.55.255 scope global dynamic noprefixroute wlp0s20f3

188.188.55.68 是本机 IP 地址(分配给 wlp0s20f3 接口)。
/23 表示子网掩码 255.255.254.0,即 IP 范围是 188.188.54.0 - 188.188.55.255。
brd 188.188.55.255 表示广播地址。



解析默认网关 188.188.54.1:
default via 188.188.54.1 dev wlp0s20f3 proto dhcp metric 600

这条路由规则表示:
默认网关(Internet 出口)是 188.188.54.1。
所有无法直接匹配的流量都会发送到 188.188.54.1 进行转发。
dev wlp0s20f3 说明这个网关通过无线网卡(wlp0s20f3)访问。
proto dhcp 说明这个路由是通过 DHCP 自动分配的。



188.188.55.68/23 和 188.188.54.1 的关系
188.188.55.68 在 188.188.54.0/23 这个子网里,也就是说:

188.188.54.1 和 188.188.55.68 在同一个子网(/23)。
188.188.54.1 作为你的 默认网关,负责将非本地(非 188.188.54.0 - 188.188.55.255)的流量转发出去。

为什么网关是 188.188.54.1 而不是 188.188.55.1?
/23 的子网掩码 255.255.254.0 使得 188.188.54.0 - 188.188.55.255 属于同一个子网。
这个子网的 第一个可用 IP(通常是 .1) 一般作为网关,而 .0 是网络地址,.255 是广播地址。
可能 网络管理员配置了 188.188.54.1 作为这个 /23 网段的网关。



188.188.54.0 - 188.188.55.255 怎么计算来的?
要计算 188.188.54.0 - 188.188.55.255 这个 IP 范围,我们需要根据子网掩码 /23(即 255.255.254.0)来进行计算。这里是具体的步骤:
1. 子网掩码计算
子网掩码 /23 表示:

前 23 位是网络位,后面 9 位是主机位。
255.255.254.0 对应二进制:11111111.11111111.11111110.00000000
这个子网掩码将 IP 地址分为两个部分:

网络部分(前 23 位)
主机部分(后 9 位)
2. 计算网络地址和广播地址
网络地址(Network Address)
IP 地址: 188.188.55.68
子网掩码: 255.255.254.0(即 11111111.11111111.11111110.00000000)
进行按位 与(AND)操作:

188.188.55.68 的二进制表示为:10111100.10111100.00110111.01000100
255.255.254.0 的二进制表示为:11111111.11111111.11111110.00000000
如下:
10111100.10111100.00110111.01000100  (188.188.55.68)
AND
11111111.11111111.11111110.00000000  (255.255.254.0)
-----------------------------------
10111100.10111100.00110110.00000000  (188.188.54.0)
所以,网络地址是 188.188.54.0。


广播地址(Broadcast Address)
广播地址是通过将主机部分的所有位设置为 1 来计算的:

网络部分:188.188.54.0(即 10111100.10111100.00110110.00000000)
主机部分全 1:00000000.00000000.00000001.11111111
如下:
10111100.10111100.00110110.00000000  (188.188.54.0)
OR
00000000.00000000.00000001.11111111  (主机部分全是1)
-----------------------------------
10111100.10111100.00110111.11111111  (188.188.55.255)
所以,广播地址是 188.188.55.255。


IP 地址范围
网络地址: 188.188.54.0(网络起始地址,不可用)
广播地址: 188.188.55.255(广播地址,不可用)
可用的主机地址范围: 188.188.54.1 到 188.188.55.254


总结
网络地址: 188.188.54.0
广播地址: 188.188.55.255
可用主机范围: 188.188.54.1 到 188.188.55.254
所以,188.188.54.0 - 188.188.55.255 这个范围代表了 一个包含 512 个 IP 地址的子网,其中 188.188.54.0 是网络地址,188.188.55.255 是广播地址,中间的 188.188.54.1 到 188.188.55.254 是可用的主机 IP 地址。