【计算机网络】简学深悟启示录:网络层

文章目录

1.网络层

应用层和传输层主要负责定内容(发什么数据,业务逻辑)和定应用(哪个应用发 / 收,端口 + 可靠 / 快速),接下来就是要准备发数据了,网络层 就是负责选择跨网络的传输路径

网络是由多个局域网组成的,各个局域网之间依靠路由器进行转发,IP 就是用于标识转发身份的,IP=目标网络+目标主机

2.IP协议

2.1 IP协议头

  • 4位版本: 指定 IP 协议的版本

  • 4位首部长度 : 告诉接收方首部有多长。因为底下的"选项"字段长度可变,所以这个字段是必须的。注意:单位是 4 字节。标准的 20 字节首部,这里的数值是 5 (5 * 4 = 20)

  • 8位服务类型: 用于标记数据包的优先级(例如语音通话需要低延迟,文件下载可以容忍延迟)

  • 16位总长度 (Total Length) : 整个 IP 数据报的长度(首部 + 数据)

第二行放到后面讲

  • 8位生存时间(TTL): 防止路由死循环的关键,不是按时间计算,而是路由转发次数

    • 数据包每经过一个路由器,TTL1
    • TTL 变为 0 时,路由器会丢弃该包并发送 ICMP 超时消息给源地址
  • 8位协议 : 告诉 IP 层数据是谁的

    • 6 : 代表 TCP
    • 17 : 代表 UDP
    • 1 : 代表 ICMP (Ping 命令用的)
  • 16位首部检验和 : 确保 IP 首部在传输过程中没有损坏。路由器每转发一次都要重新计算(因为 TTL 变了)

  • 32位源 IP 地址 : 发送端的 IP(例如客户端的 IP

  • 32位目的 IP 地址 : 接收端的 IP(例如你服务器绑定的 IP

  • 选项: 可变长,很少使用。可用于安全、源路由选择等高级功能

  • 数据 : 这里装的就是 TCP 段,上一层的有效载荷+报文,就是下一层的有效载荷

2.2 IP分片和组装

IP 协议头的第二行非常关键。如果数据包太大(超过了链路层的 MTU,例如以太网通常是 1500 字节),IP 层会将数据包切碎(分片),这一行就是用来记录如何把碎片拼回去的。

  • 16位标识 : 给数据包打个 ID。同一个原始包切出来的所有碎片,ID 都是一样的

  • 3位标志 (Flags):

    • 第一位 : 保留位,必须是 0
    • 第二位 : 如果设为 1,意思是不许被切开。如果网络一定要切分才能通过,路由器就会直接丢弃这个包,并报错;如果设为 0,意思是允许切分
    • 第三位 : 后面还有。如果置 1,说明这不是最后一个碎片
  • 13位片偏移: 当前这个碎片在原始数据中的位置。接收方根据这个把乱序到达的碎片拼回原来的顺序

🤯举个例子:

假设你要发一个 4000 字节的大数据包,但是中间的网线限制一次只能过 1500 字节(MTU

为了方便计算,我们假设 IP 头部长 20 字节,所以数据部分实际上是:

  • 原始数据总长3980 字节(数据) + 20 字节(IP 头) = 4000 字节
  • MTU限制1500 字节(其中数据最多装 1480 字节,头部 20 字节)

路由器会把这个大包切成 3 片,假设原始包的标识(ID)是 666

  1. 第一片 (Fragment 1)

这是开头部分。

  • 16位标识666 (跟原始包一样)
  • 3位标志 (MF)1 (设为 1,表示"后面还有")
  • 13位片偏移0 (这是开头,偏移量是 0)
  • 携带数据 :第 0 ~ 1479 字节 (共 1480 字节)
  1. 第二片 (Fragment 2)

这是中间部分。

  • 16位标识666 (我是属于 ID 666 的一份子)
  • 3位标志 (MF)1 (设为 1,表示"后面还有")
  • 13位片偏移185,前面发了 1480 字节。偏移量单位是 8 字节,所以 1480 / 8 = 185
  • 携带数据 :第 1480 ~ 2959 字节 (共 1480 字节)
  1. 第三片 (Fragment 3)

这是最后剩下的部分。

  • 16位标识666 (我也是ID 666的一份子)
  • 3位标志 (MF)0 (注意!这里设为 0,表示最后一个了)
  • 13位片偏移370,前面两片总共发了 1480 + 1480 = 2960 字节,2960 / 8 = 370
  • 携带数据 :第 2960 ~ 3979 字节 (剩下的 1020 字节)

当目的主机的 IP 层接收到这些分片后,会根据标识字段将属于同一个数据报的所有分片挑选出来。利用片偏移字段,IP 层会对属于同⼀个数据报的分片进行排序,当所有的分片都到达并正确排序后,IP 层会将这些分片重新组装成一个完整的 IP 数据报,传递给上层的协议进行处理

3.网段划分

  • 网络号: 保证相互连接的两个网段具有不同的标识
  • 主机号: 同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号

路由器本质也是个子网的主机,也需要配置 IP,路由器一般连接至少两个子网,是子网里的第一台设备,路由器就是用来在各个子网之间转发用的,子网内新增的主机由路由器分配 IP

IP 地址本身看不出哪部分代表 "所属的网络",哪部分代表 "网络里的自己",把子网掩码和IP进行按位与计算来区分网络号和主机号

例子1:同一路由器下,手机和电脑互传文件(同局域网)

  • 电脑IP:192.168.1.100 ,子网掩码:255.255.255.0
  • 手机IP:192.168.1.105 ,子网掩码:255.255.255.0

子网掩码的作用:

  1. 分家 :掩码255.255.255.0规定前3段是网络号,最后1段是主机号
    → 电脑/手机的网络号都是192.168.1 ,主机号分别是 100105
  2. 判邻居 :两者网络号完全相同,判定为同一局域网

✅ 结果:不用走任何路由器,手机和电脑能直接互传文件、投屏,路由器只负责连外网,不插手内网通信。

例子2:你家电脑连朋友家的打印机(跨局域网)

  • 你家电脑IP:192.168.1.100,掩码:255.255.255.0 → 网络号:192.168.1
  • 朋友家打印机IP:192.168.2.88 ,掩码:255.255.255.0 → 网络号:192.168.2

子网掩码的作用:

  1. 分家:同样按前3段划网络号,两者网络号明显不同;
  2. 判邻居 :网络号不一样,判定为不同局域网

✅ 结果:你家电脑不能直接连朋友家打印机,必须通过路由器/宽带网络转发数据,才能实现跨网访问。

例子3:子网掩码帮你避免"IP混乱"(简单划小网)

假设一个小公司有 3 个部门,各 20 台电脑,路由器给的大网段是192.168.1.0(掩码255.255.255.0,能连 254 台设备)。

如果所有电脑都用这个掩码,会混在一个网里,数据传输乱、还不安全。

用子网掩码微调(比如 255.255.255.192),把大网段拆成 3 个小子网:

  • 行政部:192.168.1.1~62 (网络号 192.168.1.0
  • 技术部:192.168.1.65~126(网络号 192.168.1.64
  • 市场部:192.168.1.129~190(网络号 192.168.1.128

4.私有IP和公网IP

  • 一个路由器可以配置两个 IP 地址,一个是 WANIP,一个是 LANIP(子网 IP)
  • 路由器 LAN 口连接的主机,都从属于当前这个路由器的子网中
  • 不同的路由器,子网 IP 其实都是一样的(通常都是 192.168.1.1)。子网内的主机 IP 地址不能重复,但是子网之间的 IP 地址就可以重复了

每一个家用路由器,其实又作为运营商路由器的子网中的一个节点。这样的运营商路由器可能会有很多级,最外层的运营商路由器,WANIP 就是一个公网 IP 了。子网内的主机需要和外网进行通信时,路由器将 IP 首部中的 IP 地址进行替换(替换成 WANIP),这样逐级替换,最终数据包中的 IP 地址成为一个公网 IP。这种技术称为 NAT 映射技术

5.路由表

路由表就是路由器(或主机)内部的一张核心导航清单。它的唯一作用是:告诉数据包「下一步该发给谁」,才能最快到达目的地

当一个 IP 数据包到达路由器(或主机)时,设备只知道目标 IP,但不知道怎么走。路由表就是用来做决策的:

  1. 直连:如果目标在本地局域网,直接发过去
  2. 转发:如果目标在互联网,发给网关(下一跳路由器),让它继续送

一句话总结 :路由表 = 目的IP + 走哪条路(下一跳) + 用哪个网卡(出口)

目标网络 (Destination) 子网掩码 (Genmask) 网关 (Gateway) 标志 网卡 (Iface) 含义
0.0.0.0 0.0.0.0 192.168.1.1 UG eth0 默认路由:找不到路时,全发给192.168.1.1
192.168.1.0 255.255.255.0 0.0.0.0 U eth0 直连路由:去192.168.1网段,直接在本地发
127.0.0.0 255.0.0.0 0.0.0.0 U lo 本机路由:发给自己的,走回环接口
  1. 目标网络 :数据包要去哪里。0.0.0.0 代表"所有其他地方"。
  2. 网关下一跳(Next Hop)
    • 如果是 0.0.0.0(或 onlink),说明是直连 ,不用经过路由器,直接通过 ARPMAC 地址发;
    • 如果是具体 IP(如 192.168.1.1),说明要把包发给这个路由器。
  3. 网卡 :从本机的哪个网口(eth0/wlan0)把包发出去。

希望读者们多多三连支持

小编会继续更新

你们的鼓励就是我前进的动力!

相关推荐
孙同学_3 小时前
【Linux篇】应用层自定义协议与序列化
linux·服务器·网络
航Hang*3 小时前
第3章:Linux系统安全管理——第1节:Linux 防火墙部署(firewalld)
linux·服务器·网络·学习·系统安全·vmware
宋小米的csdn3 小时前
网络知识学习路线(实用向)
网络·学习
Lsir10110_3 小时前
吃透 TCP 核心原理:从握手挥手到滑动窗口与拥塞控制
网络·网络协议·tcp/ip
chen_ever3 小时前
从网络基础到吃透 Linux 高并发 I/O 核心(epoll+零拷贝 完整版)
linux·网络·c++·后端
情绪雪3 小时前
TCP/IP 模型
网络·网络协议·tcp/ip
bukeyiwanshui3 小时前
20260407 网络时间设置
网络
@insist1233 小时前
网络工程师-因特网与网络互联(一):IPv4 协议精讲,从分类地址到子网划分
网络·网络工程师·软考·软件水平考试
taxunjishu3 小时前
Profinet转MODBUS TCP在精细化工塔讯工业自动化中的应用方案
网络·网络协议