计算机网络
概述
- ISP:互联网服务提供商
- OSI参考模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
- P2P:对等通信网络
- 传输速率:每秒传输多少比特(bit/s,b/s)
- 带宽 :某信道传输的最大速度
- 网络分类(分布范围):个域网,局域网,城域网,广域网
- 网络分类(使用者):公用网,专用网
- 网络分类(交换方式):电路交换,报文交换,分组交换
- 网络分类(拓扑结构):星型,总线型,环型,树型,网状型
- 网络分类(传输介质):双绞线,同轴电缆,光纤,无线
- 网络分类(用途):教育,科研,商业,企业,政府
物理层
介质
有线传输
- 双绞线(Twisted Pair)
- RJ45:网线的水晶头
- RJ11:电话线的水晶头
- STP:有屏蔽双绞线,用铝箔包裹在外部,用于噪声干扰较多的地方
- UTP:非屏蔽双绞线,用于家庭办公室
- 双绞线类别
| 类别 | 种类 | 传输速率 | 传输频率 | 适用范围 |
|---|---|---|---|---|
| 3 类 | UTP | 10 Mbps | 16 MHz | 10 BASE-T 以太网 |
| 4 类 | UTP | 16 Mbps | 20 MHz | 10 BASE-T 令牌环网 |
| 5 类 | UTP | 100 Mbps | 100 MHz | 100 BASE-T |
| 超 5 类 | UTP | 1 Gbps | 125 MHz | 100/1000 BASE-T |
| 6 类 | UTP | > 1.5 Gbps | 250 MHz | 1000/10GBASE-T |
| 7 类 | UTP/STP | 10 Gbps | 600 MHz | 10 GBASE-T |
- 光纤(Fiber)
- 封套(塑料) -> 包套(玻璃)-> 芯(玻璃)
- 光纤传输系统:光源,传输介质,检测器
- 单模光纤:直径小于10um,通信衰减小,容量大,用于长距离传输,价格贵
- 多模光纤:直径大于50um ………
- 同轴电缆(coaxial cable)
- 比非屏蔽双绞线有更好的屏蔽特性和更大的带宽,已被光纤取代,目前应用于有线电视和城域网
- 保护塑料外套 -> 编制外层导体 -> 绝缘材料 -> 铜芯
无线传输
- 无线电波:较强的穿透能力,实现长距离传输,手机通信,无线局域网,广播
- 微波:比无线电波频率更高的电测波,应用卫星通信
- 红外线:用于近距离遥控
- 激光:点对点的通讯技术,受天气影响
传输标准命名规则
1 | 1000 BASE - T X |
传输速率 调制方式 传输媒介 编码体系
- 调制方式
- BASE:基带信号,一根线缆只传输一个信号
- BROAD:宽频信号,一根线缆传输多个信号
- 编码
- 归零编码:上凸是1,下凹是0,中间要归零
- 不归零编码:上是1,下是0
- 反向不归零编码:碰到1就复制,0反转
- 曼彻斯特编码:低到高是0
- 差分曼彻斯特编码:碰到0复制,1反转
通信基础
- 波特率与比特率:
C = B log2N - 奈奎斯特:
B = 2H,C = 2H log2N - 香农:
C = H log2(1 + S/N)
数字调制
- 码元:数字调制过程中承载信息的基本信号单位,相当于一个箱子,放几个二进制位都行
- 波特率 B:单位时间传输码元的个数(Baud波特),信号传输速率,关注物理信号变化,底层通信速率
- 比特率 C:单位时间内传输的比特个数(bit比特),数据传输速率,关注实际传输数据量,有用信息速率
- 波特率比特率的关系:C = B log2N(N是码元的离散状态数,一个码元装一个比特位有两种状态,一个码元装两个比特位有11、10、01、00四个状态)
- 调制方法:调幅,调频,调相
- QAM:正交振幅调制,频率相同前提下,调幅和调相结合
- C = B log2MN(M相位数,N振幅数)
奈奎斯特定理
- 无噪声下码元速率极限值 B 与信道带宽 H(信道传输极限频率的差值Hz) 关系:B = 2 H
- 无噪声信道传输速率:C = 2H log2N
香农公式
- 一条带宽为H,有噪声信道最大传输速率:C = H log2(1 + S/N) (S:信号功率,N噪声功率,S/N:信噪比)
信噪比与分贝
- dB = 10 lg (S/N)
电路交换
两站点建立一条直通的独占的物理通道
步骤:建立连接、传送数据、释放连接
优点
- 通信延时小
- 数据有序传输
- 安全性好
缺点
- 建立时间长
- 线路独占
- 利用率低
- 灵活性差
报文交换
优点
- 线路利用率高
- 不用建立连接
- 可以动态分配线路
- 提高线路可靠性和利用率
缺点
- 存储转发,实时性差
- 对报文大小限制弱,存储空间大
- 发生错误重传时,整个报文都要重传
分组交换
优点
- 存储空间开销小
- 传输延迟低
- 无效传输少
缺点
- 可能乱序
- 各分组可能走不同路径
- 通信效率受网络状况影响
信道复用
信道复用是指在同一条物理信道上同时传输多路信号的技术,目的是提高信道利用率,避免为每个通信单独铺设线路
- 频分复用
- 做法:将带宽划分为多个频段,每个信号占据不同频段进行传输
- 例子:收音机、电视机
- 时分复用
- 做法:多个信号按时间片轮流占用信道
- 例子:对讲机
- 码分复用
- 做法:用不同码序列区分不同用户
- 所有用户可以在同一时间、同一频率上传输
- 码片:
1 bit可拆成64或128个码片 - 任意两个节点的码片序列正交,归一化内积为
0 - 若
A、B、C同时传输,最终码片为A + B + C
- 波分复用
- 做法:在光纤中用不同波长的光同时传输
- 理解:频分复用在光纤中的应用
数据链路层
核心任务:在物理层提供的比特流基础上,提供可靠的数据传输
- 发送数据:封装网络层的数据报
- 接收数据:解析物理层的比特流
帧(Frame)
- 帧头:地址信息(源地址,目的地址),帧类型,控制信息
- 数据:来自网络层的数据报文(通常是IP数据报)
- 帧尾:通常包含校验和用于检测数据传输错误
| 帧头 | 数据报(00111010100011101) | 帧尾 |
|---|---|---|
封装成帧
- 字节计数法 (开头记录携带这几个字节)
- 优点:简单易实现,占用的额外开销少
- 缺点:如果计数字段的数据被传输错误,会导致数据同步错误
| 3 | 2 | |||||
|---|---|---|---|---|---|---|
- 字符填充法(用特殊字符,如SOH代表帧起始,EOT代表结束,并在数据部分避免特殊字符冲突)
- 如果数据报中有SOH,EOT,用\转义字符
- 优点:解决了字节计数法的同步问题,适用于字符流
- 缺点:增加了额外的转义字符,占用带宽
| SOH | 数据报(00111010100011101) | EOT |
|---|---|---|
- 比特填充法(01111110固定作为开头和结尾,数据报中只要发现连续的5个1就在后面填充一个0)
- 优点:适用于任何比特流,不限于字符编码(比字符填充通用)
- 缺点:增加传输开销
| 01111110 | 数据报(00111010100011101) | 01111110 |
|---|---|---|
- 物理层编码法(数据报封装成帧后,直接在物理层用信号的变化表示开头和结尾)
- 优点:不增加额外开销
- 缺点:依赖物理层编码格式,不适用所有链路层协议
错误检测
数据传输的过程中,由于各种因素(干扰,噪声,天气)导致比特错误(比特翻转),数据链路层提供错误检测机制,保证数据传输的可靠性,使接收端能检测出错误并采取措施(请求重传等)
奇偶校验(Parity Check)
奇校验或偶校验是双方事先约定的。
判断依据是数据中 1 的个数的奇偶性。
1的个数 + 最后一位校验位 = 奇偶判断结果如果奇校验里有偶数个
1,增加校验位1如果奇校验里有奇数个
1,增加校验位0优点:实现简单,开销小
缺点:检测能力弱,偶数个比特错误无法检测
检验和(Checksum)
常用的错误检测方法,广泛用于TCP/IP协议,操作方法:
- 发送方将数据分成若干段(通常16位一组)
- 将这些数据段进行二进制求和
- 若求和过程中产生进位,将进位部分回卷相加(循环进位)
- 最后将求和结果取反,作为校验和附加在数据后发送
- 接收方验证后如果结果全是1证明无误
- 优点:能检测更多的错误,简单高效
- 缺点:不能检测所有错误(例如数据中部分比特位置翻转后总和仍相同)
循环冗余校验(CRC)
- 将数据视为一个二进制多项式
- 使用特定的生成多项式进行模2除法
- 得到的余数作为CRC校验码附加在数据后面
- 接收方重新计算并比对,判断数据是否出错
| 检测方法 | 附加开销 | 实现难度 | 错误检测能力 | 常用协议 |
|---|---|---|---|---|
| 奇偶校验 | 1b | 简单 | 弱 | 串行通信 |
| 校验和 | 16b | 简单 | 中等 | TCP/UDP |
| CRC校验 | 16b或32b | 中等 | 非常强 | Ethernet, Wi-Fi,HDLC |
流量控制与可靠传输
同样是流量控制与可靠传输:
- 传输层关注端到端
- 数据链路层关注点到点
停止-等待协议
发送方发送Frame,接收方返回ACK确认
如果发送或返回数据丢失,会进行超时重传。
怎么确认是超时重传而不是新一帧:
- 每次发送的帧和返回的ACK都有编号
- 返回的ACK带上一个期待值,下次发送的帧需要携带此期待值
1 | 发送方(A) 接收方(B) |
信道利用率:
数据帧发送时间 / 发送周期时间
停止-等待协议的信道利用率低。
信道大部分时间在空转,所以后面会引出滑动窗口。
滑动窗口
发送窗口:允许发送未确认的数据帧序号范围(发送窗口会根据电脑性能分配窗口长度,若最左边的帧收到ACK,窗口向右移动一帧,以此循环)
接收窗口:接收方当前愿意接受/缓存的数据帧序号范围(和发送窗口相似,GBN只有一帧大小的窗口,SR与发送窗口相等)
窗口滑动:左边界右移,释放额度
接收窗口协议:
- 后退N帧协议(GBN):接收方只按顺序接受,一旦丢失一帧,后面全丢弃直接不接收,发送方需要把后面的全部重传,发送方有一个计时器,记录最早发送出去但还没有ACK的数据帧,如果有的ACK丢失,检测有没有比这个序号更大的ACK成功,如果有,就当他也传输成功(只不过是ACK丢失,数据是正确传输的)
- 选择重传协议(SR):接收方允许乱序接受并缓存,只重传丢的那几帧(对于每一帧都有一个计时器,超时的会单独重传)
介质访问控制子层(MAC)
属于数据链路层的一个子层,负责在共享介质上协调多个节点的传输,确保各节点按照一定规则访问信道
网络链路
- 点对点链路:单个发送方和单个接收方
- 广播链路:多个发送方和接收方连接到同一条共享广播信道
信道分配
1 | |--频分复用(FDM) |
随机访问: 谁想发消息就发,只是要遵循对应协议的规则
ALOHA 协议
发送机制:
- 节点一旦有数据就发送,无需监听信道状态
- 不关心其他节点是否发送,盲发
冲突处理:
- 节点会随即等待一段时间再次尝试发送
理论最大信道利用率:
- 18.4%
CSMA 协议
| 协议类型 | 描述 |
|---|---|
| CSMA(1-persistent) | 信道被占用就持续监听,空闲立刻发 |
| CSMA(Non-persistent) | 被占用就随机等待一段时间后重试 |
| CSMA(p-persistent) | 空闲后以概率p发送(根据网络负载动态调整p) |
CSMA/CD 协议
有线传输的网络协议
节点在发送前和发送中持续监听,一旦冲突立刻停止并等待随机时间再试一次
是以太网经典共享介质环境下的核心协议
传播延迟:两点传输时长
争用期:发送点多久才能知道发生冲突,为两倍传播延迟
最小帧长目的:数据帧发送的最短时间>=争用期,如果数据帧过小,那碰撞发生期间监听就停止了,无法检测冲突
最小帧长 = 争用期 * 传输速率
退避时间:= 争用期 * 随机数k(0~2n-1, n是重传次数,n最大为10,重传次数最多为16)
CSMA/CA 协议
无线局域网(WLAN):
- WIFI:IEEE 802.11 无线局域网
- BSS:基本服务集,一个BSS包含一个或多个无线站点和一个中央基站(AP)
(在虚拟局域网中为了区分不同的BSS,每一个BSS会被赋予一个BSSID,通常为AP的MAC地址) - IBSS:自组织网络,没有AP
WIFI帧格式:
| 帧控制 | 持续期 | 地址1 | 地址2 | 地址3 | 序号控制 | 地址4 | 数据 | 帧校验序列 |
|---|---|---|---|---|---|---|---|---|
| 2 | 2 | 6B | 6B | 6 | 2 | 6 | 0~2312B | 4B |
LAN(有线)与WLAN:
- 有限局域网中,一个站发出一帧时,其他站都能接收到这个帧(能接收到不代表接收)
- 无线局域网中,无线电传输范围有限,无法接收来自所有其他站的帧,接收到的信号可能微弱,因此无线信道中进行冲突检测非常困难,硬件成本高
隐藏站问题:
场景:
- 节点A、C 都能与 AP 通信,但A与C之间距离太远(或有障碍物),互相听不到对方的信号。
- 当A向AP发送数据时,C以为信道空闲,也向AP发送数据。
- 结果:AP处发生信号碰撞,两个帧都损坏。
关键:冲突发生在接收端(AP),而发送端(A、C)互相不知。
暴露站问题:
场景:
- 节点B在A与AP通信的覆盖范围内,但B想要与另一个节点C(不在A的范围内)通信。
- B听到A正在向AP发送数据(载波繁忙),于是B等待,不敢发送。
- 但实际上B向C发送数据不会干扰AP接收A的数据(因为C离AP远)。
- 结果:不必要的等待,浪费信道容量。
关键:载波监听导致过度保守,限制了并行传输。
带碰撞避免的CSMA:
- 节点在发送数据之前监听无线信道,信号强度超过一定阈值则认为当前有其他节点在该信道上发送数据,需要随机等待一段时间再次监听
- 如果检测到信道空闲,需要等待一个帧间间隔(IFS)之后再发数据,在等待的时候保持监听
帧间间隔:
- DIFS分布式帧间间隔
- 用于普通数据帧之间的间隔
- 节点发送数据帧之前需要监听信道是否空闲,若空闲则等待DIFS时间再发送
- SIFS短帧间间隔
- 用于控制帧(如ACK,RTS/CTS等)之间的间隔
- SIFS是最短的间隔,用于控制信道使用的帧
- EIFS扩展式帧间间隔
- 主要用于错误帧,例如接收到错误数据的节点在发送ACK前需要等待更长时间
信道预约:
发送数据之前,发送方A首先广播一个 RTS帧,能被其范围内所有站点帧听到,A要给接收方B发送数据,收到了之后,B会给B的范围内所有帧发送CTS,发送后其他帧保持沉默,相当于官宣(这就是为什么人多的地方网卡)
虽然说这样能有效预防碰撞,如果多个发送方同时RTS帧,发生冲突从而丢失数据(这就是为什么发消息网卡发不出去,就会变成红色感叹号,让你重新发送)
| ALOHA 协议 | CSMA 协议 | CSMA/CD 协议 | CSMA/CA 协议 | |
|---|---|---|---|---|
| 简介 | 想发就发 | 没人发再发 | 边听边发 | 避免冲突 |
| 监听信道 | ❌ | ✅ | ✅ | ✅ |
| 检测冲突 | ❌ | ❌ | ✅ | 避免冲突 |
| 信道利用率 | 18% | 高于ALOHA | 40-60% | 中等 |
| 应用 | 无线早期实验 | 局域网 | 有线以太网 | Wi-Fi |
轮询访问:
链路中大部分主机比较忙的时候, 多台主机同时发送数据频率高, 如果采用随机访问的方式, 冲突概率较高, 可以采用轮询访问
挨个传递令牌,拿到令牌可传输
以太网
概念:以太网是一种具体的局域网通信协议标准,定义了物理层和数据链路层实现方式,说白了就是局域网等等实现的一种技术(怎么连,什么协议,什么硬件)
发展:成为了IEEE 802.3 标准的核心
功能: 规定了MAC地址、帧结构、介质访问控制(CSMA/CD机制等)、传输速率等
数据信号传输模式:
| 模式 | 含义 | 例子 | 应用 |
|---|---|---|---|
| 单工 | 单方向发送 | 收音机,广播 | 单向广播路线 |
| 半双工 | 双方都能发送,但不能同时发送 | 对讲机 | WIFI,集线器式以太网 |
| 全双工 | 双方都能同时发送接受数据 | 电话 | 交换式以太网,光纤 |
集线器(Hub):
把多种网线集起来,组成一条网线输出,会产生冲突,可以用信道复用
中继器(Repeater):
以太网中电缆有最大传输限制,信号传播超过这个长度会失真,中继器可以用来增强信号(接收,放大并重传信号),加了之后可能只会有一些少量的延迟
经典以太网规定两个节点之间的距离不能超过2.5KM,不能跨越4个以上中继器
经典以太网
经典以太网帧格式:
| 前导码 | 目的地址 | 源地址 | 类型 | 数据 | 帧校验序列 |
|---|---|---|---|---|---|
| 8B | 6BPasted image 20260417173934.png | 6B | 2B | 46~1500B | 4B |
如果数据报超过1500B,必将数据报分片发送,如果小于46字节,需要填充到46字节(为了满足最小帧长,防止错误检测不到)
MAC地址:
为硬件地址或物理地址,由48比特位(6字节组成),全球唯一
D8-BB-C1-C8-9F-99 前三个字节是公司标识符(哪个公司生产的,IEEE注册管理),后三个是设备唯一标识符
交换机:
认识每个设备的MAC地址,知道谁连着哪个端口。当A发数据给B时,它只从B的端口送出去,其他端口(C、D、E)完全不受影响,可以同时干自己的事,就不会发生冲突,可以采用全双工
快速以太网
保留原来的帧格式,接口和过程规则,将传输速率从10Mb/s变成100Mb/s,保证冲突检测,电缆最大长度降低到1/10
千兆以太网
保留原来的帧格式,速率变成1000Mb/s,传输距离应该变成25m,但是IEEE 802加入了两个特性使最大线缆长度变成200m
万兆以太网
彻底摒弃集线器采用交换机,所以只支持全双工,都不是自己家用的了,ISP常用
| 维度 | 集线器(Hub) | 交换机(Switch Hub) |
|---|---|---|
| 工作层次 | 物理层 | 数据链路层 |
| 冲突域 | 所有端口共享一个冲突域 | 每个端口是独立的冲突域 |
| 通信方式 | 半双工 | 全双工 |
| 是否使用CSMA/CD协议 | ✅ | ❌ |
虚拟局域网(VLAN)
通过物理局域网(LAN)划分为多个逻辑上的子网,每个子网叫做一个VLAN。VLAN通过逻辑隔离设备保证设备之间的通信可以被有效管理,同时不会受到物理位置的限制
目标:
- 隔离广播流量:减少广播消息在网络中的传播范围
- 提高安全性:通过将不同部门或功能的设备划分到不同VLAN,有效隔离通信,降低攻击风险
- 简化网络管理:即使设备不在同一位置,也可以通过VLAN分配到相应逻辑子网中
- 提高网络性能:划分VLAN可以减少网络中的冲突和广播流量,提高网络的整体效率
以太网交换机的接口分为两类:
- access接口(接RJ45)
- 接受帧后,根据预先分配好的VID值,给帧添加标签(在原来帧格式中添加一个VLAN便签),判断交换机内其他端口的VID是否与帧一致,一致则转发
- trunk接口(交换机之间连接)
网络层
网络层数据传输方式
无连接服务(IP协议)
定义:
每个数据报都是独立的。
不预先建立连接,也不维护连接状态。
这种网络称为数据报网络。特点:
- 无需建立连接
- 每个数据报独立传输
- 不保证可靠性
- 适合实时性高、能容忍丢包的场景
有连接服务(X.25、ATM、帧中继等协议)
定义:
数据传输之前先建立一条虚拟通信路径,也就是虚电路。
所有数据报都沿着这条路径传输。
这种网络称为虚电路网络。特点:
- 先建立连接
- 路径固定
- 顺序和完整性更容易保证
- 更适合文件传输、电子邮件这类场景
| 对比项 | 数据报 | 虚电路 |
|---|---|---|
| 连接建立 | 不需要 | 需要 |
| 寻址 | 每个分组有完整目的地址 | 仅建立时寻址,分组用虚电路号 |
| 路径选择 | 每个分组独立选择 | 建立时选定,固定路径 |
| 可靠性 | 不保证(尽力而为) | 可保证(节点确认/重传) |
| 故障影响 | 自动绕行 | 连接中断,需重建 |
| 到达顺序 | 可能乱序 | 顺序到达 |
| 应用场景 | 互联网 | 帧中继、ATM、X.25 |
| 典型协议 | IP | ATM、X.25、MPLS |
路由与转发
路由器:是工作在网络层的设备,可以连接多个局域网广域网,提供路由转发两个功能
路由:网络层(主要是IP层)选择数据报传输的最佳路径,由路由协议动态计算,负责填充和更新路由表
转发: 路由表中查找使用哪条输出线路,设备(如路由器)将数据报从一个接口转发到另一个接口,转发的速度要求非常高,因为直接影响到数据报的传输速率
跳帧算法: 数据报从源节点传输到目的节点过程中,每一跳由各个路由器独立决定下一跳路由器的转发行为,这种转发行为基于路由表(每个路由器有一张表格)中的信息,每个路由器仅根据地址和自己的路由表做出转发决策,仅是局部信息
路由算法:
1 | |----静态路由算法 |
静态路由
- 定义:由管理员手动配置的固定路由,路由表不会根据网络状态变化而自动调整,而需要手动更改配置
- 优点:
- 配置容易,适用于小型简单网络
- 控制性强,管理员可以精准控制数据报的路由路径
- 缺点:
- 不灵活,如果网络拓扑发生变化,必须手动重新配置
- 扩展性差,网络规模扩大会难以维护
- 对网络故障的应对能力差,如果某条路由失效,必须手动改
动态路由
- 定义:通过路由协议自动计算并更新路由表,路由器之间交换信息来学习和选择最佳路径,动态调整
- 优点:
- 自动化
- 适应性强,适合中大型网络
- 故障恢复能力强,某条路径故障时,能快速计算最佳路径
- 缺点:
- 配置复杂:需要配置和管理路由协议,涉及较复杂的路由策略
- 网络负载:动态路由协议会定期交换路由信息,增加网络负载
- 可能发生路由环路等问题
距离向量路由算法:
工作过程:
- 初始化:每个路由器只知道直连网络的距离为1,其他都为不可达
- 周期性广播:定期将自己的路由表发送给所有邻居
- 路由表更新:接收到邻居的路由信息后,更新自己的路由表
- 收敛:若干轮交换后,确定最短路径
- 优点:实现简单,消息负载地区,适用于中小型网络
- 缺点:收敛慢(网络发生变化得进行多个更新周期),路由环路问题(无穷计数问题),跳数限制(最大为15跳,无法支持大型网络),对拓扑变化敏感(不具备快速检测链路故障和重新收敛能力)
链路状态路由算法:
每个路由器通过广播自己与邻居的链路状态(如延迟带宽)给全网,所有路由器最终都构建出相同的网络拓扑图,每个路由器用Dijkstra算法计算到各节点的最短路径->路由表
工作过程:
- 邻居发现
- 测量链路状态(如延迟带宽,Dijstra需要各个路径上的权重)
- 生成链路状态数据包
- 泛洪(全网广播)数据包给全网
- 本地运行Dijstra算法构建最短路径树,生成路由表
此算法比上一个需要更多的内存和计算量
| 对比维度 | 距离向量路由算法(Distance Vector) | 链路状态路由算法(Link State) |
|---|---|---|
| 基本思想 | “告诉邻居我所知道的一切”(交换整张路由表) | “告诉所有人我直接连接的链路” |
| 信息交换对象 | 只与直接相邻的邻居路由器交换 | 向全网泛洪自己的链路状态信息 |
| 更新内容 | 到所有目的地的距离和下一跳(即“距离向量”) | 与邻居的链路状态(邻居是谁、链路类型、成本等) |
| 更新频率 | 周期性(如 RIP 每 30 秒广播一次) | 拓扑变化时才更新(更节省带宽) |
| 收敛速度 | 慢,尤其在发生链路变化或故障时 | 快,能够迅速计算并收敛 |
| 收敛可靠性 | 容易出现路由环路和计数到无穷大等问题 | 使用拓扑图 + Dijkstra 避免环路,收敛更可靠 |
| 网络视图 | 每个路由器只知道“去哪儿要多少跳” | 每个路由器拥有完整拓扑图,能计算任意路径 |
| 算法核心 | Bellman-Ford(分布式更新) | Dijkstra(集中式图算法,本地执行) |
| 开销大小 | 处理开销小,消息简单 | 处理复杂,需要更多内存和 CPU 来维护拓扑图和运行算法 |
| 适用网络规模 | 小型网络,拓扑稳定 | 中大型网络,拓扑变化频繁 |
| 代表协议 | RIP、IGRP | OSPF、IS-IS |
| 扩展性 | 差(如 RIP 最大跳数为 15) | 好,可支持区域划分和多层次结构(如 OSPF 的 Area 0) |
| 实现复杂度 | 低,适合入门 | 高,需要学习拓扑图和路径计算 |
路由协议
域内路由协议
RIP协议
路由信息协议,工作在应用层,基于UDP协议封装报文,基于距离向量路由算法,每经历一个路由器跳数加1,最大15跳,跳数16代表不可达
相邻路由器之间交换完整路由表信息,时间间隔30s,定期交换路由信息,若长时间未收到某一路由表相关信息,则该表项标记为无效
路由表字段:目的网络、跳数、吓一跳IP地址、
特点:好消息传播快,坏消息传播慢,适用于小型网络
OSPF协议
开放式最短路径优先协议,工作在网络层,基于IP协议封装,数据封装在IP分组中进行传输,基于链路状态算法,
支持负载均衡,把负载分散到多条线路上
适用于大规模网络场景
域间路由协议
BGP协议
边界网关协议,(国内要翻墙到国外的网就是因为BGP协议的特殊设定),基于路径向量路由算法,BGP协议工作在应用层,基于TCP协议封装报文
OSPF协议支持路由条目在一万左右,BGP可以承载十万条以上,适用大型跨域网络
IP数据报
数据报格式
首部 (每行4字节, 一共20~60字节)+ 数据部分
| 版本 4 bit | 首部长度 4 bit | 服务类型 8 bit | 数据报长度(字节)16 bit |
|---|---|---|---|
| 标识 16 bit | 标志 3 bit | 片偏移量 13 bit | |
| 生存时间 8 bit | 上层协议 8 bit | 首部校验和 16 bit | |
| 源 IP 地址 32 bit | |||
| 目的 IP 地址 32 bit | |||
| 选项(可选,长度可变) | |||
| 数据部分 |
- 版本:规定了数据报IP协议版本,路由器能确定如何解释IP数据报剩余部分,通常是IPv4(32位)、IPv6(128位)的版本
- 首部长度:IP数据报首部的长度(以4字节为单位),字段取值范围5
15(01011111),大多数IP数据报不包含选项,所以一般IP数据报首部是20字节 - 数据报长度:首部加数据的长度,理论最大值是65535字节,但很少有超过1500字节的(因为协议和最小帧长的限制)
- 标识:用于分片和重组,数据报被分片后,各分片带有相同标识符
- 标志:第一位保留位,必须为0;二位DF,为一不分片;第三位MF,除最后一片的其他分片的MF=1,最后一片MF=0
- 片偏移量:当前分片在原始数据报中的位置
- 生存时间:用于限制数据报生存时间的计数器,最初是以秒计数,最大生存时间255s,现在是跳计数器,每经过一个路由器,计数器减1,减到0数据报丢弃,防止循环转发导致数据报在网络中的无限存活
- 上层协议:一个数据报到达最终目的地才会用,指示了该数据报应该交给哪个特定的传输层协议,1=ICMP,6=TCP,17=UDP
- 首部校验和,检验首部在传输过程中是否出错
IPv4地址
是网络设备中唯一标识符,32位二进制数组成,网络中每台主机和路由器都有一个IP地址,一个IP地址指向的是一个网络接口(如果一台主机在两个网络接口,那就有两个IP地址)
点分十进制表示法
点分十进制表示 IP 地址
将 32 位 IP 按 8 位分组 → 转为十进制 → 用 “.” 分隔
IP 地址(32 位二进制)
192 · 168 · 1 · 1
4 组(每组 0~255)
IP地址分类
1993年以前采用分类编址。
网络号相当于区号。
也就是电话号码前面的地区号。
A类
- 网络号位数:8
- 主机号位数:24
- 网络号范围:
1.x.x.x ~ 126.x.x.x - 网络号
0000 0000表示本网络 0111 1111为特殊用途
B类
- 地址范围:
128.1.x.x ~ 191.255.x.x
- 地址范围:
C类
- 地址范围:
192.0.1.x ~ 223.255.255.x
- 地址范围:
| A类 | 0 | 网络号(7) | 主机号(24) | |
|---|---|---|---|---|
| B类 | 10 | 网络号(14) | 主机号(16) | |
| C类 | 110 | 网络号(21) | 主机号(8) |
| D类 | 1110 | 多播地址(28) | |
|---|---|---|---|
| E类 | 1111 | 保留(28) |
| 网络号 | 主机号 | IP地址 | 源地址 | 目的地址 |
|---|---|---|---|---|
| 全0 | 全0 | 0.0.0.0 | ✅ | ❌ |
| 全1 | 全1 | 255.255.255.255 | ❌ | ✅ |
| 127 | 非全0和非全1 | 127.0.0.1~127.255.255.254 | ✅ | ✅ |
| 全0 | x | 0.x.x.x | ✅ | ❌ |
| x | 全1 | x.255.255.255 x.x.255.255 x.x.x.255 | ❌ | ✅ |
私有地址
有一部分地址保留用于内部网络,称为私有网络,不会被公共互联网分配,不会与公共地址重复,这些地址无法在公共互联网使用,因为路由器不对目标地址是私有地址的分组进行转发
子网掩码
IP地址和子网掩码进行按位与运算,得到的就是网络号
A类的子网掩码:255.0.0.0
B :255.255.0.0
C :255.255.255.0
CIDR
无分类域间路由选择。
它打破了传统 A、B、C 类地址限制。
写法是:
IP地址 / 前缀长度
CIDR
无分类域间路由选择
CIDR 是一种新的 IP 地址划分方法,也是一种更灵活的 IP 地址分配与路由方法。
它打破了传统 A、B、C 类 IP 地址的限制。
CIDR 使用“斜杠 + 网络前缀长度(网络位数)”来表示一个网络。
书写格式:
IP地址 / 前缀长度
例如:192.168.1.0/24
说明:
“/24” 表示前 24 位是网络位,后面的位是主机位。
x.x.x.x / L
| 网络前缀(L) | 主机号(32 - L) |
|---|---|
ICMP协议
全称:网络控制消息协议
作用:当路由器处理数据包时发生异常,可通过 ICMP 向发送方报告
常见场景
目标主机不可达:客户端访问服务器超时,不知道是目的主机挂掉还是路由断链
TTL超时:数据包再网络环路中陷入”无限转发“
路径探测:如何知道数据包经过哪些路由
ping
发送发送ECHO(回显)到目的地址,判断目的地址的设配是否还活着,如果目的地址回复ECHO REPLY说明活着
1 | C:\Users\sheng> |
traceroute
给目标发送一系列数据包,分别设置ttl为1,2,3……,等到ttl为0时路由器通过ICMP协议发送超时消息给主机,主机即可获得当前路由器IP地址,多次后,能获得所有路由器地址
DHCP协议
DHCP动态主机配置协议,用来解决新主机IP地址的自动初始化
ARP协议
- 全称:ARP 地址解析协议
- 背景:网络层靠 IP 地址找主机,链路层发帧需要 MAC 地址
- 作用:在同一局域网中,通过目的 IP 找到对应 MAC 地址
网关:指连接不同网络,负责转发数据包的网络设备或路由器接口,网络边界的出入口,
NAT
NAT:网络地址转换
- 背景:公网 IPv4 地址有限,内网设备越来越多
- 做法:
- 数据包经过路由器时,修改源 IP 或端口号
- 将私有地址和端口号记录到映射表
- 对外统一使用路由器公网地址
- 外网数据回来后,再根据映射表转发回内网主机
NAT 通常是内置在路由器或防火墙中的一个软件,只有在大型数据中心中才会有一个专属NAT设备用来做网咯地址转换
IPv6地址
不会深考
| 可能的问题 | 期望的回答 |
|---|---|
| “你了解IPv6吗?” | 知道地址长度、主要解决什么问题、和IPv4的关键区别(如无广播、NDP替代ARP)即可,不用背细节。 |
| “我们的API需要支持IPv6,代码里要注意什么?” | 1. 不要硬编码IP格式校验 2. 日志/数据库存储字段长度要够(比如用varchar(45)存IPv6) 3. 框架是否自动兼容(比如Netty、Tomcat新版本都支持)。 |
| “客户端传来的IP是IPv6格式,存到数据库用什么类型?” | MySQL可以用VARBINARY(16)或CHAR(39)(文本形式),或者直接用字符串。 |
| “从HTTP头里获取的真实客户端IP,可能是IPv6吗?” | 是的,X-Forwarded-For里可以是IPv6地址,解析时要注意方括号格式(如[2001:db8::1])。 |
传输层
传输层的目标是向应用层上的进程提供高效可靠和性价比的数据传输服务
端口:
端口号长度为16比特位,0~65535
1 | |--知名端口号:0~1023 |
传输层协议
UDP:无连接、尽力而为、开销小TCP:面向连接、可靠、按序、带流量控制和拥塞控制
传输层提供两种协议,UDP、TCP
| UDP 用户数据包协议 | TCP 传输控制协议 |
|---|---|
| 提供无连接不可靠服务 | 提供面向连接的可靠传输服务 |
| 发送数据前不需要提前建立连接,结束时也不需要释放连接 | 发送数据前需要建立连接,数据传输结束后释放连接 |
| 不保证报文段交付,不保证报文段中数据顺序和完整性 | 为提供可靠的传输服务,TCP进行连接管理,可靠传输,流量控制和拥塞控制等 |
| 支持一对一多对一,一对多,多对多的传输方式 | 一对一,不支持多播和广播 |
发送数据:
应用层 数据
传输层 段头 + 数据
网络层 首部 + 段头 + 数据
数据链路层 帧头 + 首部 + 段头 + 数据
段头
UDP段头是8字节,TCP是20~60字节
UDP 数据报段头
| 源端口(16bit) | 目的端口(16bit) |
|---|---|
| UDP长度(16bit) | UDP校验和(16bit) |
| 数据 | 数据 |
接收方如何校验:在段头前加一个伪首部,再进行16位一补和校验
TCP数据报段头
| 源端口(16) | 目的端口(16) | ||
|---|---|---|---|
| 序号 Seq Number(32) | |||
| 确认号 ack Number(32) | |||
| 头部长度 (4) | 保留(4) | 控制位(8) | 窗口大小(16) |
| 校验和(16) | 紧急指针(16) | ||
| 选项(0~40字节) | |||
| 数据 |
20 字节
序号(seq)
本报文段所携带数据第一个字节在该连接发送方的序列号,用于在接收端进行重组和排序。在三次握手时,通信双方各自选择一个随机初始序号,后续每发送一个字节,序号递增1
| 0~999 | 1000~1999 | 2000~2999 |
|---|---|---|
第一个报文段序号是0,第二个是1000,第三个是2000
ack-确认号
只有当ACK控制位为1时,该字段才有效
确认号表示期待接受的下一个字节序号,例如第一字段序列号为1000,下一个字段序列号为1500,该字段就填1500
头部长度
TCP头部占用的长度,以4字节为单位,最小值为5,最大值15(所以最小值是20字节,最大值是60字节,最大把选项也加进去了)
控制位
| 控制位组合 | 常见含义 |
|---|---|
| SYN=1 | 请求建立连接(第一次握手) |
| SYN=1, ACK=1 | 同意建立连接(第二次握手) |
| FIN=1 | 请求关闭连接(第一次挥手) |
| FIN=1, ACK=1 | 关闭连接并确认(常见于挥手中间报文) |
| RST=1 | 连接异常终止或拒绝 |
| ACK=1 | 正常数据包或确认包 |
| PSH=1, ACK=1 | 推送数据,要求立即提交上层 |
| URG=1 | 报文中有紧急指针数据 |
| SYN=1, ECE=1, CWR=0 | 支持 ECN 的连接建立请求 |
窗口大小
接收方通告发送方的滑动窗口大小,本端当前可接收的缓冲区剩余空间
校验和
与UDP类似
紧急指针
URG=1时该字段有效,指示紧急数据在末尾在本报文段中的偏移量
选项
为TCP提供可扩展功能,如:设置最大报文长度、窗口扩大因子、时间戳、选择确认等
TCP建立连接
三次握手
主机1 -> 主机2:
SYN=1, seq=x
主机1进入SYN-SENT主机2 -> 主机1:
SYN=1, ACK=1, seq=y, ack=x+1
主机2进入SYN-RECEIVED
主机1收到后进入ESTABLISHED主机1 -> 主机2:
ACK=1, seq=x+1, ack=y+1
主机2收到后进入ESTABLISHED
四次挥手
主机1 -> 主机2:
FIN=1, seq=u
主机1进入FIN-WAIT-1主机2 -> 主机1:
ACK=1, seq=v, ack=u+1
主机2进入CLOSE-WAIT
主机1进入FIN-WAIT-2主机2 -> 主机1:
FIN=1, ACK=1, seq=v+d, ack=u+1
主机2进入LAST-ACK主机1 -> 主机2:
ACK=1, seq=u+1, ack=v+d+1
主机1进入TIME-WAIT
主机2进入CLOSED主机1等待
2MSL后进入CLOSED
MSL
任意 TCP 报文在网络中的最长生存时间。
可靠传输
超时重传
主机1给主机2发送数据后, 主机1会重启定时器, 定时器有效期内未收到主机2的ACK确认会触发重传
快速重传 ( 冗余ACK重传 )
主机1给主机2连续发了4条消息, 第二条丢失, 主机2会连续返回3条ack=第二条序列号, 证明未收到第二条消息, 主机1会发送第二条消息, 主机2返回ack=第四条序列号, 证明以上消息全部收到 ( 累计确认 )
流量控制
滑动窗口
当发送方的发送速度大于接收方的接受能力时, 会导致接收方的缓冲区溢出, 从而导致数据丢失, 引起数据重传
TCP采用滑动窗口实现流量控制, 发送窗口长度以接收窗口为准, 最后一次握手的时候接收方会给发送方发送rwnd=x字节的消息
与数据链路层滑动窗口协议不同, 传输层会动态调整缓冲区分配
拥塞控制
发送方维护一个拥塞窗口 cwnd。
它的值取决于网络拥塞程度,并且会动态变化。
基本原则
- 没有拥塞:
cwnd增大 - 出现拥塞:
cwnd减小
- 没有拥塞:
判断依据
- 没有按时收到应到达的确认报文
- 也就是发生超时重传
慢开始阈值 ssthresh
慢开始算法的阈值
cwnd < ssthresh 使用慢开始算法
= 使用慢开始算法或拥塞避免算法
> 使用拥塞避免算法
慢开始算法: 用指数级上升窗口数量
拥塞避免算法: 每次窗口数量+1
若重传计时器超时 ( 丢数据了 ), 判断网络可能出现拥塞, 进行以下工作: 1.将ssthresh修改为发生拥塞时cwnd的一半 2 .将cwnd的值减少到1
有时, 个别报文段会在网络中丢失, 但实际网络未发生拥塞, 使cwnd的值减少到1会大大降低效率, 所以发明了快重传算法
快重传算法: 可以让发送方尽早知道发生了个别报文的丢失, 让发送方进行快送重传, 而不是等超时重传计时器超时再重传
发送方一旦收到3个重复确认, 就知道现在只是丢失了个别报文, 于是不启动慢开始算法而是执行快恢复算法,
快恢复算法: 发送方将ssthresh值和cwnd值调整为当前cwnd的一半, 开始执行拥塞避免算法
应用层
域名系统
DNS服务器: 解析域名成为IP地址, 可能多个域名对应一个IP地址
- DNS迭代查询: 发送域名请求消息可能为多条
- DNS递归查询: 发送域名请求消息为1条
应用层协议
FTP协议
FTP 文件传输协议
1 | 客户端 FTP服务器 |
- 控制进程负责传递命令
- 数据输出进程负责传递数据
- 被动方式端口号通过双方协商
SMTP协议
SMTP 简单邮件传输协议
1 | 发送方 --SMTP--> 发送方服务器 |
接收方式
- 浏览器通常通过 Webmail 使用
- 客户端通常通过
POP3 / IMAP接收
特点
- 基于 TCP
- 常用端口号
25 - 传输的是 ASCII 文本命令
- 图片、视频等附件可通过 MIME 编码传输
HTTP协议
HTTP 超文本传输协议
URL: 统一资源定位符
URL由4部分组成: 协议 主机 端口 路径
http请求头响应主播都会, 就不在这里写了嘻嘻
- 标题: 计算机网络
- 作者: kami
- 创建于 : 2026-04-14 15:33:14
- 更新于 : 2026-04-14 15:33:14
- 链接: https://kamisheng.xyz/2026/04/14/计算机网络/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。