计算机网络概述
计算机网络概述
一台电脑孤独的下午
假设你桌上有一台电脑,装着 Windows 系统,里面有 100GB 照片。你想让另一台电脑拿到这些照片。如果两台电脑没有任何连接方式,你能想到的只有两种办法:插 U 盘拷过去,或者刻光盘寄过去。这两种办法的本质都是"把数据搬到对方面前",不是"让数据自动跑过去"。
计算机网络要解决的就是这个朴素的问题:让两台甚至几十亿台电脑能够自动交换数据,并且这个过程要"快、准、稳"。快是延迟低,准是数据不出错,稳是连接中断后能恢复。
20 世纪 60 年代,美国国防部有个高级研究计划局(ARPA),想搞一个"核打击下也能通信"的网络。1969 年这个网络只有 4 个节点(加州大学洛杉矶分校、斯坦福研究所、加州大学圣巴巴拉分校、犹他大学),叫 ARPANET。这是最早的分组交换网络。1983 年 TCP/IP 协议成为 ARPANET 标准协议,1989 年蒂姆·伯纳斯-李在欧洲核子研究中心(CERN)发明了万维网(World Wide Web),1991 年向公众开放。互联网从军事实验到改变世界,走了 22 年。
三个核心问题
学网络的过程其实是回答三个问题,从最简单到最难。
问题 1:怎么让两台电脑连起来
最早期靠串口线、网线,把两台电脑物理连上。但网线一拔就断,远距离信号衰减,多台电脑都想用一根线又得解决争用。这个问题归物理层和数据链路层管。
问题 2:怎么让全球几十亿台电脑都能互相找到
给每台电脑分配一个唯一地址(IP 地址),写一套规则让"包裹"能跨越多个网络到达目的地(路由)。这个问题归网络层管。
问题 3:怎么让电脑上的程序(比如微信、浏览器)找到对方
电脑找到了,但电脑上一个 QQ 进程、一个浏览器进程同时在跑,数据到了之后交给谁?这需要端口号。这部分归运输层管。
最上层是应用层,管的是"数据传过来之后到底怎么用"——HTTP 协议怎么定义网页格式、DNS 怎么把域名翻译成 IP。
一个完整的请求
为了把这三个问题串起来,咱们跟踪一下"在浏览器输入 https://www.example.com 之后会发生什么"。
第 0 步:你按下回车,浏览器先查自己的缓存里有没有 example.com 的 IP。如果有,跳过 DNS。如果没有,进入第 1 步。
第 1 步:浏览器向 DNS 服务器(运营商分配给你的 8.8.8.8 或者 114.114.114.114)发起 DNS 查询。DNS 用 UDP 协议发到 53 端口。DNS 服务器返回 93.184.216.34。
第 2 步:浏览器知道目标 IP 后,开始和 93.184.216.34 的 443 端口建立 TCP 连接。三次握手:浏览器发 SYN、服务器回 SYN+ACK、浏览器发 ACK。此时双方建立可靠连接。
第 3 步:在 TCP 之上跑 TLS 握手。客户端发 ClientHello、服务器回 ServerHello + 证书、双方协商出对称密钥。握手完成。
第 4 步:浏览器在加密通道里发 HTTP GET 请求:GET / HTTP/1.1\r\nHost: www.example.com\r\n...。
第 5 步:服务器处理请求,返回 200 OK 和 HTML 响应体。浏览器渲染页面。
从你按下回车到看到页面,整个过程涉及 应用层(HTTP、DNS)、运输层(TCP、UDP)、网络层(IP)、数据链路层(以太网)、物理层(光纤、Wi-Fi) 五层。每一层只关心自己这一层的职责,通过层与层之间的接口把任务往下传。
性能指标:怎么看网络快不快
网络性能有四个核心指标:
带宽(Bandwidth) 是指链路的最大数据传输速率,单位是 bps(bit per second)。100M 宽带指下行最高 100Mbps。带宽像水管粗细,决定了水流的最大体积。
时延(Latency / Delay) 是指数据从 A 到 B 走一趟花的时间,单位是毫秒(ms)。时延由四部分组成:发送时延(数据进入网卡的时间)、传播时延(信号在线缆里飞的时间)、排队时延(在路由器队列里等的时间)、处理时延(路由器查表转发的 CPU 时间)。
往返时间 RTT(Round-Trip Time) 是数据包一来一回的总时延。常用于衡量实时通信质量。游戏服务器的 RTT 80ms 以上开始卡顿,50ms 以下流畅。
丢包率(Packet Loss Rate) 是指数据包丢失的比例。1% 丢包率听起来不高,但对 TCP 是致命的——TCP 一次丢包就会触发重传和拥塞控制,带宽瞬间腰斩。
实际应用中有个非常容易混淆的细节:带宽和速度没关系。你从北京电信下载一个 1GB 文件到本地,北京到广州的网络是 100Mbps 骨干网,文件下载 80 秒就够——但你 ping 一下服务器 RTT 是 30ms。这个 30ms 不是带宽给的,是物理距离给的——光在光纤里一毫秒走 200 公里,京广 2000 公里一来一回正好 20ms。
几种常见的网络分类
按地理覆盖范围分:
- PAN(个人域网):1-10 米,连接个人设备(手机、耳机、手表),典型技术蓝牙
- LAN(局域网):10 米-1 公里,办公室、家庭、校园,典型技术以太网、Wi-Fi
- MAN(城域网):10-100 公里,覆盖一个城市,典型技术运营商城域光纤网
- WAN(广域网):100 公里以上,覆盖国家甚至全球,典型技术运营商骨干网、SDH/MSTP
按拓扑结构分:
- 总线型:所有设备共享一根主干线,碰撞严重,早期以太网用,现在淘汰
- 星型:所有设备连到中心节点(交换机),现代以太网标准
- 环型:设备首尾相连形成环,令牌环网络用过
- 网状型:设备之间多点互连,互联网骨干网就是这种结构
按使用者分:
- 公网(互联网):全球互联,任何人都能接入
- 专网:特定组织自建,军队网、政务外网、工业控制网
一个具体问题:怎么测出你家到某个网站的延迟
最直接的工具是 ping。打开终端:
ping www.example.com输出:
PING www.example.com (93.184.216.34): 56 data bytes
64 bytes from 93.184.216.34: icmp_seq=0 ttl=56 time=11.2 ms
64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=10.8 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=11.5 mstime=11.2 ms 是 RTT。但这个 RTT 包含哪些环节?你家到运营商机房的局域网延迟 1ms,运营商骨干网到 example.com 机房 10ms,机房内部 0.2ms。总共 11.2ms。中间的 10ms 是骨干网给的,光信号从北京到美国机房来回飞 12000 公里需要 60ms——但你 ping 的是 11ms,说明 example.com 的机房在亚洲(大概率香港或新加坡)。
更专业的工具是 mtr(Linux/macOS)或 WinMTR(Windows),它能展示数据包经过的每一跳:
Host Loss% Snt Last Avg Best Wrst
1. 192.168.1.1 0.0% 100 0.5 0.5 0.4 0.7
2. 10.0.0.1 0.0% 100 1.2 1.3 1.0 2.5
3. 61.135.169.121 0.0% 100 2.5 2.8 2.0 5.0
4. 202.97.10.65 0.0% 100 10.2 11.0 9.8 15.0
5. 202.97.33.46 0.0% 100 38.5 40.2 37.0 50.0
6. 93.184.216.34 0.0% 100 42.1 43.0 41.0 55.0第 4 跳到第 5 跳之间 RTT 从 11ms 涨到 40ms,但没丢包,说明这段链路是瓶颈。
思考题
- 为什么现在家里的"千兆宽带"下载速度很少能跑满 1000Mbps?(提示:服务器端限速、TCP 拥塞控制、HTTP 协议、跨运营商)
- 你打开一个网页,看到状态码 504 Gateway Timeout。这是哪一层出了问题?(提示:Nginx 502/503/504 的区别,需要查哪些协议)
- 把手机和电脑连到同一个 Wi-Fi,手机能 ping 通电脑吗?反过来呢?为什么?(提示:AP 隔离、广播域、IPv6 link-local 地址)
- 5G 宣传说延迟 1ms。这 1ms 里包含哪些环节?真的能到 1ms 吗?(提示:光速限制、基站往返、核心网下沉)
延伸阅读
- 《深入浅出计算机网络》(高军)第 1 章
- 《计算机网络:自顶向下方法》(Kurose) 第 1 章
- 动手实验:在家用 Wireshark 抓一次 ping 包,看 ICMP 协议头格式
- 动手实验:登录路由器后台(一般是 192.168.1.1),看 DHCP 分配的 IP 表,理解 NAT 转换