计算机网络
概述¶
知识点¶
- 协议:同一层内水平的,一个协议定义了在两个或多个通信实体之间交换的报文格式和次序, 以及报文发送
- 语法:控制信息的格式(如 tcp 报文格式)
- 语义:发出何种控制信息,如何进行应答
- 同步:执行各种操作的条件、时序关系
- 接口:相邻两层实体交换信息的逻辑接口
-
服务:下层为紧邻的上层(跨层)提供的功能端口
-
区域分类
- 网络边缘:终端用户设备、服务器
- 网络接入:物理媒介、无线路由器AP、光缆等
- 将端系统接入边缘路由器的网络
-
网络核心
- 由一系列高容量、高速度的网络设备和路由器组成,实现数据在不同网络之间的转发和路由功能,
- 交换机、路由器
-
计算机网络层次结构
- OSI:物理层、链路层、网络层、传输层、会话层、表示层和应用层。
-
TCP/IP:物理层、链路层、网络层、传输层、应用层
-
层次功能
- 物理层:负责将比特流转换为物理信号,并在网络中进行传输。
- 链路层:将数据划分为帧并进行传输。处理物理地址(如 MAC 地址)的寻址和访问控制。(相邻节点传输)
- 网络层:负责将数据报从源主机传输到目标主机,实现数据的路由和转发。处理逻辑地址(如 IP 地址)的寻址和路由选择(TCP/IP 中网络层为无连接的)
- 传输层:提供端到端的数据传输服务。可靠传输、拥塞控制、流量控制等。报文段
- 会话层:允许不同主机上的各个进程之间进行会话,并在连接上有序地传输数据
- 表示层:表示层主要处理在两个通信系统中的信息交换方式,如数据压缩、加密解密等
- 应用层:提供各种应用程序使用的协议和服务。处理数据,与用户交互
-
每一层都是在上一层的基础上加上一个控制头,得到新的数据单元,再向下一层传输,上层的 PDU 作为本层的 SDU,加上本层的 PCI 得到本层的 PDU 再继续向下传递
-
交换模式
- 电路交换 (传统电话网)
- 资源预留,通话期间独占资源,有保障,建立物理通讯路径
- 针对每个连接进行控制
- 通讯时延小,有序传输,没有冲突
- 问题:线路复杂、资源浪费、建立连接增加时延、没有错误控制(无法纠正)
- 分组交换
- 按需传输,资源充分利用,每个数据包(将较长的报文划分为一系列数据包进行传输)独立处理、传输
- 针对每个数据包进行控制,每个数据包的传输路径可能不同
- 无建立时延,线路利用率高
- 问题:存在拥塞、丢包、顺序问题
-
虚电路
- 结合两种方法,建立逻辑连接(而不是物理连接),以分组的形式传输数据(建立连接-数据传输-断开连接)传输过程中分组不再需要持有目的地址
- 适合需要长时间,频繁数据交换的情况
- 建立时选择路径,数据包按照相同的路径进行传播
- 提供质量保证和资源预留,按序到达,又充分利用资源
- 在包上添加特殊标记告知路由器保留资源,建立 vc,相应的路由器也需要有虚电路表,用于进行特殊转发
- 路由器会对具有特殊标识的包特殊转发
-
性能指标
- 时延
- 处理:在交换节点进行存储转发等处理需要花费的时间
- 排队
- 平均排队数目 L=平均到达速率 A*平均等待时间 W
- 传输(发送):进入链路的时间
- 包大小/链路宽度
- 传播:在线路上传输需要的时间
- 线路长度/传输速度
- 注意在有多个路由器时仔细考虑最后一个包的传输(包越小通常时延越小)
- RTT:往返时延,发送到接收到确认需要的时间
- 丢包(乘法)
- 吞吐量(传输速率)
例题¶
链路层¶
知识点¶
- 链路层的主要功能
- 封装成帧
- 透明传输
- 差错检测
可靠传输与错误检查¶
-
差错检测用于弥补物理层的缺陷,不一定需要
- 主要是在无线网络等较差通讯才使用确认和重传机制,提供可靠的传输服务
- 在通讯质量较好的链路不适用确认和重传机制,进使用 CRC 检错用于丢弃错误帧,出错重传由传输层负责
-
停止等待:发送 frame,等待 ACK;收到后发送下一条
- 滑动窗口:
- ack 附带下一个要收到的包的编号
- 错误处理:gobackn(从错误包开始的所有包都需要被重新传输);选择重传(重新传输错误的包)
-
在数据 D 后添加其校验码 EDC 用于进行检验
-
奇偶校验
- 一维:添加一位,使得 1 出现的个数为奇数(奇校验),或为偶数 (偶校验)
-
二维:n+m-1 位
- 可以纠正单比特错误(能发现奇数位出错的情况)
-
CRC
- 只检验
- 模 2 除法,加法减法都不借位,相当于进行异或操作 (在计算除法的过程中),首位是0商为0,首位是1商为1
- 称r+1比特模式/生成多项式(能检测小于 r+1 比特的突发差错)
- 取余数的后 r 位作为 CRC 校验码 R(D 为原数据,G 位模式串,r 隐式给出)(G 的长度为 r+1位)
-
如 \(M=101001,G=1101(r=3)\):\(101001\ll 3\%1101=001\) 得到的余数作为校验码计算结果得到 \(r\) 位校验码,附加到数据后面一同发射(接收方重新用 G 进行计算,并于校验码进行比较)
-
纠错编码-海明码:
- 数据位为 \(n\) 位,校验码 \(k\) 位,满足 \(n+k\leq2^k-1\)
- 校验位分别位于 \(2^0\dots{2}^{k-1}\) 位置上,即 \(D_{4}D_{3}D_{2}P_{3}D_{1}P_{2}P_{1}\)
- 数据位的位置拆位使用二进制表式,即对应几个海明码
- 每个海明码的值就是与其对应的数据位的异或
网络设备¶
- 网桥(类似于二层交换机)
- 连接多个局域网(lans),接收来自一个端口的数据帧,存储下(用于学习及决定转发)然后进行转发,不会对数据进行任何修改
- 具有学习功能,会构建转发表,根据目的 MAC 地址转发数据帧
- 具有透明性
-
无需配置:以太网设备(包括端)插入以太网中时,它可以立即开始使用,无需用户或网络操作人员进行额外的配置。
-
集线器(物理层,还有中继器)
- 当一个线路发送信息时,hub 向所有其他线路进行简单重复消息
- 连接的所有设备处于同一个冲突域,速度就是单条线路的最大速率
-
star 连接,但本质是 bus
-
网卡(二层)
-
二层交换机
- 和网桥类似,基于 mac 转发表进行工作
- 具有网桥的功能,但是接口很多,每个接口连接一个端设备(星型结构),因此是无冲突的
- 处于兼容性的考虑,也是用了 CSMA/CD
- 具有自学习能力(与桥类似)
- 传输速率很快(多条不同线路之间可以同时通信)
- 交换机的效率比集线器高很多,若带宽为 10,那么对于集线器每个设备均分带宽,而交换机中每个设备都能得到 10
-
交换机将局域网划分为不同冲突域,但是处于同一个广播域,因此对于局域网流量较多的情况应该使用交换机而不是网桥
-
三层交换机
- 网桥、二层交换机等二层网络设备一般没有 ip
- 三层交换机本质上与路由器的功能没有区别,体现在性能及使用场景
- 三层交换机具有路由功能(链路层 mac+网络层 ip)
- 三层交换机实现对网络流量的隔离和控制,分隔子网,避免了单一广播域中的问题。
- 引入原因:日益增长的站点数量和复杂性的要求
- 广播负载过重
- 由二层交换机连接的一组站点和局域网构成了一个单一的物理网络,共享一个MAC 广播地址。广播帧会被发送到所有连接到二层交换机的局域网上的所有站点
- 缺乏多路径支持
- 两个节点之间只有一条线路(因为是生成树),限制速度和可靠度
路由机制¶
- 转发表与学习机制(注意二层交换机的转发表里是 MAC 地址)
- 环路与生成树算法 stp(分布式算法)
- 避免出现环,防止广播风暴(在交换网络中,如果存在物理或逻辑的环路,数据包可能会不断地在环路内转发,形成无限循环。如:三个交换机两两相连,互相广播)
- 选择 MAC 作为标识符,标识符最小的节点作为根(父)节点
- 全部初始化为(根 x, 距离 0, 本节点 x)
- 向周围的节点发送信息(第一回合或者收到消息导致最短距离发生了变化(Y, d+1, X))如果信息中的根节点更小或者距离更短则更新数据(多个时选择编号较小的)同时舍去未被选择的边
- 最后每一个节点都是从一个节点转移过来的,因此得到的是一颗生成树
- 根节点宕机判断:让根节点周期性发送消息,从而让其他节点确定根节点是否正常工作
-
生成树可以由网桥的阻塞机制来实现
-
泛洪(在生成树上)
- 向所有其他端口发送消息
- 是学习了解网络结构的过程(根据收到的信息建立端口到 mac 的映射)
- 因此泛洪不是对资源的浪费
-
转发:
- 如果数据库中记录目的地的端口,则进行转发
- 如果找不到则进行泛洪
- 如果端口和发送端口相同,则不转发,drop 数据
-
交换机的转发时延:
- 直通交换:只检查目的 MAC 地址(6B),不检查内容
- 存储转化方式:先将接收到的帧缓存到高速缓冲器,并检查数据是否正确,时延较大
局域网LAN¶
802.3 以太网¶
- bus 需要进行 MAC 控制(如 CSMA);star 模式为点对点传输,不存在冲突
- 非连接、不可靠
- 帧格式
- 可变负载长度:最短 46 字节,最长 1500 字节
-
地址(MAC):6 字节
-
将网络层的分组封装为帧的过程称为"组帧",有以下几种方式:
- 字符计数法:在帧首部设置一个计数字段来记录该帧所含的字节数
- 字节填充法:添加起始、结束标志位,使用特定字节定界开始与结束
- 零比特填充法:
- 使用哨兵:01111110 表示开始,01111111 表示结束
- 需要防止其它部分出现哨兵,通过在发送端如果发现出现连续5个 1 就插 0,接收时自动删除 0
-
arp
- 发送者先在本地数据库查找,找不到的话则发送查找广播,<自己ip,mac,目的地ip>,接收者收到并确认后进行回复
,发送者收到 mac 信息,存储信息建立映射,附加时间戳存储在转发表 - dhcp
- 过程:广播寻找 DHCP 服务器;服务器广播地址 offer;向服务器发送请求 request (refresh);服务器分配 ip 资源 ack
- DHCP 相当于向用户出租资源,当用户不再使用或到达时间限制后服务器会收回资源 release
802.11 无线局域网¶
- 结构
- Station:接到网络的终端设备或主机(端系统)
- AP:用于提供无线网络连接,在有线网络和无线网络之间进行转化
- BSS:无线局域网中的基本服务集,由一个 AP 和与之关联的一组无线设备组成,它提供了在特定区域内的无线通信。
- ESS:扩展服务集,由多个 BSS组成的无线网络集合。在一个 ESS 中,多个 AP 通过有线网络连接起来,形成一个统一的无线网络。用户可以在不同的 BSS 之间自由移动,而无需重新认证或断开连接。
-
DS:无线局域网中的分布系统,用于连接不同的 BSS和提供跨越多个 BSS 的无线漫游构成 ESS。
-
评估
- SNR 信噪比:信号能量/噪声能量
- BER:比特出错率
- 增大功率提升 SNR
- 终端移动时,信号强度/干扰都会发生变化,需要对通讯进行动态调整,维持 SNR 和 BER 在可用的范围内(如当 SNR 减少时可以通过降低速率来减少 BER)
- 特点:
- 无线信号在传播过程中会随着穿过物质而衰减
- 多路径传播:无线电信号反射离物体地面,到达广告目的地 时间略有不同,会产生自干扰问题
- 半双工,不同同时发送和接收(因为自干扰问题难以解决)
- 通常具有无线性以及移动性
-
隐藏终端问题:
- 由于多设备连接造成
- 这意味着 AC 相互不知道对方的存在,因而可能同时向 B 发出信息,从而导致发生冲突干扰
- 解决办法
- 发送者先广播 RTS (请求发送)告知周边设备他要发送(包含源地址、目标地址等信息,会被 ap 收到)
- 接收者再广播 CTS (允许发送)告知他要发送
- 发送者收到 CTS 后发送信息
- 接收者广播 ACK 确认收到,并告知传输完成
- DIFS+RTS+SIFS+CTS+SIFS+数据+SIFS+ACK
- 通常来说数据帧较长的情况更适合这种策略
-
搜索与连接
- 消极方式
- 客户端在每个信道上监听 AP 定期发送的信标,而不主动发送任何请求。(每个 AP 会周期性的发送信标帧,包含 AP 的 SSID 和 MAC 地址)
- 比较耗时
- 积极方式
- 客户端在每个信道上发送探测请求帧,并等待 AP 回复探测响应帧应答探测请求帧,主机在能够响应的 AP 中选择进行关联,再发出关联求帧等待关联响应帧(一共需要进行两次请求/响应握手)。
- 比较快速
- 频段
- 802.11 b: 2.4 GHz-2.485 GHz 划分为不同信道
- 这个 85 MHz 的频段定义了 11 个部分重叠的信道(1 6 11 是唯一的三个非重叠信道的集合)
- 帧格式
- address 1:接收方(通常为 AP)
- address 2:发送方
- address 3:目的方
- 通常在 AP 或无线路由器进行 \(802.3\) 和 \(802.11\) 的转换
- \(802.11\to{8}02.3\):发送方地址-源地址;目的地址-目的地址;接收方地址丢弃
- \(802.3\to{8}02.11\):源地址-发送方地址;目的地址-目的地址;当前设备(ap)地址-接受方地址
- 为什么需要三个地址:
VLAN 虚拟局域网 802.1Q¶
- 可以实现对广播域的划分
- 提升涉及广播的如 arp、dhcp 等效率
- 实现方式
- 基于接口:交换机安札接口划分子网
- 基于 MAC 地址:根据 MAC 地址划分逻辑子网
- 基于 IP 地址:更具网络层地址划分,可以实现跨路由器
- 通过在以太网帧格式加 4 个字节表示属于哪一个虚拟局域网(实际使用后 12 为作为编号)
- 对于同一个交换机下的同组对象之间数据交换不适用 902.1 Q 帧
广域网 WAN¶
-
与局域网相比,与网络层的关系更大,在广域网基本使用点对点通讯,但是局域网中很多使用广播
-
广域网中最常用的点对点协议为 PPP 协议,用于用于连接 ISP 进如互联网以及广域路由器之间的专用线路
- 组成部分
- 链路控制协议 LCP:用来建立配置测试数据链路连接
- 网络控制协议 NCP:允许多种网络层协议,每个协议用一个相应的 NCP 来配置
- 将 IP 数据报封装到串行链路的方法 (组帧)
- PPP 是点对点的不是总线形,因此不使用 CSMA/CD
MAC 媒体接入控制理念:¶
- 控制多设备接入的网络,组织多个设备同时传输数据,决定让哪一个设备开始数据传输,从而避免因同时发送造成冲突
- 理想:所有节点平分、充分利用带宽、分布式
频道划分¶
- TDMA 时间划分:划分为等长时间片,每个用户所占用的时隙周期性出现
- FDMA 频率划分:对信道进行划分,分为不同的子频带,每个用户使用其中一个进行通讯
- CDMA 码分复用(扩频多址数字式通信技术,既共享空间又共享时间)
- 对比特时间进一步划分为 m 个短的时间槽
- 多个信道同时发射时线性叠加,为了之后能进行分离,要求站点的码片序列相互正交
- 线性叠加只需要不同信号分别乘以自己的码片序列然后相加
- 分离时与码片相乘,除以 m
轮流发送¶
- 既不共享时间也不共享空间,独占,本质是一种轮询。适合高负载(容易冲突)的环境
- 令牌环 802.5
- 当令牌到达一个节点时,该节点检查是否有数据需要发送。如果节点有数据要发送,它就将数据封装在一个帧中,并将帧发送到网络上。
- 数据在环路中传输,传输完成后释放令牌到环路中,使得后面的节点可以根据需求捕获令牌发送数据
- 源站点收到自己发出的帧之后不再继续转发,检查帧来判断传输过程中是否出错,之后重新产生令牌并传递给下一个节点
- 使用中心节点控制
- 问题:等待时间长、单点崩溃
随机接入¶
-
一般应用于非全双工网络,因为全双工网络可以同时进行收发不会发生冲突
-
ALOHA:当节点有消息要发送时就发出,如果发送失败就有 p 的概率重新发送,1-p 的概率等待一会再重新发送,接收端收到后回复 ACK
- ALOHA slotted:同步时间和固定帧大小,数据要么传输成功、要么完全冲突损坏。如果冲突了,在之后每个区间重新发送的概率都是 p
-
CSMA/CD
- 增加对线路的监听,如果线路空闲则发送帧,如果信道繁忙则等待一段时间之后再进行传输
- 由于传输延迟的存在(进入线路的过程中可能会发生冲突),仍然会发生冲突
- 分类
- nonpersistencent CSMA:如果繁忙则等待随机长度时间
- 1-persistent CSMA:空闲后立即发送(多个节点时易冲突)
- p-Persistent CSMA:如果空闲则有 p 概率立即发送,1-p 概率等待一单元时间再发送(最优为 p=1/N)
- 冲突检测
- 通过信号强度来判断是否发生了冲突(冲突的信号要强得多)
- 冲突一旦被察觉,并发送 jam 信号(加强冲突,便于其他设备检测)
- 当发送者收到别人发送而来的信号时会发现冲突
- 帧的最小长度
- 避免察觉到发生冲突时已经完成该数据的传输
- \(Size/B>=2(L/v)\) 即传输时延大于等于 2 倍的传播时延
- 最大长度是由协议决定的,较大的帧长度会占用更多的带宽和资源,增加网络传输的延迟。如果允许无限制地增加帧长度,可能会导致网络拥堵和传输效率下降。
- 通常规定最短帧长度为 64 B,在 100 M 下对应 5.12 微秒
-
二进制指数退避(冲突后的等待)
- 对于前 10 次发生冲突后的等待时间的选择范围每次是上一次的二倍
- 第 n 次碰撞后随机从(0 1 2... 2n-1)中随机选一个值作为 k(等待时间)
- k=1 表示 512 比特时间
- 换算:秒=比特时间除以传输速率
- 之后的 6 次时间保持不变
- 16 次冲突(失败后)放弃发送信息
-
点协调 PCF(无线局域网)
- 帧间距控制优先级(抢先发送)
- SIFS 内容(控制信息):ACK、CTS、回应轮询
- PIFS(比普通的 DIFS 有更高的优先级):轮询、AP 指令
- DIFS:普通异步流量
- 过程
- AP 用PIFS 轮询设备是否有高优先级的数据要发送,通知其它站点开始一个超级帧周期。
- 被询问的站点可以使用SIFS(短帧间隔)来回应。如果在预期的反转时间内没有收到回应,协调器就会发出另一个询问信号。当轮询列表为空或超级帧结束时,AP 发送一个 CF-END 帧来终止 PCF 模式,并恢复DCF 模式。)
- 此阶段由 ap 进行控制,不会发生冲突
- 超级帧
- 在超帧时间的前一部分,由点协调器轮询 (PCF),在超帧时间的后一部分,允许异步通信量争用接入(DCF)。
- 分布式协调 DCF:
- 使用 CSMA/CA(避免碰撞)机制,即在发送数据之前,先感知媒介是否空闲,避免与其他站点的传输发生碰撞。
- 取决于不同的优先级方案,在发送前会等待帧间隔(IFS)
- CSMA/CA(无线局域网)
- 由于无线信号的衰减和干扰,无线局域网中很难进行碰撞检测,因此 DCF不使用碰撞检测机制。(使用ACK来确认是否成功发送信息)
- 发送站点在发送数据时很难接收到其他站点的信号
- 不能检测到所有可能发生的碰撞,例如隐藏终端问题
- 如果某站点最初监听到信道空闲,它将在DIFS的短时间段后发送该帧
- 否则,该站点选取一个随机回退值,并且在侦听信道空闲时递减值。当侦听到信道忙时,计数值保持不变
- 当计数值减为 0 时并且空闲,该站点发送整个数据帧并等待确认
-
如果收到确认,发送站点知道它的帧已被目的站正确接收了。如果该站点要发送另一帧,它将从第二步开始 CSMA/CA 协议。如果未收到确认,发送站点将重新进入第二步中的回退阶段,并从一个更大的范围内选取随机值。
-
CSMA/CD 与 CSMA/CA 的比较
- CSMA/CA 增加更多的随机等待,避免高代价的碰撞
- CSMA/CA 不使用碰撞检测机制,使用 ACK
- 在 CSMAI CD 协议中碰撞并非是一个严重的问题,因为两个站点检测到碰撞后都会放弃它们的发送,从而避免了由于碰撞而造成的该帧剩余部分的无用发送。而 802. 11 并不检测碰撞和放弃发送,遭受碰撞的帧仍将被完全传输。
利用率分析¶
- 公式
- 最大媒体利用率 \(U=帧传输用时/帧总耗时\)
- \(a=传播时间/传输时间\)
- 用 \(1\) 代表传输时间
- 注意分为帧较小和帧较大两种情况讨论
- 点到点:\(U=1/(1+a)\)
- 不同种类的信道在增加最小数据帧长度后,信道利用率大多会有所上升。
- &&令牌环:假设 token 发出后会被下一个紧挨着的节点捕获
- \(a/N\) 是将令牌传播到下一个节点的时间
- 有两种情况是因为在发送令牌前数据要已经返回并且已经传输完成
- alloha slotted
- 一个节点成功概率,存在节点成功的概率为
- 最大值为即
- alloha
- csma/cd(p)
- 假设一次冲突浪费 \(2a\) 时间
- 同理可得 \(A\) 表示存在节点完成传输
- 那么失败次数的期望为
网络层¶
知识点¶
- 服务:
- 路由选择:决定数据包走怎样的路从出发点到目的地,使用 forwarding 表,比较耗时(几秒)
- 转发:数据从路由器的一个口进入,从哪个口出去
-
尽力而为
-
如何理解 IP 与 MAC 的关系
- MAC 地址是平面的,不同编号之间不存在层级关系;IP 地址是有层级嵌套关系的,因此 IP 寻址要快的多
- 在传输过程中 MAC 地址是不断发生变化的,每到达一个路由器都会被重新设置(即 MAC 地址是用于相邻节点之间的传输)
- 如果是不同网络之间传输,则会将 MAC 设置为网关,发送到网关后做进一步处理
- 在传输开始和结束阶段使用 ARP 询问进行转化,中间传输过程中使用路由表结合 MAC
SDN 软件定义网络¶
- 数据平面主要负责转发;控制层面主要负责路由选择
- 使用集中式的空平面和分布式数据平面,简化了路由器设计(只有数据平面了)路由器之间不需要交换路由信息,使用控制平面的远程控制器进行路由选择
- 集中的远程控制器负责就算最佳路由并将转发表下发给路由器
- 适合大型数据中心之间的广域网
- 有利于控制平面的全局优化,以及数据平明的分布式高效转发
- 北向接口:编程接口;南向接口:面相转发设备;东西接口:集群内部
路由器¶
- 性能评估:交换容量=N 端口数目*R 每个口的速率
- 入端口
- 物理层->链路层->网络层
- 更新 ip 包头、寻找通往目的地址 ip 的出端口
- 快速查表寻址:地址聚合,最长前缀匹配(压缩地址,合并相同方向的地址)
- 为了节约空间、提高速率,用范围划分决定路由方向
- 交换结构
- memory 模式:把 input 的数据保存到 memory 再传输到 output
- bus 总线模式:不同端口竞争 bus 的使用
- Switching via a Mesh:使用算法决定通断,进行资源调度
- 纵横式网络能够并行转发多个分组,除非来自两个不同输入端口的两个分组其目的地为相同的输出端口
- 出端口
- 决定已怎样的顺序传输数据包,数据包分类与调度,何时丢包
- 分组调度
- fifo
- Scheduler 优先级轮询
- 排队
- 若 N 个输入、输出端口的速率都是 Rlilne,如果 Rswitch比它快 N 倍,则只会发生轻微的排队
- 输入排队,如果到达速率大于转发速率。先将数据缓存起来
- 输出排队,到达分组必须排队 (等待)经输出链路传输,如果输出端口相同,会在输出端口处出现排队
ip 协议¶
- 地址类型:单播地址、广播地址、多播地址、任意播地址(有多个实体使用该地址,即负载均衡)
- 包头
- 版本 version
- 头部长度 IHL:头部由多少个32 位字组成(不含可选长度时为 20 字节)
- 区分服务 TOS:优先级、可靠性、延迟
- ttl:防止出了问题的报文一直在网络中浪费资源
- 全长 total length:ip 包的总长度
- 标识符 identification:唯一标识一个包的所有分片(一个包的所有分片具有相同的 id)
- 标志 flags:控制和识别分片的标志位如(禁止分片、更多分片)
- 分片偏移 fragment offset:记录分片在数据包中的位置(以 8 字节为单位)
- 协议 protocol:传输层协议类型
- 头部校验和 Header checksum:
- 它是由所有 16 位字(把头部切分为长度为 16 的片段)中的补码和计算得出的。在计算过程中,每个路由器都会重新验证并重新计算校验和,并将其设置为 0。这样做是为了防止在计算过程中发生溢出。(每次都需要重新计算是因为头部会发生变化)
- 可选片段 options:最多 40 字节(若不是 32 整数 bits 倍,用 padding 进行补齐)
-
注意首部长度、总长度、片偏移的单位分别为 4B,1B,8B
-
数据包分解与合并
- MTU:设施支持的最大传输单元
- 分片:在 host 和 router 进行
- 合并:只在目的地进行(路由器上重新组装分片是不可行的,因为分片可能会采用不同的路由)
- 单元标识符确定属于的数据包
- 偏移量确定分片在原包中的位置
- 计算在源数据包 data 中的偏移时不包含包头的长度
- 标志 moreflag,确定是不是最后一个分片
- 当一组数据包中第一个到达目的地时开始计时,如果到达时间限制后仍没有全部到达,则丢弃全部数据。
ipv 6¶
- 长度固定,为 40 字节
- Traffic Class (8 bits):QoS(为了区分不同的数据流而设置的一种标识。)
-
Flow Label (20 bits):流标签(标记一组流量,共享相同类型的服务)
-
ipv 4 与 ipv 6 的异同
- 路由器不再负责分片,如果一个 IPv 6 数据包太大,无法通过下一跳,则会发送 ICMPv 6告知
- ipv 6 不再有单独的 broadcast 地址,而是使用包含所有节点的组进行多拨来实现。(减少广播风暴、唤醒不必要的节点)
- 不使用 ARP,使用 Neighbor Discovery
- 取消首部校验和
- 128 比特地址,解决了 IPv 4 (32 bit)地址枯竭的问题。
- 更好的区分服务 QoS 的支持
- 更容易扩展选项
- 更加安全: 内置的、强大的 IP 层 加密和认证
- 更有效、更强大的移动性机制
- 缺点:
- 迁移成本高
- 网络基础设施不完善
- 兼容性问题
- 融合方式
- 双栈:一些具有双栈(IPv 6、IPv 4)的路由器 可以在不同格式之间进行转换
- 隧道:在 IPv 4 数据报中以有效载荷形式传输 IPv6
子网划分¶
- 地址划分
- 子网掩码指示哪些位是子网号,哪些是主机号
- 网络地址=子网掩码&ip 地址,网络地址相同说明处于同一个子网
- 主机号=~子网掩码&ip 地址
- 为了提高地址的利用率,进行更细致的划分,后使用三级 IP 地址
- 优点
- 每个局域网分配一个子网号,具有更大的灵活性
- 本地路由器在子网化网络内进行路由
- 子网对整个互联网来说就像一个单一的网络
-
使整个互联网与网络号的增长和路由复杂性隔离开来
-
分组转发是根据网络号进行的(因为网络号的数目相对少得多)当分组到达路由器之后,路由器根据项目的 IP 地址的网络前缀来查找转发表,确定吓一跳应当到哪一个路由器
-
分组转发算法的基本过程:
- 从收到的 IP 分组的首部提取目的主机 IP,若能查找到特定主机路由,则直接转发(路由表里直接由这个 IP)
- 通过子网掩码计算的到网络号,与路由表进行前缀匹配,按照下一跳指出的进行处理
- 如果都匹配不上,则转发给默认路由,若没有默认路由则出错
- 得到 IP 地址后,先转化为 MAC 地址,并填入帧首部,根据 MAC 地址找到下一跳继续进行传播
-
传统类型划分
- A
- 子网掩码:255.0.0.0
- 1.x.x.x~126.x.x.x(不含 0 和 127)
- 每个网段支持 \(2^{24}-2\) 个主机(全 0 是网络号,全 1 是广播号)(这两个地址不一定必须是全 0 和全 1,也可以是别的地址,但对于所有网段必须预留出来两个位置)
- B
- 子网掩码:255.255.0.0
- 网段从 128.0.x.x 到 191.255.x.x(八位一组)\(2^{14}\) 个
- 每个网段 \(2^{16}-2\) 个主机
- C
- 子网掩码:255.255.255.0
- 网段 192.0.0. x 到 223.255.255. x 共 \(2^{21}\) 个网段
- 每个网段最多 \(2^8-2\)
- D 多播使用
1110~
-
E 保留地址
-
CIDR
- 更有效地利用 IP 地址空间和改善路由表的管理,但是并不能增加 IP 地址的数目
- CIDR 是一种二级地址划分(不过是自由比例划分),完善了之前的三级地址划分机制
- 从原来的主机号里面借了几位拿去做子网号了
- x.x.x.x/n (n 表示网络 ID 的位数)(即自由划分网络号和主机号的位数分配)
-
本质就是实现了任何比例的网络号和主机号的划分
-
实例:子网划分方案
- 定长子网划分:
- 以需求 ip 数目最大的分区作为大小,划分为此大小的多个子网
- 利用率相对较低
-
变长子网划分:
- 假设目前要划分为 50,20,5
- 一般来说从大子网开始进行划分
-
NAT
- 给内部网络和外部网络分配不同的 IP 集(不同内部网络可以使用相同的 ip),在出网关时内部地址会被替换为外部地址
- 来解决地址不够使用的问题;安全(隐藏内部 ip 地址);便于切换 isp(只需要重新配置网关)
- 分类
- 静态 NAT:一个内部 ip 绑定一个对应的外部地址,用于网络服务器
- 动态 NAT:动态分配外部 ip 给内部设备(有一个 ip 池),谁用分配给谁
- 单地址模式 NAPT:只有一个外部 ip,所有内部 ip 对外通讯时都会被进行替换。路由器维护一个转发表,将外部端口与内部 ip 绑定,当外部 ip 向路由器发送信息时,会根据使用的端口向特定的内部设备转发消息
-
NAT 网段不能出现在互联网中
- 一个 A 类
10.0.0.0~10.255.255.255
- 16 个 B 类
172.16.0.0~172.31.255.255
- 256 个 C 类
192.168.0.0~192.168.255.255
- 一个 A 类
-
地址聚合:将多个网络地址合并成一个单一的路由条目,这有助于减小路由表的大小
- 引入多余地址:合并后的条目包含的范围是否超过合并前的两个部分
移动 ip 协议¶
- 解决设备从一个网络到另一个网络时 TCP断开连接的问题
- 具有动态 IP 的特点
- 发现
- 路由器发送 ICMP 告知是否有这项服务
- 移动设备向路由请求服务
- 注册
- 节点向外部网络请求服务
- 外部网络向家庭网络发送请求
- 家庭网络进行答复
- 外部网络把结果返回给节点
-
隧道
- 注册之后就建立起了隧道
- 家庭代理将移动节点的 IP 地址绑定到家庭代理的MAC 地址上
- 家庭代理接收到发送到移动节点的数据包,并通过 IP 隧道将数据包转发到外部代理
- 而移动节点直接回复信息
控制信息¶
- ICMP、ARP、DHCP 等信息的头部都是接在 IP 头部后面
- 其类型记录在 IP 包头的Protocol字段
ICMP¶
- 传递控制、错误消息、ping 等
- 当 buffer 已经满了时丢弃掉新进入的数据,通过 ICMP 告知发送者
-
protocol=1
-
ping/traceroute 的实现
- 重复三次计算 RTT
- Ping:
- 发送端发送一个 ICMP Echo Request(Ping)消息到目标主机。
- 目标主机接收到 ICMP Echo Request 消息后,会生成一个 ICMP Echo Reply(Pong)消息,并将其发送回发送端。
- Traceroute:
- 发送 TTL依次递增的 UDP 数据包(到不同路由器时 TTL 为 0,路由器会返回信息),这样可以知道到每个路由器的时间,以及路由器的地址
-
MTU 计算:
- 发送具有一定大小的数据包,并禁止尽心分片,这样通过对包长度进行二分搜索来确定能通过最大的包大小
- 不能通过时路由器会返回信息
-
差错报文分类:
- 终点不可达:无法交付数据时向源点发送
- 源点抑制:路由器或主机因为拥塞而丢弃数据报时,向源点发送,告知减慢发送
- 时间超过:TTL 为 0
- 参数问题:收到的数据报首部字段不正确
- 重定向:让主机知道下次应该发给另一个地址
- 不发送的情况:
- 不对 ICMP 报文发送
- 支队分片的第一个数据报发送
- 对多播不发送
- 对特殊地址不发送(如 127.0.0.0)
路由算法¶
- 目标:效率、鲁棒性、稳定性
- 评价因素:最少跳、最少路径代价、最小延迟(排队长度)
- 决策时间:普通包(路由器),vc(建立线路时)
- 决策地点:集中式、分布式
- 路由表更新:动态(周期更新、拓扑变化,容易出现路由震荡、循环选择)、静态(手动更新)
- 分类
- 集中式:当网络发生重大改变时中央重新计算并下发
- 分布式
- 泛洪:收到数据包后发送到除了发送端口以外的全部端口,最终会有一系列的(相同)数据包到达目的地
- 随机:
- 从除了发送端口以外的其他端口随机发送
- 适用于连通性很强的网络(邻居节点很多)
- 自适应路由:需要网络信息,致力于拥塞控制,网络发生变化时路由选择也会发生变化
Dijkstra’s | Bellman-Ford | |
---|---|---|
类型 | Link State 集中式算法 | Distance Vector 分布式算法 |
特点 | 每个节点都需要知道整个网络拓扑来构建转发表 | 每个节点只需要维护到已知节点的距离向量,和相邻节点传递 |
过程 | 节点节点之间相互发送向量表,根据其它节点上一阶段的表,更新自己本阶段的表(条目),别人的直接复制过来,当所有表不再发生变化时终止算法 | |
问题 | 震荡:当路由算法选择了某个路径后,该路径的负载会增加,导致该路径的成本增加。当其他可用路径的成本更低时,路由算法将会选择其他路径。 | 循环选择 (无穷计数):当一个节点检测到本地链路成本的变化后,它会更新自己的距离向量,重新计算到其他节点的距离,并将更新的信息通知给它的邻居节点。 |
改进 | 让一些流量留在负载较重的链路上,以平衡流量;非同步运行路由器,增加随机性; | 毒性逆转:如果一个节点要通过它的邻居节点(如 z-w-y-x 中 y 会告诉 w 无穷大,但不会告诉非直接相连的 z)来到达某个目的地,那么该节点会将到达该目的地的距离设置为无穷大(来针对这个邻居节点防止被选择),但是当环上有 3 个以上节点时还是会出现无穷计数 |
节点故障的影响 | 错误范围受到限制 | 错误可能会通过网络传播,到达整个网络 |
- 发展
- 第一阶段:BF(DV),输出队列长度衡量代价,收敛太慢
- 第二阶段:DK(LS),延迟衡量代价,将链路信息传播到整个网络时效率低下的尤其是当网络的规模较大的时候
- 第三阶段:OSPF,采用更全面的链路信息。通过构建拓扑图和计算最短路径来选择路由。它考虑了延迟、带宽和拥塞等因素,能够更准确地选择最佳路径。
- 延迟=重新传输的时间-数据包到达的时间+传输时间+传播时间
- 代价计算
ρ = 2(Ts − T)/(Ts − 2T)
- T 是当前测量的延迟
- Ts 是平均数据包长度/链路的传输速率
- 平滑化(leveling)
Un = α×ρn+(1–α)×Un–1
- α – constant, now set 0.5
路由协议¶
- 目的:解决规模问题、自治倾向
- 层级管理:
- 根据自治域 AS 进行划分,同一个 AS 内的路由器使用相同的内部路由策略:IGP 内部网关协议,如 RIP、OSPF
- 网关路由:负责路由到 AS 外目的地的路由器。与其他网关路由器的自治系统间路由协议,并与 AS 内的路由器运行自治系统内路由协议:EGP 外部网关协议,如 BGP
IGP(内部路由算法)¶
- 专注于性能
RIP¶
- 使用 dv(最多 15 跳),每个路由器独立维护自己到其他网络的距离信息,使用跳数作为距离信息
- 存储表项:
<目的网络,距离,下一跳地址>
- 每个路由器都需要不断和直接相邻的路由器交换路由表信息(如固定时间间隔或拓扑发生变换)
- 使用 UDP 进行传输(RIP 是应用层协议)
- 使用相邻信息的更新方式
- 先对信息中所有距离加 1
- 如果原先转发表里没有,则直接加入
- 如果有并且表中下一跳就是发送信息的相邻节点 x,那么按照信息进行更新
- 如果有但表中下一跳不是发送信息的相邻节点 x,那么如果收到的距离更小才进行更新
- 如果在 180 秒内未能接收到更新消息,则说明与相邻节点的连接已经断开。
- 好消息传输快,坏消息传播慢(收敛很慢,因为可能有循环引用问题)
OSPF¶
- 代替了 RIP,使用 Link-State
- OSPF 是一种网络层协议
-
每个节点都存储了一个有向图,用于描述该节点的相邻节点和它们之间的连接方式。每个路由器都会维护与相邻路由器之间的链路状态列表
- 通过泛洪向自治区中所有路由器发送信息
- 链路发生变化时通过泛洪进行发送
- 收敛很快
-
内容分组
- 问候分组:维持邻站的可达性(10 S 检查一次),如果 40 S 没有收到那么就认为不可达了
- 数据库分组:刚开始工作时交换数据库中已有的摘要信息
- 链路状态分组:请求对方发送自己缺失的链路状态的详细信息
- 当链路状态发生变化时,使用泛洪进行全网更新
-
优点
- 使用身份验证来防止恶意入侵
- 负载均衡
- 多播支持
- TOS区分服务的支持
-
分层结构
-
每个节点都使用 DK 算法确定以自己为根节点的最小生成树(因此在传输包时只用上了每个生成树的下一跳信息)
-
区域划分
- 将 AS 内部进一步划分,
- 每个区域由一个 32 位的区域 ID 进行标识,该区域内的路由器只知道该区域内的完整拓扑信息,从而限制了链路状态信息向其他区域的洪泛(OSPF)。
- 区域边界路由器负责与其他区域传输
- 每个区域都必须与骨干区域(0.0.0.0)相连以便在区域之间传播路由信息。
- 分类
- 内部路由 IR
- 边界路由 ABR:连接多个区域(如连接到骨干网)
- 骨干路由器 BBR:运行在骨干网、骨干网与其他区域网之间的路由器
- ASB:发送到其他 AS
EGP(外部、网关路由算法)¶
- 理念:互联网规模很大,远大于 AS 内部;考虑政治安全经济等原因;寻求较好路线,而不是最佳路线;
- 使用路径向量协议(想要获得整个路径的信息,AS 通常希望知道链路经过的线路)(RIP 使用距离向量,OSPF 使用链路状态)
- 每个网关路由器向邻居广播到达目的地的完整路径。这样,网关路由器可以执行策略路由,避免经过特定的自治系统,同时考虑更多的其他参数。
BGP¶
- 应用层协议使用TCP
- AS 中的边界路由使用 BGP 协议
- AS 间关系:商家与顾客(Pr-Cu)/合作(Peer-Peer)
- 合作的前提:前:peer 双方都能从中受益
-
由于 AS 的内部是隐藏的,因此网络拓扑图中只显示自治域间的路由信息。
-
AS 决定传输的路径,以及对外广播公布的内容
-
受到 DV 的启发,但有许多不同
- 选择最好而不是最短的路径,综合考虑
- 知道具体的路径,可以更加灵活的选择路径,并避免回路
- 即使物理上有链接,但可能不进行广告,拒绝某种传输
-
可以根据前缀转发,一次向多个路由器进行转发
-
BGP 的组成
- eBGP:处于不同自治系统(AS)之间的边界路由器之间的 BGP 会话(每个 AS 至少选择一个路由器作为 BGP 发言人,负责与其他 AS 交换路由信息)
-
iBGP:处于同一个自治系统中的边界路由器和其他路由器之间的 BGP会话,目的是在 AS 内部分发外部学习到的路由信息
- iBGP 协议确保自治域内部所有路由器之间的路由信息同步,并且避免出现路由环路等问题。
- Tip:IGP 目的是为自治域内部的所有路由器提供内部可达性
-
总结
- 自治域内的边界路由器会使用 eBGP 协议来学习到外部 AS 中的路由信息。然后,AS 内部路由器之间使用 iBGP 协议来分发和同步学习到的外部路由信息,以确保自治域内的所有路由器都具有完整的路由信息。
- 最后,自治域内的所有路由器都使用 IGP 协议(如 OSPF 或 RIP)来确定到达目的地的最短路径。这个过程会一步步地进行,直到数据包到达自治域的边界路由器,然后通过 eBGP 协议将数据包发送到目的地的外部 AS 中。
-
BGP 中的属性(用于进行路径的决策)
- 本地属性是仅在本地 AS 中使用的属性,不包括在路由公告中。全局属性则会随着 eBGP 路由公告一起传播。用于帮助路由器进行路径的选择
- ASPATH:全局属性,反向顺序列出经过的 AS(可以用于防止环路、黑名单)
- LOCAL PREF:本地属性,指定想要的路由路径(偏好)
- MED:存在多个出口的情况下选择到达目的地的最优路径(转发的 AS 所宣布的),表示从一个 AS 到另一个 AS 的内部路径的距离
- IGP cost:通过在自治系统内使用内部网关协议(IGP)来计算的,每个路由器根据内部域协议中的路径成本选择最近的出口点。
多播¶
- 发一份(一个操作)到达不同目的地,效率高
- 建立一个生成树连接发送源和接收组成员
- 当一个主机加入一个组播组时,它会通知本地路由器,告诉路由器它要接收该组的数据包。路由器会记录哪些主机已经加入了哪些组播组,并在收到组播数据包时,将数据包转发给那些已经加入了该组的主机。
- ipv 4 D 类地址
- 组播 MAC 地址:组播 mac 地址的高 24 bit 为 0 x 01005 e,mac 地址的低 23 bit 为组播 ip 地址的低23bit。
IGMP¶
- 主机可以通知多播路由器告知要加入某个组,多播路由器相互交互,构建多播树
- 路由器周期性的询问主机都是否还要在某个组里(不回答就是退出)
- 每个子网中只需要选出一个路由器来作为询问者
- 回复时,每个节点给与每个组一个随机的发送时延(0-10 s)
- 第一个计时结束的节点代表整个组进行发送,其他节点发现有人回复了就不再回复
- 发送的 TTL 为了表示只在该子网内进行传输
- 两个特殊地址:
- 224.0.0.1: all multicast groups on subnet
- 224.0.0.2: all routers on subnet
- 版本
- v 1:每次都广播询问所有组的订阅情况,主机只发送要加入的组,通过不回复来表示离开某个组
- v 2:可以询问单个组的使用情况,允许主动发送消息主动离开组
- 问题:垃圾邮件、发送源的位置是未知的
- v 3:允许接收主机设定一个源列表(只接受来自列表中的源的信息),其他的会在路由器丢弃
多播树的构建¶
- 发送源构建一个树
- Shortest Path Trees
- 使用 DK 算法,OSPF
- Reverse path forwarding
- RIP,要求途中的路由器知道到达发送源的最短路径
- 基本思想是:当一个路由器收到一个多播数据包时,它将检查其路由表中是否存在最佳路径来到达数据包的源地址(即数据包从最短路径而来),如果是则泛洪,否则丢弃
- 如果路由器不含加入多播组的节点,路由器可以向上游发送“prune”消息告知不要再继续转发了
- 不适用于链路代价不对称、动态变化的情况
- 每个接收节点选择到发送源的最短路径,构成生成树
- Center-based trees
- 将网络中的一个路由器标识为中心节点其他路由器可以通过向中心节点发送单播加入消息来加入该树形结构。
多播协议¶
- DVMRP
- 基于 RIP 的多播路由协议,使用 dv
- 该协议是软状态的,DVMRP 路由器会定期(1 分钟)"忘记"剪枝的分支,多播数据会再次通过未剪枝的分支传输。下游路由器可以重新剪枝,否则将继续接收数据。
-
在规模化网络中不适用,因为所有路由器都需要全局了解所有多播组和其源的信息。
-
MOSPF
- 基于 ospf
-
可以为每个多播数据报计算一棵相同的最短路径树
-
PIM
- 可以与任何单播路由协议一起使用
- 在稀疏模式下,PIM 协议使用中心点方法建立组播树,这个中心点可以是任意一个路由器,其他路由器通过向中心点发送加入消息来加入组播。组成员比较分散,带宽有限。
- 在密集模式下,PIM 协议使用源点树和反向路径转发建立组播树,与 DVMRP 协议类似。组成员比较密集,带宽相对较充足。
应用层多播¶
- 由于硬件的限制,ip 多播并没有得到广泛的应用
- 应用层组播通过在应用层复制和缓存数据包而不是在路由器上复制数据包来避免 IP 组播的部署问题。应用层组播无须对路由器作任何修改, 因此在 Internet 上非常容易部署
- 不解决多播的效率问题(相对 ip 多播较低),只实现多播的功能
- 通过分段单播连接实现的。终端主机而不是路由器负责复制和转发组播数据包
-
缺点:
- 由于没有底层支持,因此需要更多的计算和网络带宽资源。
- 需要专门的服务器来协调多播组成员,这可能会导致单点故障和瓶颈问题。
- 应用层多播不如 IP 多播标准化和普及,因此不如 IP 多播适用于大规模网络部署。
- 优点:
- 不需要底层网络支持IP 多播功能,因此可以在任何网络环境中使用。
- 可以更容易地控制多播组成员,以便更好地保护网络安全。
- 可以更灵活地处理不同的应用需求,如实时视频和音频流等。
例题¶
- 毒性逆转
传输层¶
知识点¶
- 运行在端系统上,分为发送端和接收端
- 使用原因:
- 对数据进行合并、分发给不同应用程序,进程之间进行通信,为应用层提供端到端的服务
-
网络层是尽力而为的服务,缺少保障
-
套接字:应用程序进程与操作系统中的传输层之间交换网络消息的接口。
- 传输层地址
- UDP 套接字<来源端口、目的端口>
- TCP 套接字<来源端口、来源ip、目的端口、目的ip>
- mux 与 demux
- 传输层数据包格式,包含源端口和目的端口
- 对于 UDP,对于来自不同ip/端口的数据,如果有相同的目标 ip/端口则会被放入目标的同一个socket 中。(仅依据目标信息进行合并)
- 对于 TCP,要求四元组完全相同才会放入一个套接字(源 IP 地址,源端口号,目标 IP 地址和目标端口号。)
可靠传输设计理念¶
- 数据包损坏处理(传输层会检验完整数据内容,而网络层只会检查头部)
- 校验和、回复ACK
-
由于 ACK 也可能出错,因此对于 ACK 还要附带序号
-
数据包丢失
- 使用计时判断超时
- 停止等待协议
- 发送<->确认收到的循环进行
- 效率极低,不能充分利用资源(空闲时间长)
- \(\frac{T_{D}}{T_{D}+RTT+T_{A}}\)
流水线传输¶
- 一次发送多个数据包(滑动窗口)
-
带宽
- 若 \(nT_{D}<T_{D}+RTT(+T_A)\) 即第一个数据包返回之前可以完成 \(n\) 个分组的发送,信道利用率为 \(\frac{nT_{D}}{T_{D}+RTT(+T_A)}\)
- 若 \(nT_{D}\geq T_{D}+RTT(+T_A)\) 则在不发生错误的情况下信道利用率为 1
- 当不发生差错时,SR 和 GBN 是没什么区别的,此时 \(n\) 越大(发送者窗口越大,通常是 GBN)效率越高
-
设 \(W_{T}\) 为发送窗口的大小,\(W_{R}\) 为接收窗口的大小
- 对于停止等待协议:\(W_{T}=1,W_{R}=1\)
- 对于 GBN:\(W_{T}>1,W_{R}=1\)
- 对于 SR:\(W_{T}>1,W_{R}>1\)
- 若使用 \(n\) 比特对帧编码,则 \(W_{T}+W_{R}\leq 2^n\)
- 对于 GBN \(W_{T}<+n-1\);对于 SR \(W_{R}\leq 2^{n-1}\)
-
确认方式
- Cumulative ACKs:返回下一个要收到的包的序列(即表示所有之前的包都已经收到了)
-
Selective ACKs:对收到的每一个包进行答复
-
丢失处理
- GBN
- 配合 Cumulative ACKs,提前到达的数据包都会被丢弃
- 发送端只需要为一组数据包中的第一个设置定时器,如果这个包没有成功发送,那就重新发送所有的数据包
- SR
- 对每个数据包都设置定时器
- 当错误率很高时 gbn 甚至不能完成传输
- sr 常用于无线网络
UDP¶
- 尽力而为、无连接
- 实现了传输层最基础的复用-分用功能
- 复用:在发送端将来自多个应用层的数据流整合到单一的网络连接中(使用端口进行区分)
- 分用:复用的逆过程,在接受度那根据头部信息中的杜娜口号,将数据包发送到正确的应用程序
- 为了加强校验能力,除了头部、数据外还有一个伪首部参与校验码 checksum 的计算
- 额外包含 ip 地址,协议字段等信息,这些数据不会实际进行传输,只用于校验计算,使得传输层在网络层面上有更高的数据完整性保障
- 对报文段中所有 16 比特字的和进行加和
- 将溢出位加在末尾
- 最后对结果取反码得到 checksum
- 接收端发现差错时仅直接丢弃数据包
TCP¶
- 可靠、有序、字节流传输、选择重传、累计确认
- 32 比特的序号字段和 32 比特的确认号字段。这些字段被 TCP 发送方和接收方用来实现可靠数据传输服务
- 16 比特的接收窗口字段,该字段用于流量控制。该字段用于指示接收方愿意接受的字节数量。
- 6 比特的标志字段,ACK 比特用于指示确认字段中的值是有效的,即该报文段包括一个对已被成功接收报文段的确认。RST、SYN 和 FIN 比特用于连接建立和拆除。
- 分片
- IP 最大MTU(1500 字节)
- TCP 最大MSS(1460)(总长度减去 ip 和 tcp 头部)
- 假设一个数据包有 B 个字节,如果 X 之前的数据都收到了,那么接收者会发送 X+B,即 ACK sequence = 收到的数据包的 sequence+length(data)
- 受到重复(3)ACK、或者计时器超时说明发生了丢包,要进行重传(从滑动窗口中第一个开始重传)
RTT 估算¶
- 回归法
- SampleRTT:样本 RTT,是指当前分组往返的时间;(不能使用从重传获取的 SampleRTT)
- EstimatedRTT:估计的 RTT,是指对 SampleRTT 进行平均计算得到的 RTT 值
- Jacobson/Karels algorithm
- SRTT(EstimatedRTT):平滑的往返时延,通常是通过对多次测量的 SampleRTT 进行加权平均得出的估计值。SRTT 是用于计算 RTO 和 DevRTT 的重要参数。
- SERR (Smoothed Error):平滑误差,是估计的 RTT 和实际测量值之间的差异。SERR 用于计算 SDEV,以便更好地估计 RTT 的变异性。(SamplaeRTT-EstimatedRTT)即 Deviation
- SDEV (Smoothed Deviation):平滑的偏差,是样本 RTT 与 SRTT 之间的差异的指数平均值。SDEV 用于计算 RTO,以便更好地调整重传超时时间,以适应网络中的变异性。即 DevRTT
- 计算 RTO:RTO 是估计 RTT 加上 4 倍平均偏差的值,旨在提供足够的时间来等待确认信息的到达。
连接握手¶
- 连接建立(3 次)
- 为了防止过时的数据包造成的干扰,对发送包序列号 SN 起点 ISN 进行随机初始化
- SN:序列号,用于标识 TCP 协议中每个数据包的唯一序列号。
- AN:确认号,用于标识收到的数据包的序列号。当接收方收到 TCP 数据包后,会向发送方发送一个 ACK 包,其中包含确认号,表明接收方已经成功接收了前面发送方发送的数据包。
- 双方会分别选择一个序号作为自己包序列序号的起点
- SYN 报文不能携带数据,并且需要消耗序号;但是 ACK 报文如果不携带数据就不消耗序号
- 为 SYN 也增加序列号和校验,避免干扰
- 拒绝错误的包
- 如果 syn 包发送失败,那么不会收到 ack 回复,并且发送者不知道接收者距离有多远,因此设置一个固定的超时时长(一般3s)
- 连接关闭(3/4 次)
- 单边关闭
- time_wait:回复 ACK 确认关闭后实际并不会立刻进行关闭,因为对方可能收不到 ACK,这种情况就需要进行重发
- 同时(双边)关闭
-
强制关闭
- 发送 rst 后对方不会进行回复,但如果对方继续发送 data (表示没收到 rst)则会重新发送 rst
-
客户端发出 fin 之后
- 服务端至少 \(1.5RTT\) 后关闭
- 客户端至少 \(2MST+RTT\) 后关闭(MST 是报文可以在网络中存活的最长时间)
传输控制¶
-
窗口的大小用字节表示,但是 ACK 以报文段(MSS)为单位
-
窗口的右边缘则是左边缘加上一个常数,这个常数只受传输层缓存大小的限制。
- 对于接收方数据接收到并取走才滑动(即离开缓冲区被应用程序获取)
- 通过控制发送窗口的大小来控制发送速率(正在传输的数据量一定不会大于窗口的容量)
- ~Window/RTT(使用 MSS 表示速率,即以 MSS 为单位而不是字节)
流量控制¶
- 防止发送速度大于接收端的硬件处理性能
- 接收端回复 ack 的同时附加参数 RWND,告诉发送方自己有多少空间可以进行存储
- ACK 正常回复(但 ACK 并不代表处理完成了),将确认和控制信号RWND分开
- 如果 ACK/CREDIT 消息丢失了,那么对协议的影响很小,因为未来的 ACK 消息会重新同步协议。
- 死锁问题:
- 接收方 B 首先向发送方 A 发送一个带有 AN=i、W=0 的数据段,表示关闭接收窗口。接着,B 向 A 发送另一个数据段,其中 AN=i,W=j,表示重新打开窗口,但这个数据段可能会丢失。此时,A 认为窗口已经关闭,而 B 认为窗口已经打开,从而导致了死锁。
- 采用窗口定时器的方法,当窗口定时器到期时,如果没有收到任何数据,则发送方 A 可以发送一些数据,例如重传之前的数据段。这样,即使接收方 B 发送的第二个数据段丢失了,发送方 A 仍然可以通过定时器来重新激活数据传输,从而避免了死锁。
拥塞控制¶
-
让传输路径上的路由器发送速率大于接收速率,防止在传输过程中超出路由器缓存造成丢包(当繁忙时会产生大量丢包与重传,即做大量无用功,进一步加重拥塞)
-
增减窗口限制 CWND
- Sender-side window = min {CWND, RWND}
-
RWND 是对方通过 TCP 包头传递的;CWND 是根据网络情况自己评估的
-
TCP Reno 流程
- 慢启动(指数增长)
- 初始时 CWND=1,发送速率为 MSS,(每收到一个 ACK 加一)每 RTT 翻一倍
- ssthresh 最初会被初始化为一个很大的值
- 拥塞避免(加性增加和乘性减少)
- CWND > ssthresh 达到阈值进入拥塞避免,CWND 每 RTT增加一个MSS
- 丢包拥塞
- 3 个重复 ACK:
ssthresh = CWND/2 CWND= ssthresh(收到 3 个重复 ACK)
(快重传)之后拥塞避免(快速恢复)(Tachoe 不区分重复和超时,全部置为1) - 超时:
ssthresh = CWND/2, CWND = 1
之后重新慢启动
- 3 个重复 ACK:
-
tip:
- 当出现 ack 冗余或者数据包丢失后,拥塞窗口长度会在下一轮回发生变化
- 如果在一轮回达到了 sshresh,那么本轮回的长度就是 sshresh,因为到达后会终止本回合开启下一回合!
-
选择 AIMD 的原因
- 效率&公平:找到带宽上限、动态公平分配
- A 加性、D 乘性
- 红线代表效率、绿线代表功能
- AIAD
- 不公平
- MIMD
- 不公平
- AIMD
- 完美
快速恢复改进-TCP newReno(默认使用)¶
- 对重复 ACK 的情况进行改进:原先在等待重传包到达时窗口大小增长过于缓慢,造成窗口的阻塞
ssthresh = CWND/2 CWND= ssthresh+3
由于收到三个重复的 ACK,可以认为这三个包都被正常收到了,因此对 CWND 正常进行增加- 在收到重传包的 ACK之前收到一个 ACK 就 CWND+1(保持乘性增)
- 收到之后退出快速回复,令 CWND = ssthresh,进入拥塞避免
- 对比
- Reno
- New Reno
- 可以更快的推动窗口滑动
- xmit 表示发包
拥塞控制分析¶
- 忽略慢启动指数增加阶段,因为这一阶段是很短的
- 速率在 W/(2 xRTT) W/RTT 之间变化(拥塞抑制阶段,每次加一个 MSS),故平均值为 0.75 W/RTT
- 用丢包率 p 来表示 W(窗口大小)
- TCP 潜在问题
- 当 RTT 不一致时 TCP不是公平的
- 目标速率较高时,要求几乎为 0 的丢包率
- 解决:当越过上界时加快传输增加速度(乘性增加)、建立多条连接
- 速率震荡(应用程序更喜欢稳定的传输)
- 避免震荡,直接计算出 rate,发送数据
- 目的:速率与传统方式相同,但比较平稳,固定速率发送
- 移动网络丢包
- TCP 在某些情况下可能会将数据包的丢失误认为是网络拥塞的结果而触发拥塞控制算法中的拥塞避免机制,导致流量的速率被削减。
- 短数据问题
- 如果数据流比较短,可能无法充分加速,没有离开慢启动就结束了
- 长数据支配短数据,tcp 总是想将缓存占满,因此数据包到达路由器后可能会经历漫长的延时等待(即使包很小)
- 欺骗问题
- 由于 TCP 是端算法,如果在操作系统修改 CWDN 的长度,会造成公平性的问题
路由器拥塞控制思想¶
-
由路由器告知终端发生了拥塞、通知终端发送速率、并保证传输公平性
-
抑制分组:路由器发送 ICMP 告诉源发生了丢包(对路由器性能要求太大)
- 反压:逐层进行抑制分组,一层通知相邻的一层
- 精确拥塞通知 ECN
- 警告位:在数据包的包头做一位标记,如果接收端发现 head 中有信号,则在返回的 ACK 中添加标志位(ECN)提醒发送端,由此接收端不丢包也可以知道拥塞状态
- 提前指示拥塞:ECN 可以作为早期拥塞指示器,提供关于网络拥塞的信息。这可以帮助发送方避免等待传输超时来检测拥塞,从而减少传输的延迟。
- 易于增量部署
- 随机早期丢包:防止 TCP 出现同步速率波动
- RED 策略:路由器缓冲区越满,丢包率越高
MAX-MIN¶
- 流平分带宽保证公平性,同时充分利用带宽兼顾效率
- 尽可能平分带宽,但如果有流比较小率先完成传输,则会被从平分名单去除,剩下的流进行平分
-
实现方式:公平队列
- 使用算法进行模拟:首先计算理想评分条件下每个数据包完成发送的时间,按照理论完成的先后依次进行发送(并不是时间上的完全符合,而是满足偏序关系)
- 为了减少计算,可以扩大流的范围(如一定特征的 TCP 归属为一个流)
- 优点:避免欺骗、避免 RTT 公平性问题
- 问题:复杂、不能拥塞避免、貌似公平实际做无用功浪费带宽
(路由器)质量控制 Qos¶
- 不同类型数据流对服务的要求不同,因此需要差异化服务(对丢包率、传输速度、延迟的要求)
ISA¶
-
把一组数据包定义为一个流,具有相同的 QoS 参数
-
功能:
- 路由算法:全方位考虑更多因素
- 排队:多队列,对流分类
- 丢包:指定丢弃的包而不是新到来的
- 资源预留:为特定 QoS 的流预留资源(RSVP)
- Admission control:确定是否有足够的资源来满足请求的服务质量
- Traffic control database:流量控制数据库用于存储与流量控制相关的参数
- Management agent:管理代理通过修改流量控制数据库的内容来指导接纳控制模块设置策略。
- RSVP
- 应用程序或网络服务发送 RSVP 请求,指定其对服务质量的需求,如带宽、延迟、丢包率等。
- RSVP 消息沿着网络路径传播,与途径上的每个路由器交换信息,以协商资源预留。
- 路由器根据收到的 RSVP 消息,检查是否有足够的可用资源来满足请求,并向上游和下游节点发送相应的确认消息。
- 如果路径上的所有路由器都能满足请求,并且资源预留成功,数据传输就可以开始。
- 缺点
- 设备要求高,复杂,成本高
- 不具有很好的弹性
- 不能很好的同时服务很多的流
DS¶
- 不区分流,而是将数据包的传输分为几类面对每一类的数据进行相同处理(减少类型,降低复杂度)
- 通常在 ISP 内独立执行(DS Domain),由内部路由和边缘路由组成
- 在域内一致解释DS 代码:确保在特定网络域内对 DS(差异化服务)代码点的一致解释。
- 内部路由
- 内部路由器:内部路由器根据边缘路由器的标记对数据包进行分类、缓冲和调度。它根据数据包的标记给予优先处理,更重视符合要求的数据包。
- 边缘路由
- 对每个流进行流量管理:边缘路由器可以对每个数据流进行个别的流量管理。它可以标记和监管数据包,将其划分为符合要求的流量和不符合要求的流量,标识分组。
流量调度算法(边缘路由分类)¶
- 控制指标:
- 平均速率:指的是数据以恒定速率离开漏桶的速率。它表示单位时间内允许发送的平均数据量。(较长时间的平均值)
- 峰值速率:表示漏桶允许的最大发送速率。峰值速率通常高于平均速率,并且可以在短时间内发送更多的数据。
-
突发长度:指的是漏桶能够容纳的最大突发数据长度。突发长度与峰值速率相关,它定义了在突发情况下漏桶可以容纳的最大数据量。
-
漏桶
- 以恒定速率将数据放入网路,用缓冲区进行稳定
-
令牌桶
- 在边缘有一个”桶“里面装在用于提供特殊服务的 token,装入速率 r 表示允许的最大 (平均)速率,大小 b 表示可以爆发传输的最大数据量,没有 token 的意味着普通服务(低优先级)
- t 时间内最多\(rt+b\)
- WFQ 加权公平队列
- 当\(b_i\)个分组被一次性加入到 WFQ 等待区域时具有最大时延\(d_{max}=\frac{b_i}{R*\frac{w_i} {{\sum}w_j}}\)
网络安全¶
知识点¶
网络攻击¶
-
分类:
- 主动攻击:伪装、修改、阻断
- 容易发现但难以阻止
-
被动攻击:窃听
- 很难被发现
-
期望:
- 可用性:针对阻断(通讯不能被阻断)
- 机密性:针对窃听(不能被听懂(可以听))
- 完整性:针对篡改(不能在无法察觉的前提下修改)
- 授权性:针对伪装(保证双方的身份正确)
- 手段:加密、校验、身份认证
- 不能对传输过程物理安全以及加密的算法做任何假设
- 攻击方式
- 只拥有密文:
- 穷举法:尝试使用所有可能的密钥对密文进行解密。
- 密码分析:利用加密算法的性质以及对明文和密文的一般特征的了解,试图推断出原始信息或加密密钥。
- 已知明文攻击:
- 拥有明文和相应的密文。能够分析二者之间的关系,有可能推断出加密密钥或解密其他密文。
-
已选择明文攻击:
- 可以选择特定的明文消息并获取相应的密文。能够分析加密过程,可能发现漏洞或推导出加密密钥。
-
为了更为通用的加密算法,可以将传输内容全部用数字来表示
- 如把字母序号转化为二进制再转化为数字
dog=>00100 01111 00111=>4583
对称加密¶
- 关键:如何实现安全的密钥传递
- 传统加密
- &&凯撒密码
- 单表密码(随意对应的加强凯撒密码)
- 维吉尼亚密码
- 篱笆密码
- 按列书写,按行读取
- key 是行数
-
行列密码
- 按行书写,打乱列后按列读取
-
*块加密
- 计算机可以实现暴力破解
- 数据加密标准:DES 是一种对称密钥块密码,使用 56 位密钥对 64 位的明文块进行加密。然而,由于 DES 的密钥长度较短,已经被认为不够安全,因此在一些应用中已经不再广泛使用。
- 三重数据加密标准:TDES 是对 DES 的改进和增强版本。它通过对数据应用DES 算法三次来提高安全性。TDES 可以使用不同的密钥长度(如 168 位)和操作模式,以提供更高的保护级别。(存在效率低的问题)
- 高级加密标准:AES 是一种广泛采用的对称密钥块密码,被视为 DES 的替代方案。AES 使用可变长度的密钥(如 128 位、192 位或 256 位),以及不同的加密模式和操作方法,具有较高的安全性和效率。
公钥系统¶
非对称加密 RSA¶
- 过程
- 选择两个很大的素数p、q(500-1024 bits)
- 取\(N = p × q\) \(Φ = (p–1)×(q–1)\)(欧拉函数,计算小于 N 并与 N 互素的整数个数)
- 选择一个 e \(GCD (e, Φ) = 1\)
- 找到 e 的模反元素(\((d×e) mod Φ = 1\))(因为幂存在周期Φ)
- Public Key: (e, N), and Private Key: (d, N)
- 发送:
- 使用 e 作为指数,N 作为模数
- \(C = M^e (mod N)\)
- 发送\(C\)
- 接收:
- \(M=C^d (modN)\)
- 要求
- 素数 p 和 q 应该具有大致相同的长度,并且应该是应该是不相关的。
- 公钥指数 e 可以选择较小的值。公钥指数通常是一个较小的常数值,用于加密过程,因为它不会对加密过程增加太大的负担。
- 私钥指数 d 必须选择一个较大的值。私钥指数用于解密过程,需要足够大的值以确保解密的安全性。
- RSA 加密和解密过程中需要进行大数的指数运算,这需要较长的计算时间和资源。比 DES 等块加密慢得多,因此可以先使用 RSA 传递对称密钥建立连接,再之后的通话中使用对称密钥 KS 进行加密
身份认证¶
- 可以反向使用 RSA(私钥加密,公钥解密)
- 随机化 R 防止重放攻击
- ap 4.0
- 使用随机数避免重放攻击,但要求有知道的共享对称密钥
- ap 5.0
- 但是由于 Bob 可能不知道 Alice 的公钥,在这个过程中可能被欺骗
- 攻击者伪装 alice 与 bob 通信,并让 bob 误以为自己与 alice 通信(同时伪装与 alice 和 bob 进行通信)
MAC 校验¶
- 确认信息的来源正确,并且没有被篡改
- 消息认证码(MAC)是一个固定长度的代码,它会附加在要传输的消息末尾。它用于验证消息的完整性和真实性。
- MAC 不应该可逆,不需要解密
- 可以处理任何长度的消息而自身的长度固定
- 单项性:已知 MAC 为 X 的情况下,很难找到一个数据 Y 满足 MAC (Y)=X。(即过程几乎不可逆)
- 弱碰撞抗性:给定一个消息 X 1,很难找到另一个消息 X 2,使得 MAC (X 1) = MAC (X2)。
- 强碰撞抗性:很难找到任意两个不同的消息 X 1 和 X 2,使得 MAC (X 1) = MAC (X2)。
- 加密进行身份认证
- CBC:\(C_i = E_K (M_i+C_{i–1}) i = 1, 2, . . ., L\)
- 哈希身份认证
- MD 5、SHA-1
- 数字签名
- 对称密钥法:根据消息和一个密钥生成MAC,添加密钥是为了防止消息被篡改(整个替换)
- 公私密钥法
- 对 MAC 进行加密/解密
密钥分发¶
- Diffie-Hellman 交换
- 通过公开的通信渠道协商出一个共享的秘密密钥,而不需要在传输过程中直接共享密钥。
- 过程
- 选择一个知名的大质数 P,以及 P 的一个原根 g(增加破解的复杂度)
- A 从\(Z_P^*\)选择一个数\(x\),把\(X=g^x (modP)\)发送给 B
- B 从\(Z_P^*\)选择一个数\(y\),把\(Y = g^y (modP)\)发送给 A
- A 得到密钥\(Y^xmodP\) 即 (\(g^{xy}modP\))
- B 得到密钥\(X^ymodP\)
-
权威机构 CA
- 会话密钥是一种在逻辑连接期间使用的密钥。它会在会话结束时销毁,并且不是永久性的密钥。
- 永久密钥主要作用是用于密钥分发。
- CA 负责确定发送方和接收方的身份有效性,并为该连接提供一个会话密钥。
- 安全服务模块在整个通信链路中扮演重要角色。SSM 负责执行端到端的加密操作,并获取用于主机的密钥。
-
公钥证书
- 由权威机构签名认证的公钥,保证是属于指定用户的真实密钥
- 整数包含:唯一序列号、所有者、颁发者等信息,并且 CA 会在末尾添加 MAC 并使用私钥进行加密(数字签名)
电子邮件系统设计 PGP¶
- 提供保密性
- 使用非对称密钥传递对称密钥,并使用对称密钥对信息进行加密
- 提供消息完整性及身份验证
- 对 MAC 进行加密
- 提供消息完整性和保密性
- 嵌套使用
SSL 传输层网络安全¶
- 传输层加密可以确保数据在传输过程中的保密性,保护应用数据安全传输,保护一个互动数据流(连接),但在网络中的其他节点上可能仍然可以观察到传输的元数据
- 在 TCP 与应用层之间添加 SSL,使用 SSL 发送数据而不是 tcp
- 理念
- 握手认证,双方通过公私密钥互相认证,得到一个统一的对称主密钥MS
- 使用共享主密钥生成一系列密钥,对分块数据进行加密
- 对数据进行分块(记录)
- 将数据流分解为一系列块。每个块都携带自己的 MAC,使得接收方可以在每个记录到达时立即进行处理,而不需要等待整个数据流的接收完成。
- 并且为了防止攻击,添加序列号(防止重排,MAC = MAC (Mx, sequence || data)),添加一次性数字(防止重放攻击)
- 安全关闭连接(防止伪造关闭信息)
- 使用记录类型,并为连接关闭操作定义一个特殊的记录类型。即使用加密和 MAC保护信息
*真实 SSL¶
- 记录(块)协议(基础协议):它负责将数据分割成记录,并对每个记录进行加密、完整性校验和解密等操作。
- 高层协议:握手过程、证书交换、密钥协商和身份验证等
- 记录(数据单元 PDU)
- 握手协议
- 服务器和客户端之间需要通过握手协议建立会话session,可以为多个 TCP 通信建立保护
- 大致过程
- 建立安全能力:通过握手协议,客户端和服务器之间建立了 SSL 连接,并确定了双方的安全能力。包括使用的加密算法、MAC 算法和密钥长度等参数。
- 服务器鉴别与密钥交换:服务器在握手过程中对自身进行身份验证。它向客户端提供适用于共享密钥分发的公钥,以确保通信的安全性。
- 客户端验证服务器并开始密钥交换:客户端对服务器进行验证,并开始进行密钥交换。这确保了客户端与合法的服务器进行通信,并建立了共享密钥。
- 交换确认:在握手过程中,各个阶段都会进行确认,确保握手的每个步骤都得到了正确执行。
- 根据协商更改密码规范:一旦握手协议的各个阶段完成,通信双方根据协商的结果改变密码规范。这意味着双方根据握手协议中达成的协议更改加密算法、MAC 算法和密钥等参数开始正式进行传输。
VPN(ipsec)¶
- 网络层加密提供了更高级别的安全性,保护整个通信链路中的数据和通信元数据。
- 应用:分支机构通过互联网连接:IPsec 可以用于建立安全的分支机构与总部之间的通信连接,以保护数据的机密性和完整性;安全远程访问;服务器之间的流量加密;电子商务
- VPNs:虚拟私有网络
- 不需要专用设备及链路,成本低,并且可以实现私人网络的搭建
- VPN 会在数据进入公共互联网之前进行加密,确保数据的安全性。
- VPN 在逻辑上与其他流量隔离,实现了逻辑上的分离。
- 传输模式
- 终端设备实现 IPsec 协议。
- 仅对 IP 数据包的有效负载进行加密,而IP 头部保持原样。
- 传输模式通常用于直接连接的通信
- 隧道模式
- 常用于防火墙之间的通信,并用于构建虚拟私人网络
- Psec 会加密整个 IP 数据包,包括 IP 头部和有效负载。IP 数据包的头部中的 IP 地址是IPSec 网关的地址,而不是实际的源和目的地址。
- 安全关联
- 在发送数据之前,发送方和接收方之间会建立一个称为"安全关联"的 SA,用于定义双方之间的单向关系。用于描述安全通信的参数和策略。(双向通信需要两个 SA)
- IP 是无连接的,而 IPsec 是面向连接的,因此需要建立和维护 SA 来确保安全通信。
- 本地有SA 表,使用安全参数索引 SPI标识和区分不同安全关联 SA
- 认证协议 AH:AH 协议通过在 IP 数据包中添加认证头部来实现数据的完整性验证和源身份验证。
- 封装协议 ESP:ESP 协议负责对有效载荷进行加密,并添加校验码以验证数据的完整性。
- 分为头部和尾部,夹住数据
- 头部提供了协议参数和选项的定义
- 尾部则提供了完整性保护和数据验证的能力。
- 密钥交换协议 IKE:IKE 协议用于在两个对等体之间协商安全功能和密钥。使用 Diffie-Hellman 密钥交换算法,允许节点在不直接交换密钥的情况下生成共享密钥。
- 帧结构
- ESP Header:用于封装加密和认证的数据。它包含 ESP 的各种参数和选项,如加密算法、认证算法、SPI 等。
- ESP Trailer:ESP 尾部,包含填充字段和填充长度等。
- Next Header:下一个头部字段,指示在 ESP 封装后的数据中紧随 ESP 头部之后的下一个头部类型。
- ESP auth 校验码
- 使用共享的密钥创建的消息认证码(MAC),用于验证数据的完整性和防止数据被篡改。
WIFI¶
- WEP 有线等效隐私 (802.11)
- 使用共享密钥,由一个40 位的主密钥和一个 24 位的初始化向量(IV)组成
- 主密钥需要手动进行设置
- 认证
- 移动设备向接入点发送认证请求。
- 接入点回复一个 128 位的随机数(用于防止重播攻击(录制))。
- 移动设备使用共享的主密钥(KS)对随机数进行加密。
- 接入点解密随机数并对移动设备进行认证。
- 加密
- 使用主密钥和初始化向量,生成一串密钥流。(种子)
- 加密器确保相同的 64 位密钥生成相同的密钥流。
- 密钥流与明文和校验和进行异或操作,生成密文。
- 安全漏洞
- 如果 IV 是随机分配的,预期在 5000 个数据帧中会出现一次重复使用的情况。如果 IV 是顺序分配的,那么在每次启动时都会重新使用 IV。
- 并且 IV 明文传输,因此 IV 的重复是会被察觉的
- 如果攻击者(Trudy)引导 Alice 加密一个已知的明文P 1,一旦 IV 重新出现,攻击者就能够知道对应的加密后的密文 P2。
- 对相同的密钥 C 进行两次加密会使得加密失效
- 802.11 i
- 通过使用独立的身份验证服务器,可以实现更强大的加密方式,并且提供更安全的密钥管理。身份验证服务器可以负责生成和分发密钥,确保只有授权的设备能够访问网络。
- 类似 AC,服务器为 AP 和设备分配共享对称密钥
防火墙¶
- 理念:
- 将组织的内部网络与更大的互联网隔离开来。
- 允许某些数据包通过,阻止其他数据包。
- 确保内部网络和系统免受外部的黑客和恶意软件的攻击
- 应用:
- 防止拒绝服务攻击:通过阻止攻击者建立伪造的 TCP 连接或尝试 ping 攻击来防止 SYN 洪泛等类型的拒绝服务攻击。
- 仅允许授权的访问进入内部网络,防止对内部数据的非法访问/修改
- &&无状态数据包过滤
- 基于数据包的源地址、目标地址、端口等信息进行过滤
- 例子
- 丢弃发出的 80 端口号包:禁用 web 服务
- 阻止 ACK 位为 0 的入站 TCP 段(发起方发送 SYN 段,其中的 ACK 字段为 0特殊标识!)防止建立 TCP 连接
- 丢失表示 TTL 超时的 ICMP,防止被路由追踪
- 丢失目的以太网地址是广播地址的包,防止被用于 Dos
- ACL 控制表
- 操作,来源、目的 ip,协议,端口,特殊标识
- 有状态数据包过滤(使用状态跟踪)
- 有状态跟踪功能,可以检测和控制数据包的状态和连接。
- 跟踪每个 TCP 连接的状态
- 在访问控制列表(ACL)中增加了一个指示,在允许数据包通过之前需要检查连接状态表。
- 应用程序网关:也称为代理服务器,它在应用层对网络流量进行过滤和代理,提供更高级的安全性和控制。
应用层¶
知识点¶
应用 | 特点 | 优点 | 缺点 | ||
---|---|---|---|---|---|
CS | Voice-over-IP | 集中化控制;客户端-服务器; | 高可靠性安全性高; | 单点故障 | |
P2P | BitTorrent | 分布式控制;对等节点 | 去中心化,无依赖;自扩展性 | 不保证可用 |
- DNS
- 从域名到 ip 的映射
- 分布式、自治性管理:可以更改自己的信息,不需要跟踪(记录)全世界的所有信息
- 域名层次结构
- 从根节点向下划分域名,使用树形结构
- 从右向左
*. nju. edu. cn
- DNS 数据库被分割成多个部分,并分布在不同的服务器上。每个服务器只存储与其具有管理权限的域相关的资源记录。
-
域名服务器
- 根域名服务器:保存了顶级域名的信息,如. com、. org、. net、. edu 等。当本地名称服务器无法解析某个名称时,它会向根域名服务器发送请求,并且可以提供对其他 DNS 服务器的查询引导。
- 顶级域名服务器(TLD):这些服务器负责管理顶级域名
- 授权 DNS 服务器:这些服务器属于组织或机构,提供对特定的域名到 IP 地址的授权映射。授权 DNS 服务器负责存储其具有管理权限的域中所有 DNS 名称的资源记录。
- 本地名称服务器:不严格属于 DNS 层次结构,每个住宅 ISP、公司、大学都维护着自己的本地名称服务器。当主机发起 DNS 查询时,查询被发送到本地名称服务器,它负责处理查询并尝试解析域名(本地缓存查找)。如果本地名称服务器无法解析域名,它会向更高级的 DNS 服务器发送查询请求。
-
递归查询与迭代查询
-
FTP
- 客户端/服务器模型,相互传递文件
- FTP 有一个主进程负责处理新的请求(监听 21),有若干丛书进程负责处理具体请求
- 建立两条信道:数据/控制
- 控制连接在 21 端口(先创建,后释放)
- 数据连接在 20 端口(单次传输之后就关闭)
- 即采用分离的控制连接,称为带外传送控制信息
-
过程
- 进行客户端身份认证
- 客户端收到文件列表,查看
- 客户端选择文件进行处理,服务端收到指令后开始执行(传输)
-
电子邮件
- sc 模型
- 用户代理+邮件服务器
- Alice 的用户代理通过 SMTP 协议将邮件发送到她的邮件服务器,并将邮件放置在消息队列中。
- SMTP 客户端在客户端与 Bob 的邮件服务器之间建立 TCP 连接。
- SMTP 客户端通过 TCP 连接发送 Alice 的邮件。
- Bob 的邮件服务器将邮件放置在 Bob 的邮箱中。
- Bob 使用他的用户代理(UA),例如通过 POP 3 协议,来读取邮件。
- SMTP:用于传递简单文本消息的协议。(25 端口)
- TCP
- MIME:用于传递各种类型的数据,例如声音、图像、视频剪辑等,扩展了 SMTP 协议的功能。
- MIME 将邮件内容和附件中的所有数据都编码为7 位 ASCII 字符集,以确保兼容性(可以使用 SMTP 来传输)和可靠的传输。
- POP:用于从服务器中检索邮件的协议,包括授权和下载邮件。
- 用于用户代理(邮件客户端)与邮件服务器之间的授权验证和邮件下载过程。
-
IMAP:用于在服务器上操作存储的邮件的协议。
-
WWW
- 由许多互连的文档(称为“页面”)组成的分布式数据库。每一个事物都是一个资源,通过 URL 进行获取和访问
- cs 模式
- url
- 每个页面都有一个唯一的地址,称为统一资源定位符(URL),可以通过浏览器访问
- 格式
<protocol>://<host>:<port>/<path>?<query_string>
- 协议;主机(域名/ip);端口;路径;查询字符串(url 参数)
-
缓存
- 引用局部性指的是在一段时间内,访问的数据往往具有较高的相关性,即相邻的数据项更有可能被多次访问。
- 在本地浏览器保存网页,请求时提供上一次的请求时间,询问是否发生了变化
-
HTTP
- 无状态性
- 每个客户端请求和服务器的响应都被独立地处理,服务器不需要保留先前请求的状态
- 优点:故障处理更加容易;服务器能够处理更高速率的请求;请求的顺序对服务器来说不重要
- 缺点:某些应用程序需要保持持久状态
- 过程
- 先建立 TCP 连接然后发送请求
- cookie
- 状态存储在客户端
- 身份认证
- 问题:cookie 可能会泄露信息,发送给网页服务器
-
效率
- 网页上有很多 object,图片等各种信息,早期 http一次一个,效率很低
- 办法:同时发送多个请求;一个 TCP传输更多信息
- 小文件延时(传输时间忽略)Tip 一个 RTT 是一个来回
- 逐个获取 2 nRTT
- 并发获取(m 个并发连接)2[n/m]RTT
- 持久连接(一个 TCP 一次获取一个,HTTP 1.1 引入)(n+1) RTT
- 流水线传输(一个连接,一次全部获取) 2 RTT
- 流水线传输与持久连接:首次 2 RTT,之后 RTT
- 大文件延时(忽略 RTT)
- 逐个获取nF/B
- 并发获取 [n/m]F/B(前提是多个 TCP 时总带宽增加)
- 流水线传输和/或持久连接nF/B
-
CDN
- 转发代理
- 客户端发送请求时,请求首先发送到转发代理,然后由代理服务器转发请求到目标服务器。
- 转发代理还可以缓存响应以提高性能,减少对目标服务器的请求
- 代表客户端发送请求。
- 反向代理
- 使用反向代理进行缓存可以将文档缓存在靠近服务器的位置。代表目标服务器处理请求,并将响应返回给客户端。
- DNS 转接到 CDN 的地址(重定向)
- 一个域名会映射到多个 ip
- (路由)转接到最近的、负载最小的服务器
- CDN 通过创建一个“地图”,标示出与末端 ISP 和 CDN 服务器之间的距离。当查询到达权威 DNS 服务器时,服务器确定查询起源的 ISP,并使用“地图”来确定最佳的 CDN 服务器。CDN 服务器创建一个应用层覆盖网络。