news 2026/11/4 2:24:35

Linux 学习笔记(五十):网络层——IP 协议、子网划分与 NAT 魔法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 学习笔记(五十):网络层——IP 协议、子网划分与 NAT 魔法

📌 核心结论(TL;DR):

  1. IP 核心字段:TTL防止路由环路,标识/标志/片偏移用于大包分片。

  2. CIDR 划分:IP / 掩码,掩码为 1 的是网络号,为 0 的是主机号。

  3. 私有 IP:10.x、172.16.x~172.31.x、192.168.x用于局域网,不能直接上公网。

  4. NAT 技术:路由器通过替换私有 IP 和端口为公网 IP,实现多设备共享上网,拯救了 IPv4。

  5. 路由表:通过ip route查看,default指向默认网关,负责跨网段转发。

一、 IP 协议头部


IP 报文头部最少 20 字节,最关键的有:

  1. 8 位协议:表示上层是 TCP(6) 还是 UDP(17)。

  2. 8 位 TTL(生存时间):每过一个路由器减 1,减为 0 则丢弃。防止数据包在网络中死循环。

  3. 分片字段:因为以太网 MTU(最大传输单元)通常为 1500 字节,如果 IP 包过大,必须依靠16位标识、3位标志和13位片偏移进行分片和重组。

二、 CIDR 与子网掩码

过去把 IP 分为 A/B/C 类太浪费,现在全部使用 CIDR(无类别域间路由)。

  • 比如192.168.1.10/24:

    • /24代表子网掩码前 24 位全为 1(即 255.255.255.0)。

    • 将 IP 和掩码按位与,得到网络号192.168.1.0。

    • 剩下 8 位是主机号,可以分配 28−2=25428−2=254 台主机。

    • 全 0 是网络地址,全 1 是广播地址,不能分配给主机。

三、 公网 IP、私有 IP 与 NAT

IPv4 只有 43 亿个地址,根本不够用。

  • 私有 IP:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。只能在局域网内通信。

  • NAT(网络地址转换):你的电脑是私有 IP,家庭路由器拥有公网 IP。你上网时,路由器把你的私有 IP 和端口替换成公网 IP 和随机端口,并在本地记录映射表。回包时再反向替换回去。NAT 让几十亿台设备共享了极少的公网 IP。

四、 实战:网络排查命令

  1. ip addr:查看网卡、IP、MAC 地址。云服务器通常只显示内网 IP。

  2. ip route:查看路由表。重点是default via xxx,这是数据包出局域网必经的默认网关。

  3. ping -c 4 baidu.com:查看 TTL,大致推算经过了多少个路由器。

  4. traceroute baidu.com:追踪数据包的每一跳路由。

自我实战操作

网络层的配置不需要写 C 代码,而是熟练使用 Linux 的网络排查命令。

cd ~/linux_study/network_test
实战 1:查看你的网卡与 CIDR
# 查看网卡配置 (看 inet 后面的 IP 和 netmask) ip addr # 或者用老命令 ifconfig

👉现象:在你的云服务器上,你大概率会看到一个eth0网卡,IP 可能是10.x.x.x或者172.x.x.x(这说明你的云服务器用的是私有 IP,并通过阿里云/腾讯云的 NAT 转发访问外网)。

实战 2:查看路由表与网关
ip route # 或者用老命令 route -n

👉现象:你会看到一行default via 10.0.0.1 dev eth0。这代表默认路由。当你访问百度(不在你的局域网网段时),数据包会默认扔给10.0.0.1这个网关(也就是路由器),由它替你转交。

实战 3:验证 TTL 与路由追踪
# 使用 ping 查看目的主机的 TTL ping -c 4 baidu.com # 使用 traceroute 查看数据包经过了多少个路由器 # 需要先安装:sudo apt install traceroute -y traceroute baidu.com

👉现象:

  • ping的结果里有一项ttl=52。这是因为百度服务器的 Linux 默认 TTL 是 64,中间经过了 12 个路由器(64 - 12 = 52)。

  • traceroute会打印出 1 跳、2 跳、3 跳... 的 IP 地址。这就是 IP 协议“一问一答”找路的过程。

现象:执行apt install安装软件时,终端突然变成了紫红色背景,提示Daemons using outdated libraries(使用过时库的守护进程),列出了一大堆服务。

原因:Ubuntu 的安全机制。在更新了系统核心动态库后,为了让正在后台运行的服务(如dbus、ssh等)立刻应用新版本的安全补丁,系统会弹窗询问是否重启它们。

解决:千万不要按Ctrl+C强制退出!保持默认的<Ok>选项,直接敲击回车键。系统会自动重启服务并完成后续的安装流程。如果强行中断,很可能会导致apt锁死,后续安装报错。

实战 4:体验 NAT(内网穿透的前提)

如果你是云服务器,在云控制台看看你的公网 IP,然后再看ip addr里的内网 IP。你会发现它们完全不一样。这就证明了云厂商在机房出口做了一层巨大的 NAT 网关。这也是为什么我们在写服务器代码bind的时候,必须写INADDR_ANY,而不能写死公网 IP。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 2:22:01

TC3XX AL TTL电平阈值实测

Datasheet&#xff1a;5V TTL: V_ H_level >2V , V_L_level<0.8V AL: V_ H_level >(5x0.7) , V_L_level<(5x0.44) 实测&#xff1a; VDD5V TTL : V_ H_level >1.7V , V_L_level<1.1V AL: V_ H_level >3V , V_L_level<2.35V 推断 VDD3.3…

作者头像 李华
网站建设 2026/11/4 2:21:17

用 shadPS4 PS4 模拟器在 PC 上跑《血源诅咒》:从零到第一局

用 shadPS4 PS4 模拟器在 PC 上跑《血源诅咒》&#xff1a;从零到第一局 【免费下载链接】shadPS4 PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C 项目地址: https://gitcode.com/GitHub_Trending/sh/shadPS4 《血源诅咒》&#xff0c;60…

作者头像 李华
网站建设 2026/11/4 2:20:42

Agent、纯 LLM、Workflow 到底差在哪?一篇讲清楚“决策权“归谁

文章目录先打个比方&#xff1a;把它们想成三种员工纯 LLM&#xff1a;一次调用&#xff0c;一条直线Workflow&#xff1a;人把流程焊死&#xff0c;LLM 只是一颗螺丝Agent&#xff1a;把方向盘交给 LLM一张图看清三种模式的控制流一张表看懂关键差异代码示例纯 LLMWorkflow&am…

作者头像 李华