欢迎光临
我们一直在努力

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,核心是灵活划分网络号与主机号:

  • 子网掩码:32 位正整数,用一串 0 结尾,用于区分网络位和主机位。
  • 按位与运算:将 IP 地址与子网掩码逐位做 “与” 运算,结果即为网络号。
  • 无类别限制:网络号 / 主机号的划分不再受 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)与掩码最后一字节 240(11110000)运算,结果为 01000000(即 64),因此网络号为 140.252.20.64。
    • 子网范围:主机位(后 4 位)从全 0(0)到全 1(15),即 64 + 0 = 64 到 64 + 15 = 79,对应地址范围 140.252.20.64 ~ 140.252.20.79。

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

  • 子网掩码 255.255.255.0

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

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

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

    2. 实际可用远不足 43 亿的关键原因

    • 存在特殊预留 IP 地址(不可用于普通主机);

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

    3. CIDR 的局限性

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

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

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

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

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

  • 13.私有 IP与公网 IP 
  • 私有 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 个地址。

  • 公网 IP 地址

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


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

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

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

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

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

  • IP 复用规则:

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

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

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


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

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

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

  • 核心作用:让多个私有 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

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

    LAN IP(局域网 IP)的作用

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

  • 作为内网主机的默认网关:

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

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

  • 标识子网归属:

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


  • WAN IP(广域网 IP)的作用

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

  • 作为 NAT 转换后的 “公网身份”:

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

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

  • 在公网中唯一标识路由器:

    • 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(一跳一跳)

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

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

  • 两层分工:

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

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


  • 二、IP 数据包的传输流程

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

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

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

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


  • 三、路由表的作用与结构

    1. 路由表的作用

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

    2. 路由表字段详解(以示例表为例)

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

    示例路由表解读:

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

    例子 1:目的地址 192.168.56.3

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

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

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

    赞(0)
    未经允许不得转载:171主机测评 » Linux 网络(5)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址