第一章  概述

一、计算机网络的概念

计算机网络:若干结点(node)和连接这些结点的链路(link)组成。(结点可以是计算机、集线器、交换机、路由器等);主要功能:数据通信(信息传递)、资源共享;

互联网:多个计算机网络通过路由器互相连接而成,可使用任意通信协议

二、计算机网络的功能

数据通信、资源共享(硬件、软件、数据)、分布式处理、提高可靠性、负载均衡

三、计算机网络的分类

四、网络交换方式*****

电路交换:通信前端到端建立一条物理链路,在通信过程中一直占用

       优点:没有延迟、传输效率高

       缺点:建立&释放连接开销大,独占链路利用率低,不支持差错控制

报文交换:数据以报文为单位进行存储转发

       优点:1.通信前无需建立连接

                  2.线路可以灵活分配,无需占用一条线路,利用率高

                  3.支持差错控制

       缺点:1.报文不定长不方便存储转发管理;

                  2.长报文存储转发开销大;

                  3.长报文容易出错,重传开销大

分组交换:数据以分组为单位进行存储转发

        优点:无需建立连接;线路可灵活分配;勿需占用一条线路,利用率更高;支持差错控制;

        相比于报文交换:1.分组定长便于存储转发;2.分组存储转发开销小;3.重传开销小

        缺点:1.控制信息增加;2.存在存储转发延迟;3.传输过程可能存在丢包等现象;

五、体系结构与分层模型*****

1. 为什么要分层?谈谈你对网络分层的理解。

网络是个复杂的庞大系统,分层是为了将大问题化小,实现解耦。每一层只需向上层提供服务,并调用下层的接口,而不需要关心下层的具体实现。这极大地提高了系统的可扩展性和维护性。例如,无论底层物理介质从铜线换成光纤(物理层改变),都不影响你在应用层刷网页。

2. 五层协议/OSI七层模型/TCP/IP四层模型的对应关系与各层功能?

面试官会让你随手画出来,并说出每层传输的数据单位(PDU):

  • 应用层:产生应用数据(报文),如 HTTP, DNS。

  • 运输层:负责端到端的通信(报文段),如 TCP, UDP。

  • 网络层:负责主机到主机的路由与寻址(IP数据报/分组 )。

  • 数据链路层:负责相邻节点的可靠传输(帧)。

  • 物理层:负责在介质上传输原始比特流(比特)。

💡 高频追问:为什么工业界用 TCP/IP 四层,而教科书用五层,学术界提出七层? 答:OSI 七层模型划分过细(会话层和表示层在实际中多由应用层自行实现),且当时设计滞后、缺乏市场推动。TCP/IP 是市场倒逼出来的标准,结构精简。五层体系结构则是为了教学方便,结合了两者的优点。

3. 什么是封装和解封装?

  • 回答核心:数据在发送端从上往下传,每经过一层就会加上该层的控制信息(首部),这个过程叫封装;在接收端从下往上传,每过一层就剥离掉该层的首部,最终还原出原始数据,这个过程叫解封装。

六、网络性能指标

1. 时延由哪几部分组成?哪个是主要的?

时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延

  • 发送时延:发送时延 = 数据长度/发送速率

  • 传播时延:信号在信道(如光纤)中跑的时间。传播时延 =信道长度/信号传播速度

  • 面试官问:“高速网络链路”提高了哪个时延?答:提高了发送速率,从而减小了发送时延,但绝对无法减小传播时延(因为光速不变)。

2. 什么是带宽和吞吐量?

  • 带宽:链路的最高理论传输速率。

  • 吞吐量:单位时间内实际通过网络的数据量(受网络拥堵、丢包影响,实际表现)。

3. 时延带宽积的物理意义是什么?

  • 公式:时延带宽积= 传播时延*带宽

  • 物理意义:它代表这条链路能容纳的最多比特数。通常被称为“以比特为单位的链路长度”或“管道的体积”。在做网络优化(如 TCP 窗口大小调节)时,这个指标非常关键。

第二章 物理层

一、 物理层的核心基本概念

1. 物理层的主要任务是什么?它传输的是什么?

  • 核心回答:物理层解决的是如何在连接各种计算机的传输媒体上传输比特流(是方法),而不是具体的传输媒体本身。它的主要任务是确定与传输媒体的接口有关的四个特性:

    • 机械特性:接口的形状、尺寸、引脚数。

    • 电气特性:线路上电压的范围、阻抗匹配。

    • 功能特性:某条线上出现的某一电平的电压表示何种意义。

    • 规程特性:定义各条物理线路的工作规程和时序关系。

2. 区分:数据、信号、码元(Symbol)

  • 数据:运送消息的实体(比如一段文本或多媒体文件)。

  • 信号:数据的电磁表现。分为模拟信号(连续)和数字信号(离散)。

  • 码元:在使用时间域的波形表示数字信号时,代表不同离散值的基本波形。

  • 经典追问:一个码元等于一个比特吗?

    • 答:不一定。如果一个码元只能表示 0 和 1 两种状态,那它携带 1 比特;如果通过调制(如 QAM)让码元有 16 种状态,那么一个码元就能携带 4 个比特。

二、 两大核心定理(信道的极限容量)

1. 奈氏准则与香农公式

请务必熟记这两个公式,并理解它们的适用场景:

特性奈氏准则香农公式
公式C=2*W码元/s
物理意义限制了码元传输速率的上限限制了信息传输速率(带宽)的上限。
针对信道理想无噪声信道。带限某种噪声(高斯白噪声信道。
决定因素由信道带宽 和码元离散电平数决定。由信道带宽和信噪比 决定。
  • 追问 1:既然香农公式给出了信道容量的极限,那如果一个信道已经达到了香农极限,我怎么做才能进一步提高数据的传输速率?

    根据公式,要么设法增加信道带宽 ,要么提高信噪比S/N。
  • 追问 2:既然波特率(码元传输速率)受限于奈氏准则,那是不是只要无限增加码元的离散电平数V(比如让一个波形代表1024种状态),就能让传输速率无限大?

    理论上在无噪信道可以,但在实际有噪信道不行。若波特率过高,则导致码间串扰,即接收方无法识别码导致误码率飙升。

三、编码与调制

1.编码&调制

编码:二进制数据->数字信号(不归零编码、归零编码、曼彻斯特编码、差分曼彻斯特编码)

调制:二进制数据->模拟信号

QAM-64:代表调制64种信号,1码元可携带6bit数据

2.什么是曼彻斯特编码?它有什么优缺点?

  • 概念:每一位比特的正中间都有一次电压跳变。通常规定:从高跳变到低表示 0(或 1),从低跳变到高表示 1(或 0)。

  • 优点:因为每一位中间都有跳变,这个跳变自带了时钟信号,所以它具有强大的自同步能力,接收方不容易丢步。抗干扰能力强。

  • 缺点:由于每位都要跳变一次,它所占用的频带宽度是原始基带信号的两倍,调制效率只有 50%。

  • 差分曼彻斯特编码:每位中间依然跳变(仅用于同步),但用位边界是否有跳变来表示 0 或 1(有跳变表示 0,无跳变表示 1)。抗干扰能力比常规曼彻斯特编码更强。

四、 信道复用技术(资源共享)

1. 常见的信道复用技术有哪些?

  • FDM(频分复用):所有人同时通信,但分不同的频段(如传统有线电视)。

  • TDM(时分复用):所有人在同一个频段,但分不同的时间片。STDM(统计时分复用)。传统 TDM 分配固定时间片,如果某人不发数据,时间片就浪费了;STDM 动态分配,按需索取,大大提高了链路利用率。

  • WDM(波分复用):光的频分复用,在一根光纤中传输不同波长(颜色)的光信号。

  • CDMA(码分复用/码分多址):这是最爱考的计算点。

2. 重点:CDMA 的向量内积计算

  • 核心规则:每个站分配的码片序列必须各不相同,且强正交。两个不同站的向量A 和 B的内积为 0(A*B = 0);自身内积为 1(A *A = 1);自身反码内积为 -1

  • 如何分离:当多个站同时发送导致信号叠加为S 时,接收端想收 A 站的数据,只需计算内积 S*A。若结果为 1 则是比特 1,为 -1 则是比特 0,为 0 则代表 A 站没发数据。

五、传输介质

双绞线(T)、同轴电缆、光纤(F)

10base5: 10Mbps,同轴电缆,最远传输500m

六、物理层设备

中继器

  • (两个端口)一个端口接收信号,将失真信号放大、整形、再生发给另一个端口
  •   中继器≠放大器,支持半双工通信(不可同时发送数据)

集线器

  • 本质上是多端口中继器,将其中一个端口接收到的信号整形再生后,转发到其他所有端口
  • 集线器连接的网络物理上是星型拓扑,实际上是总线型
  • 不能隔离冲突域
  • 共享带宽:集线器内部是一根共享的总线。如果一个 10 Mbps 的集线器连接了 10 台电脑,当它们同时通信时,每台电脑平均只能分到 1 Mbps 的带宽。
  • 中继器、集线器不能无限串联!!!

提问:为什么说集线器不能隔离冲突域?如果两台电脑通过集线器同时发送数据会怎么样?

因为集线器内部结构只是一条共享的物理总线,它处于物理层,不理解任何数据链路层的帧结构。如果两台主机同时向集线器发送信号,这两个电信号会在集线器内部发生碰撞(冲突),导致两个信号相互干扰完全损坏。因此,连接在同一个集线器上的所有设备都处于同一个冲突域中。

提问:现代网络中,我们用什么设备替代了集线器?带来了什么好处

答:现代网络普遍使用交换机(Switch)替代了集线器

  • 层级不同:集线器是物理层设备,盲目广播;交换机是数据链路层设备,可以通过学习 MAC 地址表进行定向单播转发。

  • 隔离冲突域:交换机的每一个端口都是一个独立的冲突域。由于端口之间支持全双工通信且有缓冲区,根本不会发生信号碰撞,极大地提升了网络传输效率。

  • 独享带宽:交换机每个端口的主机都能独享该端口的标称带宽(如 1000 Mbps),而不是像集线器那样几十台电脑瓜分带宽。

第三章 数据链路层

一、数据链路层的功能

1.功能总结

(1)封装成帧

  • 帧定界:如何让接收方确定帧的界限
  • 透明传输:接收方去除帧定界的附加信息,把帧恢复原貌

(2)差错控制--发现解决一个帧的内部差错

(3)可靠传输--发现/解决帧错误(帧丢失、重复、失序)

(4)流量控制--控制发送方发送速度别太快,让接收方来得及接受

(5)介质访问控制--广播信道/点对点信道

2.封装成帧与透明传输

字符计数法、字节填充法、零比特填充法(每连续5个1后加一个0)、违规编码法(曼彻斯特编码)

3.差错控制

  • 奇偶校验码
  • CRC循环冗余校验码
  • 海明码

       问:CRC 是怎么计算的?

       采用模2除法。在数据后面拼接r个 0,除以双方约定的生成多项式 G(X),求得的余数就是冗余码(FCS),拼在数据后面发走。接收方用同样的多项式去除,如果余数为 0 则代表传输无差错。

       问:数据链路层使用 CRC 检验无差错,是不是就等于实现了“可靠传输”?

       绝对不是。 CRC 只能保证接收端收到的帧在传输过程中没有产生比特差错(0 没变 1,1 没变 0),这叫“无比特差错传输”。但是,它无法解决丢帧、重复帧、帧倒序等传输差错。在过去质量差的链路上,需要通过确认和重传机制(如停止-等待协议)来实现可靠传输;而在现代高质链路上(如光纤),链路层通常不保证可靠传输,把这个任务留给运输层(TCP)来做。

4.可靠传输与流量控制

三种协议(又称ARQ协议)

(1)停止等待协议

  • 工作机制:发送窗口 = 1,接收窗口 = 1。发送方每发一个帧,就必须停下来等待接收方的确认帧(ACK)。收到 ACK 后,才能发下一帧。
  •  缺点:信道利用率极低

(2)后退N帧协议

     工作机制:发送窗口W_T > 1,接收窗口W_R = 1。发送方可以连续发送多个帧。(累计确认)

(3)选择重传协议(S-R协议)

        接收方设置了缓冲区,可以接收不按序到达的帧。发送方只重传出错或超时的那一帧(第 3 帧),大大提高了信道利用率。

信道利用率

链路层的可靠传输 vs 运输层的可靠传输

经典追问:既然你在数据链路层用滑动窗口、CRC、ARQ 实现了可靠传输,为什么到了第四层 TCP 协议,还要再搞一套滑动窗口和可靠传输?这难道不是重复造轮子吗?

  • 应用场景与边界不同:数据链路层的可靠传输是解决相邻节点之间物理链路由于噪声导致的比特差错或丢帧。而 TCP 的可靠传输是解决端到端之间跨越了无数路由器和异构网络后,由于网络拥堵、路由器满载丢包、路径漂移导致的丢包与乱序。

  • 现代网络分工演进:在现代网络中,物理链路的误码率极低。因此,现代数据链路层(如以太网)普遍选择“不可靠传输”(只用 CRC 检错,报错就丢,不负责重传),从而减轻底层设备的计算负担,把可靠传输的重任完全交给端到端的 TCP 协议来兜底。这种“边缘端负责可靠性,核心网只管速度”的设计,大大提升了互联网的整体效率

二、 随机接入协议(CSMA 家族)

1. CSMA/CD 协议(早期以太网、总线型、无连接、不可靠(半双工通信))

  • “先听后发,边发边听,冲突停止,延迟重发”

2. 无线局域网:CSMA/CA 协议(无线网络)

为什么无线网络不用 CD(冲突检测),而要用 CA(冲突避免)?

隐蔽站问题:如下图所示,A 和 C 同时想给中间的 B 发数据。A 和 C 互相听不到对方(距离远或有墙阻挡),它们以为信道空闲同时发送,结果在 B 处发生惨烈碰撞。也就是说,发送端无法在自己这里检测到接收端那里的冲突。

CA 是怎么“避免”冲突的?:

  • 通过 IFS(帧间间隔) 区分优先级。
  • 采用 RTS/CTS(请求发送/允许发送) 握手帧机制,提前为这次通信“预约”信道,让周围的隐蔽站闭嘴。

三、局域网

1.局域网的分类

2.以太网MAC帧

662N4  收发协数验

MAC 地址与 IP 地址的区别?为什么有了 IP 还需要 MAC?

  • 物理 vs 逻辑:MAC 地址是物理地址/硬件地址,烧录在网卡上,具有全球唯一性,负责相邻节点的寻址;IP 地址是逻辑地址,由网络管理员或 DHCP 分配,负责端到端的寻址和路由选择。

  • 解耦与分层:如果只有 MAC 地址,网络将无法分层路由,全球路由器需要存储几十亿个 MAC 映射表,网络会直接崩溃。IP 地址具有层次结构(网络号+主机号),方便聚合路由。

  • 现实比喻:IP 地址就像你的“收件地址”,决定了包裹宏观上怎么走;MAC 地址就像你的“身份证号”,当包裹到了学校传达室,大爷需要对准你的身份证号把包裹亲手交给你。

3.VLAN虚拟局域网

为什么要用vlan解决广播风暴?怎么解决的?

广播风暴:局域网内任何一点发出的广播帧均会被广播到所有节点

VLAN解决办法:VLAN通过软件配置的方式,将一个物理的局域网(LAN)在逻辑上划分成多个独立的、互不干扰的“虚拟局域网”。VLAN最大的核心作用就是:隔离广播域。

4.无线局域网

为什么 802.11 帧有 4 个 MAC 地址?而普通以太网只有 2 个?

因为普通以太网是端到端的一根网线直连,而无线局域网中存在一个中间人(AP,无线接入点 / 路由器)进行转发。

而广域网点对点链路的绝对统治者是 PPP(Point-to-Point Protocol,点对点协议)。这是面试必考的细节。

四、广域网

1. 为什么 PPP 协议不需要考虑 CSMA/CD 这样的冲突检测机制?

    根本不会发生冲突情况!!!因为 PPP 是面向点对点的协议。这条链路上只有发送方和接收方两个节点,是绝对独享的。既然没有多方争用共享信道,自然就永远不可能发生信号冲突。

2. PPP 协议由哪几部分组成?

  • 一种成帧方法:规定如何封装 IP 数据报,处理透明传输(同步传输用零比特填充,异步传输用字节填充)。
  • LCP(链路控制协议):用于建立、配置和测试数据链路连接(比如商量一下大家都用多大的 MTU)。
  • NCP(网络控制协议):最体现其扩展性的一点。它可以支持不同的网络层协议(如 IPv4、IPv6)。当网络层配置好后,给上层提供服务。

3. 为什么 PPP 协议只支持全双工,且不提供“可靠传输”?

核心考点:问:“PPP 帧里有 CRC 校验。如果接收方发现 CRC 报错了,PPP 会重传吗?”

答:不会,直接丢弃。因此,PPP 只是“不可靠传输”协议,只负责检错不负责纠错。把可靠性交给上层(TCP)去解决。

五、 数据链路层设备:交换机

1. 交换机与集线器的区别?

(参考上一轮对话内容,重点强调:交换机隔离冲突域、独享带宽、基于 MAC 地址定向转发)。

2. 交换机的“自学习”算法

核心逻辑:交换机收到一个帧时:

  • 看源 MAC:把(源 MAC,输入端口)登记到自己的 MAC 表里(这叫自学习)。

  • 看目的 MAC:

    • 如果表中有对应条目:直接从对应端口单播转发出去(如果对应端口就是输入端口,则直接丢弃/过滤)。

    • 如果表中没有对应条目:向除了输入端口以外的所有端口进行广播(泛洪)。

第四章 网络层

一、网络层的功能

(1)异构网络互连 

  •  异构:每个网络的拓扑结构不同、物理层&数据链路层的实现不同,主机类型也不同

(2)路由与转发

(3)拥塞控制

  • 拥塞:网络上的分组数增加但是吞吐量反而下降
  • 开环控制(静态)、闭环控制(动态)

二、网络层提供的两种服务是什么?以及区别?

对比维度数据报服务虚电路服务
连接的建立不需要必须有
目的地址每个分组都有完整的目的地址仅在建立连接阶段使用,之后每个分组使用长度较短的虚电路号
路由选择每个分组独立地进行路由选择和转发属于同一条虚电路的分组按照同一路由转发
分组顺序不保证分组的有序到达保证分组的有序到达
可靠性不保证可靠通信,可靠性由用户主机来保证可靠性由网络保证
对网络故障的适应性出故障的结点丢失分组,其他分组路径选择发生变化时可以正常传输所有经过故障结点的虚电路均不能正常工作
差错处理和流量控制由用户主机进行流量控制,不保证数据报的可靠性可由分组交换网负责,也可由用户主机负责

三、IPV4

首部:固定长度为20B,可变部分0-40B

1.分片问题:为什么要分片?怎么算分片?

当 IP 数据报的长度超过了链路层的 MTU(最大传输单元,以太网通常为 1500 字节) 时,就必须在路由器的IP层进行分片。

三大关键字段:

  • 标识:同一份数据报的所有分片标识相同。
  • 标志:共3位,其中 DF置1表示禁止分片;MF(最低位)置1表示后面还有分片,置0表示这是最后一个分片。
  • 片偏移:每个分片的数据部分在原数据报中的相对起始位置。注意:片偏移的单位是 8 个字节

2.TTL字段代表什么意思?

数据报在网络中可通过的路由器的最大值,每经过一个路由器,路由器就将TTL减1,如果TTL减到0,就直接丢弃分组,并向源主机发送ICMP报文

四、IP地址编址技术与子网划分

1.地址编制

(1)ABCD类地址

    IP地址分类、范围及用途 ?

     A类(1-126)大型网络,B类(128-191)中型网络,C类(192-223)小型局域网,D类(224-239)组播通信,E类(240-255)科研保留;核心作用:唯一标识网络中的主机,区分网络位与主机位。

(2)特殊地址

网络号为0不可以作为目的地址,主机号全1不可以做源地址

(3)CIDR编址

2.子网划分、子网掩码、CIDR原理及优势

  • 子网掩码:区分IP网络位与主机位,实现网段划分;
  • 子网划分:将主网划分为多个小子网,节约IP、方便管理;
  • CIDR取消ABC类分类编址,采用「IP+前缀长度」,支持路由聚合,大幅提升IP地址利用率。

、

3.子网划分的两种方式

变长子网划分&定长子网划分

4.超网(路由聚合)&最长前缀匹配

  • 路由聚合:将多个连续子网合并为一个大的网络前缀,精简路由表、减少路由开销;(几条路由表项转发接口相同,网络前缀也相同)
  • 最长前缀匹配:路由器查表时,选择与目的IP匹配最长的前缀条目转发,保证转发精准性。

5.网络地址转换NAT

私有网段:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16;(只可以分配给局域网内部的节点,局域网内唯一即可)

NAT作用:通过公私网IP地址转换,解决IPv4公网地址资源短缺问题,同时隐藏内网真实主机地址,提升局域网安全性。

NAT路由器

五、网络层协议

1.ARP协议(地址解析协议)

转发到目标网络后,在目标局域网内通过数据链路层的MAC地址以广播方式寻址

  • 作用:在一个局域网内部,可以通过ARP协议查询到一个IP地址对应的MAC地址
  • 原理:广播ARP请求、单播ARP应答;
  • ARP缓存:缓存IP-MAC映射,减少广播、提升转发效率;
  • ARP欺骗:伪造虚假ARP应答,篡改主机ARP缓存,劫持局域网流量。

2.ICMP协议(网际控制报文协议)

  • 功能:用于主机或路由器报告差错情况和提供异常报告。
  • 差错报告报文:终点不可达、时间超过、参数问题、改变路由(重定向)、源点抑制
  • 询问报文:ping
  • Ping 的原理是什么?(利用了 ICMP 的回送请求与回答报文);
  • Traceroute(路由追踪)的原理是什么?(通过故意将 IP 数据报的 TTL(生存时间) 字段从 1 开始逐次加 1 发送,利用路由器 TTL 耗尽时回传 ICMP 超时报文来获取沿途所有路由器的 IP)。

3.DHCP协议

给刚接入网络的主机动态分配IP地址、配置默认网关、子网掩码

 DHCP四次握手、广播原因、续租机制

流程:发现(广播)→提供(广播)→请求(广播)→确认(单播);

全程广播因主机无IP无法单播通信;

续租:租期过半主动向服务器发送续租请求,成功则延长租期,失败则租期结束重新申请。

4.为什么要实行“分层路由”?

互联网上有那么多的路由器,为什么不让所有路由器都跑同一种路由协议,计算一个绝对完美的全球最短路径?

  • 规模爆炸:路由表的条目数和算法占用的内存/CPU会随着路由器数量呈指数级增长,没有任何一台路由器的算力能支撑全球网络的路径计算。

  • 管理自治与隐私:不同的电信运营商(如中国电信、中国联通、AT&T)属于不同的利益实体,他们不希望外界知道自己内部的网络拓扑结构和商业路由策略。

分层解决方案:因此,互联网划分为无数个较小的自治系统

  • AS 内部:使用内部网关协议(IGP),如 OSPF、RIP,追求的是技术层面的快速、高效、最短路径。

  • AS 之间:使用外部网关协议(EGP),如 BGP,追求的是经济、政治和安全层面上的商业策略和可达性。

5.路由选择协议

(1)RIP协议--距离向量算法

  • 基于 Bellman-Ford 算法
  • 属于应用层,使用UDP传送数据
  • def.和相邻的邻居,交换自己的整个路由表
  • 致命缺陷:好消息传播快,坏消息传播慢(路由环路/无穷计数问题)

    能详细解释一下为什么 RIP 会“坏消息传播慢”吗?怎么解决?

      假设 A 到网络 X 只有 1 跳。当网络 X 突然断开时,A 知道断了,但此时相邻的 B 曾向 A 汇报过“我到 X 有 2 跳”。A 会误以为可以通过 B 到达 X,于是把到 X 的距离更新为 3 跳并告诉 B;B 收到后又更新为 4 跳……两台路由器开始盲目地互相欺骗,直到跳数累加到 16(RIP 规定 16 跳为不可达)才会停止。

      解决办法:触发更--只要一变化就更新

(2)OSPF协议--链路状态算法

  • 基于 Dijkstra 最短路径算法
  • 属于网络层,使用IP协议所提供的服务
  • 具有鉴别功能
  • def.用洪泛法(Flooding)向全网所有路由器,交换自己和相邻邻居的链路状态(LSA)
  • 因为是全网洪泛,所以每一台路由器手里都有一张一模一样的、完整的全网拓扑全景图。每台路由器自己在内存里跑 Dijkstra 算法,计算出以自己为根的最短路径树。因为大家看的是同一张高清地图,所以从根本上绝无路由环路问题,且收敛速度极快。
特性RIP(距离向量协议)OSPF(链路状态协议)
核心算法Bellman-FordDijkstra(SPF 最短路径优先)
交换对象仅直连邻居路由器全网路由器(LSA 洪泛同步)
交换内容自身整张路由表仅本地链路状态 LSA(链路客观信息)
全网拓扑视图无,仅依赖邻居路由通告有,每台路由器持有完整全网拓扑地图
路由环路极易产生,需水平分割、毒性逆转等机制防环算法天然无路由环路
收敛速度慢,逐跳传递路由信息快,网络变动全网快速感知同步
度量值 Metric仅跳数,规则简陋Cost 开销值,可自定义带宽、延迟等

(3)BGP协议--外部网关协议

BGP 为什么不能使用距离向量或链路状态算法?

  • 链路状态算法无法承载:链路状态算法需要全网洪泛拓扑。如果是全球规模,光是洪泛链路状态报文(LSA)就能把全球路由器的带宽和内存直接撑爆。

  • 距离向量算法无法避免环路:在如此庞大的规模下,距离向量算法的无穷计数和环路问题根本无法控制。

  • 策略决定一切:最重要的一点,AS 之间的路由不仅仅是一个数学上的最短路径问题。A 国的运营商可能因为政治或商业竞争原因,绝对不允许 B 国的流量流经自己的网络。传统的 DV 或 LS 算法根本无法融入这种复杂的“行政/商业策略”。

BGP 的路径向量算法是如何工作的?

def.BGP 发出的路由信息中,不单单带有一个开销数字,而是带有一个完整的“自治系统路径序列(AS-PATH)”。

  • 天生免疫环路:当一个 AS 收到一条 BGP 路由,发现里面的 AS-PATH 列表里竟然包含了自己本身的 AS 号,它就知道这条路由在区域里绕了一圈又回来了,于是直接丢弃。

  • 便于策略过滤:管理员可以非常轻松地写一条规则:“只要 AS-PATH 里包含 AS200,就直接拒绝这条路径”,完美实现了策略路由。

OSPF 为什么要划分“区域?

  • 因为如果网络规模太大,全网拓扑极其复杂,Dijkstra 算法的计算复杂度是O(n^{2})一旦某个偏远角落的网线抖动了一下,全网所有路由器都要跟着重新跑一遍 Dijkstra 算法,CPU 会不堪重负。
  • 通过划分区域,将洪泛的范围限制在单一区域内部。区域之间通过区域边界路由器(ABR)聚合路由信息再进行传递。这样,一个区域内部的局部震荡,绝不会波及到其他区域,极大地提高了协议的稳定性和可扩展性。

第五章 传输层

一、运输层和网络层有什么区别?

  • 网络层:提供主机到主机的逻辑通信。它只把分组从一台机器送到另一台机器,并不关心是谁在接收。

  • 运输层:提供应用进程到应用进程的端到端逻辑通信。

二、UDP和TCP对比

特性UDP(用户数据报协议)TCP(传输控制协议)
连接性无连接面向连接(需三次握手)
可靠性不可靠交付(尽力而为,无确认,会丢包)可靠交付(无差错、不丢失、不重复、按序)
传输形式

面向报文,每次传输一个完整报文

面向字节流(把数据看成无结构的字节流,可拆分合并)
拥塞 / 流量控制无(按需发送,不考虑网络状况)有完整的流量控制与拥塞控制机制
首部开销极小(仅 8 字节)较大(至少 20 字节)
通信对等性支持单播、多播、广播仅支持单播(点对点连接)
典型应用视频直播、语音通话、DNS、QUIC、DHCP网页浏览 (HTTP)、文件传输 (FTP)、邮件 (SMTP)

三、TCP

1. 什么是 TCP 的 SYN Flood(SYN洪水攻击)?怎么防范?

  • def.攻击者伪造大量不存在的 IP 地址向服务器发送三次握手的第一步(SYN 包)。服务器收到后回传 SYN+ACK 并开辟缓存等待第三步确认,但攻击者永远不回应。服务器的大量半连接队列(Syn Queue)会被占满,导致正常用户无法连接。
  • SYN Cookies 技术。服务器在收到 SYN 时不开辟内存,而是根据时间、四元组等信息算出一个特殊的哈希值作为初始序号(Cookie)发回去。只有当对方真的回传合法的第三步 ACK 时,服务器才通过计算验证并为其分配内存。

2.为什么现在的 HTTP/3 抛弃了 TCP,转而基于 UDP(QUIC协议)实现?

  • 三次握手的延迟天花板:TCP 必须建立连接,再加上 TLS 加密,导致首包发送前有多个 RTT 的延迟。而基于 UDP 的 QUIC 协议可以做到 0-RTT 闪电建连。
  • 队头阻塞问题:TCP 是基于单连接字节流的。如果在一个连接里并发传多个流(比如网页里的多张图片),只要其中一个流丢了一个包,TCP 就会卡住整条连接上的所有流,后面的流即使完整到达了也不能交付。而 UDP 是面向报文且互不干扰的,QUIC 在 UDP 之上实现了多路复用且各流独立,彻底解决了 TCP 的队头阻塞。

四、TCP的连接

1.建立连接(三次握手)

TCP提供面向连接的服务,在传送数据前必须建立连接,TCP连接是通过三次握手建立的。

三次握手的过程:

  • 最开始,客户端和服务端都处于CLOSE状态,服务端监听客户端的请求,进入LISTEN状态
  • 客户端端发送连接请求,第一次握手 (SYN=1, seq=x),发送完毕后,客户端就进入 SYN_SENT(同步已发送) 状态
  • 服务端确认连接,第二次握手 (SYN=1, ACK=1, seq=y, ACKnum=x+1), 发送完毕后,服务器端就进入 SYN_RCV (同步已收到)状态。
  • 客户端收到服务端的确认之后,再次向服务端确认,这就是第三次握手 (ACK=1,ACKnum=y+1),发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态。

2.为什么建立连接需要“三次握手”,两次行不行?

防止已经失效的连接请求报文段突然又传送到了服务端,从而产生错误

客户发了第一个请求 A,在网络中堵塞了延误到连接释放才到达服务器端服务器端收到A向客户端发送确认报文,连接建立。但此时客户端其实根本不需要通信,服务端就会一直开着连接空等,白白浪费系统资源。

3.三次握手中每一次没收到报文会发生什么情况?

  • 第一次握手服务端未收到SYN报文服务端不会进行任何的动作,而客户端由于一段时间内没有收到服务端发来的确认报文,等待一段时间后会重新发送SYN报文,如果仍然没有回应,会重复这个过程,直到发送次数超过最大重传次数限制,就会返回连接建立失败。
  • 第二次握手客户端未收到服务端响应的ACK报文客户端会继续重传,直到次数限制;而服务端此时会阻塞在accept()处,等待客户端发送ACK报文
  • 第三次握手服务端为收到客户端发送过来的ACK报文服务端同样会采用类似客户端的超时重传机制,如果重试次数超过限制,则accept()调用返回-1,服务端建立连接失败;而此时客户端认为自己已经建立连接成功,因此开始向服务端发送数据,但是服务端的accept()系统调用已经返回,此时不在监听状态,因此服务端接收到客户端发送来的数据时会发送RST报文给客户端,消除客户端单方面建立连接的状态。

4.第二次握手传回了 ACK,为什么还要传回 SYN

ACK是为了告诉客户端传来的数据已经接收无误。

而传回SYN是为了告诉客户端,服务端响应的确实是客户端发送的报文

5.第3次握手可以携带数据吗

第3次握手是可以携带数据的。

此时客户端已经处于ESTABLISHED状态。对于客户端来说,它已经建立连接成功,并且确认服务端的接收和发送能力是正常的。

第一次握手不能携带数据是出于安全的考虑,因为如果允许携带数据,攻击者每次在SYN报文中携带大量数据,就会导致服务端消耗更多的时间和空间去处理这些报文,会造成CPU和内存的消耗。

6.释放连接(四次挥手)

  • 数据传输结束之后,通信双方都可以主动发起断开连接请求,这里假定客户端发起
  • 客户端发送释放连接报文,第一次挥手 (FIN=1,seq=u),发送完毕后,客户端进入 FIN_WAIT_1 状态。
  • 服务端发送确认报文,第二次挥手 (ACK=1,ack=u+1,seq =v),发送完毕后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态。
  • 服务端发送释放连接报文,第三次挥手 (FIN=1,ACK1,seq=w,ack=u+1),发送完毕后,服务器端进入 LAST_ACK状态,等待来自客户端的最后一个 ACK。
  • 客户端发送确认报文,第四次挥手 (ACK=1,seq=u+1,ack=w+1),客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT 状态,等待了某个固定时间(两个最大段生命周期,2MSL)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。

7.TCP 挥手为什么需要四次呢?

  • 关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。
  • 服务端收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。

8.TCP 四次挥手过程中,为什么需要等待 2MSL, 才进入 CLOSED 关闭状态?

  • (1)保证第四次挥手的 ACK 报文能够到达服务端。 如果客户端发完最后一个 ACK 就直接闪退,而这个 ACK 在路上丢了,服务端就会因为收不到确认而不断重传 FIN。此时客户端已经死机,服务端将永远等不到回应而无法正常关闭。等待 2MSL 可以确保如果服务端重传 FIN,客户端还能在超时范围内收到并重新补发 ACK。

  • (2)防止“已失效的连接请求报文段”出现在下一个新连接中。 等待 2MSL 可以让本连接持续时间内产生的所有报文段都在网络中消失,确保下一个新连接不会收到上一个连接的残留死包。

MSL 是报⽂最⼤⽣存时间,它是任何报⽂在⽹络上存在的最⻓时间,超过这个时间报⽂将被丢弃。TIME_WAIT 等待 2 倍的 MSL,⽹络中可能存在来⾃发送⽅的数据包,当这些发送⽅的数据包被接收⽅处理后⼜会向对⽅发送响应,所以⼀来⼀回需要等待 2 倍的时间。

9.保活计时器有什么用?

客户已主动与服务器建立了 TCP 连接。但后来客户端的主机突然发生故障。显然,服务器以后就不能再收到客户端发来的数据。因此,应当有措施使服务器不要再白白等待下去。这就需要使用保活计时器了。

10.CLOSE-WAIT 和 TIME-WAIT 的状态和意义?

而CLOSE-WAIT状态就是为了保证服务端在关闭连接之前将待发送的数据处理完。

TIME-WAIT:

  • 防⽌旧连接的数据包如果客户端收到服务端的FIN报文之后立即关闭连接,但是此时服务端对应的端口并没有关闭,如果客户端在相同端口建立新的连接,可能会导致新连接收到旧连接残留的数据包,导致不可预料的异常发生。
  • 保证连接正确关闭假设客户端最后一次发送的ACK包在传输的时候丢失了,由于TCP协议的超时重传机制,服务端将重发FIN报文,如果客户端没有维持TIME-WAIT状态而直接关闭的话,当收到服务端重新发送的FIN包时,客户端就会使用RST包来响应服务端,导致服务端以为有错误发生,然而实际关闭连接过程是正常的。

11.TIME_WAIT 状态过多会导致什么问题?怎么解决?

  • 第⼀是内存资源占⽤;
  • 第⼆是对端⼝资源的占⽤,⼀个 TCP 连接⾄少消耗⼀个本地端⼝;
  • 使用长连接的方式来减少TCP的连接和断开

五、TCP的可靠性

TCP主要提供了检验和、序列号/确认应答、超时重传、最大消息长度、滑动窗口控制等方法实现了可靠性传输。

1.校验和

发送方在计算 TCP 首部和数据时,加上一个伪首部,通过二进制反码求和算法算出一个校验和并填入首部。

2.序号与面向字节流

    TCP 是面向字节流的。它把应用层交下来的大块数据看成一连串无结构的字节流,并为每一个字节都编上一个唯一的序号。TCP 报文段首部里的 seq 代表的是该报文段所发送的数据的第一个字节的序号。(1)保证不乱序(2)去重

3.确认应答机制

   TCP 采用累计确认机制。接收方回传的 ack 序号,代表期望收到发送方下一个报文段的第一个字节的序号。

4.超时重传机制

   超时重传:发送方发完数据后启动一个定时器。如果超过了 RTO(超时重传时间) 仍未收到确认,就认为包丢了,触发重传。

   快速重传(3个冗余ACK) 发送方只要收到 3个完全相同的重复 ACK,不等定时器超时,立刻判定第 2 包丢失,触发“快重传”。

5.流量控制与拥塞控制

  • 如果发送方发得太快,把接收方的缓冲区撑爆了,或者把中间路由器的缓冲区撑爆了,都会引发惨烈的丢包。

  • TCP 通过滑动窗口和拥塞窗口解决

六、TCP的流量控制与拥塞控制

1.区分流量控制与拥塞控制

  • 流量控制:端到端的问题,因为接收方来不及接受,所以通过滑动窗口限制发送方的速度
  • 拥塞控制:全局性的问题。因为整个网络太堵了(路由器丢包),发送方通过拥塞窗口限制自己发送速度

2.TCP 拥塞控制的四大算法

(1)慢开始:cwnd从 1 开始,每经过一个往返时间 RTT,指数级增长

(2)拥塞避免:当 cwnd=ssthresh 时,停止指数增长,改为线性加性增长(每经过一个 RTT, cwnd = cwnd + 1)

(3)网络拥塞处理(老版触发:超时 Timeout):

  • 一旦发生超时(代表严重拥塞):立即把旧的 ssthresh砍成当前cwnd的一半;然后把 cwnd强行清零降回 1,重新开始慢开始。

(4)快重传与快恢复:

  • 快重传:接收方收到乱序包时,必须立刻重复发送前一个合法包的确认。发送方只要一连收到 3个重复的确认(ACK),就知道某个包丢了,不等超时立刻重传该包。

  • 快恢复:既然能连收3个 ACK,说明网络其实没瘫痪(还能传小包)。因此不执行极端的“清零”操作,而是把 ssthresh减半,并将cwnd设为减半后的ssthresh宽度,直接开始执行拥塞避免(线性增长)。

第六章 应用层

一、网络应用模型(C/S与P2P)

1.C/S模型

C/S模型工作流程:
(1)服务器长期运行,等待客户发来请求

(2)客户主动向服务器发出服务请求。可见,客户必须提前知道服务器的地址(IP:端口)

(3)服务器被动处理客户请求,并将处理结果返回给客户。可见,服务器不用提前知道客户端的
地址(IP:端口)

C/S模型特点:
· 客户、服务器地位不平等,服务器处于中心
· 客户进程之间不直接通信

  • 优点:便于集中管理(数据资源、带宽资源等)
  • 缺点:(1) 如果服务器损坏,影响全局(2)处于中心位置的服务器负载大,服务器性能决定了整个系统的性能

2.P2P模型

P2P模型的特点:
(1)是“去中心化的”,主机之间地位平等
(2)主机之间直接通信

  • 优点:单个节点损坏不影响全局;各节点可以分摊负载 ;
  • 缺点: 一个主机被服务的同时,也要为其他主机服务,主机负载较大;可能导致网络数据流量大,网络拥塞

二、DNS域名系统

1.详细叙述 DNS 的查询解析过程(递归查询 vs 迭代查询)

当你在浏览器输入 www.baidu.com 时,解析过程如下:

主机到本地域名服务器:通常采用递归查询。主机会先查本地缓存,若没有则向本地域名服务器求助。本地域名服务器会全权负责帮主机查到结果。

本地域名服务器向外查询:通常采用迭代查询(为了减轻根服务器的压力)。

  • 本地域名服务器先问根域名服务器(.),根服务器回应:“我不知道,但你可以去问顶级域名服务器(.com)”。

  • 本地域名服务器再去问顶级域名服务器(.com),顶级服务器回应:“我不知道,但你可以去问权限域名服务器(baidu.com)”。

  • 本地域名服务器最后去问权限域名服务器(baidu.com),得到 www.baidu.com 的 IP 地址,并缓存起来,最后返回给主机。

2.DNS 为什么同时使用 UDP 和 TCP?分别在什么场景下使用?

(1)使用 UDP(默认场景):普通的域名查询和响应报文都很小,使用 UDP 可以避免 TCP 三次握手的时延和高开销,解析速度极快。

(2)使用 TCP(特定场景):

  1. 区域传输:主域名服务器向辅助域名服务器同步数据库时,数据量极大且必须保证绝对可靠,此时必须使用 TCP。

  2. 报文超长:当 UDP 报文超过 512 字节时,DNS 会将报文截断。客户端收到截断标志后,会切换为 TCP 端口 53 重新发起完整的查询。

三、HTTP协议家族

1. HTTP 1.0、1.1、2.0、3.0 的演进与区别?

(1)HTTP/1.0

  • 默认使用短连接,每次请求都需要建立一个 TCP 连接。它可以设置

(2)HTTP/1.1

  • 引入了持久连接,即 TCP 连接默认不关闭,可以被多个请求复用。
  • 分块传输编码,即服务端每产生一块数据,就发送一块,用” 流模式” 取代” 缓存模式”。
  • 管道机制,即在同一个 TCP 连接里面,客户端可以同时发送多个请求。

(3)HTTP/2.0

  • 二进制协议,1.1 版本的头信息是文本(ASCII 编码),数据体可以是文本或者二进制;2.0 中,头信息和数据体都是二进制。
  • 完全多路复用,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应。
  • 报头压缩,HTTP 协议不带有状态,每次请求都必须附上所有信息。Http/2.0 引入了头信息压缩机制,使用 gzip 或 compress 压缩后再发送。
  • 服务端推送,允许服务器未经请求,主动向客户端发送资源。

(4)HTTP/3

HTTP/3主要有两大变化,传输层基于UDP、使用QUIC保证UDP可靠性。

HTTP/3主要有这些特点:

  • 使用UDP作为传输层进行通信
  • 在UDP的基础上QUIC协议保证了HTTP/3的安全性,在传输的过程中就完成了TLS加密握手
  • HTTPS 要建⽴⼀个连接,要花费 6 次交互,先是建⽴三次握⼿,然后是 TLS/1.3 的三次握⼿。QUIC 直接把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,减少了交互次数。
  • QUIC 有⾃⼰的⼀套机制可以保证传输的可靠性的。当某个流发⽣丢包时,只会阻塞这个流,其他流不会受到影响。

2.HTTP 请求的过程与原理?

  • 每个服务器都有一个进程,它不断监听TCP的端口80,以便发现是否有浏览器向它发出连接建立请求
  • 监听到连接请求,就会建立TCP连接
  • 浏览器向服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应
  • 最后,释放TCP连接

3.HTTP 与 HTTPS 的区别?HTTPS 的加密流程是什么?

HTTP 是明文传输,不安全,默认端口 80;

HTTPS 在 HTTP 与 TCP 之间加了 SSL/TLS 加密层,默认端口 443,具有防篡改、防窃听、身份验证的功能。

HTTPS 核心加密流程(混合加密机制):

  1. 非对称加密建连:客户端向服务器索要 CA 数字证书,获取服务器的公钥。

  2. 验证证书:客户端验证证书合法性,然后本地生成一个随机数作为对称密钥(会话密钥)。

  3. 密钥传输:客户端用服务器的公钥加密这个对称密钥,发给服务器。服务器用自己的私钥解密,得到对称密钥。

  4. 对称加密通信:此后双方所有的网页内容,全部使用这个对称密钥进行极速加密传输(因为非对称加密太慢,混合加密兼顾了安全与速度)

4.如何理解 HTTP 协议是无状态的?

这个无状态的的状态值的是什么?是客户端的状态,所以字面意思,就是HTTP协议中服务端不会保存客户端的任何信息。

比如当浏览器第一次发送请求给服务器时,服务器响应了;如果同个浏览器发起第二次请求给服务器时,它还是会响应,但是呢,服务器不知道你就是刚才的那个浏览器。

主要有两个办法,Session和Cookie来记录状态

5.Cookie 与 Session 的区别

  • Cookie:服务器发给客户端并存储在客户端浏览器的一小段文本。下次请求时客户端自动带上。安全性较低,易被窃取。

  • Session:数据存储在服务器端。服务器通过 Cookie 发给客户端一个 SessionID。客户端带着 ID 来认领自己的数据。安全性高,但开销大。

四、电子邮件协议

电子邮件协议:SMTP vs POP3 vs IMAP

  • SMTP(简单邮件传输协议):面向 TCP 端口 25,是萨松协议,用于客户端发送邮件到服务器,或者服务器之间互相转发邮件。

  • POP3(邮局协议版本3):是接受协议,用于用户从服务器下载邮件。缺点是默认下载后在服务器删除,且不支持状态同步。

  • IMAP(网际报文存取协议):现代主流。用户在客户端的操作(已读、删除)会实时同步回服务器,实现多端同步。

五、FTP文件传输协议

FTP 最大的特点是将“控制命令”与“数据传输”完全分离,使用两个独立的 TCP 连接。

1. 两个连接与各自的端口号

(1)控制连接:

  • 端口号:服务器端默认使用 TCP 端口 21。

  • 职责:负责在整个会话期间传输控制命令、用户登录密码、改变目录等。这个连接在用户整个登录期间保持打开。

(2)数据连接

  • 端口号:服务器端默认使用 TCP 端口 20(在主动模式下)。

  • 职责:专门用于传输文件内容、列出目录列表等。这个连接是动态建立、用完即断的。每次传输一个文件,都会建立一个新的数据连接,传输完毕后立刻释放。

2.主动模式与被动模式

(1)主动模式(PORT 模式)

  • 工作机制:

    1. 客户端随机打开一个端口,向服务器的 21 端口发起控制连接。

    2. 当需要传输数据时,客户端再打开一个端口,并通过控制连接用 PORT 命令告诉服务器:“我的数据端口是xx,你来连我吧”。

    3. 服务器收到后,使用自己的 20 端口去连接客户端的xx 端口,建立数据连接。

  • 致命痛点:因为是服务器主动去连客户端,如果客户端主机处于局域网内、有防火墙(Firewall)或者经过了 NAT 转换,防火墙通常会拒绝这种来自外网的自发连接,导致数据传输失败。

(2)被动模式—— 现代主流

  • 工作机制:

    1. 控制连接建立后,当需要传输数据时,客户端向服务器发送 PASV 命令,意思是:“我这边有防火墙,你选个端口让我来连你吧”。

    2. 服务器同意后,在本地打开一个随机的高位端口(如 M),并通过控制连接告诉客户端:“你来连我的M端口”。

    3. 客户端主动发起连接,连上服务器的 M端口,建立数据连接。

  • 如何解决痛点:由于数据连接也是由客户端主动发起的,防火墙和 NAT 默认允许内部向外发起连接,因此能完美穿透防火墙。

  • 注意点:在被动模式下,服务器的 20 端口就处于闲置状态,数据通道走的是服务器的动态随机端口。

3.FTP 和 HTTP 都是用来传输文件的,它们在“状态保持”上有什么本质区别?

  • HTTP 是无状态的:服务器不维护客户端的历史通信状态。每一次请求都是独立的,需要靠后期的 Cookie/Session 来在应用层模拟状态。

  • FTP 是有状态的:服务器在整个会话期间,必须在内存中实时维护用户的状态信息。这虽然方便了文件管理,但也极大地限制了服务器的并发扩展能力,因为维护状态会消耗大量的系统资源。

4.为什么 FTP 要设计成控制与数据分离的双通道,而不是像 HTTP 那样用单通道?

  • 这属于经典的“带外信令”设计。

  • 而双通道设计中,控制连接一直保持空闲且畅通。即使数据连接正在满载传输大文件,用户发出的“终止/中断”控制命令也能通过 21 端口瞬间到达服务器,服务器收到后立刻强行关闭 20 端口的数据连接,从而实现了极其优异的控制实时性。

更多推荐