计算机网络
计算机网络
一、计算机网络
1.1 计算机网络的简要介绍
计算机网络可以简单定义为一些互相连接的、以共享资源为目的的、自治的计算机集合。
从更严谨的文献定义来看,它是利用通信设备和线路将地理位置分散且具有独立功能的多个计算机系统连接起来,在网络协议的控制下进行数据通信,并实现资源共享。
计算机网络向用户提供的最核心功能主要有两点:连通性和共享。

因特网服务提供商 ISP (Internet Service Provider) 是由多个分组交换机和多段通信链路组成的网络。
端系统(如个人电脑、手机)必须通过 ISP 才能接入因特网。
ISP 体系结构呈现多层次结构:低层次 ISP 通过国家或国际级别的高层 ISP 互联,从而实现全球范围的通信。其中,IXP(互联网交换中心) 起到了关键作用,它允许两个 ISP 网络直接相连并交换分组,而无需通过第三个高层 ISP 转发数据,从而降低了延迟和成本。每一个ISP独立管理
从组成结构上看,计算机网络可以分为网络边缘和网络核心两大部分:
- 网络边缘(资源子网):由所有连接在因特网上的主机(端系统)组成。其组成部分包括主机、外围设备以及运行在主机上的应用程序。这部分是用户直接使用的,主要负责信息处理。
- 网络核心(通信子网):由大量的路由器和连接这些路由器的通信链路组成。它是计算机网络中最复杂的部分,主要功能是向网络边缘中的大量主机提供连通性,确保报文能够从源节点转发到目的节点。
1.2 协议
网络协议定义了两个或多个通信实体间所交换报文的格式和次序,以及在报文发送和/或接收或者其他事件方面所采取的行动(响应)。
协议由三个基本要素组成:
- 语法:即用户数据与控制信息的结构和格式。
- 语义:用于解释控制信息每个部分的具体含义,规定了需要发出何种控制信息、完成何种动作以及做出何种响应。
- 同步/时序:对事件发生顺序的详细说明(例如“先发什么,后发什么”)。
关于协议与服务的区别与联系,这是理解分层结构的关键:
- 协议是水平的:它是控制对等实体之间通信的规则。
- 服务是垂直的:它是下层通过层间接口向上一层提供的功能。
- 协议的实现保证了能够向上一层提供服务。要实现本层协议,还需要使用下层提供的服务。
- 简单来说,协议是一套规则、规定和标准;而网络服务是一种软件模块。N 层服务就是利用 N-1 层服务以及 N 层协议与对等实体交互信息来实现的,即服务是由协议支持的。
1.3 网络边缘
端系统(主机)位于网络的边缘,运行着各种网络应用程序。它们可以是传统的台式机、服务器,也可以是智能手机或瘦客户机。在网络边缘,端系统之间的通信主要有两种典型的网络应用模型:
- 客户/服务器(C/S)模型:客户发出请求,并接收服务器提供的服务。例如 Web 浏览器与服务器、邮件客户端与服务器。
- 对等模型(P2P):极少或不采用专门的服务器,节点之间对等通信。例如 Gnutella、KaZaA。
接入网(network access)是将端系统连接到其边缘路由器的物理链路,它是用户连接到网络的基础设施。
边缘路由器(edge router)是端系统到任何其他远程端系统路径上的第一台路由器。
常见的接入方式包括:
- 家庭接入:拨号调制解调器、ADSL(PPT中为PSL,通常指DSL系列)、HFC(有线电视网络)、FTTH(光纤到户)、卫星。
- 企业接入:以太网、WiFi。
- 广域无线接入:3G/4G/5G 等移动通信技术。
物理介质是将网络中不同节点互相连接起来的物理线路,是进行数据传输的物理通路,通过传播电磁波或光脉冲来发送比特流。它分为两大类:
- 导引型媒体:电磁波沿着固体媒体传播,如双绞线、同轴电缆、光缆等。
- 非导引型媒体:电磁波在空气或外层空间中传播,如无线电、微波、红外线等。
1.4 网络核心
在网络核心中,数据传输主要通过以下三种交换方式实现:
电路交换 (Circuit Switching):
- 核心特点:在端系统通信会话期间,预留端到端资源(缓存、链路带宽)。在发送信息之前,必须建立一条专用的通路,此路径上的交换机为该连接维护状态。
- 复用技术:
- 频分多路复用 FDM:将带宽分为若干频段,每个用户占用一个专用频段。
- 时分多路复用 TDM:将时间划分为固定时隙,每个用户在固定时间片内传输。
- 优缺点:发送方以恒定速率传输,适用于电话网络。缺点是链路资源专用,不能共享,预约后如果不使用会造成浪费,且建立连接过程复杂。
分组交换 (Packet Switching):
- 工作过程:源端将报文划分为较小的分组 (packet),每个分组独立选择路径,通过一系列链路和交换机传送到目的端。
- 存储转发机制:交换机必须先接收并存储整个分组,检查无误后才转发到下一跳链路。
- 特点:不需要预留资源,按需使用。所有分组共享网络资源,每个分组可使用全部链路带宽。
- 缺陷:由于资源竞争,可能出现排队延迟;若缓存空间已满,分组会被丢弃(丢失)。

对比总结与网络分类:

- 电路交换网络:比特流连续直达,类似管道。
- 报文交换网络:整个报文先传到相邻结点,全部存储后再转发。
- 分组交换网络:单个分组转发。分为虚电路网络(有连接感)和数据报网络(如 TCP/IP 体系)。
- 优势对比:相比电路交换,分组交换提供了更好的带宽共享,且不需要建立连接,实现成本低、效率高。
1.5 丢包和时延
丢包(Packet Loss)发生的原因主要是分组在路由器的缓存中需要进行排队。当分组到达链路的速率(暂时速率)超过了链路的输出能力时,分组就会进入队列等待。如果此时路由器的缓存空间已满,后续到达的分组将无处安放,从而被丢弃,产生丢包现象。

分组在通过网络时,总时延由以下 4 种类型的时延叠加而成:
- 处理时延(Processing Delay):路由器检查分组首部、提取目的地址、进行比特级差错检测以及决定将该分组导向何处所需的时间。
- 排队时延(Queuing Delay):分组在输出队列中等待传输的时间。其长短取决于网络的拥塞程度;如果队列为空,则该时延为 0。
- 传输时延(Transmission Delay):又称发送时延。这是将分组的所有比特推向链路所需要的时间。计算公式为:
- 传播时延(Propagation Delay):电磁波在物理介质中传播一定距离所需的时间。其取决于传播介质和距离。计算公式为:
1.6 吞吐量
**吞吐量(Throughput)**表示接收端接收到数据的比特率,单位通常为 bps(bits per second)。它分为两种衡量方式:
- 瞬时吞吐量:某一瞬间的吞吐量值。
- 平均吞吐量:一段时间内的吞吐量均值。
在面试中,关于吞吐量最常考的概念是瓶颈链路(Bottleneck Link):
在端到端的路径中,制约整个连接吞吐量的链路被称为瓶颈链路。对于一条包含多段链路的路径,其端到端的平均吞吐量取决于路径中传输速率最低的那段链路。

例如,假设源端发送速率为 ,接收端接入速率为 :
- 如果 ,则平均吞吐量为 。
- 如果 ,则平均吞吐量为 。
最终的吞吐量计算公式为:。
1.7 分层的体系结构
计算机网络采用分层方式来组织协议以及实现这些协议的硬件和软件。我们将各层所有协议的集合称为协议栈。
分层结构的优点(重点):
- 使复杂系统简化:将一个巨大且复杂的系统划分为若干个明确、特定的部分,便于研究和设计。
- 易于维护和更新:层与层之间相互独立,只要接口关系保持不变,某一层功能的改变或技术的更新(例如从 WiFi 切换到 4G)不会影响系统其余部分。
分层结构的缺点:
- 功能重复:某些功能可能在不同层重复出现(例如差错控制在链路层和传输层都可能存在)。
- 信息冗余:某层的功能可能需要仅存在于其他某层的信息,导致跨层信息交换的效率问题。
1.8 网络协议栈
计算机网络协议栈通常采用五层结构,从上至下依次为:
- 应用层(Application Layer):
- 功能:网络应用程序及其应用层协议存留的地方,直接为用户进程提供服务。
- 传输单位:报文 (Message)。
- 运输层 / 传输层(Transport Layer):
- 功能:在应用程序的客户机和服务器之间提供**端到端(End-to-End)**的传输报文服务。
- 传输单位:报文段 (Segment)。
- 网络层(Network Layer):
- 功能:负责将数据报从一台主机路由到另一台主机(主机到主机的通信)。
- 传输单位:数据报 (Datagram) / 分组。
- 链路层(Link Layer):
- 功能:负责将数据在相邻节点(如路由器到路由器)之间传输。
- 传输单位:帧 (Frame)。
- 物理层(Physical Layer):
- 功能:负责在节点之间传输最原始的比特流。
- 传输单位:比特 (Bit)。
假设你正在访问 http://example.com/index.html:
1. 应用层 (报文 Message)
你的浏览器(进程)构造了一个 HTTP 请求报文。
内容大致是:GET /index.html HTTP/1.1 \r\n Host: example.com ...。
这是最原始的数据,包含了你想要哪个网页、你的浏览器型号等业务信息。
2. 运输层 (报文段 Segment)
应用层把报文交给操作系统的 TCP 协议实体。
TCP 会在报文前面加上一个 TCP 首部,其中最重要的信息是端口号(源端口:如 12345,目的端口:80)。
它还负责把太长的 HTTP 报文切分成小块,并加上序列号,确保对方收到后能按原样拼好。此时它叫 TCP 段。
3. 网络层 (数据报 Datagram)
TCP 段交给 IP 协议实体。
IP 会加上 IP 首部,最重要的信息是 源 IP 地址(你电脑的地址)和 目的 IP 地址(服务器的地址)。
网络层的作用是告诉互联网:这个包要从你的路由器,经过电信/移动的骨干网,最终送到目标服务器所在的机房。此时它叫 IP 数据报。
4. 链路层 (帧 Frame)
IP 数据报交给网卡驱动程序。
网卡会在外面包上一个 以太网首部(Ethernet Header) 和 尾部(FCS校验码)。
首部里最关键的是 MAC 地址(源 MAC:你电脑网卡的硬件地址,目的 MAC:你家路由器的硬件地址)。
链路层只负责把包从你的电脑成功发到下一跳设备(即你的路由器)。此时它叫 以太网帧。
5. 物理层 (比特 Bit)
网卡将这个“帧”(一串 0 和 1)转换成电压变化(电信号)或者光脉冲(光信号),通过网线或 WiFi 信号发射出去。
这些 0 和 1 就是比特。
1.9 OSI参考模型

OSI (Open Systems Interconnection) 是由 国际标准化组织ISO 提出的网络分层模型,共有七层。相比五层模型,它多出了表示层和会话层:
- 表示层:处理通信用户之间数据格式的转换、数据压缩及加解密。确保一个系统的应用层发送的信息能被另一个系统的应用层读取。
- 会话层:管理主机间的会话,包括建立、管理和终止进程间的会话,以及建立检查点实现同步。
OSI 七层模型与 TCP/IP 模型的联系与区别:
- 联系:TCP/IP 借鉴了 OSI 的分层、服务、接口和协议等概念。
- 开发顺序:OSI 是“先准则后实践”,先设计模型再开发协议;TCP/IP 是“先实践后模型”,协议已经在广泛使用了才总结出模型。
- 层数对比:TCP/IP 是四层(或五层)结构,它将 OSI 的高三层(应用层、表示层、会话层)合并为一个应用层。
- 地位:OSI 是一种理想化的法律上的国际标准,而 TCP/IP 是互联网事实上的标准。
在 TCP/IP 体系中,通常不强调表示层和会话层,如果应用程序需要这些功能(如加解密或会话管理),则由开发者在应用层中自行实现。
1.10 攻击威胁
计算机网络在设计之初更多考虑的是连通性,因此面临多种攻击威胁:
-
恶意软件:
- 病毒 (Virus):需要某种形式的用户交互(如打开邮件附件、运行程序)来感染设备的恶意软件。
- 蠕虫 (Worm):无需任何明显交互就能自动进入并在网络中传播的恶意软件。
- 僵尸网络 (Botnet):通过植入程序控制大量计算机,使其听从控制者指令,常用于发动大规模攻击。
-
拒绝服务攻击 (DoS / DDoS):
- 原理:攻击者通过使用虚假流量压倒网络资源(如带宽、服务器 CPU/内存),使合法流量无法获得服务。
- 常见手段:弱点攻击、带宽洪泛、连接洪泛。
- 分布式拒绝服务 (DDoS):攻击者控制多个源(通常是僵尸网络)同时向目标发送海量流量。
-
嗅探与欺骗:
- 分组嗅探 (Packet Sniffing):在广播介质(如公共 WiFi)中记录所有经过的数据包,可能导致敏感信息泄露(如明文密码)。
- IP 哄骗 (IP Spoofing):发送具有虚假源地址的分组,伪装成信任的主机来骗取权限或进行攻击。
二、应用层
2.1 应用程序体系结构
在应用层设计中,应用程序体系结构决定了端系统之间如何组织通信。主要分为以下三种模式:
客户机/服务器 (C/S) 体系结构:
- 服务器:是总是打开的主机,具有固定的、众所周知的 IP 地址。为了应对海量请求,通常使用主机集群(数据中心)创建强大的虚拟服务器。
- 客户机:主动向服务器发起通信。客户机可以拥有动态 IP 地址,且客户机相互之间不直接通信。
- 特点:管理方便,但服务器容易成为性能瓶颈,且不具备自扩展性。
P2P (Peer-to-Peer) 体系结构:
- 核心逻辑:没有(或最少)永远打开的服务器,任意一对主机(对等方)直接相互通信。
- 对等性:每一个节点既向其他对等方请求服务,又向其他对等方提供服务。
- 优点:具有极强的自扩展性(新节点带来需求的同时也带来了服务能力)。
- 缺点:高度分散导致难以管理,且对等方间歇性连接、IP地址易变。
混合体系结构 (Hybrid):
- 结合了 C/S 的管理能力和 P2P 的传输效率。
- 典型案例 Napster:文件搜索采用 C/S 结构(集中式),由中心服务器记录对等方内容并指引位置;而具体的文件传输采用 P2P 结构,直接在对等方之间交换。
- 即时讯息:用户上线注册、查找好友通过服务器(C/S),而两个聊天用户间的消息传递则尝试通过对等连接(P2P)。

2.2 进程通信和进行寻址
进程通信是网络应用的基础。运行在端系统中的程序称为进程:
- 在同一台主机上,进程间通过内部进程通信机制(如信号量、管道)通信。
- 在不同主机上,进程通过交换报文相互通信。
套接字 (Socket) 是通信的门户:
- 它是同一台主机内应用层与运输层之间的接口。
- 由于它是应用程序和网络之间的 API,因此也被称为网络应用程序的可编程接口。
- 控制权边界:套接字以上的应用层由应用研发者控制,而套接字以下的运输层及往下的协议栈由操作系统控制。
进程寻址解决了“发给谁”的问题。要标识一个全球唯一的接收进程,需要两个核心要素:
- 主机地址:使用 IP 地址标识互联网中的某一台主机。
- 进程标识:使用 端口号 (Port Number) 标识主机中的具体进程。
- 周知端口:常用的应用协议被指派了固定的端口,如 HTTP (80)、SMTP (25)。
- 开发新应用时,必须分配一个不重复的新端口号。
用户代理 (User Agent) 是用户与网络应用之间的接口,例如 Web 应用的用户代理是浏览器,电子邮件的用户代理是邮件阅读器。
2.3 因特网运输协议提供的服务
应用层在选择运输层协议时,实际上是在选择不同的服务特性:
TCP 服务 (Transmission Control Protocol):
- 面向连接的服务:在应用层数据传送之前,客户机程序和服务器程序之间必须通过“三次握手”建立连接。
- 可靠的传输服务:通过确认机制和重传机制,保证接收和发送进程间的数据无差错、按序到达。
- 流量控制:确保发送方发送速率不会太快,从而不会淹没接收方。
- 拥塞控制:当网络出现过载时,会自动抑制发送进程的速率,以缓解网络压力。
- 不足:没有提供时延保证和最小带宽保证。
UDP 服务 (User Datagram Protocol):
- 不可靠数据传输:不保证数据一定到达,也不保证按序到达,是一种“尽力而为”的交付方式。
- 轻量级:没有提供建立连接、可靠性、流量控制和拥塞控制。
- 优点:没有握手延迟,首部开销小,发送速率只受应用层产生数据速率的影响,实时性更好。
- 不足:同样不提供时延和带宽保证。
2.4 应用层协议
应用层协议根据其对数据可靠性、有序性或实时性的不同要求,选择底层的传输协议:

- 电子邮件 (SMTP)、远程终端访问 (Telnet)、Web (HTTP) 以及 文件传输 (FTP):由于这些应用对数据的完整性要求极高,不允许出现任何比特错误或丢失,因此均运行在 TCP 之上。
- 流媒体:对实时性有一定要求,同时能容忍少量丢包,因此可以根据具体实现选择 TCP 或 UDP。
- 因特网电话:对时延极其敏感,丢包对通话质量的影响通常小于高时延带来的交流障碍,因此典型使用 UDP。
面试中需要注意的是:虽然 HTTP 长期以来基于 TCP,但最新的 HTTP/3 已经转为基于 UDP (QUIC)。此外,DNS(图中未标出)作为应用层的重要服务,主要也是运行在 UDP 之上的。
2.4.1 HTTP协议
HTTP (HyperText Transfer Protocol) 是超文本传输协议,采用典型的客户/服务器 (C/S) 模式。一个 Web 页面通常由若干个对象组成(如 HTML 文件、JPEG 图片、Java 小程序等),每个对象都通过一个 URL (统一资源定位符) 来寻址。
URL 的一般形式为:<协议>://<主机>:<端口>/<路径>。
例如 http://www.someSchool.edu/somedepartment/picture.gif,其中包含了协议名、服务器主机名以及对象在服务器上的路径名。
HTTP 协议的核心特性(面试重点):
- 无状态协议 (Stateless):服务器不保存任何关于客户端的过去请求信息。这是为了简化服务器设计,因为维护状态的协议逻辑极其复杂。
- 使用 TCP:默认端口号为 80。
- HTTP 连接类型:
- 非持久 HTTP 连接 (Non-persistent):典型代表为 HTTP/1.0。每个 TCP 连接上只传送一个 Web 对象,传送完即关闭。对于含有多个对象的页面,需要建立多个 TCP 连接。
- 持久 HTTP 连接 (Persistent):典型代表为 HTTP/1.1。服务器在发送响应后保持 TCP 连接打开,同一个连接上可以传送多个 Web 对象,显著减少了连接建立的开销和往返时间 (RTT)。
2.4.2 HTTP连接
在 HTTP 通信中,往返时间 RTT (Round-Trip Time) 定义为一个短分组从客户机传播到服务器,再返回客户机所花费的时间。
非持久 HTTP 连接的时延分析:
- 对于每个对象的请求,其响应时间由 2 个 RTT + 文件传输时间组成。
- 第 1 个 RTT:用于 TCP 的“三次握手”(客户机发送连接请求,服务器确认并回送许可,客户端接收到许可返回确认)。
- 第 2 个 RTT:客户机发送 HTTP 请求报文,服务器回送 HTTP 响应报文及对象。
- 缺陷:如果页面含有 10 个图片(共 11 个对象),非持久连接需要重复上述过程 11 次,产生大量的连接开销和 RTT 累积。
持久 HTTP 连接的优化:
服务器在发送响应后保持连接打开,后续请求直接在该连接上传送。
- 不带流水线(Non-pipelined):客户必须收到前一个对象的响应后,才发出下一个请求。每个引用对象依然经历 1 个 RTT。
- 带流水线(Pipelined):HTTP/1.1 默认使用。客户遇到引用对象就发送请求,无需等待响应。理想情况下,所有引用对象总共只经历约 1 个 RTT。
2.4.3 HTTP报文及状态响应码
HTTP 报文分为 请求报文 (request) 和 响应报文 (response) 两类。
常见的 HTTP 请求方法:
- GET:最常用,请求行中包含 URL 参数,通常用于从服务器获取资源。
- POST:输入值在实体主体中传输,通常用于向服务器提交数据(如登录表单)。
- PUT:将文件上传到 URL 指定的路径。
- DELETE:删除指定 URL 的文件。
- HEAD:类似 GET,但服务器只返回首部,不返回对象主体。HTTP报文体可以为空。常用于测试资源是否存在或查看元信息。
HTTP 响应报文结构:

- 状态行:包含 HTTP 版本、状态码及其描述(如
HTTP/1.1 200 OK)。 - 首部行:包含关键字如
Date(发送日期)、Server(服务器软件)、Last-Modified(对象最后修改时间)、Content-Length(对象长度)等。 - 实体主体:包含请求的实际数据(如 HTML 源码、图片比特流)。
常见 HTTP 响应状态码(面试必背):

- 200 OK:请求成功,信息在响应消息中返回。
- 301 Moved Permanently:请求的对象已永久转移,新的 URL 在响应首部的
Location:字段指出。 - 400 Bad Request:通用差错,服务器无法理解该请求。
- 404 Not Found:服务器上不存在所请求的文档。
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的 HTTP 版本。
2.4.4 HTTP/2
HTTP/2 的主要目标是减少时延,它在不改变 HTTP 方法、状态码、URL 或首部字段等语义的前提下,改变了数据的格式化方法以及传输方式。
核心解决痛点:单 TCP 连接的队头阻塞(HOL Blocking)
- 问题描述:在 HTTP/1.1 中,如果链路前面传输的是一个巨大的对象(如高清大图),它会阻塞后面小对象的传输。虽然 HTTP/1.1 尝试打开多个并行 TCP 连接,但这主要是为了获得更多带宽,并没有从根本上解决单个连接内的阻塞问题。
- HTTP/2 的解决方法:将每个报文分成微小的帧,在相同的 TCP 连接上交错发送请求和响应报文。这样,大文件的帧和小文件的帧可以穿插传输,实现了真正的多路复用。
HTTP/2 的核心特征:
- 二进制分层:不再使用文本格式,而是采用二进制格式传输数据。
- 多路复用 (Multiplexing):经单一 TCP 连接使用请求和响应的多路复用,解决了队头阻塞。
- 首部压缩 (HPACK):提供 HTTP 首部字段有效压缩,减少重复传输的开销。
- 服务器推送 (Server Push):允许服务器为每一个客户请求发送多个响应(即预测客户需求,提前推送资源)。
- 请求优先级:允许研发者根据用户要求安排报文请求的相对优先级。
2.4.5 Cookies
Cookie 是一种在无状态的 HTTP 之上维持状态的机制。它允许服务器将某些信息(如用户 ID)存储在客户端,并在后续请求中将其取回。
Cookie 的四个组成部分:
- HTTP 响应报文中的 Cookie 首部行:服务器通过
Set-cookie:告诉浏览器需要保存的信息。 - HTTP 请求报文中的 Cookie 首部行:浏览器在后续访问该站点时,自动通过
cookie:将信息传回服务器。 - 用户主机中的 Cookie 文件:由用户的浏览器管理并保存在本地磁盘中。
- Web 站点的后端数据库:服务器通过 Cookie 中的 ID 在数据库中查找该用户的相关记录(如浏览历史、购物车内容)。
工作流程分析:
- 首次访问时,服务器为用户生成一个唯一的识别码(ID),并在响应中通过
Set-cookie发送。 - 浏览器接收后将其存入本地 Cookie 文件。
- 再次访问时,浏览器会自动在请求头中携带该 ID。服务器根据 ID 访问后端数据库,从而识别出用户身份并执行特定动作。
Cookie 的用途:
- 身份验证:记录登录状态。
- 购物车:在电商网站中暂存选购物品。
- 个性化推荐:根据用户的习惯推送内容。
- 用户跟踪:分析用户在网站上的行为。
2.4.6 Web缓存
Web 缓存器 (Web Cache) 是能够代替起始服务器(Origin Server)来满足 HTTP 请求的网络实体。它通常部署在靠近用户侧的网络边缘。
工作原理:
- 浏览器向 Web 缓存器发送所有的 HTTP 请求。
- 命中 (Hit):如果对象在缓存中,缓存器直接返回对象给客户端,无需访问远程服务器。
- 缺失 (Miss):如果对象不在缓存中,缓存器向起始服务器发出请求,接收并保存一份副本后,再转发给客户机。
- 角色转换:当它接收请求并回发响应时,它是服务器;当它向原始服务器请求资源时,它是客户机。
Web 缓存的主要作用:
- 减少响应时间:由于缓存器离用户更近,数据传输的距离缩短,加载速度更快。
- 减少通信量:减少了内部网络与接入链路上的流量负担,避免了链路拥塞。
- 降低因特网整体流量:从全局视角看,缓存减少了跨越骨干网的重复数据传输。
分类:
根据所在位置,可分为服务器端缓存(如 CDN)、代理服务器端缓存(公司或 ISP 的网关)以及客户端缓存(浏览器的本地存储)。
2.4.7 FTP(文件传输协议)
FTP 是专门用于文件传输的应用层协议,其最显著的特征是使用两条并行的 TCP 连接。
核心特性:
- 带外传输 (Out-of-band):FTP 将控制信息与实际数据分开传输。
- 控制连接(端口 21):用于在两主机之间传输控制信息,如用户标识、口令、改变目录命令以及“上传/下载”指令。控制连接在整个会话期间保持打开。
- 数据连接(端口 20):专门用于传输实际的文件数据。每当有一个文件要传输时,就会创建一个新的数据连接,传输结束后立即关闭。
- 有状态协议 (Stateful):与 HTTP 的无状态不同,FTP 服务器必须维护用户的状态信息。服务器需要追踪用户在目录树中的当前位置,以及之前的身份验证状态。
连接发起规则:
- 控制连接只能由客户机发起。
- 数据连接则根据模式不同(主动/被动),双方都能发起。
2.4.8 电子邮件
电子邮件系统由三个主要部分组成:用户代理(如 Outlook、Foxmail)、邮件服务器以及简单邮件传输协议 (SMTP)。邮件服务器是系统的核心,发送方和接收方的邮件服务器之间通过 SMTP 进行通信。

SMTP (Simple Mail Transfer Protocol):
- 端口号:25。
- 特性:它是一种推协议 (Push Protocol),用于将邮件从发送端用户代理推送到发送方邮件服务器,以及在邮件服务器之间推送。
- 与 HTTP 的对比:HTTP 是拉协议 (Pull Protocol);SMTP 强制使用 7 位 ASCII 码格式,而 HTTP 数据无此限制。此外,SMTP 将一个邮件内的所有对象封装在一个报文内发送,而 HTTP 每个对象都有独立的响应消息。
- 相同点:都用于文件传输,都支持持久连接,都使用 ASCII 命令/应答交互。
邮件访问协议(用于从接收方邮件服务器“拉”取邮件):
- POP3 (Post Office Protocol - Version 3):端口 110。功能较简单,无状态。典型工作模式是“下载并删除”,邮件下载到本地后,服务器通常不再保留副本。其工作分为特许、事务处理和更新三个阶段。
- 特许阶段:用户代理发送用户名和口令获得下载邮件的特许
- 事务处理阶段:用户代理取回报文,可对邮件进行某些操作。如做删除标记、取消删除标记、获取统计信息等
- 更新阶段:输入quit指令后结束会话,邮件服务器删除带有删除标记的报文,不退出不更新
- IMAP (Internet Mail Access Protocol):端口 143。功能强大,维护用户会话状态。允许用户在服务器上创建文件夹并组织邮件,且支持只读取邮件的一部分(如只下载正文不下载大附件)。
- IMAP服务器把每个报文与一个文件夹联系起来
- IMAP还允许收件人只读取邮件中的某一个部分
- IMAP服务器维护用户的会话状态。
- HTTP:现代网页版邮箱(如 Gmail、QQ邮箱)用户代理与服务器之间使用 HTTP,但在邮件服务器之间转发邮件时依然使用 SMTP。
2.5 DNS(域名系统)
DNS (Domain Name System) 运行在 UDP 之上,使用 53 端口。它是一个由分层 DNS 服务器实现的分布式数据库,也是一个允许主机查询该数据库的应用层协议。


DNS 提供的核心服务:
- 主机名到 IP 地址的转换。
- 主机别名:规范名字的易记替代(CNAME)。
- 邮件服务器别名:确保邮件能准确投递到对应的服务器。
- 负载均衡:一个域名可以对应一组 IP 地址,DNS 循环返回这些地址以分担流量。
DNS 的分层结构(解决集中式设计的单点故障、巨大访问量及远距离维护问题):
- 根名字服务器:全球共有 13 套(逻辑上),负责记录顶级域名服务器的信息。
- 顶级域 (TLD) 服务器:负责如
.com、.org、.edu等顶级域名以及所有国家的顶级域名。 - 权威 DNS 服务器:由组织机构提供,保存该机构所有公共主机的真实 IP 映射记录。
- 本地 DNS 服务器:当主机发出 DNS 请求时,请求首先发往本地 DNS,它起到了代理和缓存的作用。
DNS 查询方式:

- 递归查询:名字解析的负担交给被查询的名字服务器。本地 DNS 向上级请求,上级负责到底并返回最终结果。
- 迭代查询:被查询的名字服务器回复可以被查询的下一个名字服务器的 IP 地址,由请求者(通常是本地 DNS)亲自去跑接力赛。
DNS 记录格式 {Name, Value, Type, TTL}:
- Type=A:Name 是主机名,Value 是 IP 地址。
- Type=CNAME:Name 是别名,Value 是规范主机名。
- Type=NS:Name 是域名,Value 是该域权威服务器的主机名。
- Type=MX:Name 是邮件服务器别名,Value 是其规范主机名。
2.6 P2P
P2P 内容定位体系结构主要经历了三种模式的演进。首先是集中式目录,它通过专用服务器维护索引,但存在单点故障、性能瓶颈、可靠性差以及侵犯版权等严重问题。其次是查询洪泛模式,它无需专用服务器,设计简单,但由于查询报文会产生巨大流量,导致其拓展性极差。最后是利用不均匀性的 KaZaA 模式,它同样没有专用服务器,但通过引入超级节点(Group Leader),使对等方地位不平等,形成了有层次的 P2P 结构。
P2P 文件分发以 BitTorrent 为典型代表,其核心机制与策略如下:
- 参与特定文件分发的所有对等方集合被称为一个洪流(Swarm),文件被划分为固定长度(通常为 256KB)的**文件块(chunk)**进行互传。
- **追踪器(tracker)**负责跟踪参与洪流的所有对等方,帮助新加入的节点获取邻居列表。
- 请求块策略采用最稀缺优先(Rarest First)原则,即优先请求邻居中拥有人数最少的文件块,以确保稀缺块能迅速在洪流中增加,防止文件损坏或丢失。
- 发送块策略采用类似“一报还一报”的机制:节点仅向当前向自己发送速率最快的 4 个邻居发送文件块,且每过十秒重新计算一次排名;此外,每过三十秒会随机选择另一个对等方发送文件块,这种随机疏通机制允许发现更快的伙伴并让新节点获得起始块。
- 面试考点:P2P 架构最显著的优势是具有自扩展性(Self-scalability),即随着对等方数量增加,系统总的上行带宽(分发能力)也随之增加,这与传统的 C/S 模式有本质区别。
2.7 CDN
CDN (内容分发网) 通过管理分布在多个地理位置上的服务器,在其服务器中存储资源的副本,并试图将每个用户的访问重定向到能提供**最好用户体验(通常是物理距离最近)**的 CDN 位置。
关于 CDN 服务器安置原则,主要有两种策略:
- 深入 (Enter Deep):通过在遍及全球的接入 ISP 中部署服务器集群来深入到 ISP 的接入网中。其优点是离用户近,吞吐量大,时延低;缺点是高度分布式设计导致不易管理和维护。
- 邀请做客 (Bring Home):在少量关键位置建造大集群来邀请 ISP 做客。其优点是易于维护;缺点是离用户远,时延大,吞吐量小。

面试常考点:
- CDN 的核心价值在于解决从中心服务器到边缘用户之间的带宽压力和传输时延问题。
- 在实际运行中,CDN 往往结合 DNS 重定向 技术:当用户请求某个资源时,DNS 系统不返回原始服务器 IP,而是返回一个距离用户最近的 CDN 节点 IP。
- 视频流服务(如 Netflix、YouTube)是 CDN 的主要应用场景,常结合 DASH (经 HTTP 的动态自适应流) 技术,根据用户实时带宽自动选择合适的视频码率。
三、运输层
3.1 运输层及其协议
3.2 多路复用和多路分解
3.3 无连接传输:UDP
四、网络层
五、链路层与无线网络
六、安全、多媒体
七、面试问题
7.1 计算机网络及应用层
1、计算机网络是什么?
计算机网络可以简单定义为一些互相连接的、以共享资源为目的的、自治的计算机集合。
从更严谨的文献定义来看,它是利用通信设备和线路将地理位置分散且具有独立功能的多个计算机系统连接起来,在网络协议的控制下进行数据通信,并实现资源共享。
计算机网络向用户提供的最核心功能主要有两点:连通性和共享。
2、什么是协议?
3、丢包和时延是怎么发生的?
3、




