Featured image of post 网络源头

网络源头

移动、联通、电信

字数: 5783

计算机网络通识:从物理层到应用层的程序员必知必会

面向开发者,过滤销售话术,直击技术本质


1. 网络起源:一切始于分组交换

  • 1969年,ARPANET:美军项目,首次实现跨计算机通信

  • 核心发明:分组交换(Packet Switching)

    • 文件拆分为固定大小的数据包(Packet)
    • 每个包独立路由,到达目的地后重组(Reassembly)
    • 相比电路交换,链路利用率极高,天然具备容灾能力
  • TCP/IP协议族:事实上的互联网"宪法"

    • IP层:提供无连接、不可靠的寻址和路由(门牌号)
    • TCP层:提供面向连接、可靠的流控与重传(包裹单)
    • UDP:无连接、不保证可靠,但延迟低,适合实时音视频

👉 程序员结论:你调用的每一个 HTTP 请求,底层都被拆成若干个 MTU(通常 1500 字节)的 IP 包,经多跳路由到达对端再重组。


2. 物理层:数据跑在什么介质上

介质特点速率
光纤(光缆)低衰减、抗干扰,全球骨干网与海缆核心单波 100Gbps~400Gbps,DWDM 可达 Tbps 级
双绞线(网线)家庭/企业局域网,便宜易部署Cat6 可达 10Gbps(百米内)
无线(电磁波)移动终端、Wi-Fi,共享介质易受干扰5G 理论峰值 10Gbps,实际受环境制约
  • 海底光缆:承载全球 99% 的洲际数据流量,是互联网真正的物理骨架
  • 光通信原理:激光脉冲调制信号(有光 = 1,无光 = 0),光电转换由光模块完成

👉 程序员结论:跨地域部署服务时,物理距离 ≈ 光速延迟(约 5ms/1000km) + 每跳路由处理耗时,这是无法突破的物理上限。


3. 运营商(ISP):修路、卖票、指路

三大运营商:中国电信、中国移动、中国联通(以及其他二级运营商)

角色技术动作
包工头(铺设基础设施)投资建设光缆、基站、交换中心,承担巨额 CAPEX
卖票员(接入服务)分配公网/私网 IP,提供 PPPoE/DHCP 认证,按月收取费用
交警(路由控制与互联)运行 BGP(边界网关协议) 与全球 ISP 交换路由表,决策最优路径

关键认知:

  • 运营商是 “管道”,不生产数据内容(内容存储在阿里云/腾讯云/AWS 等数据中心)
  • 运营商之间通过 IXP(互联网交换中心) 互联,并存在**对等结算(Peering)与转包结算(Transit)**的商业关系
  • 国内骨干网架构:
    • ChinaNet(电信):拥有最多的国际出口带宽
    • CN2(电信精品网):针对海外访问优化的独立 QoS 通道
    • CMNET(移动):移动用户规模最大,但互联互通历史包袱较重

👉 程序员结论:服务端部署时需考虑多运营商 BGP 双线/三线机房,避免跨运营商访问的高延迟与丢包;海外业务优先选择 CN2 GIA 线路。


4. 基站:移动网络的"最后一公里"锚点

  • 定义:集成无线收发信机、基带处理单元、天线的物理站点

  • 核心工作流程:

    • 上行:手机发射电磁波 → 基站接收 → 解调为数字信号 → 送入光纤回传网
    • 下行:光纤来的数据 → 基站调制为射频信号 → 通过天线辐射至手机
  • 关键技术:

    • 小区切换(Handover):移动过程中,手机与多个基站保持测量,网络侧决策无缝切换
    • 频率复用:相邻基站使用不同频率避免同频干扰,不相邻基站可复用同一频率以提高频谱利用率
    • MIMO(多入多出):利用多天线同时收发,提升速率与覆盖
  • 回传网络(Backhaul):基站通过光纤或微波接入城域网,再汇聚至骨干网

👉 程序员结论:移动端网络优化需考虑信号强度(RSRP)、**信噪比(SINR)**对丢包率和 RTT 的剧烈影响;弱网环境下的重试与超时策略比带宽更重要。


5. 宽带 vs 专线:共享介质 vs 独享资源

维度家庭宽带企业专线
带宽模式共享(PON 技术,1:N 分光比)独享(物理层隔离或严格限速)
上下行比例非对称(如 1000M/50M)对称(如 100M/100M)
公网 IP通常为 NAT 后的私网 IP,或动态公网 IP固定公网 IP(至少 1 个,可申请多 IP 段)
SLA(服务等级协议)“尽力而为”(Best-Effort),无赔偿承诺有明确赔偿条款(如丢包率 < 0.1%,可用性 99.99%)
价格便宜(数百元/年)昂贵(万元/年起)

价格差异本质:

  • 下行便宜:用户下行流量大,运营商规模效应摊薄单位成本
  • 上行贵:普通用户上行流量少,上行频谱/时隙资源稀缺,专线打破默认的非对称设计,独占上行通道

👉 程序员结论:

  • 对外提供 Web 服务、自建 VPN、跑 P2P 业务必须用专线 + 固定公网 IP
  • 内部办公、浏览网页、视频会议可选择优质企业宽带(本质仍是共享,但 QoS 优先级略高)

6. 数据包的全链路传输(以访问 HTTP 为例)

[你的手机/PC]
↓ Wi-Fi / 蜂窝
[接入点:路由器 / 基站]
↓ Ethernet / 光纤接入
[城域网(MAN)交换机 & BRAS(宽带接入服务器)]
↓ 进行 PPPoE 终结 / DHCP 分配 IP,首次路由决策
[骨干网(骨干路由器)]
↓ 根据 BGP 路由表,基于 AS-Path、MED、LocalPref 等策略选择下一跳
[对端数据中心(IDC)]
↓ 经 SLB(负载均衡)→ Nginx → 应用服务器 → 数据库
[响应数据包] → 沿原路由路径(未必对称)返回

每跳耗时:

  • 传播延迟(光速 ≈ 5μs/km)
  • 串行延迟(数据量 / 带宽)
  • 排队延迟(路由器缓存队列长度)
  • 处理延迟(查路由表、校验和、NAT 转换)

👉 程序员结论:

  • 可用 traceroute / mtr 查看每一跳延迟与丢包
  • 耗时超预期的瓶颈通常出现在跨运营商互联节点或骨干网拥堵时段(晚高峰 20:00~23:00)
  • 可通过 BGP Anycast、CDN 边缘节点、HTTP/3(QUIC)等方案优化长链路体验

7. 核心认知总结(程序员面试自测清单)

  • 分组交换与电路交换的核心区别是什么?
  • TCP 与 UDP 分别适用于什么场景?
  • 运营商之间为何有"跨网访问慢"的问题?如何从路由层解释?
  • 基站切换过程中,TCP 连接是否会中断?如何优化?
  • 专线的"固定公网 IP"为什么比动态 IP 对服务端更重要?
  • 当你 ping 一个 IP 时,数据包经历了哪些设备与协议栈?
  • 如何从应用层判断网络瓶颈是带宽不足还是延迟过高?

终极一句话:互联网是 TCP/IP 协议栈协调下,全球无数自治系统(AS)通过 BGP 交换路由,在光纤/无线物理介质上不断转发 IP 分组的分布式系统。运营商是基础设施的承建与运营者,程序员是在此之上构建可靠分布式应用的关键角色。

1. 分组交换与电路交换的核心区别是什么?

本质区别:是否独占物理链路。

  • 电路交换(传统电话):通信前先建立一条独占的物理通路,通信期间该线路被双方完全占用,即使不说话也占着。优点是无额外延迟、数据顺序到达;缺点是资源利用率极低。
  • 分组交换(互联网):数据拆分成小包(Packet),每个包独立选择路由,共享链路,动态占用。优点是多路复用、利用率高、容灾好;缺点是可能有延迟、丢包、乱序。

👉 一句话:电路交换是“专车专用”,分组交换是“拼车走,每段路坐不同的车”。


2. TCP 与 UDP 分别适用于什么场景?

维度TCPUDP
连接面向连接(三次握手、四次挥手)无连接(发完即走)
可靠性确认重传、滑动窗口、拥塞控制不保证送达,丢了就丢了
顺序保证按序到达不保证,可能乱序
开销头部大(20字节+选项),传输效率低头部小(8字节),效率高
适用场景HTTP/HTTPS、文件传输、邮件、SSH实时音视频、游戏UDP、DNS、SNMP

👉 程序员选型:需要数据完整选 TCP;需要实时性 > 完整性选 UDP,应用层自己做冗余/前向纠错(如 WebRTC 的 QUIC 底层就是 UDP + 自定义可靠层)。


3. 运营商之间为何有"跨网访问慢"的问题?如何从路由层解释?

根本原因:运营商之间是独立的自治系统(AS),互相连接靠 BGP 协议,且存在商业结算关系。

路由层解释:

  • 电信用户访问电信机房:数据包走 AS4134(电信)内部路由,一跳直达,延迟低。
  • 电信用户访问移动机房:数据包到了骨干网后,必须在IXP(互联网交换中心) 从电信 AS 跳到移动 AS,这是跨 AS 边界。
  • 运营商之间为了节省结算成本,互联带宽远小于各自内部骨干带宽,且高峰时段拥塞;BGP 路由策略甚至会人为拉长路径(如绕道第三方中转)以降低结算费用。

👉 程序员落地:服务端部署选 BGP 多线机房(电信/移动/联通均有独立接入),或使用 CDN + Anycast 让用户就近访问,避免跨网出站。


4. 基站切换过程中,TCP 连接是否会中断?如何优化?

是否会中断:短期会丢包,但不一定完全中断,取决于切换类型和网络层设计。

  • 硬切换(4G 及以前):先断开旧基站,再连接新基站,切换间隙约 50~200ms,TCP 会因超时触发重传,如果 RTO(重传超时)设置过大,应用层感知到卡顿甚至读超时。
  • 软切换(5G 及部分优化):先建立新连接再断开旧连接(Make-Before-Break),切换间隙更短(< 50ms),TCP 重传就能恢复,用户无感知。

优化策略:

  • 应用层:设置合理的 TCP keepalive 和超时重传参数,避免过早断开;使用 QUIC(基于 UDP),其连接 ID 不随 IP 变化而变化,切换后无需重新握手。
  • 网络层:运营商侧启用 SRVCC(语音) 或 双连接(EN-DC) 技术,切换时保持一条备用路径。

👉 一句话:切换瞬间有丢包,TCP 靠重传续命;QUIC 是更优解,因为连接 ID 不变。


5. 专线的"固定公网 IP"为什么比动态 IP 对服务端更重要?

核心原因:服务端需要被客户端主动找到,必须有一个稳定可解析的入口。

  • 固定公网 IP:
    • DNS 可以 A 记录稳定指向它,对外提供 HTTP/S、SSH、VPN 等服务
    • 可申请反向 DNS(PTR),提升邮件服务器送达率
    • 可做 IP 白名单,增强安全控制
  • 动态 IP(家庭宽带):
    • 运营商 NAT 后是私网 IP,外部无法直接发起连接(除非用内网穿透如 ngrok)
    • 即使有公网动态 IP,每次重拨都会变,DNS 缓存来不及更新,服务不可用
    • 运营商通常封锁 80/443 等端口,禁止对外提供 Web 服务

👉 一句话:服务端要“被别人找到”,需要固定门牌号(固定 IP)+ 大门敞开(端口开放),这是专线的核心价值。


6. 当你 ping 一个 IP 时,数据包经历了哪些设备与协议栈?

完整路径(以 ping 8.8.8.8 为例):

text

应用层:ping 命令构造 ICMP Echo Request 报文
    ↓
传输层:ICMP 直接封装在 IP 头中(无端口)
    ↓
网络层:查路由表,确定下一跳网关;封装源 IP、目标 IP;如有 NAT,修改源 IP
    ↓
数据链路层:ARP 获取下一跳 MAC 地址,封装以太网帧
    ↓
物理层:电信号/光信号从网卡发出
    ↓
[家庭路由器]:NAT 转换、查路由表、转发
    ↓
[BRAS(宽带接入服务器)]:PPPoE 终结、NAT 再次转换(若运营商分配私网 IP)
    ↓
[城域网交换机]:VLAN 透传、二层转发
    ↓
[骨干网路由器]:查 BGP 路由表,决定下一跳 AS 和出口
    ↓
[互联网交换中心 / 海底光缆]:跨 AS 或跨洲转发
    ↓
[目标机房路由器]:查内网路由,送达目标服务器
    ↓
[目标服务器内核]:解包至网络层,识别目标 IP 为自己,构造 ICMP Echo Reply
    ↓
沿**基本对称路径**返回(但互联网路由未必对称,取决于各 AS 的 BGP 策略)

👉 程序员关注点:用 traceroute 可看到每一跳的 IP 和延迟,定位瓶颈在“哪一段”;


7. 如何从应用层判断网络瓶颈是带宽不足还是延迟过高?

经典方法:用 iperf3 和 ping 做对照实验,或用 HTTP 请求分阶段计时。

场景表现判断依据
带宽不足下载大文件速度慢,但 ping 延迟正常(如 10ms 以内)iperf3 测吞吐量远低于签约带宽;多线程下载能显著提速
延迟过高网页首字节时间(TTFB)很长,但下载速度正常ping RTT 大(如 > 100ms);单连接吞吐量受限于 带宽 × 延迟(BDP)
丢包严重视频卡顿、ssh 打字顿挫,但测速带宽正常ping -f 或 mtr 看丢包率 > 1%,TCP 会因重传大幅降速

应用层定位实操:

  • 分阶段计时:time curl -o /dev/null -s -w 'TCP握手时间:%{time_connect}s\nTTFB:%{time_starttransfer}s\n总耗时:%{time_total}s\n' https://your-api.com
    • 若 time_connect 大 → 网络延迟/握手问题
    • 若 time_starttransfer 大但 time_connect 小 → 服务端处理慢(非网络问题)
    • 若 time_total 远大于 time_starttransfer → 带宽不足(下载慢)
  • 用 iperf3 -c server_ip -t 30 -P 4 多线程测最大吞吐量,与签约带宽对比

👉 一句话:ping 看延迟和丢包,iperf3 看带宽,curl 分阶段计时看瓶颈落在网络还是服务器。

网络面试7问 · 速查表

#问题一句话答案核心细节程序员落地
1分组交换 vs 电路交换分组=共享链路拼车走,电路=独占线路专车送分组:利用率高、可能丢包乱序;电路:资源浪费、无额外延迟HTTP请求底层就是分组交换,重传和乱序由TCP处理
2TCP vs UDP 场景TCP要完整,UDP要快TCP:三次握手、重传、拥塞控制;UDP:无连接、8字节头文件/API用TCP;音视频/游戏/QUIC用UDP
3跨网访问慢不同运营商=不同国家,过境要收过路费,路还很窄BGP跨AS互联带宽小,路由策略可能绕路省结算费服务端用BGP多线机房,或用CDN+Anycast
4基站切换 TCP 中断?切换瞬间丢包,TCP靠重传续命,不一定断硬切换50~200ms间隙,TCP RTO触发重传;QUIC连接ID不变移动端设合理超时;QUIC是更优解
5固定公网IP重要性服务端=店铺,固定IP=固定门牌号,动态IP=摆摊固定IP:DNS可指向、端口可开、IP白名单;动态IP:NAT内网、端口封锁对外服务必须固定IP+专线,内网穿透只适合开发测试
6ping 经历了什么应用→TCP/IP栈→路由→骨干网→目标→原路返回具体路径:ping→路由器→BRAS→城域网→骨干网→IXP→目标机房用traceroute看每一跳,定位哪段慢
7瓶颈:带宽不足 vs 延迟过高带宽=水管粗细,延迟=水龙头反应时间带宽不足:大文件慢,多线程能提速;延迟高:TTFB大,ping RTT大curl分段计时看time_connect和time_starttransfer,iperf3测吞吐

两个核心公式(面试加分项)

公式说明
BDP = 带宽 × RTT带宽延迟积,决定单连接最大吞吐量。例:100Mbps × 50ms = 0.625MB 窗口,TCP窗口不够大会限制速度
RTT = 传播延迟 + 排队延迟 + 处理延迟ping测的是往返总延迟,无法区分哪段;用traceroute逐跳看

面试追问防御(遇到追问这样答)

追问问题标准回答
分组交换一定比电路交换好?不一定,电路交换在语音/专线场景仍有优势,零抖动、零丢包,VoIP/VPN专线仍用电路或类电路技术
TCP重传会不会让切换时连接彻底断开?只要RTO(重传超时)大于切换间隙,重传就能救回;但若切换跨网段导致IP变化,TCP连接会断(QUIC可解决)
为什么运营商不把跨网带宽建大点?商业成本:扩容要花几十亿,而两家是对手,没人愿为对手用户掏钱,所以都在交换中心做“对等结算”博弈
应用层怎么区分是带宽不够还是丢包?看iperf3测速:带宽不够→测速稳定偏低;丢包→测速剧烈抖动,且ping同时丢包率高

发布了 13 篇文章 | 共 43.6K 字 | 总访客数: Loading | 总访问量: Loading
Hugo theme Stack designed by Jimmy | 黔ICP备2025049100号-1