Linux 网络(5)

1.网络层

主机: 配有IP地址, 但是不进行路由控制的设备; 路由器: 即配有IP地址, 又能进行路由控制; 节点: 主机和路由器的统称;
协议头格式

1. 4 位版本号
  • 作用:指定 IP 协议版本
  • IPv4 固定为 4,IPv6 为 6
2. 4 位头部长度
  • 作用:表示 IP 头部包含多少个 32bit(4 字节)的 "字"
  • 计算:头部字节数 = 该字段值 × 4
  • 范围:字段值 5~15 → 头部长度 20~60 字节
    • 无选项时:字段值 = 5 → 20 字节(固定头部)
    • 最大头部:字段值 = 15 → 60 字节
3. 8 位服务类型
  • 作用:指示传输优先级(现在多被 DSCP 替代)
  • 4 位可选目标(互斥,只能选一个):
    • 最小延时:适合 ssh/telnet
    • 最大吞吐量:适合 ftp
    • 最高可靠性:适合关键数据
    • 最小成本:适合普通数据
4. 16 位总长度
  • 作用:表示整个 IP 数据报(头部 + 数据)的总字节数
  • 最大:65535 字节
5. 16 位标识
  • 作用:唯一标识一个原始 IP 报文
  • 分片时:同一个原始报文的所有分片,ID 完全相同,用于接收端重组
6. 3 位标志字段
  • 第 1 位:保留,必须为 0
  • 第 2 位(DF,Don't Fragment):
    • 1:禁止分片,报文超过 MTU 直接丢弃
    • 0:允许分片
  • 第 3 位(MF,More Fragments):
    • 1:还有后续分片
    • 0:这是最后一个分片
7. 13 位分片偏移
  • 作用:表示当前分片在原始报文中的位置
  • 计算:实际偏移字节数 = 该字段值 × 8
  • 约束:除最后一个分片外,其他分片长度必须是 8 的倍数,保证报文连续
8. 8 位 TTL(生存时间)
  • 作用:限制报文在网络中的最大跳数,防止路由循环
  • 规则:初始值一般 64,每经过一个路由器 TTL -= 1,减到 0 则丢弃
9. 8 位协议(Protocol)
  • 作用:标识上层协议类型
  • 常见值:
    • TCP:6
    • UDP:17
    • ICMP:1
10. 16 位头部校验和
  • 作用:仅校验 IP 头部是否损坏,不校验数据部分
  • 原理:通过 CRC 类算法计算,接收端重新校验,不一致则丢弃
11. 32 位源地址 / 目标地址
  • 作用:标识发送端和接收端的 IP 地址
12. 选项字段
  • 长度:0~40 字节,用于扩展功能(如时间戳、安全选项)
  • 特点:一般很少使用,常规通信可忽略

IP地址分为两个部分, 网络号和主机号
网络号: 保证相互连接的两个网段具有不同的标识;
主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;

  • 同一网段内:网络标识相同,主机标识不同 → 可以直接通信,不需要经过路由器。
  • 不同网段间 :网络标识不同 → 必须通过路由器转发才能通信,路由器的作用就是连接不同网段,实现跨网段数据转发。
    那么问题来了, 手动管理子网内的IP, 是一个相当麻烦的事情.
    有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便.
    一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器.
    过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类, 如下图所示(该图出 自[TCPIP]

早期 IPv4 按 A/B/C 类固定划分网络号和主机号,存在严重问题:

  • 地址浪费:B 类地址理论上可容纳 6 万 + 主机,A 类更多,但实际子网很少需要这么多主机,大量地址闲置。
  • 分配失衡:B 类地址很快耗尽,A 类却大量浪费

为解决地址浪费,提出 CIDR,核心是灵活划分网络号与主机号

  1. 子网掩码 :32 位正整数,用一串 0 结尾,用于区分网络位和主机位。
  2. 按位与运算 :将 IP 地址与子网掩码逐位做 "与" 运算,结果即为网络号
  3. 无类别限制:网络号 / 主机号的划分不再受 A/B/C 类约束,可按需调整子网大小。

|-------|---------------------------------|---------------|
| IP 地址 | 140.252.20.68 | 8C FC 14 44 |
| 子网掩码 | 255.255.255.0 | FF FF FF 00 |
| 网络号 | 140.252.20.0 | 8C FC 14 00 |
| 子网范围 | 140.252.20.0 ~ 140.252.20.255 | --- |

计算过程

  • 子网掩码 255.255.255.0 表示前 24 位为网络位,后 8 位为主机位。
  • 按位与:IP 地址后 8 位(68)与掩码后 8 位(0)运算,结果为 0,因此网络号为 140.252.20.0
  • 子网范围:主机位(后 8 位)从全 0 到全 1,即 0 ~ 255,对应地址范围 140.252.20.0 ~ 140.252.20.255
项目 十进制表示 十六进制表示
IP 地址 140.252.20.68 8C FC 14 44
子网掩码 255.255.255.240 FF FF FF F0
网络号 140.252.20.64 8C FC 14 40
子网范围 140.252.20.64 ~ 140.252.20.79 ---

计算过程

  • 子网掩码 255.255.255.240(二进制 11110000)表示前 28 位为网络位,后 4 位为主机位。
  • 按位与:IP 最后一字节 68(二进制 01000100)与掩码最后一字节 24011110000)运算,结果为 01000000(即 64),因此网络号为 140.252.20.64
  • 子网范围:主机位(后 4 位)从全 00)到全 115),即 64 + 0 = 6464 + 15 = 79,对应地址范围 140.252.20.64 ~ 140.252.20.79

子网掩码的二进制表示中,从右往左数,连续有多少个 0,就有多少位是主机位,这些位就是参与 "网络号计算" 和 "子网范围划分" 的部分。

  1. 子网掩码 255.255.255.0

    • 最后一字节二进制:00000000
    • 从右往左连续 0 的个数:8 位
    • 所以:后 8 位是主机位,计算网络号时这 8 位会被置为 0,子网范围就是这 8 位从全 0(0)到全 1(255)。
  2. 子网掩码 255.255.255.240

    • 最后一字节二进制:11110000
    • 从右往左连续 0 的个数:4 位
    • 所以:后 4 位是主机位,计算网络号时这 4 位会被置为 0,子网范围就是这 4 位从全 0(0)到全 1(15)。
  3. 基础上限

IPv4 是4 字节(32 位) 的正整数,总地址数为 232,约 43 亿个,TCP/IP 协议要求每个主机(实际按网卡)需配置 IP。

  1. 实际可用远不足 43 亿的关键原因
  • 存在特殊预留 IP 地址(不可用于普通主机);

  • 分配粒度:按网卡配置(一个主机可多网卡,一个网卡可配多 IP),并非按主机台数分配。

  1. CIDR 的局限性

CIDR 仅能提升地址利用率、减少浪费不会增加 IPv4 地址的绝对上限,仍无法解决地址短缺问题。

  1. 三大核心解决方式(细节完整)

  2. 动态分配 IP:仅为接入网络的设备分配 IP,同一设备(同一 MAC)每次接入互联网,获取的 IP 可能不同;

  3. NAT 技术:核心解决方案,后续重点讲解;

  4. IPv6 :用16 字节(128 位) 表示地址,与 IPv4互不兼容、非简单升级,目前尚未普及。

13.私有 IP与公网 IP
  1. 私有 IP 地址

    • 定义:仅用于局域网内部通信,不直接接入互联网;RFC 1918 规定了专用的私有 IP 地址段,用于组建局域网。

    • 三个标准私有网段(含地址数量):

      • 10.*:前 8 位为网络号,共 16,777,216 个地址;

      • 172.16.0.0 ~ 172.31.255.255:前 12 位为网络号,共 1,048,576 个地址;

      • 192.168.*:前 16 位为网络号,共 65,536 个地址。

  2. 公网 IP 地址

    • 定义:除上述私有 IP 段外的所有 IP 地址,用于互联网全局通信,可直接被外网访问。

二、路由器的 IP 配置与子网规则(细节完整)

  1. 双 IP 配置:一个路由器可配置两个 IP 地址

    • WAN 口 IP:连接上级网络(或公网)的 IP,可能是公网 IP 或上级子网 IP;

    • LAN 口 IP:作为当前子网的网关 IP,通常为私有 IP(如常见的192.168.1.1)。

  2. 子网归属:路由器 LAN 口连接的所有主机,都属于该路由器的子网。

  3. IP 复用规则

    • 同一子网内:私有 IP 地址不能重复(避免冲突);

    • 不同子网间:私有 IP 地址可以重复 (如多个家用路由器的 LAN 口都可使用192.168.1.1)。

  4. 层级结构 :家用路由器是运营商路由器子网的一个节点,运营商路由器可有多级,最外层运营商路由器的 WAN 口 IP 即为公网 IP


三、NAT(网络地址转换)核心机制

  1. 触发场景:子网内的主机需要与外网(互联网)通信时。

  2. 操作过程 :路由器将数据包 IP 首部中的私有 IP 地址替换为自身 WAN 口 IP,并逐级向上替换,最终数据包以公网 IP 的身份在互联网中传输。

  3. 核心作用:让多个私有 IP 主机共享少量公网 IP 访问外网,大幅缓解 IPv4 地址短缺问题。


四、公网访问服务的要求

如果希望自己实现的服务器程序能够在公网上被访问,必须将程序部署在具有公网 IP的服务器上(如阿里云、腾讯云等云服务器)。

私有 IP 访问公网的 "一去一回",核心是靠 NAT(网络地址转换,实际多用 NAPT 端口转换) 完成 "身份转换" 和 "身份还原":

去程:私有 IP "变身" 公网 IP

  • 发起请求 :内网主机(如 192.168.1.100:12345)向公网服务器(如 223.5.5.5)发送请求,数据包先到网关路由器。
  • NAT 转换 :路由器将数据包的源 IP 从私有 IP(192.168.1.100)替换为自身 WAN 口公网 IP(如 122.77.241.3),同时将源端口替换为临时端口(如 54321),并在本地维护一张 NAT 映射表
  • 公网传输:转换后的数据包以公网 IP 身份在互联网中传输,顺利到达目标服务器。

回程:公网 IP "还原" 私有 IP

  1. 响应返回 :公网服务器处理完请求后,响应包的目标 IP 是路由器的公网 IP(122.77.241.3),目标端口是 NAT 转换时分配的临时端口(54321),因此包会先路由到路由器。
  2. 查表还原 :路由器收到响应包后,查询 NAT 映射表,发现端口 54321 对应内网主机 192.168.1.100:12345,于是将响应包的目标 IP 和端口换回私有 IP 和原端口。
  3. 内网转发:路由器将还原后的数据包转发到对应的内网主机,完成通信
  • 去程:靠 NAT 把私有 IP "翻译" 成公网 IP,让数据包能在公网路由。
  • 回程:靠 NAT 映射表把公网 IP "翻译" 回私有 IP,让响应包精准回到内网主机。
  • NAPT 关键:同时转换 IP 和端口,让多个私有 IP 主机共享同一个公网 IP 访问公网,路由器靠端口号区分不同连接。

LAN IP(局域网 IP)的作用

LAN IP 是路由器在内网侧 的 IP 地址(通常是私有 IP,如 192.168.1.1),它的核心作用是:

  1. 作为内网主机的默认网关

    • 内网主机(如 192.168.1.100)要访问公网时,会先将数据包发送到 LAN IP,因为它是内网与外网通信的 "出口"。

    • 回程时,路由器从公网收到响应包后,会通过 LAN IP 将数据包转发到对应的内网主机。

  2. 标识子网归属

    • 所有连接到路由器 LAN 口的主机,都属于以 LAN IP 为网关的子网,内网通信直接通过 LAN IP 所在的子网完成。

WAN IP(广域网 IP)的作用

WAN IP 是路由器在公网侧 的 IP 地址(通常是公网 IP 或上级子网 IP,如 122.77.241.3),它的核心作用是:

  1. 作为 NAT 转换后的 "公网身份"

    • 去程时,路由器将内网数据包的源 IP(私有 IP)替换为 WAN IP,让数据包能在公网中被路由和识别(公网只认 WAN IP)。

    • 回程时,公网服务器的响应包会以 WAN IP 为目标地址,确保数据包能准确路由到路由器。

  2. 在公网中唯一标识路由器

    • WAN IP 是路由器在公网中的 "身份证",公网中的其他设备通过这个 IP 与路由器通信,再由路由器转发到内网主机。

|---------------|----------------------|-----------------------|
| 步骤 | LAN IP 的作用 | WAN IP 的作用 |
| 去程(内网→公网) | 接收内网主机的数据包,作为内网通信的网关 | 替换源 IP,作为数据包在公网中的身份标识 |
| 回程(公网→内网) | 作为转发入口,将响应包送到内网主机 | 作为响应包的目标地址,确保包能回到路由器 |

你可以把路由器当成:

  • 在家里的大门(LAN)

  • 在外面互联网的对外地址(WAN)


一、LAN IP 是啥?

就是路由器在家里局域网的门牌号 比如:192.168.1.1

作用只有一个:管家里 → 所有内网设备(手机、电脑)要上网,都先找这个 LAN IP 出门。


二、WAN IP 是啥?

就是路由器在互联网上的真实门牌号外面只认这个,不认你家里的私有 IP。


三、在「一去一回」里到底干啥?

1)去的时候(内网 → 公网)

  • 你的手机 / 电脑:先把包交给 LAN IP(交给家里大门)

  • 路由器拿到包:把发件人改成 WAN IP

  • 这样包才能在外面正常跑

一句话: LAN IP 负责收家里的包;WAN IP 负责让包能出去见人。


2)回来的时候(公网 → 内网)

  • 外面服务器回包:只发给 WAN IP(只认识你家对外地址)

  • 路由器收到:查一下表里对应哪个内网设备

  • 再通过 LAN IP 把包送到你手机 / 电脑

一句话: WAN IP 负责把包领回家;LAN IP 负责把包送到你手里

  • 去的时候 数据包:先找 LAN IP 出门 → 路由器换成 WAN IP 去公网顺序:内网 IP → LAN IP → WAN IP → 公网

  • 回来的时候 数据包:先找 WAN IP 回家 → 路由器换回内网 IP,通过 LAN IP 发给你顺序:公网 → WAN IP → LAN IP → 内网 IP

LAN/WAN 是路,映射表是「家里谁发的请求」的花名册。没有映射表,包能回到你家,但不知道给你手机、还是你电脑、还是你电视。

我给你举个例子

你家:

  • 大门 = LAN IP

  • 对外地址 = WAN IP

  • 家里有 3 个人:你手机、你电脑、你平板

去的时候(发请求)

  • 你手机:我要上网 → 走大门(LAN)

  • 你电脑:我也要上网 → 走大门(LAN)

  • 你平板:我也要 → 走大门(LAN)

路由器统一换成 WAN IP 发出去。

问题来了:

外面服务器回包时,只知道发到你家 WAN IP家里 3 台设备,包该给谁?


映射表就是干这个的

路由器在「去的时候」,偷偷记了一张表:

  • 手机:12345 → 公网端口:54321

  • 电脑:67890 → 公网端口:54322

  • 平板:11111 → 公网端口:54323

这张表,就叫 NAT 映射表

回来的时候:

  • 包到 WAN → 看一眼目标端口是 54321

  • 查映射表 → 哦!是手机

  • 再通过 LAN 发给手机

14.路由

一、路由的核心概念:Hop by Hop(一跳一跳)

  1. 路由本质 :在复杂网络中,找到一条通往终点的路径,过程是一跳一跳地 "问路"。

  2. "一跳" 的定义:数据链路层中的一个区间,在以太网中,指从源 MAC 地址到目的 MAC 地址之间的帧传输区间。

  3. 两层分工

    • 数据链路层:实现 ** 某一跳(区间)** 内的通信。

    • IP 层:实现直至最终目标地址的端到端(点到点)通信。


二、IP 数据包的传输流程

  1. 当 IP 数据包到达路由器时,路由器先查看目的 IP 地址

  2. 路由器判断:数据包是可以直接发送给目标主机 ,还是需要转发给下一个路由器

  3. 重复上述步骤,直到数据包到达目标 IP 地址。

  4. 转发依据 :每个节点(主机 / 路由器)内部维护一张路由表,用来决定数据包的下一跳去向。


三、路由表的作用与结构

  1. 路由表的作用

像 "问路指南",记录了 "到某个网络该走哪条路、下一跳是谁"。

  1. 路由表字段详解(以示例表为例)
字段 含义
Destination 目的网络地址(要去的网络)
Gateway 下一跳地址(下一个要交给的设备 IP)
Genmask 子网掩码(用于判断目的 IP 所属网络)
Flags 标志位:- U:此条目有效(Up)- G:下一跳是路由器(Gateway),无 G 表示直连网络
Metric 路由度量值(优先级,值越小越优先)
Iface 发送接口(数据包从本机哪个网口发出去)

示例路由表解读:

  • 192.168.10.0192.168.56.0 是直连网络(无 G 标志),分别通过 eth0eth1 接口直接通信。
  • default 是缺省路由(有 G 标志),所有不匹配其他条目的数据包,都交给网关 192.168.10.1,从 eth0 发出。

例子 1:目的地址 192.168.56.3

  1. 与第一行子网掩码 255.255.255.0 做 "按位与" 运算:192.168.56.3 & 255.255.255.0 = 192.168.56.0,与第一行目的网络 192.168.10.0 不匹配。
  2. 与第二行子网掩码 255.255.255.0 做 "按位与" 运算:192.168.56.3 & 255.255.255.0 = 192.168.56.0,与第二行目的网络 192.168.56.0 匹配。
  3. 转发决策:该网络是与 eth1 直连的网络,因此直接从 eth1 接口发送,无需经过路由器转发。

例子 2:目的地址 202.10.1.2

  1. 依次与路由表前几项(192.168.10.0192.168.56.0127.0.0.0)对比,均不匹配。
  2. 匹配缺省路由 default,从 eth0 接口发出,交给下一跳路由器 192.168.10.1
  3. 后续由 192.168.10.1 路由器根据自身路由表,继续决定下一跳地址。
  • 直连网络 :路由表中无 G 标志的条目,数据包可直接从对应接口发送,无需路由器转发。
  • 缺省路由:路由表最后一行,当目的地址与其他条目都不匹配时,按缺省路由转发。
  • 路由表查看 :可使用 route 命令查看本机路由表。

一句话总结:路由表是网络中的 "导航地图",通过 "按位与" 判断目的网络所属条目,直连网络直接发,非直连找下一跳,找不到就走缺省路由。

相关推荐
AnalogElectronic8 分钟前
linux 测试网络和端口是否连通的命令详解
linux·网络·php
Edward1111111143 分钟前
4月28日防火墙问题
linux·运维·服务器
Rust研习社1 小时前
使用 Axum 构建高性能异步 Web 服务
开发语言·前端·网络·后端·http·rust
灰子学技术1 小时前
Envoy HTTP 流量层面的 Metric 指标分析
网络·网络协议·http
上海云盾-小余1 小时前
海外恶意 UDP 攻击溯源:分层封禁策略与业务兼容平衡方案
网络·网络协议·udp
子琦啊1 小时前
【算法复习】字符串 | 两个底层直觉,吃透高频题
linux·运维·算法
智慧光迅AINOPOL1 小时前
校园全光网建设指南:从架构到调优,打造稳定高体验校园网络
网络·全光网解决方案·全光网·酒店全光解决方案·泛住宿全光网解决方案
被摘下的星星2 小时前
Internet 的域名系统:从“名字”到“地址”的翻译官
网络
AOwhisky2 小时前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
小龙在慢慢变强..3 小时前
目录结构(FHS 标准)
linux·运维·服务器