计算机网络

计算机网络解决的是「数据怎么从一台机器可靠地送到另一台机器」。分布式系统的一切——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)

登录后参与评论。

还没有评论,来做第一个。

登录后可以选中正文添加批注(仅自己可见)。

计算机网络