Skip to content

第1章:网络结构与协议分层

主机、链路与路由器

主机运行应用进程,网卡把主机连接到一条链路;交换机在一个二层网络内转发帧,路由器连接不同 IP 网络。互联网不是一台统一管理的交换机,而是多个管理域用共同协议互联的网络。

通信状态分布在不同位置。应用维护请求与会话;主机的传输层维护连接、序号和重传计时器;路由器维护路由与转发表;每个输出接口维护等待发送的队列。某条连接经过一台路由器,并不意味着路由器必然保存这条连接的全部状态。

层次主要对象负责的问题
应用名字、请求、响应消息表示什么,交互何时完成
传输端口、连接、字节流或报文数据交给哪个进程,如何控制端到端传输
网络IP 地址、前缀、数据报经哪些网络到达目的主机
链路MAC 地址、帧如何经过当前这一跳
物理信号、符号、介质怎样在介质上传送比特

这张表描述职责,并不保证每个实际设备只做其中一层的事。防火墙可以检查传输层端口,代理可以终止应用连接。

封装与逐跳变化

发送进程把消息交给传输层,传输层添加自己的头部,IP 再封装为数据报,网卡添加当前链路的帧头。接收端按相反顺序解释。

以不经过 NAT 的普通 IP 转发为例,路由器去掉入站链路封装,检查 IP 目的地址并选择下一跳,再封装成出站链路的帧。端到端 IP 地址通常不变,链路地址随跳改变;TTL 或 Hop Limit 逐跳减少。以太网地址因此不能代替远端服务的 IP 地址。

协议实体之间的“逻辑通信”由更低层实现。例如 TCP 两端交换序号和确认,实际 TCP 段仍要经过多个 IP 路由器。路由器不必替它重新完成 TCP 握手。

数据平面与控制平面

数据平面按照当前转发表处理每个分组。控制平面通过配置或路由协议决定表中应有什么。链路断开后,检测故障、传播消息、重新计算路径都需要时间,因此转发表在过渡期间可能暂时不一致。

端系统还承担可靠性。链路校验只能发现这一跳的部分错误;即使每跳都有重传,路由器故障仍可能丢失数据。因此文件传输是否完整,需要端到端协议确认。

一次请求涉及的不同名字

访问 https://example.com/a 时,域名用于查找服务地址,IP 地址用于路由,端口用于识别传输端点,HTTP 路径用于选择服务器上的资源。它们不是同一标识的不同拼写。

DNS 结果还可能指向负载均衡器或 CDN。应用看到的一个域名,可以对应多个地址;一个地址也可以承载多个域名。连接成功只表明传输建立,不能保证用户已通过认证,也不能保证业务请求成功。

练习

  1. 一个 IP 数据报经过三台路由器,哪些头部字段逐跳变化?说明你的链路和 NAT 假设。
  2. 路由协议收敛后,应用仍然超时,可能是哪几类状态没有恢复?
  3. 同一服务器同时提供两个网站,为什么仅凭 IP 地址可能无法区分请求?

上次更新: