网络基础知识

2026年4月6日 · 2825 · 更新 2026年4月7日

网络模型

OSI七层模型

OSI七层模型是网络技术的理论基石。由ISO组织定义,它是一个高度抽象的逻辑分层,旨在让不同厂商的设备能互相通信。其对应的层级如上图所示(从下到上):

  • 物理层:位于模型的最底层,负责在物理媒体上传输原始比特流。常见的设备由网线、光纤、中继器
  • 数据链路层:负责在局域网内物理链路上可靠传输数据帧。这层包含的典型协议有MAC、ARP、VLAN
  • 网络层:负责寻址和路由选择,实现跨网络传输。典型协议有IP、ICMP、OSPF、BGP
  • 传输层:提供端到端的逻辑通信,负责可靠性、流量控制。典型协议有TCP、UDP
  • 会话层:建立、维护、管理和终止进程间的会话连接。典型协议有RPC
  • 表示层:负责处理数据的格式化、加密解密、压缩解压。典型协议有TLS、ASCII
  • 应用层:直接为用户应用提供服务,定义数据交互规则。典型协议有HTTP、DNS、SSH

五层模型

在实际的工业标准中,为了更清晰地对应TCP/IP协议栈,通常将OSI的上三层(应用、表示、会话)统一合并为应用层。这也是我们在写代码时最常接触的维度。上图中的中间部分对应着五层。

数据的封装是自上而下的。在发送端,数据每经过一层,就会被包上一层该层协议专有的”信封“(报头Header)

  • 应用层:产生原始数据(如HTTP请求)
  • 传输层:加上TCP/UDP头(包含源端口、目的端口)
  • 网络层;加上IP头(包含源IP、目的IP),数据变成Packet
  • 数据链路层:加上MAC头(包含源MAC、目的MAC)和帧尾校验,数据变成Frame(帧)
  • 物理层:将帧转换成电信号或光信号(比特流),发送出去

而解封装是自下而上的。在接收端,每往上一层,就会拆掉一个“信封”,检查里面的MAC、IP是否正确,然后再交给上层处理

  • 物理层:接收比特流,还原成帧
  • 数据链路层:拆掉MAC头,核对MAC地址,无误后交给网络层
  • 网络层:拆掉IP头,核对IP地址,确认路由,交给传输层
  • 传输层:拆掉TCP/UDP头,根据端口号找到对应的应用程序
  • 应用层:最终拿到原始的应用数据

数据链路层

在数据链路层中,MAC(Media Access Control)子层主要负责两件事情:

  • 将上层数据封装成帧(以太网帧、WiFI帧、PPP帧)
  • 控制设备如何访问共享的传输介质(MAC协议)

其中MAC协议的核心作用是,解决多个设备在同一网络中“如何有序发送数据”的问题。因为在共享介质(如早期以太网、无线网络)中,如果多个设备同时发送数据,会发生冲突,导致数据损坏。

常见的以太网帧都有目的MAC地址,它决定了接收者是谁,接收端网卡通过硬件过滤,只需处理与自己有关的帧。主要有三种类型的帧:

  • 单播帧:一对一通信。目的MAC为某个网卡的地址,只有这个网卡会接收,其它网卡会忽略
  • 组播帧:一对一组设备。目的MAC为FF:FF:FF:FF:FF:FF,所有同一局域网内的网卡都会接收
  • 广播帧:一对所有设备。目的MAC为特定组播地址,由组播组内的网卡接收

ARP

ARP协议是连接网络层(L3)和数据链路层(L2)的胶水协议。我们在代码或命令行里操作的通常是IP地址,但底层网卡发出的以太网帧必须填入目的MAC地址才能在物理线路上传输。如果你只知道对方的IP,不知道对方的网卡物理地址,这个包就发不出去。这时候就需要ARP出马去“打听”。“打听”到的结果在本地机器上还会缓存下来,避免每次都用ARP请求。

STP

在构建高可用的企业级网络或数据中心时,为了防止单点故障,我们通常会在交换机之间拉多条网线做冗余 如上图,c1和c2之间可以通过多条冗余线路进行通信,但这也带了一个问题。当c1发送一个广播请求找c2的MAC地址时

  • sw1收到该请求后,将包发给sw2和sw3
  • sw2收到后,转发给sw3
  • sw3收到sw1的包,转发给sw2;同时收到sw2的包,又转发给sw1

交换机的转发速度极快,且以太网帧没有TTL。这意味着广播包会在这个物理环路上疯狂打转,且每一次经过交换机都会被复制分发,最终会导致链路带宽被填满,交换机负载飙升,整个网络卡死。

这时候就得轮到STP生成树协议出马了,它会选举一个根桥(通常是Bridge ID最小的交换机),然后计算各交换机到根桥的路径开销,再为每个交换机选择一条最优路径,将其它冗余路径上的端口置为阻塞状态。这样就做到了物理上有环,但逻辑上无环,防止广播风暴的形成。

其它类似协议:RSTP、MSTP

IP协议

IP协议位于网络层,它的特性是无连接、不可靠的。其首部结构见下图

  • version:表示IP协议版本
  • IHL:表示IP首部的长度,用于告知接收端,IP头部在哪里结束,荷载部分从哪里开始。它是以4字节为单位的,最小值为5(20字节),最大值为15(60字节)
  • TOS:服务类型,表示数据包的服务质量要求
  • Total length:整个IP数据报的长度(包含数据在内)
  • Identification:唯一的数据报ID标识。当一个IP报文被分片时,所有分片都使用相同的标识符,以便在接收端重组
  • Flags:控制分片行为。DF表示不允许分片;MF表示后面还有分片
  • Fragment offset:表明该分片在原始数据报中的位置。接收端据此重组原始报文
  • TTL:数据报的过期时间。每经过一个路由器,该字段的值就会减小,当为0时,路由器就会丢弃该数据报,并向发送端返回一个ICMP报文来报告错误。这有效防止了数据报在网络中无限循环,形成环路
  • Protocol:表明IP报文数据部分携带的上层协议类型,如TCP、UDP
  • Header checksum:首部校验和。用于检查报文头在传输过程中是否被损坏
  • Source address:源IP地址
  • Destination address:目的IP地址
  • Options:用于提供额外的功能,长度可变,最大40字节
  • Data:携带的数据

IP分片

IP分片往往是网络性能抖动、丢包甚至防火墙拦截的“幕后黑手”。这里我们先了解下网络模型中各层对数据的封装单位:

  • 传输层:段
  • 网络层:包
  • 数据链路层:帧
  • 物理层:比特流

网络层逻辑上可以处理最大65535字节的包,而物理网卡一次能发送的有效载荷上限通常只有1500字节。这个1500字节的限制,就是我们常说的MTU。这个MTU设置在物理网卡硬件/驱动上,但它却是属于数据链路层的属性,也就是说,它的约束力是向上传递的。

当网络层想把一个4000字节的包塞进只能装1500字节的帧里时,IP分片就发生了。它会分成三个片,而且这些分片会作为独立的IP包在网络中行进,路径可能各不相同。到了目的主机后,这些分片会根据IP协议字段中的Identification、Flags、Fragment offset等字段进行重组,最终得到完整的4000字节的数据。

在高性能系统中,我们要极力避免分片,它被视为一种“技术债务”

  1. 性能损耗:分片和重组会消耗CPU资源
  2. 丢包放大:IP层没有重传机制。如果一个大包分成了多片,其中一片丢了,接收端无法重组,整个大包(所有分片)都会被丢弃

为了避免分片,现代协议通常会开启PMTUD。发送包时将DF位置为1,如果中间路由器发现包太大,由于不能分片,它会丢弃包并回传一个ICMP Type 3 Code 4(ICMP差错报文)。发送端收到后,自动调小包大小,直到能顺利通过整条路径。

MTU指的是以太网帧的数据负载部分,其中不包含以太网帧头(14字节)和帧尾校验(4字节)。一个满载的以太网帧在物理线路上跑的时候,总长度其实是1518字节

巨型帧

巨型帧是专门为高性能数据中心和大规模数据传输设计的。指MTU大于1500字节的以太网帧,最常用的设定值是9000字节。9000字节是一个平衡点,既能大幅提升效率,又不会让CRC校验(FCS)的可靠性下降太多。使用巨型帧带来的好处有:

  • 减少头部开销:传输9000字节数据,用标准帧需要发6个包(每个包都有帧头、IP头、TCP头)。而用巨型帧只需要1个包。减少了 5组头部的重复数据。
  • 降低CPU负载:操作系统每收到一个包,网卡都会触发一个中断让CPU去处理。同样的流量,巨型帧将中断次数减少到了原来的1/6。这对于10Gbps或100Gbps的高带宽环境,能节省大量的CPU周期。

巨型帧只能在受控的局域网内部使用:全链路设备的MTU必须一致,不然会造成黑洞效应

IPv4五类地址划分

有了MAC地址为什么还需要IP地址呢?首先,MAC地址只用于本地网络识别,不会在跨网络传输中保留;其次,MAC没有路径信息,无法做路由决策;而且MAC在“多跳网络”中,每一跳MAC都会变,不能代表最终目标。IP地址是一个逻辑地址,通常划分为五类:

  • A类地址:0.0.0.0 - 127.255.255.255
    • 私有地址范围:10.0.0.0 - 10.255.255.255
  • B类地址:128.0.0.0 - 191.255.255.255
    • 私有地址范围:172.16.0.0 - 172.31.255.255
  • C类地址:192.0.0.0 - 223.255.255.255
    • 私有地址范围:192.168.0.0 - 192.168.255.255
  • D类地址:224.0.0.0 - 239.255.255.255
  • E类地址:240.0.0.0 - 255.255.255.255
    • 保留供研究和未来使用,不会出现在互联网上