Appearance
第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。应用看到的一个域名,可以对应多个地址;一个地址也可以承载多个域名。连接成功只表明传输建立,不能保证用户已通过认证,也不能保证业务请求成功。
练习
- 一个 IP 数据报经过三台路由器,哪些头部字段逐跳变化?说明你的链路和 NAT 假设。
- 路由协议收敛后,应用仍然超时,可能是哪几类状态没有恢复?
- 同一服务器同时提供两个网站,为什么仅凭 IP 地址可能无法区分请求?