计算机网络
计算机网络解决的是「数据怎么从一台机器可靠地送到另一台机器」。分布式系统的一切——HDFS 的副本同步、Shuffle 的数据传输、RPC 调用——最终都落在网络上,所以它是绕不开的基础。
分层模型
网络按功能分层,每层只关心自己的事。实际使用的是 TCP/IP 四层模型:
| 层 | 职责 | 代表协议 |
|---|---|---|
| 应用层 | 具体业务语义 | HTTP、DNS、JDBC |
| 传输层 | 端到端的数据传输 | TCP、UDP |
| 网络层 | 跨网络寻址与路由 | IP |
| 网络接口层 | 相邻设备间的物理传输 | 以太网 |
面试的重心几乎全在传输层的 TCP 上。
TCP 为什么复杂
IP 层提供的是「尽力而为」的服务:包可能丢、可能乱序、可能重复。TCP 的全部复杂性,都来自要在这样一个不可靠的基础上造出一条可靠、有序的字节流。 它靠四件事做到:
- 序号与确认:每个字节都有编号,收到就回 ACK,没等到 ACK 就重传。
- 滑动窗口:不必收一个确认一个,可以连续发一批,兼顾可靠与效率。
- 流量控制:接收方通过窗口大小告诉发送方「我还能收多少」,避免把对方缓冲区撑爆。
- 拥塞控制:感知网络整体的拥堵程度并主动降速,避免把网络压垮。
三次握手建立连接、四次挥手关闭连接,都是这套可靠机制的一部分:握手是为了让双方确认彼此的收发能力都正常、并交换初始序号;挥手多一次是因为 TCP 是全双工的,两个方向要各自独立关闭——一方说完了不代表另一方也说完了,所以中间会有一个只能单向发送的半关闭状态。
TCP 与 UDP 的取舍
UDP 把上面这些全都不做:不建连接、不保证送达、不保证顺序,只管把包发出去。换来的是没有握手延迟、没有重传等待、头部开销更小。
选择标准很直接:在意「一个都不能错」用 TCP,在意「晚了就没意义」用 UDP。文件传输、数据库连接必须用 TCP;实时音视频、部分监控打点用 UDP 更合适——一帧画面丢了就丢了,等它重传反而会卡顿。
大数据组件之间的通信基本都是 TCP:HDFS 传块、Shuffle 拉数据、RPC 调用,都需要一个字节不错。
登录后可以选中正文添加批注(仅自己可见)。
评论 (0)
登录后参与评论。
还没有评论,来做第一个。