计算机网络(一):分层模型、物理层与数据链路层

Views: --

在 Canoe 平台上开一个训练任务、勾选端口暴露后,会拿到一条服务链接:

nlb-9vuc85ix299r1w5vzo.cn-shanghai.nlb.aliyuncsslb.com:31983

这一串东西看不懂,本质上是因为它把好几层协议的信息压在了一行里:冒号前是一个域名,冒号后是一个端口,而域名会被翻译成一个 IP,请求最终要靠 TCP 才能可靠地送进那台机器的那个端口。一个 URL 背后,是一整摞协议在分工协作。

要真正看懂它,得先有「分层」这个视角。这篇从最底层开始,自底向上把地基打好:先讲为什么网络要分层,再把日常听到的一堆名词(IP、域名、端口、TCP、HTTP、Mbps、网卡、WiFi、路由器……)各自归位,然后深入最底下两层——物理层和数据链路层。上层的 IP、传输层、应用层留到后续。

一、为什么网络要分层

「把数据从一台机器送到另一台机器」是一个极其复杂的问题:要考虑用什么介质传电信号、怎么在一堆机器里找到对的那台、传输出错了怎么办、多个程序抢一根线怎么协调、数据太大怎么切、对方用什么格式解读……如果把这些揉成一坨一起解决,没有人能设计得出来。

解决办法是分层:每一层只解决一类问题,向下依赖下一层提供的能力,向上为上一层提供服务。上层不需要知道下层怎么实现,只要下层「把字节送到」这个承诺兑现即可。

经典的分层模型是自底向上的五层(TCP/IP 模型;OSI 模型分七层,多出的两层日常很少单独讨论):

名称一句话本质典型概念
5应用层程序之间用什么「语言」对话HTTP、HTTPS、DNS、SSH
4传输层字节怎么可靠 / 快速地端到端送达TCP、UDP、端口
3网络层怎么把数据送到全网任意一台机器IP、路由
2数据链路层同一段链路内怎么把帧交给某台设备MAC、以太网帧、ARP
1物理层怎么把 0 和 1 变成信号传过去网线、光纤、无线电波

一个关键机制是封装:数据从上往下走时,每经过一层就被套上该层的「信封」(加一段头部信息);到对端后再从下往上逐层拆开。上层的整个数据,在下层眼里只是「载荷」——下层不关心里面是什么。

应用层数据(HTTP 请求)
   ↓ 套上传输层头部
[TCP 头 | 应用层数据]
   ↓ 套上网络层头部
[IP 头 | TCP 头 | 应用层数据]
   ↓ 套上链路层头部和尾部
[以太网头 | IP 头 | TCP 头 | 应用层数据 | 校验]
   ↓ 转成信号发出去

理解了这一点,后面所有概念都能对号入座:看到一个名词,先问它属于第几层、解决的是哪一类问题。

二、先给几个贯穿全程的概念定位

有一批名词会反复出现,但它们分属不同层。这里先建立准确的直觉,深入留到对应层的章节。

IP:机器的地址

每一台联网的机器都有一个 IP 地址,形如 192.168.1.10120.55.83.12。它的唯一作用是在网络中定位一台机器。数据最终一定是发往某个 IP 的。IP 属于网络层(第 3 层)。

域名与 DNS:好记的名字,和翻译服务

120.55.83.12 这种数字难记,于是有了域名,如 canoe.xaminim.com。域名是给人看的,机器之间通信仍然只认 IP,中间靠 DNS 把域名翻译成 IP:

输入 canoe.xaminim.com
   → 问 DNS:这个名字对应哪个 IP?
   → DNS 答:120.55.83.12
   → 机器才向 120.55.83.12 发数据

DNS 是应用层的一个服务。

端口:一台机器内部区分服务的编号

一台机器(一个 IP)上同时跑着很多程序:网页服务、数据库、SSH 登录……端口是一个 0–65535 的整数,用来区分「同一台机器上的哪个服务」。

120.55.83.12:22     → SSH 登录服务
120.55.83.12:80     → 网页服务
120.55.83.12:3306   → 数据库
120.55.83.12:31983  → 某个训练任务暴露的服务

所以「IP + 端口」才能精确定位到「哪台机器上的哪个服务」,写法是中间加冒号。端口属于传输层。

监听与连接

监听(listen):一个程序启动后占住某个端口,等着别人来访问。如果没有任何程序监听某端口,去访问它会得到「连接被拒绝」——门牌号对应的房间是空的。

连接(connect):客户端主动去找监听中的服务端,接上头,之后双方来回传数据。「连接」主要是 TCP 的概念。

TCP 与 UDP:两种传输方式

传输层有两种把数据送达的方式:

TCPUDP
可靠性保证送达、不乱序、不重复可能丢、可能乱序
机制先「握手」建立连接再传不握手,直接发
速度略慢(有确认开销)
适用网页、SSH、数据库、文件传输视频直播、游戏、语音

绝大多数需要「不能错」的场景用 TCP;能容忍少量丢失但要快的场景用 UDP。

HTTP 与 HTTPS:应用层的对话语言

TCP / UDP 只负责把字节送到,送到之后双方说什么、怎么说,由应用层协议规定。HTTP 是最常用的一种,专门用于网页和接口:

客户端:GET /jobs/detail?job_id=j-xxx    (我要这个页面)
服务器:200 OK + 网页内容                (给你,成功)

HTTP 建立在 TCP 之上——先用 TCP 接上头,再用 HTTP 交流。HTTPS = HTTP + 加密(TLS):普通 HTTP 在链路上是明文,谁都能看;HTTPS 给内容加了密,中间人截获到的是乱码。地址栏 https:// 和小锁标志就是这个意思。

这几个概念的依赖关系:

HTTP / HTTPS     ← 说什么(应用层)
     ↑ 建立在
TCP / UDP        ← 怎么把字节送到(传输层)
     ↑ 建立在
IP               ← 送到哪台机器(网络层)

三、第一层:物理层

物理层解决一件事:怎么把一串 0 和 1 变成某种物理信号,通过某种介质传到对端。它完全不关心这些 0 和 1 是什么意思、发给谁——那是上层的事。

三种介质

介质信号典型场景速度量级
网线(铜)电信号服务器、家用1 / 10 / 100 Gbps
光纤光信号数据中心之间、海底电缆100 Gbps 起,可达数 Tbps
无线(WiFi / 4G / 5G)电磁波手机、笔记本几十到几百 Mbps

数据中心内部大量使用光纤。训练集群里节点之间每秒要搬动几十 GB 的梯度数据,物理层的速度直接决定训练能多快,这也是训练集群成本高的一大原因——高速网卡和高速交换机很贵。

带宽单位:bit 和 Byte 的坑

带宽单位是 Mbps = Megabits per second = 兆比特每秒。拆开看:M 是兆(一百万),b 是 bit(一个 0/1),ps 是每秒。

最容易踩的坑是大小写的 b

  • Mbps(小写 b)= 兆比特每秒,运营商、网卡速度用这个
  • MBps / MB/s(大写 B)= 兆字节每秒,文件下载速度用这个

因为 1 Byte = 8 bit,所以:

100 Mbps = 100 / 8 = 12.5 MB/s

运营商宣传的「100M 宽带」是 100 Mbps,换算成下载速度只有 12.5 MB/s。不是缩水,是单位差了 8 倍。

各量级的直觉:

场景速率换算
家庭 100M 宽带100 Mbps12.5 MB/s
千兆宽带1000 Mbps125 MB/s
万兆网卡10 Gbps1.25 GB/s
训练集群 RDMA 网卡100 / 200 / 400 Gbps12.5 GB/s 起

速记:小写 b 是运营商口径、要除以 8;大写 B 是文件口径、按真实算。

关于宽带带宽的三个常见疑问

上行和下行是分开算的,且通常不对称。 「100M 宽带」说的是下行(下载);家用宽带的上行(上传)往往小一个数量级(比如下行 100 Mbps、上行只有几 Mbps)。这就是为什么发大文件、视频会议画质会明显比下载吃力。机房专线一般是上下行对称的。

套餐带宽是全家共享的总上限。 100M 宽带意味着路由器到运营商之间那条链路最高 100 Mbps,家里所有设备加起来不能超过它。一台设备下载占满 100 Mbps,其他设备就会卡——这就是「抢带宽」,也是路由器限速功能存在的原因。

机房带宽和家用宽带不同:机房里「100G 带宽」通常是对称、独占的(不与陌生人共享),但两台机器同时向同一台机器发数据时,接收端的总入口带宽仍是上限,会排队。

网卡、交换机、路由器初识

  • 网卡(NIC):机器上负责收发网络信号的硬件。把 0/1 转成信号发出去、把收到的信号转回 0/1。WiFi 模组、4G/5G 模组、有线网口都是网卡。一台机器可以有多块网卡。
  • 交换机(Switch):多个口的设备,把多台机器连起来让它们互相通信。属于第 2 层,下一节详述。
  • 路由器(Router):连接两个不同网络的设备,属于第 3 层。

四、日常网络设备与名词,各归其位

网卡、WiFi、WLAN、5G、蓝牙、猫、路由器、交换机、AP 这些词很容易混。理清的关键是先分出三个角色:你的终端、你家、运营商

【终端】            【你家】               【运营商】
笔记本 / 手机        路由器                 局端设备 / 基站
产生和消费数据       把终端和运营商连起来      真正接入互联网

终端一侧

  • 网卡:上网能力的硬件载体。笔记本里对应网口或 WiFi 模组,手机里是焊在主板上的基带芯片加天线。
  • WiFi 与 WLAN:WLAN 是「无线局域网」,WiFi 是它最主流的一种实现技术,日常可当同义词。WiFi 信号有效距离约 10–50 米。WiFi 6 / WiFi 7 是 WiFi 的版本代际,越新支持越全,本质是同一种东西的不同代。
  • 4G / 5G:和 WiFi 是完全不同的两套体系。信号来自运营商建的基站(路边的高塔),覆盖几公里到几十公里,需要 SIM 卡和月租。5G 相比 4G 峰值更高、延迟更低。
  • 蓝牙:虽然也是无线,但不是上网技术,用于连接近距离小设备(耳机、键盘、手表),距离几米、速率低。

你家一侧

  • 猫(Modem,调制解调器):把运营商拉进来的线(现在基本是光纤)的信号,和家里设备用的以太网信号互相转换。现在家用基本是「光猫」。名字来自 Modulate(调制)+ Demodulate(解调)——把 0/1 调制成适合线路传输的波形,对端再解调回来。
  • 路由器:家里那个小盒子其实是四合一——集成了猫(信号转换)、路由器(不同网络间转发)、交换机(多个 LAN 口)、WiFi 热点(无线接入)四种功能。在专业机房里这是四台独立设备。
  • 交换机:只做一件事——把多台设备用网线连起来让它们互通。家用路由器背后那几个 LAN 口内部就是一个小交换机。
  • AP(接入点):单纯发 WiFi 信号的设备。大楼里会用一堆专业 AP 挂在天花板上,而不是家用路由器。

运营商一侧

局端有 OLT(光线路终端)、核心路由器等;移动网络有基站(4G 叫 eNodeB、5G 叫 gNodeB)和核心网。这些日常接触不到,知道存在即可。

WiFi 和「流量」的本质区别

不在于信号是不是无线,而在于链路的另一端是谁

WiFi:  手机 ──WiFi──→ 你家路由器 ──光纤──→ 运营商
              第一段才是 WiFi,运营商只跟你的路由器打交道

流量:  手机 ──5G──→ 运营商的基站
              没有中间那台你自己的设备,直接连基站,按套餐计费

这也解释了为什么训练集群用有线不用 WiFi:WiFi 是共享无线介质、有额外的协调开销,实际吞吐和稳定性都不如有线。

五、第二层:数据链路层

数据链路层解决的核心问题是:在同一段物理链路上(同一根线 / 同一个 WiFi / 同一台交换机连起来的一组设备),怎么把一帧数据准确交给某一台设备。 它要处理寻址、成帧、差错检测、多设备共享介质的协调。

MAC 地址

MAC 地址是一个 48 bit(6 字节)的编号,通常写成 6 组十六进制,如 60:3e:5f:83:b8:a9。三个关键事实:

  1. 出厂烧录在网卡里,不依赖任何网络配置。
  2. 全球唯一:前 24 位是 IEEE 分配给厂商的标识(OUI),后 24 位是厂商给每片网卡的序列号。
  3. 只在同一段链路内有意义,不能跨路由器使用

第 3 点最反直觉,值得单独讲清楚。

「全球唯一」不等于「全球可达」

MAC 全球唯一,说的是身份不重复,像身份证号;但它扁平、无结构——从一个 MAC 号本身,无法推断出这台机器在网络的哪个位置。如果要靠 MAC 在全球范围找机器,那全世界每台转发设备都得维护一张几十亿条的表,根本不可行。

IP 地址则是分层、有结构的:一整段 IP(如 120.55.0.0120.55.255.255)可以整体划给某个机房,于是路由器只需一条规则「凡是 120.55 开头的,往那个方向发」就覆盖了六万多个地址。

MAC 唯一但无结构,只能在一段链路内点名;IP 有结构,才能支撑全球范围的聚合路由。这正是有了 MAC 还必须有 IP 的根本原因。

以太网帧

上层(IP 层)发下来的数据,必须先装进以太网帧这个标准结构,才能从一块网卡传到另一块网卡。Ethernet II 帧的结构:

字段长度含义
目的 MAC6 字节这帧发给同一链路内的哪台网卡
源 MAC6 字节这帧是谁发的
类型2 字节载荷装的是哪种上层协议(0x0800 = IPv4,0x0806 = ARP,0x86DD = IPv6)
载荷46–1500 字节真正要传的数据(通常是一个 IP 包)
校验(CRC)4 字节用于发现传输错误

两个硬性大小限制:

  • 最小帧 64 字节(历史上为配合冲突检测保留)。
  • 最大帧 1518 字节,其中载荷上限 1500 字节,这个上限叫 MTU(最大传输单元)。上层 IP 包超过 MTU 就要分片。

CRC:只检错,不纠错

**CRC(循环冗余校验)**解决「数据在介质上传输可能出错(某个 bit 被干扰翻转)」的问题。机制是:

发送方:用一个固定除数对帧数据做特殊的二进制除法,得到余数作为校验值,附在帧尾
接收方:用同样的方式重算一遍,和帧尾带来的校验值比对
        一致   → 认为没出错,接收
        不一致 → 数据被破坏,直接丢弃这一帧

三个要点:CRC 只发现错误、不修复,丢弃后要不要重传是上层(TCP)的事;它用多项式除法,漏检概率极低;整个过程由网卡硬件自动完成,对软件透明。

ARP:从 IP 问出 MAC

发帧需要填「目的 MAC」,但上层通常只给出目的 IP。ARP 协议负责在同一网段内把 IP 解析成 MAC:

A 在本网段广播(目的 MAC = FF:FF:FF:FF:FF:FF,全网段都收到):
    「谁是 192.168.1.100?把你的 MAC 告诉我」
B 单播回复 A:
    「我是 192.168.1.100,我的 MAC 是 BB:BB:BB:BB:BB:BB」
A 把这条 IP → MAC 映射缓存起来(几分钟失效),之后直接用

ARP 依赖广播,因此只在同一网段内有效,跨路由器就用不了

在任意 Mac / Linux 终端执行 arp -a,能看到本机缓存的 IP → MAC 映射。一个真实例子:

? (192.168.136.1)   at a8:50:81:3f:e:52   on en0 [ethernet]
? (192.168.136.151) at 60:3e:5f:83:b8:a9  on en0 [ethernet]
? (169.254.169.254) at (incomplete)       on en0 [ethernet]
mdns.mcast.net (224.0.0.251) at 1:0:5e:0:0:fb on en0 [ethernet]

逐行解读,正好把本节概念串起来:

  • en0 是网卡接口名,所有条目都在 en0,印证 ARP 只看得到本网段。
  • 192.168.136.1 是本网段的网关(家用网络里 .1 默认是路由器),对应的就是路由器网卡的 MAC。
  • 192.168.136.151 是本网段另一台设备。
  • 169.254.169.254 显示 incomplete——ARP 问了但没人应答(169.254.x.x 是没拿到正常 IP 时系统自分配的地址),本地无人占用,属正常现象。
  • 224.0.0.251 不是某台机器,而是一个多播地址(mDNS,局域网服务发现用),它按固定规则映射成 01:00:5e 开头的多播 MAC。

这引出 MAC 的三种类型:

单播 unicast:   目的 MAC = 某一台机器            (正常点对点通信)
广播 broadcast: 目的 MAC = FF:FF:FF:FF:FF:FF     (如 ARP 问路,全网段都收)
多播 multicast: 目的 MAC = 01:00:5e:xx:xx:xx     (只发给订阅了某组的一批设备)

交换机的本质

交换机是第 2 层设备,工作可以概括为「MAC 学习 + 按 MAC 表转发」。它内部维护一张 MAC 地址表(MAC → 端口):

1. 收到一帧,读源 MAC → 记下「这个 MAC 在哪个口」(学习)
2. 读目的 MAC,在表里查:
     查到 → 只往那个口转发(单播)
     查不到 → 往所有口转发(泛洪 / flood)
   目的 MAC 是广播地址 → 所有口都转

交换机只读 MAC、不拆 IP 包,这是它和路由器的根本区别。

「网段」是什么

网段(也叫广播域、一个子网)指的是:不经过路由器、仅靠链路层就能彼此直接通信的一组设备。 判定标准是——A 发一个广播帧,能收到的所有设备就属于同一网段。

  • 交换机连起来的设备在同一网段(广播能互达)。
  • 路由器默认不转发广播,所以路由器是网段的边界。

因此 MAC、ARP、广播只在「一段」内有效(交换机范围),IP 和路由用于「跨段」(路由器范围)。arp -a 看到的全部条目都在本网段,正是这个道理。

跨网段时:IP 端到端不变,以太网帧逐跳改写

既然以太网帧的目的 MAC 必须是同一段链路内的设备,那访问一台远程机器(要跨多个网段)时,帧是怎么走的?关键规律:

IP 头从头到尾不变(端到端),而以太网帧每经过一个路由器就被拆掉、重新封装一个新的(逐跳改写)。

以 A 经过路由器 R1、R2 访问远端 D 为例:

A ──网段1── R1 ──中间网络── R2 ──网段2── D

第 1 段(A → R1): IP 头:源 A、目的 D(不变)  以太网帧:源 A、目的 R1
第 2 段(R1 → R2):IP 头:源 A、目的 D(不变)  以太网帧:源 R1、目的 R2
第 3 段(R2 → D): IP 头:源 A、目的 D(不变)  以太网帧:源 R2、目的 D

每个路由器收到帧后拆开,看 IP 头里的最终目的地,查自己的路由表决定「下一跳交给谁」,再用 ARP 求出下一跳的 MAC、封一个新帧发出去。

IP 头以太网帧(MAC)
作用范围端到端(全程)逐跳(一段链路)
变不变全程不变每过一个路由器就改写
回答的问题最终去哪下一步交给谁

「几层设备」是按功能,不是按硬件

一个常见的困惑:网卡、交换机明明是硬件,怎么又说它们是「链路层设备」?因为 OSI 分层划分的是功能,不是设备——一个硬件可以同时实现多层的功能,「几层设备」指的是它最高处理到第几层

  • 网卡:既做物理层(0/1 与信号互转),又做链路层(组 / 拆帧、填 / 校验 MAC 与 CRC)。最高到第 2 层。
  • 交换机:物理层收发 + 链路层按 MAC 转发。最高到第 2 层。
  • 路由器:在前两层之上,还能按 IP 转发。最高到第 3 层。
设备物理层链路层网络层习惯叫法
集线器(hub)一层设备
网卡二层设备
交换机二层设备
路由器三层设备

上层设备必然包含下层功能——路由器要转发 IP,前提是它先能收发信号、能收发帧。

有线与无线的介质访问差异

多台设备共享同一介质时,得协调「谁先发」,否则同时发就冲突了:

  • 有线以太网早期用 CSMA/CD(发送时边听边发,检测到冲突就停)。现代交换式全双工以太网基本用不到了。
  • WiFi 用 CSMA/CA:所有设备共享同一段频谱(「空气」),发之前先监听信道是否空闲、空闲则等一个随机时间再发,尽量避免冲突。这种协调开销是 WiFi 实际吞吐低于有线的原因之一。

六、回到最初的服务链接

有了分层视角,再看开头那条链接就清楚多了:

nlb-9vuc85ix299r1w5vzo.cn-shanghai.nlb.aliyuncsslb.com : 31983
└──────────────────── 域名 ────────────────────────┘   └ 端口 ┘
      (DNS 会翻译成一个 IP)                          (房间号)

用浏览器或 SSH 连它,底层走的是 TCP:先和「IP + 端口」握手接上头;如果访问的是网页,接上头后再用 HTTP / HTTPS 交流。

而运维口中的 nlb → nodeport → service → pod,是这条链接在平台侧的完整转发链路。这里涉及几个偏上层、偏云原生的概念:

  • **LB(负载均衡)**是通用概念——把外部请求分发到后端多台机器。云厂商有多种形态:NLB(Network LB)工作在传输层(第 4 层),只看 IP + 端口、协议无关、性能极高,适合暴露任意 TCP 端口;ALB(Application LB)工作在应用层(第 7 层),按域名 / 路径路由,做 Web 入口;CLB 是更早的一代。
  • Ingress 是 Kubernetes 里的 HTTP / HTTPS 入口资源,按域名和 URL 路径把请求转发给不同的后端服务——本质也是第 7 层。训练任务暴露的是任意 TCP 端口、协议未知,所以走 NLB(L4 透传)而不是 Ingress。
  • NodePort → Service → Pod 是 K8s 把外部流量送进容器的经典链路:NLB 把流量打到集群任意一个节点的某个端口(NodePort,取值在 30000–32767,链接里的 31983 正落在此区间),节点上的转发规则把流量交给 Service(一组转发规则 + 标签选择器),Service 再挑一个存活的 Pod(真正跑训练进程的容器)送进去。

之所以要这么多层,是因为 Pod 会重启、会漂移、IP 会变,但对外那个「NLB 域名 + 端口」始终不变——中间这几层负责屏蔽后端的变化,让外部地址保持稳定。这套链路本身属于云原生 / K8s 网络的范畴,建立在这篇打的基础之上,细节留待后续。

小结

  • 网络用分层来分而治之:每层只解决一类问题,数据逐层封装、逐层拆解。看到任何名词,先定位它属于第几层。
  • 物理层只管把 0/1 变成信号在介质上传输;带宽单位 Mbps 是比特口径,除以 8 才是 MB/s 的字节口径。
  • 日常设备各归其位:网卡是收发信号的硬件,WiFi 和 5G 的区别在链路另一端是路由器还是基站,家用路由器是猫 / 路由 / 交换 / AP 的四合一。
  • 数据链路层用 MAC 在同一网段内点名:MAC 全球唯一但无结构,只能靠 ARP 在网段内解析、由交换机按 MAC 表转发;跨网段时 IP 头端到端不变,以太网帧逐跳被路由器改写。
  • 「几层设备」按最高处理到第几层划分:网卡 / 交换机是二层,路由器是三层。

再往上,就是让数据能跨越全网到达任意机器的网络层(IP)——IP 地址的结构、子网、路由表、NAT,是下一篇的内容。

评论