← 返回知识卡片总目录

DS1号 · 自学教材系列 | 计算机软硬件

第 15 章 网络基础

一台计算机已经很了不起,千千万万台连起来呢?这一章讲网络:计算机如何找到彼此、信息如何被切成小块跨越山海、你输入的网址又如何变成目标机器的「门牌号」。这也是本教材的收官一章——你会发现,之前学的「抽象」「分层」「译码」思想,在这里全部重现。

🎯 本章学习目标

  1. 理解网络是「多台计算机交换信息」的系统。
  2. 掌握 MAC 地址与 IP 地址的区别。
  3. 理解「分层」思想:TCP/IP 各层各司其职。
  4. 理解路由如何让数据包找到路,DNS 如何把域名变成 IP。

15.1网络:让计算机「对话」

网络(network)的本质,就是把多台计算机连起来,让它们交换信息。网络里流动的信息,最终也都是一串串 0 和 1——只是它们不再只在一台机器内部流动,而是通过网线、光纤、无线电波,跑到另一台机器上。

为了让「对话」成为可能,网络必须解决三个核心问题:

  1. 谁是谁?——每台机器要有唯一标识(地址)。
  2. 怎么传?——数据如何可靠地、完整地送到(协议)。
  3. 路在哪?——跨越无数中转设备,怎么找到目的地(路由)。

核心思想 网络 = 地址(谁)+ 协议(怎么传)+ 路由(走哪)。记住这三问,整章就拎起来了。

深化:一根线上的「说话秩序」

最早的以太网,是一根同轴电缆在楼里穿来穿去,所有机器都「挂」在这根线上听。问题立刻来了:两台机器同时说话,电信号在线上叠加成乱码——这叫冲突(collision)。那时的规矩是「先听,线路上有人讲就等;说完若发现撞了,各自退避一段随机时间再重试」。集线器(hub)出现后问题依旧:它只是把收到的信号向所有端口广播,等于把一根线换成了「一根更粗的线」,冲突域不减反增。真正终结这场混乱的是交换机(switch):它记下每个端口后面连着哪台机器(MAC 表),帧只送往对应端口,不再全场广播——每台机器独享自己的口子,冲突被结构性地消灭。今天的 WiFi 反而是「共享介质」的活化石:同一信道的设备轮流说话,还发展出「说话前先预约、等确认」的规矩——无线的天空天然是共享的,只能靠秩序取胜。

「延迟」也值得拆开看。一笔数据从 A 到 B 的总耗时,由四部分组成:发送时延(把数据全部推上链路的时间 = 数据量 ÷ 带宽)、传播时延(信号跑完物理距离的时间,光在光纤中约每秒 20 万公里)、排队时延(在路由器里排队等转发)、处理时延(路由器查表改包)。注意一个关键结论:升级带宽只能压缩发送时延,而传播时延卡在光速上——这是物理极限,任何技术都救不了。

那「协议」到底是什么?就是双方事先约好的规矩:谁先开口、说什么格式、对方怎么回应、出错怎么办。没有协议,两台机器就算线接通了也只能鸡同鸭讲。协议的标准化让不同厂商、不同年代、不同国家的机器互相听得懂——这正是 15.3 节「分层」要展开的主菜。

📐 例题 1 带宽与延迟:两个独立的指标

A、B 两城相距 2000km,光纤链路带宽 100Mbps,光在光纤中传播速度约 2×108 m/s。(a) 单程传播延迟是多少?(b) 传完一个 10MB 的文件最少多久(忽略协议开销与排队)?(c) 升级到 1Gbps 后,(a)、(b) 各变成多少?

思路 传播延迟 = 距离 ÷ 速度,与带宽无关;总时间 ≈ 传播延迟 + 发送时延。

解  2000km ÷ (2×108 m/s) = 10ms。 10MB = 80Mbit,发送时延 = 80 ÷ 100 = 0.8s,合计 ≈ 0.81s。 升级后:传播延迟不变,仍是 10ms;发送时延 = 80 ÷ 1000 = 0.08s,合计 0.09s。

答:10ms;约 0.81s;1Gbps 下传播仍 10ms、总约 0.09s。 ⚠ 易错点:以为带宽升级能把一切变快——传播延迟纹丝不动。下载大文件吃的是带宽;视频通话、在线对战吃的是延迟。两码事,别混。

趁热补一个单位陷阱:网络世界的速率几乎全用「比特每秒」(bps)计——Mbps 是兆比特每秒,而不是兆字节。1 字节 = 8 比特,所以「百兆宽带」的理论下载速度是 100Mbps ÷ 8 ≈ 12.5MB/s——装机后发现「跑不满 100MB/s」的困惑,十有八九是栽在这个换算上。往后看例题 3、例题 6 时,请保持这个警惕。

工程中的它

算一笔「物理极限账」:同步通信卫星悬在赤道上空约 36000km,无线电单程就要约 120ms,往返 240ms 起步——卫星电话那句著名的「慢半拍回声」不是设备差,是光速给的硬约束。在线协作系统会把端到端延迟预算压在 150ms 内,超过这个数,人就开始感到「不跟手」。设计任何实时系统前,先拿传播延迟这笔账算一算,能省掉大量不切实际的方案。

顺带把单位这个坑填了:网络带宽习惯用比特每秒(bit/s,小写 b),下载软件显示的是字节每秒(B/s,大写 B),一字节 = 8 比特。「我办的千兆宽带,下载怎么才 125MB/s?」——1000Mbps ÷ 8 = 125MB/s,不多不少,正是满速。从今往后,看到 Mbps 先除以 8,再谈 MB。

辨析 带宽 vs 延迟 vs 吞吐量:带宽是「水管粗细」(理想流速),延迟是「水管长度」(水从这头到那头的时间),吞吐量是「实际流出来多少」——它受沿途最细一段和最堵一处的双重限制。下载报的是吞吐量,游戏怕的是延迟。三个指标相互独立,评价一条网络必须三个一起看。

🧠 一句话记忆 网络三问:谁是谁(地址)、怎么传(协议)、走哪条路(路由)。

15.2地址:MAC 与 IP

网络里有两种「身份标识」,层次不同:

MAC vs IP
维度MAC 地址IP 地址
性质物理地址(网卡固定)逻辑地址(可变化)
唯一性全球唯一在各自网络内唯一
作用范围局域网内部跨网络定位
类比身份证号邮寄地址

📖 名词溯源:MAC 与 IP MAC 是 Media Access Control(介质访问控制)的缩写,管的是「在这条物理线路上怎么标识你」;IP 是 Internet Protocol(网际协议)的缩写,管的是「在整个互联网上怎么定位你」。一个管「近处」,一个管「远处」。

深化:为什么一种地址不够用

先看两种地址的长相。MAC 地址 48bit = 6 字节,习惯写成六组十六进制(如 00:1A:2B:3C:4D:5E):前三字节是厂商标识(OUI,谁造的这块卡),后三字节是流水号——「姓 + 名」,出厂即定。IPv4 地址 32bit = 4 字节,写成点分十进制(如 142.250.72.14)。长相不同的背后是任务不同:MAC 只求「全球唯一」,而 IP 还要「自带位置」——它的前缀编码「你在哪张网」,后缀编码「网内哪一台」。

为什么位置必须编进 IP?想象路由器若不认识位置,就只能在表里存下「全球每台机器各自走哪条路」——几十亿条记录,任何设备都装不下。而把位置编进前缀后,路由器只需记住「某一段地址走某个方向」——一条表项代表成千上万台机器,全球核心路由表才压缩到几十万条的量级。15.2 的「逻辑地址」之「逻辑」,本质就是:地址不再只是名字,而是可聚合的位置编码。

「前缀多长」由子网掩码(subnet mask)说了算:32bit 的掩码,写成二进制时开头连续的 1 表示网络位。比如 192.168.10.0/24 表示前 24bit 是网络号、后 8bit 是主机号,可容纳 28 − 2 = 254 台主机(主机位全 0 表示「网络本身」,全 1 表示「本网广播」,都不可分配)。判断两个 IP 是否同一网段:各与掩码做按位与,比较结果。要跨网段?把包交给网关——守在网段门口的那台路由器。

还差一块拼图:局域网内帧是按 MAC 交付的,「下一跳的 IP」怎么变成「下一跳的 MAC」?靠 ARP(Address Resolution Protocol,地址解析协议)——在局域网里广播喊一嗓子:「谁是 192.168.1.1?请把你的 MAC 告诉我!」对应机器单播应答,结果存入缓存,下次直接用。这个不起眼的小协议,是 15.4 一切转发行为的前置条件;它靠「喊话」工作,也就有了软肋——若有设备谎报应答(ARP 欺骗),流量会被引到错误门口,所以关键内网常把重要「IP→MAC」绑定固定,防止冒名顶替。

📐 例题 2 子网划分:把 /24 拆成四份

某单位分到 192.168.10.0/24。(a) 直接使用可容纳多少台主机?(b) 现要划分成 4 个等大小子网,掩码是多少?每个子网可用主机数?(c) 192.168.10.100 与 192.168.10.200 划入 /26 后是否同一子网?

思路 要 4 个子网就从主机位借 2bit(22 = 4);可用主机数 = 2剩余主机位 − 2;同网段判断用「IP AND 掩码」比较。

解  原本主机位 8bit,可用 = 28 − 2 = 254 台。 借 2bit → 掩码 24+2 = 26,即 255.255.255.192,每个子网主机位 6bit,可用 26 − 2 = 62 台;四个子网的起点为 .0、.64、.128、.192。 100 AND 192 = 64(落在 64~127 段),200 AND 192 = 192(落在 192~255 段)——不同子网,通信须经路由器。

答:254 台;/26(255.255.255.192),每子网 62 台;100 与 200 分属 64 号与 192 号子网,不同网段。 ⚠ 易错点:可用主机数要 −2(网络地址与广播地址);判断同网段别靠「前三位数字像不像」,要老老实实做与运算。

工程中的它

子网划分是网络规划的基本功:一个复杂的内部网常按「功能」切段——把核心控制设备、办公终端、访客与娱乐流量放进不同子网。好处有二:一是广播隔离(广播只在自己的网段里闹,不会波及关键设备);二是故障圈定与访问控制(子网之间必须经路由器,策略想拦谁就拦谁)。家庭路由器里的「访客网络」开关,正是这个思想的最小落地。

还有个日常疑问也在这节解决:IP 地址是谁配的?手工配置(改一行网络设置)早就跟不上设备数量了,现实里靠 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议):设备接入后广播喊「我要地址!」,DHCP 服务器回一个「租约」——分配 IP、掩码、网关、DNS 四件套,附上租期;到期前设备再续租。这就是你连上任意一个 WiFi 都「即插即用」的原因。地址不够时,家里路由器就当起了小 DHCP,给每台接入设备发 192.168.x.x 的内网地址。

辨析 IPv4 vs IPv6 与 NAT:IPv4 只有约 43 亿个地址,早已不敷使用。补丁叫 NAT(网络地址转换):家用路由器把内网的私有地址(10.x、172.16.x、192.168.x)「藏」在一个公网 IP 后面,靠改写端口号区分内部设备——你家手机、电脑、电视共享一个出口地址。根治方案是 IPv6:地址 128bit,「给地球上每粒沙子分一个 IP」也绰绰有余。于是如今一台设备常有「三层身份」:MAC(物理名)、内网 IP(网内门牌)、公网出口 IP(对世界的门牌)——分清这三层,网络故障排查就清晰一半。

🧠 一句话记忆 MAC = 身份证(网卡焊死、局域内用);IP = 邮寄地址(可变化、跨网络用)。

15.3分层:把复杂问题拆开(TCP/IP)

网络通信太复杂了:又要管物理信号、又要管丢包重传、又要管应用程序怎么对话。工程师没有「一口吃成胖子」,而是用了分层(layering)——这个思想你在操作系统、编译里都见过了:把大问题拆成几个小层,每层只负责一件事,对上层隐藏细节。

最常用的模型是 TCP/IP 四层模型(自下而上):

TCP/IP 四层模型
层作用类比
应用层具体应用如何用网络(网页、邮件)写信的内容
传输层把数据可靠地送到(TCP/UDP)挂号信 vs 明信片
网络层寻址与路由(IP)写地址、找路
链路层物理传输(MAC、网线/无线)邮政货车运信
TCP/IP 分层 发送方数据从上层逐层向下打包,接收方逐层向上拆包。 应用层(内容) 传输层(可靠送达) 网络层(IP 寻址) 链路层(物理传输) 发送:逐层向下「打包」 传输 应用层(还原内容) 传输层(检查送达) 网络层(IP 定位) 链路层(接收信号) 接收:逐层向上「拆包」
图 15-1分层:发送方数据逐层向下「打包」,接收方逐层向上「拆包」,每层只做自己的事。

核心思想 分层 = 每层只干一件事、只和相邻层打交道。数据在发送端从上往下层层「包壳」,在接收端从下往上层层「拆壳」。这和第 12 章的「抽象」是同一个思想。

深化:封装——信封套信封

「打包/拆包」具体是怎么打的?发送端的动作是层层加头:应用层产出数据(信纸)→ 传输层在前面加 TCP 头,记上源端口、目的端口、序号(挂号信单据)→ 网络层再加 IP 头,记上源 IP、目的 IP、TTL(面单)→ 链路层再加帧头帧尾,记上源 MAC、目的 MAC(本段交接卡)。接收端反着来,逐层拆头、层层上交。每种「头」就是那一层的快递单:只写本层关心的信息,别的层一概不看。信封套信封看似啰嗦,实则是分层的精髓——任何一层想换掉自己的实现,别的层毫不察觉。

逐层封装 应用数据依次被加上TCP头、IP头、MAC头,层层包裹,接收端逐层拆开。 应用数据(信纸) TCP头 端口/序号/校验(挂号单据) IP头 源IP/目的IP/TTL(快递面单) MAC头+尾 源MAC/目的MAC(本段交接卡) 发送:层层加头 接收:层层拆头
图 15-2封装:应用数据在发送端被逐层「加头」——TCP 头、IP 头、MAC 头,像信封套信封;每种头只含本层关心的信息。

这里必须补一个关键词:端口号(port)。IP 负责找到机器,但机器里同时跑着浏览器、视频通话、游戏好几个程序,数据到了门口该交给谁?端口就是机器内部的「门牌号」(0~65535 的数字),几个常用号有约定俗成:80/443 是网页,53 是 DNS。于是「IP + 端口」才唯一定位一次对话的双方,正如「楼栋 + 门牌」才定位一户人家。

深化:TCP 的可靠——三次握手

传输层的两大主角,性格迥异。UDP(用户数据报协议)只管「扔出去」,不确认不重传——晚到的数据不如直接丢掉,直播和游戏语音偏爱它;TCP(传输控制协议)则把可靠性焊死在协议里,靠三件宝:序号(数据第几字节,丢了能发现、乱了能重排)、确认(每收到就回执)、超时重传(等不到回执就再发一次)。网页、文件、转账,全部走 TCP。

TCP 通信前要「建连」,即著名的三次握手(three-way handshake):① 客户端发 SYN:「我想通话,我的数据从序号 x 开始」;② 服务器回 SYN+ACK:「好,我从 y 开始,你从 x+1 继续发」;③ 客户端回 ACK:「收到,你从 y+1 继续」。为什么两次不行?两个致命场景:其一,若一次「陈旧的 SYN」(很久前发出、堵在网络某处的重发请求)迟到抵达,两次握手下服务器单方面宣布建连并傻等数据——白白占用资源,这就是「历史连接误建立」;其二,两次握手里服务器自己的初始序号 y 得不到对方的确认——服务器无从确信「我发的东西你能从正确位置开始收」。三次的本质:双方各自的「我能听、你能说」都被对方应答过一遍,加上双方的起始序号都拿到了回执。断开则要「四次挥手」——因为 TCP 允许半关闭,一方说完了另一方可能还有话,得两个方向分别告别。

TCP 三次握手 客户端与服务器之间三个报文往返:SYN、SYN+ACK、ACK,同步双方初始序号。 客户端 服务器 ① SYN(我的序号 x) ② SYN+ACK(我序号 y,确认 x+1) ③ ACK(确认 y+1) 双方都确认了「我能收、你能收」,起始序号各拿到回执 → 连接建立 “我要通话” “好” “收到”
图 15-3TCP 三次握手:三个报文往返,让双方的初始序号都被对方确认,并防止「历史连接误建立」。

深化:行李转运类比,再深一层

把一次跨国寄件完整展开,你会看到分层模型严丝合缝:你写信,是应用层的内容;快递揽收时给你单号、到站逐段扫描签收,是传输层的确认与重传(包裹丢了凭单号补寄);分拣中心看「省市区」决定发往哪个下一站,是网络层的路由;每一段用卡车/飞机运输、扫码交接,是链路层的搬运。妙处在于:分拣员不看信的内容,快递员不关心包裹最终去哪个省——每层只读自己那层的单据,这正是封装的用处。更妙的是:面单上的目的地全程不变(目的 IP 不变),而每一站的司机和车都在换——这句话里藏着 15.4 的主角,卖个关子,往下看。

另外注意,几乎每一层的头部都带校验和:发送方对内容算出一串「指纹」附在头里,接收方重算一遍比对——对不上就当坏包就地丢弃,绝不将错就错。这正是第 14 章讲过的「数字量阈值再生」在网络上的延续:坏掉的数据宁可扔掉重传,也不让错误往下传。层层校验、层层把关,才有了「不可靠物理线路上的可靠通信」。

📐 例题 3 MTU 分片:装不进就拆开

以太网规定一帧最多携带 1500 字节(MTU);IP 头 20 字节、TCP 头 20 字节。某已建连的 TCP 连接要发送一段 4000 字节的应用数据(忽略一切可选头部)。(a) 到达 IP 层时的 TCP 段共多大?(b) 需要拆成几片?各片装载多少数据?(c) 由谁重组?

思路 每片能装的数据 = MTU − IP 头 = 1480 字节;拆 TCP 段(含 TCP 头)总长 4020 字节。

解  TCP 段 = 4000 + 20 = 4020 字节。 4020 ÷ 1480 = 2.72 → 3 片:前两片各装 1480(整帧恰 1500 字节),第三片装 4020 − 2×1480 = 1060(整帧 1080 字节)。 各片由 IP 层打上「片偏移」,到达后由接收方的 IP 层按偏移拼回完整段,再交给 TCP。

答:4020 字节;3 片(1480 + 1480 + 1060);IP 层重组。 ⚠ 易错点:先算「TCP 段总长」再除以每片容量,别只用 4000;分片与重组都是 IP 层的职责。现实工程里 TCP 会主动探测路径最小 MTU、提前把数据切小——因为中途分片一旦丢一片,整段全部重传,代价太大。

工程中的它

工程师调试网络最常用的「听诊器」是抓包工具(如 Wireshark):把线上跑的帧原样抓下来,逐层拆开展示——应用层看得见请求原文,传输层看得见端口与序号,链路层看得见 MAC。你的屏幕就是那台「快递透视仪」。而在航空领域,机载以太网在标准分层栈的最底层做加固(双路冗余、时间保障),让「尽力而为」的网络也能承载关键数据——分层的思想不动摇,需要多硬就往底层加多硬。

辨析 TCP vs UDP:一个可靠的「挂号信」,一个快速的「明信片」。要一字不差(网页、文件、转账)选 TCP;要宁丢不等(直播、语音、遥测心跳)选 UDP。另一个容易被低估的红利是可替换性:笔记本从 WiFi 切到有线、再到手机热点,物理层整个换了三轮,你的浏览器和网页应用毫无察觉——这就是分层的「黑盒」收益。

🧠 一句话记忆 分层 = 各管一段;发送逐层打包,接收逐层拆包。

15.4路由:数据包如何找到路

互联网由无数网络和 路由器(router)互联而成。你要发的数据被切成一个个 数据包(packet),每个包都带着「目的地 IP」这个地址标签,像一封封信件。

路由器的工作,就像邮局分拣员:收到一个包,看一眼目的 IP,查自己的「路由表」,判断该把包转交给下一站哪个路由器。就这样一棒接一棒、一跳接一跳(hop),包最终抵达目的地。

路由跳转 数据包从源主机经多个路由器逐跳转发到目的主机。 源主机 路由1 路由2 目的主机 每个路由器查「路由表」,把包交给下一跳,一棒接一棒
图 15-4路由:数据包被切成小块,经多个路由器「逐跳」转发,最终抵达目的地。

深化:路由表——只认前缀的「活地图」

路由器查的「路由表」,条目不是「某台机器 → 某条路」,而是「某段前缀 → 下一跳」。查表时若多条都匹配,选掩码最长的那条(越具体越优先);一条都不匹配,就走默认路由 0.0.0.0/0——「其余的都往这走」。你家路由器表里通常就几条:本地网段直连,剩下全交给运营商——这叫「默认路由指向上游」。而 15.2 那个设计在此刻兑现红利:因为位置编进了前缀,一条核心路由条目能代表数百万个地址,全球核心路由表只需几十万条,而不是几十亿条。

两个配套机制让「逐跳」变得可靠。其一,TTL(Time To Live,生存时间):IP 头里这个数字每过一台路由器减 1,减到 0 就地丢弃并回报告——万一哪台路由器配置出错形成环路,包最多转一圈 TTL 烧完就消失,不会在网里永世漂流。其二,逐跳独立决策:没有谁掌握全程路径,每台路由器只负责「下一棒」。妙用是 traceroute 诊断工具:故意发 TTL=1、2、3……的探测包,逼沿途每台路由器回一句「我这跳不动了」,于是你能在屏幕上看到去往某网站的每一站地址与耗时——网络版的「逐站打卡」。

那路由表本身又是谁写的?答案是路由器之间靠路由协议互相通报:发现好路就记下来并转告邻居(一个机构内部常用 OSPF 这类协议自动算最短路;跨运营商之间则用 BGP 互相「宣告」各自负责的前缀)。于是没有任何人坐在中央画图,秩序从千万台机器的互相通报中涌现——和 DNS 的分层授权一样,互联网又一次展示了「无中心的秩序」如何可能。

📐 例题 4 逐跳转发:什么变、什么不变

主机 A(IP 192.168.1.10,MAC-A)要访问远程服务器 B(IP 10.2.0.5,MAC-B),途经一台路由器 R(内网口 MAC-R1、外网口 MAC-R2),A 的默认网关就是 R。请给出两段传输中帧与 IP 头的关键字段,并回答:(d) 若 A 误把目的 MAC 直接写成 MAC-B,会发生什么?

逐跳转发中的字段变化
阶段源 MAC目的 MAC源 IP目的 IPTTL
A → R(局域网内)MAC-AMAC-R1192.168.1.1010.2.0.564
R → B(跨网段后)MAC-R2MAC-B192.168.1.1010.2.0.563

解 对照表格:帧的目的 MAC 每一跳都换——因为 MAC 只标识「本段交接的两端」;而目的 IP 全程不变——它是「最终收件人」,写在面单上不许改;源 IP 也不变(回信要靠它);TTL 每过一台路由器减 1。

答:MAC 逐跳换、IP 不变、TTL 递减。(d) 第一段是按 MAC 交付的:交换机在局域网里找不到 MAC-B(B 根本不在本网),包石沉大海。A 该填的是下一跳(网关 R1)的 MAC——这正是 ARP 存在的意义。 ⚠ 易错点:跨网通信时,目的 MAC 永远写网关,不是远端主机——「MAC 管这一棒,IP 管到终点」。

工程中的它

逐跳独立决策换来的,是整个互联网的自愈能力:某台核心路由器宕机,邻居们重新计算、包自动绕行,全球用户最多感到几秒闪断。代价是路径不可预测、包到达顺序可能乱(所以 TCP 要靠序号重排)。而某些关键场合——例如飞行器内部的设备联网——偏偏要确定性:关键数据的每一跳、每一微秒都要算得出来,绝不容许「尽力而为」。于是工程界发展出「预先规划路径 + 双路冗余」的专用网络方案。你看,「尽力而为」与「确定性」是两种各有疆域的哲学,选哪种,取决于你的系统输得起什么。

辨析 路由器 vs 交换机:交换机工作在链路层,读 MAC,负责「网内交接」;路由器工作在网络层,读 IP,负责「跨网指路」。家用「路由器」其实是路由器 + 交换机 + 无线接入点的三合一。再对比电话时代的电路交换:先占好全程线路再通话,独占资源、顺序天然保证,但浪费严重;IP 的分组交换让每个包独立寻路,不保证顺序(TCP 补锅),换来共享与健壮——这一进一退,是通信史最重要的一次转身。

🧠 一句话记忆 数据切包 + 逐跳转发;路由器像邮局,看地址、查路由表、交下一站。

15.5DNS:把域名翻译成 IP

IP 地址是一串数字(如 142.250.72.14),人记不住。于是有了域名(如 google.com)。但网络只认 IP,谁来把「好记的名字」翻译成「机器认的数字」?靠 DNS(Domain Name System,域名系统)。

DNS 就像互联网的「电话簿」:

  1. 你在浏览器输入域名 google.com。
  2. 电脑去问 DNS 服务器:「google.com 的 IP 是多少?」
  3. DNS 服务器查表,返回 IP 地址。
  4. 电脑再拿这个 IP 去发起真正的连接。

📖 名词溯源:DNS Domain(域)指互联网上划分出的「名字空间」,Name System 就是「命名系统」。整个 DNS 是一套全球分布式的翻译体系——没有单一机构存下全部映射,而是层层授权、分工协作,所以既庞大又高效。

深化:没有「总机」的电话簿

DNS 最了不起的设计,是它没有中央总表。任何一台存着「全球所有域名」的服务器,都扛不住数十亿设备的查询,也承受不起一次宕机。DNS 的答案是分层授权:根服务器只记「.com 归谁管」;.com 的顶级域服务器只记「example.com 的权威在哪」;example.com 自己的权威服务器才存真正的记录。层层指路,没有任何一台机器掌握全部——和 15.3 的分层、15.4 的逐跳如出一辙:互联网哲学从来如此,不把鸡蛋放进一个篮子。

分工也很讲究:你的电脑只问本地递归服务器(运营商或公司自建),这叫递归查询——「你帮我查到底」;递归服务器替你一站站去问根、问顶级域、问权威,这叫迭代查询——「你只告诉我下一步问谁」。答案到手存入缓存:每条 DNS 记录自带 TTL(有效期),期内同样的询问直接从缓存秒回。浏览器、操作系统、路由器、运营商递归服务器,四级缓存层层兜底——全部命中时,你根本感觉不到 DNS 的存在。

域名的读法也值得注意:www.example.com 其实是 www.example.com.——末尾那个常常被省略的「.」代表根。从右往左读,范围逐级收窄:根 → .com → example → www,与 IP 地址「越靠前范围越大」方向恰好相反,初学最容易在这两个方向上打架。

📐 例题 5 DNS 的耗时账:缓存值多少钱

你的电脑与本地递归服务器往返 10ms;递归服务器与根、与 .com 顶级域、与目标权威服务器的往返各 40ms。某网页共引用 30 个不同域名。(a) 全部未命中缓存时,DNS 环节共耗时多少?(b) 全部命中本地缓存呢?

思路 单个未命中 = 你与递归服务器 1 次往返 + 递归服务器三站各 1 次往返。

解 单个域名 = 10 + 3 × 40 = 130ms;30 个域名 = 30 × 130 = 3900ms = 3.9s。 全部命中缓存:每个域名由本地递归服务器直接回答,≈ 0ms(只剩你与递归服务器的一次往返,通常不足 1ms 量级的差异忽略不计)。

答:未命中共约 3.9 秒;命中则近乎为零——差出的这几秒就是缓存的价值。 ⚠ 易错点:三站跑腿是「递归服务器」在跑,不是你的电脑挨个去问;现代浏览器会「预解析」页面里的域名、并发发起查询,也是在跟这笔账较劲。

工程中的它

DNS 早已不只是「翻译」,还能调度:CDN(内容分发网络)在各地部署镜像服务器,DNS 把你的查询「就近」解析到离你最近的那台——同一域名,不同城市解析出不同 IP,内容却一模一样。这叫「DNS 智能解析」,是全网加速的第一跳。它也带来一个经典运维困惑:改了解析为什么不立即生效?因为各级缓存里还存着旧记录,得等 TTL 到期逐层刷新——工程上改 DNS 前会先把 TTL 调短,就是这个道理。

顺便认识一下 DNS 的「老祖宗」:hosts 文件。互联网早期机器不多,每台电脑里放一个文本文件,一行一条「域名 IP 地址」,人工维护、全球同步——后来机器爆炸式增长才被迫发明了 DNS。这个文件今天还活着:操作系统查询 DNS 之前总要先看它一眼,所以往里写一条域名指向「本地回环」,就能把某个域名在自家电脑上「屏蔽」掉。理解了 DNS 的来龙去脉,hosts 这个小文件就不再是玄学。

辨析 域名 vs URL:https://example.com/path/page.html 里,example.com 只是域名;URL = 协议(https)+ 域名 + 路径,是「完整地址」。另一个安全常识:DNS 查询默认不加密,早期很容易被「半路劫持」改答案(把你导向假网站),现代的加密 DNS(DoH/DoT)就是为堵这个漏洞而生——名字服务越重要,越要防「指错路」。

🧠 一句话记忆 DNS = 互联网电话簿:域名 → IP 地址。

15.6客户端与服务器

网络应用普遍采用 客户端/服务器(client/server)模型,分工明确:

你打开一个网页,背后发生的事,正是本章所有知识的总合:客户端查 DNS 得到 IP → 用 IP 路由到服务器 → 通过分层协议可靠地传输 → 服务器响应 → 数据原路返回,浏览器渲染成页面。

收官之思 恭喜你走完了 15 章。回头看:从一个电子的开关,到 bit,到逻辑门,到加法器,到CPU,到操作系统、编程语言、网络——你已亲手把「0 和 1」垒成了整个数字世界。你输入的这个网址,正是这一整套机制,此刻正在为你运转。

深化:HTTP——应用层的「点单规矩」

应用层最常见的协议是 HTTP(超文本传输协议),规矩很朴素:客户端发「方法 + 路径 + 头部」,服务器回「状态码 + 内容」。状态码是个值得记住的家族:2xx 成功(200 OK)、3xx 重定向(302:内容搬走了,去新地址拿)、4xx 客户端错(404:没这页,你输错了)、5xx 服务器错(500:我这边坏了)。HTTP 天生无状态——服务器不记得你上次来过,每次都当初次见面;要「记住你」得靠 Cookie(服务器发给你的会员卡,之后每次请求你都自动带上)或服务器端的会话。至于地址栏那把小锁,是 HTTPS:在 TCP 与 HTTP 之间垫一层加密,防窃听防篡改。

📐 例题 6 敲下回车之后:343ms 都花在哪

浏览器访问一个网站:DNS 解析 50ms;客户端与服务器往返时间(RTT)50ms;服务器处理请求 40ms;页面 HTML 共 100KB,下载带宽 100Mbps;浏览器渲染 120ms。请求建立 TCP 连接(三次握手)、随后一次 HTTP 请求往返。求从敲回车到页面呈现的总耗时。

思路 把耗时拆成段:DNS(15.5)→ 三次握手 = 1.5 × RTT(15.3)→ 请求+响应 = 1 × RTT + 服务器处理(15.6)→ 传输 HTML(15.1 的发送时延)→ 渲染(14.4)。

解 DNS = 50ms;握手 = 1.5 × 50 = 75ms(第三个 ACK 不必等回应,可与请求同发);请求往返 = 50ms,加处理 40ms = 90ms;传输 = 100KB × 8 ÷ 100Mbps = 8ms;渲染 = 120ms。合计 50 + 75 + 90 + 8 + 120 = 343ms。

答:约 343ms。 ⚠ 易错点:三次握手按 1.5 × RTT 计而不是 2 ×(第三个 ACK 不等回应);每个加数都能对上一章知识——这道题就是全章的合影。真实的网页还要加载图片、脚本,耗时翻几倍很正常。

这 343ms 还能反过来读:想优化首屏速度,工程师能动的从来不是渲染(浏览器极限)和传播(光速极限),而是等待的次数——HTTP/2 允许一个连接并行跑多个请求、HTTP/3 干脆把 TCP 换成 UDP 之上的新传输层以省掉握手等待,万变不离其宗:「少等几个来回」。看懂了 343ms 的构成,你也就看懂了半个网络优化行业。

收官:十五级台阶,你已登顶

这是全册最后一节,值得把来路完整铺开。从第 1 章到第 15 章,你其实只在做一件事:把「开关」一级级垒成「世界」。下面这张表,是整条登山路:

全册 15 章知识地图
章主题你带走的一句话
1计算机的本质自动执行指令的电子机器
2二进制0 和 1,是数也是码,一切的字典
3半导体与晶体管把「开关」做到肉眼看不见的小
4逻辑门电路学会说「与、或、非」
5组合逻辑电路学会「算」
6时序逻辑电路学会「记」
7冯诺依曼结构程序也不过是数据,装进内存一起算
8CPU 内部原理取指、译码、执行,节拍器永不停
9内存的原理快而贵的临时军师
10存储的原理慢而久的忠实档案
11指令与机器语言机器的母语,几字节定乾坤
12操作系统管好 CPU、内存、设备的总管家
13编程语言与编译人与机器之间的翻译官
14输入输出设备模拟世界与数字世界的海关
15网络基础从一台机器,到整个世界
全册知识地图:五层台阶 从物理层到互联交互层,15章垒成五级台阶。 物理层 第1~4章:电平→bit→晶体管→逻辑门 逻辑层 第5~6章:电路学会算与记 体系结构 第7~11章:CPU·内存·存储·指令 系统软件 第12~13章:操作系统·编译 交互与互联 第14~15章:I/O·网络 抽象逐级升高
图 15-5全册知识地图:15 章垒成五级台阶——物理、逻辑、体系结构、系统软件、交互互联;越往上越抽象,但每一层都踩在下一层的肩膀上。

知识去向:下一站去哪

这 15 章是「地图」,后续每一门课都是某片区域的「深度游」:计算机组成原理深挖第 7~11 章(流水线、缓存层级、中断细节);操作系统展开第 12 章(进程调度、虚拟内存、文件系统);计算机网络展开本章(TCP 拥塞控制、路由算法、网络安全);嵌入式系统落地第 3~6 章(单片机、总线、实时性);数据结构与算法则是编程课的地基——怎么把步骤组织得又快又省。带着这份地图去,任何一门都不会迷路。

最后,回到你自己的职业现场想一想:现代飞行器本质上是一台「会飞的计算平台」——成百上千个传感器经 ADC(第 14 章)把物理世界数字化,飞控计算机(第 8 章)按毫秒级节拍运算,各设备经总线和网络(本章、第 14 章)交换信息,显示与告警(第 14 章)再把结果还给人。理解了从 0/1 到系统的整条链路,你再看任何一台智能设备、一张系统架构图,都拥有了「透视」的底气——这种通透,正是工程判断力最坚实的地基。

合上书之前,给你三个巩固的建议。其一,对着上面的 15 章表格凭记忆复述——每章只要求说出一句话,说不出的那格就是该回去翻的那章;其二,动手拆一次:找一台旧键盘、旧鼠标或旧电脑,对照第 10~14 章认一认里面的存储芯片、电容和接口;其三,抓一次包:装个抓包工具,看自己打开一个网页时 DNS、TCP、HTTP 轮番登场——把 343ms 亲眼拆开。知识只有被使用过一次,才真正属于你。

🧠 一句话记忆 客户端发起、服务器响应;一次网页请求,是全书所有知识的合体。

本章小结

  1. 网络解决三问:谁是谁(地址)、怎么传(协议)、走哪(路由)。
  2. MAC 是网卡焊死的物理地址(局域网内用),IP 是可变的逻辑地址(跨网络用)。
  3. TCP/IP 分层让每层各司其职:应用、传输、网络、链路;发送逐层打包、接收逐层拆包。
  4. 路由靠路由器查表「逐跳转发」数据包;DNS 把域名翻译成 IP。
  5. 网络应用多为客户端/服务器模型。
  6. 子网掩码划分网络位与主机位,可用主机数 = 2主机位 − 2;ARP 把下一跳 IP 翻译成 MAC。
  7. 三次握手让双方初始序号互相确认、防止历史连接误建立;TCP 靠「序号 + 确认 + 超时重传」保可靠。
  8. 逐跳转发中:目的 IP 全程不变,帧的 MAC 每跳更换,TTL 逐跳递减。
  9. DNS 分层授权 + 多级缓存;CDN 借 DNS 把用户「就近调度」到最近的服务器。

读完本章,你应该能……

思考题

1. 网络通信要解决哪三个核心问题?

提示:谁是谁(地址)、怎么传(协议)、走哪条路(路由)。

2. MAC 地址和 IP 地址各是什么?为什么需要两种?

提示:MAC=物理地址(局域内),IP=逻辑地址(跨网络);一个管近处、一个管远处。

3. 用「打包/拆包」解释 TCP/IP 分层。

提示:发送端数据从上往下层层加壳,接收端从下往上层层拆壳,每层各司其职。

4. 你在浏览器输入域名到看到网页,经历了哪些关键步骤?

提示:DNS 解析域名→IP,路由逐跳转发,分层传输,服务器响应返回。

5. TCP 握手为什么必须是三次,两次为什么不行?

提示:其一,陈旧 SYN 迟到会让两次握手「误建连接」白占资源;其二,服务器的初始序号在两次握手中得不到客户端确认。

6. 一个 /26 子网最多容纳多少台可用主机?写出算法。

提示:/26 留 6 位主机号 → 2⁶ − 2 = 62(全 0 是网络地址、全 1 是广播地址)。

7. 数据包跨多个路由器转发时,帧的 MAC、IP 头的目的地址、TTL 各怎么变化?

提示:MAC 每跳换「下一棒」,目的 IP 全程不变,TTL 每过一台路由器减 1。