计算机网络
Comment网络层
网络层核心功能与拥塞控制
网络层核心功能详解
网络层(Network Layer)作为OSI模型的第三层,是实现端到端通信的枢纽。其核心功能确保数据包能够在复杂的网络环境中从源主机穿越多个网络到达目的主机。
| 核心功能 | 详细阐述 | 实现技术/协议 |
|---|---|---|
| 路由选择 (Routing) | 决定数据包从源到目的的传输路径。路由器根据路由算法计算出最佳路径,并生成路由表,用于指导分组转发。这是网络层的“决策”过程。 | OSPF, BGP, RIP, IS-IS |
| 分组转发 (Forwarding) | 当一个数据包到达路由器时,路由器根据其转发表(Forwarding Table)查找出接口,并将数据包从该接口传输出去。这是网络层的“执行”过程。 | IP地址查找、转发表查询 |
| 异构网络互联 | 将不同类型的网络(如以太网、Wi-Fi、蜂窝网络)连接起来,形成一个统一的、逻辑上的互联网。网络层通过IP协议屏蔽了底层物理网络的差异。 | IP协议、路由器、网关 |
| 寻址与地址管理 | 为网络中的每一台主机和路由器分配唯一的地址(IP地址),确保数据包能够被准确地送达目的地。 | IPv4, IPv6, DHCP, ICMP |
网络层拥塞控制机制
拥塞(Congestion) 是指网络中因资源(如带宽、处理器、缓存)需求超过可用能力而导致服务质量急剧下降的现象。网络层的拥塞控制旨在预防和缓解拥塞,确保网络高效稳定运行。
拥塞的成因与影响
| 成因 | 描述 |
|---|---|
| 多点对单点流量 | 多个发送方同时向一个接收方发送大量数据,导致接收方链路或路由器拥塞。 |
| 链路带宽不足 | 数据到达速率超过了出向链路的传输能力。 |
| 路由器处理能力有限 | 路由器CPU或内存不足,无法及时处理和转发数据包,导致队列溢出和丢包。 |
| 网络结构不合理 | 网络拓扑设计存在瓶颈,导致流量集中在少数链路上。 |
拥塞会导致分组丢失、时延增加、吞吐量下降,严重时甚至引发拥塞崩溃(Congestion Collapse),即网络吞吐量随负载增加而急剧下降至接近于零。
拥塞控制的基本方法
网络层的拥塞控制可以分为开环控制和闭环控制两大类。
| 控制类型 | 描述 | 优点 | 缺点 |
|---|---|---|---|
| 开环控制 (Open-Loop) | 在设计阶段就考虑拥塞问题,通过静态策略来避免拥塞。一旦系统启动,不再根据当前网络状态进行调整。 | 简单,无额外开销 | 无法适应网络动态变化 |
| 闭环控制 (Closed-Loop) | 基于网络状态的实时反馈来动态调整。系统通过监测拥塞信号(如丢包、时延)来采取相应措施。 | 适应性强,效果好 | 实现复杂,有反馈时延 |
典型拥塞控制算法
网络层拥塞控制的经典算法主要体现在流量整形和调度上。
流量整形 (Traffic Shaping)
流量整形通过平滑数据包的发送速率来限制流量的突发性,从而使网络流量更加平稳可预测。漏桶算法 (Leaky Bucket)
该算法将数据包视为水滴,放入一个固定容量的桶中。桶底有一个小孔,以恒定的速率漏水(发送数据包)。- 优点:强制输出速率恒定,消除流量突发。
- 缺点:即使网络空闲,输出速率也不能提高,无法利用网络空闲资源。
漏桶参数 描述 桶容量 (Bucket Size) 允许的突发数据量上限。 漏水速率 (Leak Rate) 数据包的恒定发送速率。 令牌桶算法 (Token Bucket)
系统以恒定速率向桶中放入令牌(Token)。发送数据包时,必须消耗与数据包大小相当的令牌。- 优点:允许一定程度的突发,只要桶中有足够的令牌。当网络空闲时,可以累积令牌用于后续的突发传输。
- 缺点:实现比漏桶复杂。
令牌桶参数 描述 桶容量 (Bucket Size) 允许累积的最大令牌数,决定了最大突发量。
| 令牌生成速率 (Token Rate) | 平均发送速率。 |
分组调度 (Packet Scheduling)
当多个数据包在路由器队列中等待发送时,分组调度算法决定下一个被发送的数据包。- 公平排队 (Fair Queuing, FQ)
为每个流(Flow)维护一个独立的队列,并循环地从每个非空队列中取出一个数据包进行发送,从而保证各个流之间能够公平地共享链路带宽。- 优点:隔离不同流,防止一个高流量的流影响其他流。
- 缺点:计算复杂,开销较大。
- 公平排队 (Fair Queuing, FQ)
TCP/IP体系中的网络层服务
TCP/IP体系的网络层提供**无连接的、尽力而为(Best-Effort)**的数据报服务。
| 服务特征 | 描述 | 影响与设计哲学 |
|---|---|---|
| 无连接 (Connectionless) | 发送数据前无需建立连接,每个数据包(IP数据报)被独立处理和路由。 | 简化了网络核心,提高了灵活性和鲁棒性。 |
| 不可靠 (Unreliable) | 不保证数据包的可靠交付,可能出现丢失、重复、失序等问题。 | 将可靠性保障的责任转移到端系统(传输层,如TCP)。 |
| 尽力而为 (Best-Effort) | 网络不提供任何服务质量(QoS)承诺,但会尽最大努力传输数据包。 | 使得网络能够适应各种应用和底层硬件,是互联网成功的关键原则之一。 |
路由算法与协议
路由算法是网络层软件的核心,其性能好坏直接影响网络的服务质量。路由算法的目标是为数据包确定一条从源到目的地的“最佳”路径。最佳路径通常指跳数最少、时延最小或成本最低的路径。
路由算法可以分为两大类:静态路由和动态路由。
- 静态路由:由网络管理员手动配置路由信息。适用于拓扑结构简单且稳定的小型网络。
- 动态路由:路由器之间通过路由协议交换信息,自动计算并更新路由表。适用于复杂和动态变化的网络环境。
动态路由算法主要分为距离向量算法和链路状态算法两大家族。
距离向量算法 (Distance-Vector)
距离向量算法是一种分散式的路由算法。每个路由器仅维护一张路由表,其中包含到所有其他节点的“距离”(成本)和下一跳路由器。路由器周期性地与直接相邻的路由器交换整个路由表。
核心思想:贝尔曼-福特算法 (Bellman-Ford)。每个路由器根据邻居发来的路由信息,更新自己的路由表。更新公式如下:
Dx(y) = min{ c(x,v) + Dv(y) } for each neighbor v
Dx(y): 节点x到节点y的最小成本路径。c(x,v): 从x到邻居v的链路成本。Dv(y): 邻居v的路由表中,到目的y的最小成本。
算法特点
| 特点 | 描述 |
|---|---|
| 信息交换 | 只与相邻路由器交换信息。 |
| 交换内容 | 交换整个路由表。 |
| 更新周期 | 周期性更新(如每30秒)。 |
| “好消息传得快,坏消息传得慢” | 当网络链路成本降低时,信息能很快传播;但当链路成本增加或断开时(无穷大),可能导致路由环路和无穷计数问题。 |
典型协议:RIP
路由信息协议 (Routing Information Protocol, RIP) 是最早的内部网关协议之一,基于距离向量算法。
- 成本度量:跳数(Hop Count),最大为15。16表示不可达。
- 更新机制:每30秒与邻居交换一次路由表。
- 缺点:最大跳数限制了网络规模,收敛速度慢,容易产生路由环路。
链路状态算法 (Link-State)
链路状态算法中,每个路由器都试图获取网络的完整拓扑信息。它通过向网络中所有其他路由器广播自己的链路状态信息(与哪些邻居相连以及链路成本)来实现这一点。
核心思想:迪杰斯特拉算法 (Dijkstra)。每个路由器在拥有了完整的网络拓扑图后,以自己为根节点,计算到所有其他节点的最短路径。
工作流程
- 发现邻居:路由器启动时,向邻居发送Hello包,建立邻接关系。
- 测量成本:测量到每个邻居的链路成本(如延迟、带宽)。
- 构建链路状态包 (LSP):将自己的身份、邻居列表和链路成本打包成LSP。
- 广播LSP:通过**泛洪(Flooding)**方式将LSP发送给网络中所有其他路由器。
- 计算最短路径:每个路由器根据收集到的所有LSP,构建出完整的网络拓扑图,并使用Dijkstra算法计算最短路径。
Dijkstra算法伪代码
1 | |
典型协议:OSPF
开放最短路径优先 (Open Shortest Path First, OSPF) 是目前应用最广泛的内部网关协议,基于链路状态算法。
- 成本度量:基于带宽计算,与链路带宽成反比。
- 更新机制:当链路状态发生变化时才进行触发式更新,效率高。
- 区域划分:支持将大型网络划分为多个区域(Area),减少了路由信息的交换量,提高了可扩展性。
距离向量 vs. 链路状态
| 对比维度 | 距离向量 (DV) | 链路状态 (LS) |
|---|---|---|
| 拓扑认知 | 只了解邻居,对全局拓扑无知 | 拥有完整的网络拓扑图 |
| 信息交换 | 与邻居交换路由表 | 向全网广播链路状态 |
| 算法复杂度 | 简单,但可能收敛慢 | 复杂 (Dijkstra),但收敛快 |
| 收敛速度 | 慢,可能存在无穷计数问题 | 快,触发式更新 |
| 可扩展性 | 差,受网络规模限制 | 好,通过区域划分支持大型网络 |
| 典型协议 | RIP, IGRP | OSPF, IS-IS |
路径向量协议:BGP
边界网关协议 (Border Gateway Protocol, BGP) 是互联网的核心,用于在不同的自治系统 (Autonomous System, AS) 之间交换路由信息。它不关心路径的成本,而是关心路径本身。
- 核心功能:在AS之间寻找一条“可达”且“无环”的路径。
- 路径属性:BGP的路由决策基于多种路径属性,如AS-PATH(AS路径)、NEXT-HOP(下一跳)等,通过复杂的策略来选择最佳路由。
- 可靠传输:BGP使用TCP作为其传输层协议,保证了路由信息的可靠交换。
网络层服务模型
服务类型概述
网络层可以为上层提供两种不同的服务模型,每种模型都有其特定的应用场景和技术特点。
虚电路服务(Virtual Circuit Service)
基本概念
虚电路:一条逻辑上的连接路径,分组沿着这条路径按存储转发方式传送。
| 特征类别 | 具体表现 | 技术实现 | 应用效果 |
|---|---|---|---|
| 逻辑连接 | 建立端到端的逻辑通信路径 | 虚电路标识和状态维护 | 提供连接感知 |
| 路径固定 | 所有分组沿相同路径传输 | 路径预先计算和保留 | 保证传输顺序 |
| 状态维护 | 网络设备维护连接状态信息 | 虚电路表和状态机 | 支持流量控制 |
工作流程
| 阶段 | 主要操作 | 网络行为 | 资源分配 |
|---|---|---|---|
| 建立连接 | 协商通信参数,建立虚电路 | 路径计算和资源预留 | 分配虚电路号 |
| 数据传输 | 分组按序沿固定路径传输 | 基于虚电路号转发 | 维护连接状态 |
| 释放连接 | 清理连接状态,释放资源 | 删除路径信息 | 回收虚电路号 |
数据报服务(Datagram Service)
基本概念
数据报服务:网络层提供简单灵活的、无连接的、尽最大努力交付的服务模式。
| 服务特征 | 具体表现 | 设计理念 | 技术优势 |
|---|---|---|---|
| 无连接性 | 发送前无需建立连接 | 简化网络层设计 | 降低网络复杂度 |
| 独立转发 | 每个分组独立选择路由 | 分布式路由决策 | 提高网络灵活性 |
| 尽力交付 | 网络尽最大努力传输分组 | 简单的转发机制 | 适应多种网络环境 |
服务质量特征
“尽最大努力”的含义:
| 问题类型 | 可能发生的情况 | 网络层处理 | 解决层次 |
|---|---|---|---|
| 分组出错 | 传输过程中数据损坏 | 一般不通知源主机 | 上层协议处理 |
| 分组丢失 | 网络拥塞或设备故障导致丢包 | 静默丢弃 | 传输层重传 |
| 分组重复 | 网络故障恢复导致重复传输 | 不进行去重处理 | 传输层去重 |
| 分组失序 | 不同路径导致到达顺序混乱 | 不保证顺序 | 传输层重排序 |
设计优势
| 优势类别 | 具体表现 | 技术基础 | 应用价值 |
|---|---|---|---|
| 成本低廉 | 网络设备简单,造价降低 | 无状态转发设计 | 降低网络建设成本 |
| 运行灵活 | 适应动态网络环境变化 | 自适应路由机制 | 提高网络鲁棒性 |
| 应用广泛 | 支持多种类型的网络应用 | 通用的服务接口 | 促进互联网发展 |
IPv4与IPv6协议对比
随着互联网的快速发展,IPv4地址资源逐渐枯竭,IPv6作为其继任者被设计出来以应对未来的网络需求。两者在设计理念和技术实现上有显著差异。
核心设计差异
| 对比维度 | IPv4 (Internet Protocol version 4) | IPv6 (Internet Protocol version 6) | 演进优势 |
|---|---|---|---|
| 地址长度 | 32位 (约43亿个地址) | 128位 (理论上无限的地址空间) | 根本解决地址耗尽问题 |
| 地址表示 | 点分十进制 (如 192.168.1.1) | 冒号十六进制 (如 2001:0db8:85a3::8a2e:0370:7334) | 更适合大规模地址管理 |
| 报头结构 | 20字节固定部分 + 可变选项 | 40字节固定报头 + 扩展报头 | 简化报头,提高路由器处理效率 |
| 地址配置 | 手动配置、DHCP | 无状态地址自动配置 (SLAAC)、DHCPv6 | 即插即用,简化网络管理 |
| 安全性 | 可选的IPsec协议 | 强制内置IPsec支持 | 原生提供端到端安全保障 |
| 服务质量(QoS) | 通过区分服务(DiffServ)字段支持 | 通过流标签(Flow Label)字段优化 | 更精细化的流量控制 |
| 分片处理 | 路由器和源主机均可分片 | 仅源主机可分片 | 减轻路由器负担,提升转发性能 |
| 广播支持 | 支持广播 (Broadcast) | 不支持广播,由任播(Anycast)和组播(Multicast)替代 | 减少网络风暴,提高网络效率 |
IPv4报头结构
IPv4报头由20字节的固定部分和最多40字节的可选字段组成。
| 字段 | 位数 | 描述 |
|---|---|---|
| 版本 (Version) | 4 | IP协议版本号,对IPv4恒为4。 |
| 首部长度 (IHL) | 4 | 报头长度,单位为4字节,最小为5 (20字节)。 |
| 区分服务 (DS) | 8 | 用于服务质量(QoS),替代了旧的TOS字段。 |
| 总长度 (Total Length) | 16 | 整个IP数据报的长度(报头+数据),单位为字节。 |
| 标识 (Identification) | 16 | 唯一标识一个数据报的所有分片。 |
| 标志 (Flags) | 3 | 控制分片,如DF(Don’t Fragment), MF(More Fragments)。 |
| 片偏移 (Fragment Offset) | 13 | 分片在原始数据报中的位置。 |
| 生存时间 (TTL) | 8 | 数据报在网络中可通过的最大跳数,每经过一个路由器减1。 |
| 协议 (Protocol) | 8 | 上层协议类型 (如TCP=6, UDP=17)。 |
| 首部检验和 (Checksum) | 16 | 用于校验报头在传输中是否出错。 |
| 源地址 (Source Address) | 32 | 发送方的IPv4地址。 |
| 目的地址 (Destination Address) | 32 | 接收方的IPv4地址。 |
| 选项 (Options) | 可变 | 用于网络测试、安全等,长度可变,最多40字节。 |
IPv6报头结构
IPv6采用40字节的固定报头,将不常用的功能移至扩展报头,大大简化了基本报头结构。
| 字段 | 位数 | 描述 |
|---|---|---|
| 版本 (Version) | 4 | IP协议版本号,对IPv6恒为6。 |
| 流量类别 (Traffic Class) | 8 | 类似于IPv4的DS字段,用于QoS。 |
| 流标签 (Flow Label) | 20 | 标识属于同一“流”的数据包,用于特定服务质量的请求。 |
| 有效载荷长度 (Payload Length) | 16 | IPv6报头之后的数据部分长度,不包括基本报头。 |
| 下一报头 (Next Header) | 8 | 标识紧跟在基本报头后的扩展报头类型或上层协议。 |
| 跳数限制 (Hop Limit) | 8 | 相当于IPv4的TTL。 |
| 源地址 (Source Address) | 128 | 发送方的IPv6地址。 |
| 目的地址 (Destination Address) | 128 | 接收方的IPv6地址。 |
IPv6扩展报头:IPv6将选项功能放入可串联的扩展报头中,只有需要时才添加,常见的扩展报头包括逐跳选项、路由、分片、认证、封装安全有效载荷等。
虚电路与数据报
虚电路服务
概述:两台计算机进行通信时首先建立网络层的连接(一条逻辑上的虚电路,VC,不是物理连接。),连接建立后就固定了虚电路对应的物理路径
比较:采用电路交换的电话通信则是建立一条真正的物理连接。
特点:
- “虚”:指的是这条电路不是专用的。一段物理链路可以有很多条虚电路。
节点到其他节点之间的链路可能同时有若干条虚电路通过,亦或是建立。也不需要为每条VC预分配带宽。 - 核心思想:可靠通信由网络自身来保证。
- “虚”:指的是这条电路不是专用的。一段物理链路可以有很多条虚电路。
通信过程(三个阶段):
- 虚电路建立
- 每次建立将一个未用过的虚电路号(VCID)分配给虚电路。
- 分组的首部仅在连接建立时使用完整的目的地址,之后每个分组的首部只需携带虚电路编号即可。
- 【动作】 A发“呼叫请求”分组,B收到并同意连接,发送“呼叫应答”分组进
- 数据传输
- 建立虚电路后,AB可以相互传送数据分组
- 虚电路释放
- 结束后,A发“请求释放”分组拆除虚电路;
- 整个连接逐个断开。
虚电路服务的特点
| 特点 | 详述 |
|---|---|
| 时间开销大 | 建立和拆除需要时间开销; 对于交互式应用、少量短分组场景浪费; 对于长时间频繁数据交换效率高。 |
| 路由选择的体现 | 路由选择体现在建立阶段。 |
| 可靠、对端点的流量控制 (保证分组有序到达) | 提供可靠通信功能,保证每个分组正确、有序地到达; 可以对两个端点流量进行控制,通知发送方暂缓发送 |
| 致命弱点 | 某个节点或某条链路出现故障、彻底失效时,会破坏经过这个节点或链路的虚电路。 |
| 相对数据报方式开销小 | 分组首部不包含目的地址,而是虚电路号。 |
数据报服务
概述
- 网络在发送分组前不需要先建立连接;
- 源主机的高层协议将报文拆成若干较小的数据段,并加上地址等控制信息后构成分组;
- 中间阶段存储分组很短一段时间,找到路由后尽快转发给每个分组。
- 网络层不提供服务质量承诺。不提供端到端的可靠传输服务。所以路由器比较简单,造价低廉。复杂的网络功能置于因特网边缘(用户主机及其内部运输层)
通信过程:A向B发送分组
| 步骤 | 详述 |
|---|---|
| 主机A发给交换节点 | 主机A先将分组逐个发往与之直接相连的交换节点,交换节点缓存分组 |
| 查找转发表 | 交换节点查找自己的转发表,转发给别的交换节点 |
| 继续转发直到抵达B | 其他交换节点也类似地继续转发,直到B收到 |
数据报服务特点
| 特点 | 详述 |
|---|---|
| 无须建立连接 | 发送方随时发送,接收方随时接收 |
| 不保证可靠 | 网络只是尽最大努力交付。分组可能丢失。由于每个分组路由选择转发都是独立的,所以路径可能不同,分组也不一定按序到达 |
| 需完整地址 | 需要包括发送方和接收方的完整地址,这样才能独立传输 |
| 视情况丢弃 | 分组在交换节点处的存储转发需要排队等候,产生时延,网络拥塞时视情况丢弃部分分组 |
| 适应能力强 | 对于冗余和故障路径,相应地更新转发表,对故障适应能力强 |
优点:网络造价大大降低。运行方式灵活。适用多种应用场景。
软件定义网络(SDN)
SDN技术概述
基本概念
软件定义网络(Software-Defined Networking, SDN):一种创新的网络架构,采用集中式控制平面和分布式数据平面,实现控制与转发的彻底分离。
| 架构特征 | 传统网络 | SDN网络 |
|---|---|---|
| 控制模式 | 分布式控制 | 集中式控制 |
| 平面耦合 | 控制平面与数据平面紧耦合 | 控制平面与数据平面分离 |
| 设备功能 | 路由器具备完整控制和转发功能 | 交换机仅负责数据转发 |
| 网络视图 | 局部网络状态 | 全局网络状态视图 |
传统网络架构对比
传统路由器特征:
- 既有转发表又有路由选择软件
- 既有数据平面又有控制平面
- 路由器之间相互交换路由信息
SDN架构变革:
- 路由器不再需要路由选择软件
- 路由器只执行简单操作:接收分组→查找转发表→转发分组
- 路由信息由远程控制器统一计算和下发
SDN架构组件
控制平面设计
远程控制器:位于网络中心位置的逻辑控制实体。
| 控制器功能 | 具体职责 | 技术实现 | 优势分析 |
|---|---|---|---|
| 状态感知 | 掌握各主机和整个网络状态 | 拓扑发现和状态监控 | 提供全局网络视图 |
| 路径计算 | 为每个分组计算最佳路由 | 集中式路由算法 | 实现全局最优化 |
| 策略下发 | 通过南向接口下发转发表 | OpenFlow等标准协议 | 统一网络控制 |
| 协议替代 | 取代传统分布式路由协议 | 集中式控制逻辑 | 简化网络管理 |
接口体系架构
SDN三大接口类型:
| 接口类型 | 连接对象 | 主要功能 | 典型协议 |
|---|---|---|---|
| 北向接口 | 控制器与上层应用 | 提供丰富API,屏蔽底层细节 | RESTful API |
| 南向接口 | 控制器与转发设备 | 建立双向会话,兼容不同硬件 | OpenFlow、NETCONF |
| 东西向接口 | 控制器集群内部通信 | 增强可靠性和可扩展性 | 集群协调协议 |
SDN技术优势与挑战
核心优势
| 优势类别 | 具体表现 | 技术基础 | 应用价值 |
|---|---|---|---|
| 集中控制 | 全局集中式控制和分布式高速转发 | 控制平面集中化 | 实现网络全局优化 |
| 可编程性 | 灵活可编程与性能平衡 | 标准化编程接口 | 支持快速业务创新 |
| 成本优化 | 网络设备制造与软件开发分离 | 硬件软件解耦设计 | 降低网络建设成本 |
| 管理简化 | 专用自动化工具编程配置 | 统一管理平台 | 提高运维效率 |
面临挑战
| 挑战类别 | 具体问题 | 风险分析 | 应对策略 |
|---|---|---|---|
| 安全风险 | 集中管理受攻击影响整个网络 | 单点故障风险 | 控制器冗余和安全加固 |
| 性能瓶颈 | 网络规模扩大后控制器成瓶颈 | 处理能力限制 | 分布式控制器架构 |
| 标准化 | 不同厂商设备兼容性问题 | 标准不统一 | 推进标准化进程 |
| 可靠性 | 控制器故障导致网络中断 | 可用性要求 | 高可用架构设计 |
网络拥塞控制
拥塞控制基础概念
拥塞现象定义
网络拥塞(Network Congestion):当网络中传输的数据量超过网络处理能力时,导致网络性能急剧下降的现象。
| 拥塞特征 | 具体表现 | 产生原因 | 影响后果 |
|---|---|---|---|
| 过量负载 | 输入流量超过网络处理能力 | 多个数据流同时传输 | 队列溢出和丢包 |
| 性能下降 | 网络吞吐量和响应时间恶化 | 资源竞争和排队延迟 | 用户体验质量降低 |
| 连锁反应 | 局部拥塞扩散到整个网络 | 重传和路由振荡 | 网络稳定性受损 |
拥塞状态判断
拥塞检测指标:
| 拥塞程度 | 网络表现 | 吞吐量特征 | 处理策略 |
|---|---|---|---|
| 正常状态 | 负载增加,吞吐量线性增长 | 吞吐量与负载成正比 | 维持当前传输速率 |
| 轻度拥塞 | 负载增加,吞吐量增长放缓 | 吞吐量明显小于正常值 | 适度降低发送速率 |
| 严重拥塞 | 负载增加,吞吐量反而下降 | 吞吐量随负载增大而减少 | 大幅减少发送速率 |
| 拥塞崩溃 | 网络几乎无法传输有效数据 | 吞吐量接近零 | 暂停发送并重新开始 |
拥塞控制目标与原理
控制目标
拥塞控制的核心目标:
| 目标类别 | 具体要求 | 实现方式 | 评价指标 |
|---|---|---|---|
| 信息获取 | 及时获取网络拥塞状态信息 | 拥塞检测和反馈机制 | 检测准确性和及时性 |
| 流量调节 | 根据拥塞信息调整发送速率 | 自适应速率控制算法 | 网络利用率和公平性 |
| 稳定运行 | 确保网络能承载达到的流量 | 负载均衡和资源管理 | 网络稳定性和可靠性 |
与流量控制的区别
拥塞控制 vs 流量控制:
| 对比维度 | 拥塞控制 | 流量控制 |
|---|---|---|
| 控制范围 | 整个网络的全局控制 | 发送方和接收方的点对点控制 |
| 控制目标 | 防止网络拥塞,保护网络资源 | 防止接收方缓冲区溢出 |
| 反馈信息 | 网络中间节点的拥塞状态 | 接收方的缓冲区状态 |
| 调节对象 | 所有发送方的发送速率 | 特定连接的发送速率 |
拥塞控制方法
开环控制(静态方法)
开环控制特征:在网络设计阶段预先考虑拥塞因素,制定静态策略。
| 控制策略 | 实现机制 | 适用场景 | 优缺点分析 |
|---|---|---|---|
| 准入控制 | 限制新连接的建立速率 | 连接建立阶段 | 简单有效但缺乏灵活性 |
| 流量整形 | 预先定义流量发送模式 | 流量源头控制 | 平滑流量但响应滞后 |
| 资源预留 | 为重要流量预留网络资源 | 关键业务保障 | 保证质量但资源浪费 |
| 丢包策略 | 预定义分组丢弃规则 | 缓冲区管理 | 防止溢出但可能过激 |
决策特点:做决定时不考虑当前网络状态,基于历史经验和统计规律。
闭环控制(动态方法)
闭环控制特征:基于实时网络状态反馈,动态调整控制策略。
| 控制阶段 | 主要活动 | 技术实现 | 反馈机制 |
|---|---|---|---|
| 监测检测 | 实时监控网络状态和性能指标 | 拥塞检测算法 | 状态信息收集 |
| 信息反馈 | 将拥塞信息传递给控制实体 | 显式/隐式反馈机制 | 拥塞通知传输 |
| 策略调整 | 根据反馈信息调整网络行为 | 自适应控制算法 | 参数动态更新 |
| 效果评估 | 评估控制策略的执行效果 | 性能监控和分析 | 控制效果反馈 |
反馈回路组成:
| 组件类型 | 功能作用 | 实现位置 | 关键技术 |
|---|---|---|---|
| 监测系统 | 检测网络拥塞状态 | 网络节点和链路 | 队列长度、延迟测量 |
| 反馈机制 | 传递拥塞信息 | 控制报文或数据标记 | ICMP、ECN等协议 |
| 控制算法 | 根据反馈调整发送行为 | 发送端和网络设备 | 速率控制、路由调整 |
| 执行机制 | 实施具体的控制措施 | 各网络层次 | 队列管理、调度算法 |
网络设备与交换技术
网络互联基础原理
路由器互联要求
协议层次兼容性原则:路由器互联的多个局域网对协议层次有特定要求。
| 协议层次 | 兼容性要求 | 技术原因 | 实际影响 |
|---|---|---|---|
| 物理层 | 可以不同 | 路由器可适配不同物理接口 | 支持异构网络连接 |
| 数据链路层 | 可以不同 | 路由器处理不同帧格式 | 实现多种LAN互联 |
| 网络层 | 可以不同 | 路由器支持协议转换 | 如IPv4与IPv6互联 |
| 传输层及以上 | 必须相同 | 路由器仅工作到网络层 | 确保端到端通信兼容 |
技术原理:路由器作为第三层设备,只能影响网络层及以下协议,对传输层以上协议无法进行处理和转换。
典型应用场景:IPv4和IPv6网络的互联需要专门的协议转换机制。
网络设备分类与特征
设备工作层次对比
网络设备分层工作原理:
| 设备类型 | 工作层次 | 核心功能 | 广播域处理 | 冲突域处理 |
|---|---|---|---|---|
| 集线器 | 物理层 | 信号再生和广播转发 | 不能分隔广播域 | 不能分隔冲突域 |
| 交换机 | 数据链路层 | 基于MAC地址的智能转发 | 不能分隔广播域 | 能够分隔冲突域 |
| 路由器 | 网络层 | 基于IP地址的路径选择 | 能够分隔广播域 | 能够分隔冲突域 |
路由器技术特征
路由器多网络互联特性:
| 技术特征 | 具体表现 | 技术优势 | 应用价值 |
|---|---|---|---|
| 广播控制 | 不转发广播包,分隔广播域 | 抑制广播风暴 | 提高网络性能 |
| 多地址配置 | 每个接口具有独立IP地址 | 支持多网络连接 | 实现网络间路由 |
| 硬件地址管理 | 每个接口具有独立MAC地址 | 适配不同网络环境 | 确保数据链路层通信 |
| 路由决策 | 基于路由表进行转发决策 | 实现最优路径选择 | 优化网络传输效率 |
交换技术分类与对比
交换技术特征对比
四种主要交换技术:
| 交换技术 | 技术特征 | 服务质量 | 适用场景 |
|---|---|---|---|
| 电路交换 | 建立专用物理通路 | 无差错控制功能 | 传统电话网络 |
| 报文交换 | 以完整报文为传输单位 | 存储转发,延迟较大 | 早期数据通信 |
| 分组交换 | 分为数据报和虚电路两种方式 | 限制分组大小 | 现代数据网络 |
| 存储转发 | 先接收完整分组再转发 | 确保数据完整性 | 所有分组交换网络 |
报文交换技术分析
报文交换技术特点:
| 技术维度 | 具体特征 | 技术影响 | 应用限制 |
|---|---|---|---|
| 传输单位 | 报文大小不固定 | 需要较大存储空间 | 存储需求高 |
| 处理时间 | 因报文大小不固定而变化 | 处理时间不可预测 | 不适合实时通信 |
| 存储要求 | 节点需存储完整报文 | 对设备内存要求高 | 增加设备成本 |
| 传输特性 | 存储转发方式 | 传输可靠性较高 | 延迟相对较大 |
分组交换服务模式
数据报交换特征:
| 服务特征 | 技术实现 | 服务优势 | 技术挑战 |
|---|
网络层前沿技术与发展趋势
随着云计算、大数据、人工智能等技术的飞速发展,传统网络架构面临着灵活性差、管理复杂、创新困难等诸多挑战。为此,一系列以智能化、虚拟化、可编程为核心的网络层前沿技术应运而生,引领着未来网络的发展方向。
软件定义网络 (Software-Defined Networking, SDN)
SDN是近年来最重要的一次网络架构变革。其核心思想是控制与转发分离,将原本分布在各个网络设备(如路由器、交换机)上的控制平面集中到一个中央控制器上,从而实现对网络资源的灵活调度和可编程控制。
| SDN架构三层 | 功能 | 关键接口 |
|---|---|---|
| 应用层 | 运行各种网络应用和服务,如负载均衡、安全策略、网络监控等。 | 北向接口 (NBI) |
| 控制层 | 网络的“大脑”,通过中央控制器(SDN Controller)维护全网拓扑,计算路由,并下发转发表。 | - |
| 数据层 | 由简单的转发设备(“白盒交换机”)组成,根据控制器下发的流表(Flow Table)进行高速数据包转发。 | 南向接口 (SBI),如OpenFlow |
SDN的优势:
- 集中控制与全局视野:控制器拥有全网拓扑信息,能够做出最优的全局决策。
- 网络可编程性:通过开放的北向接口,开发者可以像编写软件一样定义和管理网络行为。
- 自动化与敏捷性:快速部署新业务、自动化运维,降低了人力成本。
- 开放与创新:打破了传统网络设备厂商的锁定,促进了网络技术的创新。
网络功能虚拟化 (Network Functions Virtualization, NFV)
NFV旨在将传统的、基于专用硬件的网络功能(如防火墙、负载均衡器、NAT)从硬件中解耦出来,以纯软件的形式运行在通用的x86服务器上。NFV与SDN相辅相成,共同推动网络的虚拟化和软件化。
| NFV架构组件 | 描述 |
|---|---|
| 虚拟网络功能 (VNF) | 软件化的网络功能实例,如虚拟防火墙(vFW)、虚拟负载均衡器(vLB)。 |
| NFV基础设施 (NFVI) | 提供计算、存储、网络资源的通用硬件平台。 |
| 管理与编排 (MANO) | 负责VNF的生命周期管理、资源编排和自动化部署。 |
NFV的优势:
- 降低成本:用廉价的通用服务器替代昂贵的专用硬件。
- 灵活性与弹性:按需创建、伸缩和迁移网络功能,快速响应业务变化。
- 加速创新:缩短了新网络服务的开发和部署周期。
段路由 (Segment Routing, SRv6)
段路由是一种先进的源路由技术,它通过在数据包头中插入一个有序的“段”(Segment)列表来指导数据包的转发路径。特别是基于IPv6的段路由(SRv6),利用IPv6扩展报头的灵活性,实现了强大的网络编程能力。
核心思想:将网络路径分解为一系列的“段”,每个段代表一个特定的转发指令(如“到达节点X”、“经过链路Y”)。发送方在包头中指定这些段,网络设备只需按序执行即可,无需维护复杂的每流状态。
SRv6的优势:
- 简化网络:中间节点无需维护复杂的路径状态,降低了网络协议的复杂度。
- 强大的可编程性:通过组合不同的段,可以实现精细化的流量工程和业务链(Service Chaining)。
- 与SDN完美结合:SDN控制器可以轻松计算和下发段路径,实现对流量的精准控制。
意图驱动网络 (Intent-Based Networking, IBN)
IBN是网络自动化的更高阶段,它允许网络管理员用自然的业务语言(“意图”)来描述网络需求,而不是通过复杂的命令行配置。IBN系统负责将高级意图自动翻译成具体的网络策略,并完成部署、监控和保障。
IBN工作流程:
- 意图转译:将管理员的业务意图(如“保证视频会议的质量”)转译为网络策略。
- 策略部署:自动化地在全网设备上配置相应策略。
- 持续验证:实时监控网络状态,确保网络行为与原始意图一致。
- 智能修复:当出现偏差时,自动进行调整和修复,形成闭环控制。
IBN代表了网络管理的未来方向,即从“如何做”转变为“做什么”,极大地提升了网络的自动化和智能化水平。
| 路由选择 | 每个分组独立选择路由 | 故障后可另选路径 | 可能出现丢失和失序 |
| 可靠性保证 | 依赖高层协议(如TCP) | 网络层实现简单 | 端到端可靠性复杂 |
虚电路交换特征:
| 服务特征 | 技术实现 | 服务优势 | 技术挑战 |
|---|---|---|---|
| 连接模式 | 面向连接,可靠服务 | 保证可靠有序传输 | 连接建立开销 |
| 路径固定 | 建立连接后路径固定 | 分组按序到达 | 不适合高出错率系统 |
| 故障处理 | 节点故障影响整条虚电路 | 服务质量可保证 | 容错能力相对较弱 |
存储转发机制
存储转发工作原理
存储转发机制定义:网络节点必须先完整接收整个分组,然后才开始转发分组的第一位。
| 机制特征 | 技术实现 | 技术优势 | 性能影响 |
|---|---|---|---|
| 完整接收 | 接收完整分组后再处理 | 确保数据完整性 | 增加转发延迟 |
| 错误检测 | 可在转发前检测传输错误 | 避免错误数据传播 | 提高网络可靠性 |
| 缓冲管理 | 需要足够缓冲空间存储分组 | 支持不同速率链路 | 增加设备成本 |
| 流量控制 | 可实现有效的流量控制 | 防止网络拥塞 | 优化网络性能 |
IPv4
概述:也即网际协议(Internet Protocol,IP), 定义了数据传送的基本单元(IP分组)及其确切数据格式。IPV4地址是给因特网上的每一个主机/路由器的每一个接口分配的一个全世界范围内的唯一32比特(IPV6为128比特)的标识符。
IP数据报:IP分组也叫IP数据报。包括首部和数据部分。
- 首部前两个字节往往以0x45开头,可用于定位IP数据报开始的位置。
- 补充:“4”表示版本号,0100。首部的第一个字节前4位表示IP协议的版本。首部长度以32位(四个字)为单位,标准IP首部长度为20字节,20字节/4字节=5 (行,一行一个字)
- 标识:占16bit,作为一个计数器,也是数据报的编号。每产生一个数据报就++,若长度超出MTU,则需要分片,但是分片后的几个数据报的标识都相同,以便重组。(是数据报的编号不是分片的编号)
- 标志:占3bit 。标志最低位MF(1表示后面还有分片,0表示最后一个分片),中间位DF=0时才允许分片。
- 片偏移:占13bit。 指出较长的数据报在分片后某片在原数据报中的相对位置,以8B为偏移单位。除最后一个分片外,每个分片的长度一定是8B的整数倍。
- 生存时间(TTL):8bit,数据报在网络中可通过的路由器数的最大值,也就是数据报的寿命,限制数据报的无限转发。路由器转发数据报前都要使得TTL–,减到0时丢弃。
- 协议:8bit,指出携带的数据使用何种协议,应当上交给哪个协议处理。6:TCP 17:UDP
- 首部检验和:16bit,但是只检验首部不包括数据。经过一次路由器都要重新计算一次。
- 源地址字段:发送方 目的地址字段:接收方 都是IP地址,都占4B
| 字段基本单位 | 首部长度 | 总长度 | 片偏移 |
|---|---|---|---|
| 偏移量 | 4B | 1B | 8B |
IP数据报分片
最大传送单元(MTU):
- 一个链路层数据帧能承载的最大数据量。链路层MTU严格限制IP数据报长度。
- 取决于链路层协议。 以太网MTU:1500B 许多广域网:<=576B
- IP数据报总长度超出MTU时需要分装在多个较小IP数据报中,也就是分片。
分片重组:
目的主机使用IP首部中的标识、标志和片偏移字段完成重组。
过程:目的主机检查数据报的
标识号确定哪些数据报属于同一个原始数据报的片。标志位的后两位DF和MF。- 只有DF=0时能被分片。
- MF告知是否是最后一个片。MF=1说明有后续。
- 片偏移字段指出片应该放在原书IP数据报的哪个位置。
IPv4地址
概述: 长度为32,唯一。格式为: {<网络号>,<主机号>}
- 网络号:标志主机/路由器连接到的网络。网络号在整个互联网范围内唯一。
- 主机号:标志主机。在网络号指明的网络范围内唯一。
特殊用途IP地址:
| 地址 | 用途 |
|---|---|
| 主机号全0 | 表示本网络本身。<网络号,0…> |
| 主机号全1 | 表示本网络广播地址(直接广播地址) <网络号,255> |
| 127.x.x.x | 环回自检地址(Loopback Test),用于测试网络连接性和配置,不会被路由器转发到其他网络。目的地址为环回地址的IP数据报永远不会也不可能出现在任何网络上。 |
| 全0:0.0.0.0 | 本网络上的本主机 |
| 全1:255.255.255.255 | 表示整个TCP/IP网络的广播地址,也称受限广播地址。实际等效于本网络广播地址。 |
三种IP地址:
| 网路类别 | 最大可用网络数 | 第一个可用的网络号 | 最后一个可用的网络号 | 每个网络中的最大主机数 |
|---|---|---|---|---|
| A | 2^7-2 | 1 | 126 | 2^24-2 |
| B | 2^14 | 128.0 | 191.255 | 2^16-2 |
| C | 2^21 | 192.0.0 | 223.255.255 | 2^8-2 |
IP地址特点:
| IP地址特点 | 概述 |
|---|---|
| 一种分等级地址结构 | 由网络号和主机号构成。IP地址管理机构只分配网络号,主机号有网络自行分配,便于管理。路由器仅根据主机的网络号来转发分组,减少路由表存储占用。 |
| 标志主机或链路接口 | 同时连接到两个不同的网络时必须同时具有两个相应IP地址,这时路由器具有两个或以上的IP地址,每个端口都有不同网络号的IP地址(因为是不同网络 |
| LAN中 | 转发器/桥接器(网桥等)连接的若干LAN仍是同一个网络,同一个广播域。在LAN中所有主机网络号相同(同一网络),主机号必须不同(不同个体) |
| 网络平等 | 所有分配到网络号的网络平等 |
| 同一局域网 | IP地址里的网络号必须相同 |
| 注意点 | 分类编址问题中,划分网络的时候,注意要同时把一群主机连接路由器也划到这群主机里。如下所示:这个网络需要254+1=255个地址 |
NAT网络地址转换
**概述:**通过专用网络地址转换为公用地址,从而对外隐藏内部管理的IP地址。
- 意义:整个专用网只需要一个全球IP地址就可和互联网
**私有IP地址(可重用地址):**用于LAN,不用于WAN
- 不能直接用于Internet,必须通过网关利用IP地址转换为Internet中合法的全球IP地址。
- 并且允许私有IP地址被LAN重复使用。
- 互联网中所有路由器对目的地址为私有地址的数据报一律不进行转发。
| 类别 | 私有IP地址网段 |
|---|---|
| 1个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 |
**专用互联网:**也称本地互联网,即采用私有IP地址的互联网。
使用NAT:
- 需要在专用网–>互联网的路由器上安装NAT软件。
- NAT路由器至少有一个有效的外部全球IP地址。可使多个私有IP映射到一个全球IP。
- NAT路由器使用NAT转换表进行本地IP地址到全球IP地址的转换
- NAT转换表示例: 每个 LAN 局域网 IP 地址 : 端口号 , 与 WAN 广域网 IP 地址 : 端口号 的对应关系
- WAN 广域网地址 172.38.1.5 : 44444 , 对应 LAN 局域网地址 192.168.0.3 : 22222
- 网段:10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
NAT路由器工作原理:
- 某家庭获得一个全球IP地址,家庭里的三台主机使用私有地址(10.0.0.0网段)。
- 用户主机10.0.0.1想发送数据到128.119.40.186:80 ;
- NAT为IP分组生成新端口号,更改源地址为NAT的全球IP地址,更改源端口号为新端口号,并增加表项;
- 对方不知道分组已经变换,也不知道专用地址是多少,照常返回数据;
- NAT重新转换,改回原来的端口号和原来的专用地址。
划分子网 (目的是减少广播域的大小,结果是增加网络数量)
**概述:**两级IP地址的空间利用率低;给每个网络都划分一个网络后会使得路由表变得过大,降低性能。【改进】增加“子网号字段”,这就得到了三级IP地址。
基本思路:
- 子网划分是内部事务,外部并不知道
- 从主机号借用若干位作为子网号。 地址结构变为<网络号>,<子网号>,<主机号>
- 路由器的分组转发仍然是按照目的网络号。 只是本单位路由器收到IP数据报后再次根据目的网络号和子网号找到目的子网,然后交付给目的主机。
子网掩码:
格式:一个与IP地址相对应的32位二进制比特串,由一串1和随后的一串0组成。1对应于IP地址中的网络后及子网号,0对应主机号。
用法:由IP地址和子网掩码进行与**(AND)**运算可以得出相应的子网的网络地址。
指明分类IP地址的主机号部分被借用了多少位作为子网号。
注意点
- 路由器之间交换路由信息时必须将所在网络的子网掩码告诉对方
- 一台主机在设置IP地址信息的同时必须设置子网掩码。
- 同属于一个子网的所有主机及路由器的相应端口设置相同的子网掩码
- 路由器的路由表包含目的网络地址、子网掩码、下一跳地址
无分类编址CIDR (无分类域间路由选择) CIDR无类别域间路由
**CIDR概述:**在变长子网掩码的基础上提出的一种消除传统A B C类地址及划分子网的概念。使用网络前缀的概念代替网络的概念。分配一个【块】,而不是分配一整类地址。
- 与传统分类IP地址的最大区别:网络前缀的位数不固定,可以任意选取
**记法:**IP地址= <网络前缀>, <主机号>
斜线记法(CIDR记法):“IP地址/网络前缀所占用的位数”
网络前缀所占用位数对应网络号部分 ==子网掩码中连续1的部分
eg. 128.14.32.5/20 掩码为20个连续的1以及随后12个连续的0,“/”表示通过逐位“与”的方式来得到该地址的网络前缀。丫就是截取前20位。
这个IP地址可以写成10000000.00001110.00010000.00000101(写成二进制),子网掩码20为11111111.11111111.11110000.00000000(20个1),与后得到128.14.32.0(网络前缀)
可以进一步计算这个IP地址所在地址块的范围(地址块里的最小地址和最大地址)
最小地址(128.14.32.0) 最大地址(128.14.47.255) 10000000.00001110.00100000.00000000 10000000.00001110.00101111.11111111 注意点
- CIDR地址块中的地址数一定是2的整次幂。故可指派地址数一般为2^N-2 (剔除全0和全1)
- 地址块里的地址数越多,则网络前缀也就越短
路由聚合(也称构成超网)
概述:路由表中可以利用CIDR地址块来查找目的网络。这种地址的聚合称为路由聚合。
作用:使路由表中一个项目可以表示多个 原本传统分类地址 的路由,减少路由之间的信息交换,通过网络性能。 (基于CIDR的视角来合并部分网络的路由表项)
分析:不使用路由聚合,那么R1到网络1和网络2需要两条路由表项;注意到R1到两个网络的下一跳都是R2,网络1和网络2前16位相同(可以构成一个更大的地址块206.1.0.0/16)
最长前缀匹配:(也叫最佳匹配)使用CIDR时路由表各项由“网络前缀”和“下一跳地址”组成,查找路由表时可能会得到不止一个匹配结果。应当从匹配结果中选择具有最长网络前缀的路由(地址块越小,路由越具体)。
途径:通常将无分类编制路由表存放在一种层次数据结构中(二叉线索),自上而下查找。
采用CIDR编制,可以按照前缀的长短把前缀最长的放在第一行。只有检索到匹配的就停止检索。
子网划分方法:定长的子网掩码,变长的子网掩码
定长子网掩码
概述:
- 各子网使用相同的子网掩码。
- 各子网分配的IP地址数量相同(造成地址资源的浪费)
过程:
- 某单位拥有一个CIDR地址块208.115.21.0/24 不难看出主机号占最后八位
- 划分子网。 有4个单位,则划分成4个子网。从主机号的高位借两位作为子网划分。
- 现在主机号还剩下6位。这样每个子网可分配的地址数为2^8-2
变长的网络掩码划分子网
**概述:**每个子网可以使用不同的子网掩码。并且每个子网所分配的IP地址数量可以不同。
过程:
某单位拥有一个CIDR地址块208.115.21.0/24 不难看出主机号占最后八位。要划分给三个部门。
部门1的主机号需要6位,剩下26位作网络前缀。部门2需要5位,剩下27位作前缀。部门3的主机号需.位,剩余29位作前缀。
地址范围 划分方法 208.115.21.00000000 ~ 208.115.21.00111111 208.115.21.01000000 ~ 208.115.21.01011111 208.115.21.01100000 ~ 208.115.21.01100111 208.115.21.01000000 ~ 208.115.21.01011111 这种划分方案从大的开始划。部门1需要6位主机号,所以有2^6-2=62个可分配地址,剩下2位用来划分子网,并且部门1为00.
网络层转发过程
**概述:**分组转发基于目的主机所在网络(压缩转发表大小),转发表信息 (目的网络地址,下一跳地址),路由器根据IP地址的网络前缀来查表找到下一跳地址。
两种特殊路由:
【特定主机路由】对特定目的主机的IP地址专门指明一个路由。
作用:方便管理员控制和测试网络
【默认路由】用特殊前缀0.0.0.0/0表示默认路由。 当目的网络是其他网络(不是自身)也不在转发表中就一律选择默认路由
作用:通常用于路由器到互联网的路由(因为路由表不可能包含互联网上所有路由)
路由器分组转发算法:
- 从IP分组首部提取目的目的主机的IP地址
- 查找【特定主机路由】,找得到则按照这一项转发;找不到则开始按前缀长度顺序查找
- 对于查找中的一行,将【一行的子网掩码】与【目的地址】逐位【与】(AND),如果与结果和这一行的前缀匹配,结束查找。按下一跳转发。否则继续找下一行。
- 如果有一个【默认路由】,就传递给默认路由,没有,则【转发分组出错】。
注意:
- 因为转发表只给出下一跳地址,并非完整路径,所以传到一个路由器都要查一次它的转发表
- !! 得到下一跳IP地址后,将它通过ARP转换成MAC地址然后填到MAC帧首部,再根据这个MAC地址去找到下一跳的路由器
IP地址与硬件地址
各种地址:
| IP地址 | MAC地址(硬件地址) |
|---|---|
| 网络层及之上使用的地址,是分层式的。位于IP数据报首部。IP数据报封装成MAC帧之后,数据链路层是看不见IP地址的。 | 在数据链路层使用,平面式的。位于MAC帧首部。 |
**网络层寻址:**网络层只使用IP地址来寻址(因为路由器的隔离,无法通过广播MAC地址来跨网络寻址)。
寻址过程:
- 寻址时,每个路由器依据它的路由表选择到目标网络需要转发到的下一跳
- IP数据报通过多次路由转发到达目标网络后改为在目标局域网中通过数据链路层的MAC地址以广播的方式寻址
性质:
- 在IP层抽象的互联网上只能看到IP数据报
- IP数据报首部有源IP地址,但是路由器只使用目的IP地址来转发
- 局域网的链路层只能看到MAC帧,MAC帧中是封装的IP数据报。MAC帧首部的源地址和目的地址会不断地改变,因为IP数据报在每次转发过程中都会被拆解重新封装(路由器根据下一跳IP地址通过ARP转换成MAC地址填进MAC帧首部)
- 无法使用MAC地址跨网络通信。因为每次转发都要修改MAC地址,如上所述。
- IP层抽象的互联网屏蔽了下层复杂的细节,在网络层上可以使用统一抽象的IP地址来研究不同主机的通信
ARP 地址解析协议
ARP概述:
- 一种方法,旨在完成IP地址到MAC地址的映射。如果目的主机和源主机不在同一个局域网上,要通过ARP找到本局域网的某个路由器硬件地址,发分组传给它,并由这个路由器把分组转发给下一个网络。
- ARP工作在网络层(看得见IP地址);NAT工作在传输层(看得见端口).
ARP表:每个主机都有的一个ARP高速缓存,存放本局域网上各主机和路由器的IP地址到MAC地址的映射表
**原理:**A向本局域网主机B发送IP数据报: (ARP请求分组:广播发送 ARP响应分组:单播发送)
- 查ARP高速缓存,如果有B的IP地址,直接得到对应硬件地址,把它写入MAC帧,并发送给B
- 如果没有,通过使用目的MAC地址为FF-FF-FF-FF-FF-FF的帧封装和广播ARP请求分组。所有主机都会收到ARP请求。
- B收到后向A发送ARP响应分组,在分组里告诉A它(B)的IP地址和MAC地址映射关系,这样A可以写入它的ARP缓存,从而发送MAC帧
补充:
- ARP用来解决同一局域网主机/路由器的IP地址和硬件地址映射问题。不在一个局域网,则通过ARP找到某个路由器的硬件地址,发给这个路由器,让它转给下一个网络。
- IP地址到硬件地址的解析自动进行,用户并不知道。
- 主机或路由器和本网络另一个已知IP地址的主机或路由器进行通信时,ARP自动将IP地址解析成数据链路层需要的硬件地址
动态主机配置协议 DHCP
DHCP概述:
- 用于给主机动态地分配IP地址。
- 提供即插即用的联网机制,允许一台计算机加入新的网络和自动获取IP地址
- 应用层协议(通过客户/服务器模式工作),基于UDP
工作原理:
- 使用客户/服务器模型
- 需要IP地址的主机启动时向【DHCP服务器】广播发送【发现报文】,从而成为【DHCP客户】;
- 所有主机都能收到这个广播报文,但是只有【DHCP服务器】可以回答。
- 【DHCP服务器】在自己的数据库里查找这台主机的配置信息,找得到返回,找不到则从服务器的IP地址池中取一个地址分配给这台计算机。
- 【提供报文】DHCP服务器的回答报文。
过程:
- DHCP客户广播发现报文(源地址0.0.0.0,目的地址255.255.255.255)
- 服务器收到这个广播报文,广播【提供报文】,这里面包括给DHCP客户的IP地址,报文源地址为DHCP服务器地址,目的地址为255.255.255.255
- DHCP客户收到提供报文,如果接受这个IP地址,就需要广播“DHCP请求”给DHCP服务器。源地址0.0.0.0,目的地址255.255.255.255(同1.)
- DHCP服务器广播“DHCP确认”消息,把IP地址分配给这个客户。源地址目的地址同2.
注意点:
- 可以有多台DHCP服务器,可能有多个应答消息,但是DHCP客户只挑选其中一个(最先到达的)
- DHCP分配给客户的IP地址是【临时的】,客户只能在【租用期】内使用,租用期由服务器决定,客户也可以在报文中提出租用期要求。
- 交互过程采用广播方式。采用UDP。
ICMP 网际控制报文协议
ICMP概述:
- 目的:有效转发IP数据报,提高交付成功机会。
- 允许主机或路由器报告差错和异常情况
- 虽然ICMP报文封装在IP数据报中发送,但ICMP是依然是网络层协议。
- ICMP报文有两种:【ICMP差错报告报文】【ICMP询问报文】
ICMP差错报告报文及其五种类型:用于目标主机或到目标主机路径上的路由器。目的是向源主机报告差错和异常情况。
- 终点不可达:路由器/主机不能交付数据时向源主机发送
- 源点抑制:路由器/主机因为【拥塞】而丢弃数据报。 源点抑制报文告诉源点应该降低数据报的发送速率。
- 时间超过:
- 路由器收到生存时间TTL为0的数据报,除丢弃这个数据报外还需要向源点发送时间超过报文。
- 终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片全部丢弃,然后向源点发送时间超过报文。
- 参数问题:收到的数据报首部有的字段的值不正确,则丢弃并发送参数问题报文
- 改变路由(重定向):告诉主机下次应该把数据报发送给另外的路由器,可通过更好地路由
ICMP差错报告报文不应该发送:
情况一:对ICMP差错报告报文不再发送ICMP差错报告报文
情况二:第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报文
情况三:对于具有多播地址的数据报都不发送ICMP差错报告报文
情况四:对于特殊地址的数据报也不发送
ICMP询问报文的四种类型:
- 回送请求和回答报文
- 时间戳请求和回答报文
- 地址掩码请求和回答报文
- 路由器询问和通告报文
ICMP常见应用:
- 分组网间探测PING:测试两台主机间的连通性。工作在应用层,直接使用网络层的ICMP。
- Traceroute:跟踪分组经过的路由。 工作在网络层。
习题查漏补缺
一、IPv4计算首部检验和
- 先把IP数据报首部划分为许多16位字的序列,并把检验和字段置零。把所有16位字相加后,将得到的和的反码写入检验和字段。
- 接收方收到数据报后,将首部的所有16位字再使用反码算术运算相加一次。将得到的和取反码,即得出接收方检验和的计算结果。
- 若首部未发生任何变化,则此结果必为0
二、多IP:如果一个主机有两个以上的IP地址,那么这些IP地址应当属于不同的网络。所以他们的网络号一定不同。
IPv6(从根本上解决地址耗尽问题)
IPv6特点
| 特点 | 描述 |
|---|---|
| 更大地址空间 | 从IPv4的32位增大到128位。 地址空间是前者的2^96倍。 |
| 灵活首部 | IPv6首部长度固定,40B。选项放在有效载荷中,选项灵活可变(IPv4选项固定,放在首部可变部分.IPv4的首部长度是可变的,必须是4B****的整数倍) |
| 允许协议扩充 | 允许不断扩充功能。IPv4固定 |
| 支持即插即用 | 也即自动配置。无需使用DHCP(动态主机配置协议 ,DHCP服务器&DHCP客户) |
| 分片 | 只有源主机才能分片,是端到端的。 不允许类似IPv4传输路径中的路由分片。 |
| 增大了安全性 | 身份鉴别和保密功能是IPv6的扩展首部 |
| 兼容性 | IPv6与IPv4不兼容,但是与所有其他互联网协议兼容(TCP UDP ICMP IGMP DNS) |
| 无首部检验和 | IPv6协议没有首部检验和,这意味着攻击者无法通过篡改数据包来伪造或篡改数据,这有助于提高网络的安全性。 这一措施也加快了路由器处理数据报的速度。链路层会丢弃检测出差错的帧,并且传输层也有相应的差错处理机制,所以网络层额差错检测可以精简掉。 |
IPv6地址类型
- 单播
- 多播
- 任播(新增)
过渡技术
- 双协议栈
- 隧道技术
路由算法和协议
路由算法分类
| 类型 | 特点 | 示例 |
|---|---|---|
| 静态 | 手工配置 | - |
| 动态 | 自动调整 | RIP, OSPF, BGP |
路由协议对比
| 协议 | 类型 | 特点 |
|---|---|---|
| RIP | 距离向量 | 跳数限制15 |
| OSPF | 链路状态 | 支持分层区域 |
| BGP | 路径向量 | AS间路由 |
IP多播
多播地址
- IPv4:D类地址(224.0.0.0~239.255.255.255)
- IPv6:FF00::/8
多播协议
- IGMP:组成员管理
- 多播路由协议:构建多播树
移动IP
关键概念
- 家乡代理
- 外地代理
- 转交地址
- 三角路由问题
网络层设备
路由器功能
- 连接异构网络
- 分组转发
- 路由选择
- 分隔广播域
路由表vs转发表
| 路由表 | 转发表 | |
|---|---|---|
| 用途 | 路由选择 | 分组转发 |
| 生成 | 路由算法 | 从路由表得出 |
| 实现 | 软件 | 软件/硬件 |
传输层
传输层基础概念
传输层的作用与定位
传输层为运行在不同主机上的应用进程之间提供端到端的逻辑通信服务,是网络体系结构中承上启下的关键层次。
| 特征 | 描述 |
|---|---|
| 逻辑通信 | 从传输层角度看,通信的真正端点是主机中的应用进程,而非主机本身 |
| 协议栈分布 | 仅存在于通信子网边缘的主机中,路由器等中间设备只使用下三层功能 |
| 服务抽象 | 向上层应用屏蔽底层网络核心的复杂细节,提供统一的传输服务接口 |
传输层核心功能
应用进程间逻辑通信
- 端点识别:通过端口号标识主机内的具体应用进程
- 进程寻址:实现不同主机上应用进程的精确定位
- 通信抽象:为应用层提供进程到进程的直接通信视图
多路复用与分用机制
| 机制 | 定义 | 实现方式 |
|---|---|---|
| 复用(Multiplexing) | 发送方多个应用进程共享同一传输层协议 | 通过端口号区分不同应用进程的数据 |
| 分用(Demultiplexing) | 接收方传输层将数据正确分发给目标进程 | 根据目的端口号将数据交付给相应应用 |
差错检测与处理
| 协议类型 | 差错检测范围 | 错误处理策略 |
|---|---|---|
| TCP | 首部 + 数据部分 | 要求重传错误报文段 |
| UDP | 首部 + 数据部分 | 直接丢弃错误数据报 |
| IP | 仅检测首部 | 不检查数据部分完整性 |
连接管理服务
传输层提供两种不同的服务模式:
| 服务类型 | 协议代表 | 通信信道特征 | 适用场景 |
|---|---|---|---|
| 面向连接 | TCP | 全双工可靠逻辑信道 | 要求数据可靠传输的应用 |
| 无连接 | UDP | 不可靠逻辑信道 | 对实时性要求高的应用 |
传输层协议概览
TCP:传输控制协议(Transmission Control Protocol)
- 服务特征:面向连接、可靠传输、全双工通信
- 核心机制:确认重传、流量控制、拥塞控制、连接管理
- 适用场景:文件传输、网页浏览、电子邮件等可靠性优先的应用
UDP:用户数据报协议(User Datagram Protocol)
- 服务特征:无连接、不可靠传输、简单高效
- 核心机制:基本的多路复用/分用、可选的差错检测
- 适用场景:实时音视频、DNS查询、简单请求-响应等效率优先的应用
传输层寻址机制
端口概念与作用
端口是传输层实现多路复用和分用的关键机制,为应用进程提供了在传输层的唯一标识符。
端口的本质与功能
- 抽象接口:端口是协议栈层间的抽象协议接口,实现应用进程与传输层实体的交互
- 进程标识:在传输层中的作用类似于IP地址在网络层中的作用,用于标识特定的应用进程
- 数据分发:使传输层能够将接收到的数据正确分发给目标应用进程
端口类型区分
| 端口类型 | 定义 | 特点 | 应用场景 |
|---|---|---|---|
| 软件端口 | 协议栈层间的抽象协议端口 | 逻辑概念,用于进程标识 | 传输层使用的端口类型 |
| 硬件端口 | 物理设备间的连接接口 | 物理概念,用于设备连接 | 路由器、交换机等设备接口 |
网络层次服务访问点
各层协议通过不同的服务访问点实现层间数据的正确分发:
| 协议层次 | 服务访问点 | 标识作用 | 典型值 |
|---|---|---|---|
| 数据链路层 | 帧类型字段 | 标识上层协议类型 | 0x0800(IPv4) |
| 网络层 | 协议字段 | 标识传输层协议 | 6(TCP)、17(UDP) |
| 传输层 | 端口号字段 | 标识应用进程 | 80(HTTP)、53(DNS) |
| 应用层 | 用户界面 | 用户交互接口 | 应用程序界面 |
端口号分配体系
端口号基本特征
- 位长:16位二进制数(取值范围:0-65535)
- 作用域:仅具有本地意义,只标识本地主机中的应用进程
- 唯一性:在同一主机上,同一时刻每个端口号只能被一个进程使用
端口号分类与分配
| 端口类别 | 数值范围 | 分配机构 | 使用特点 | 典型应用 |
|---|---|---|---|---|
| 熟知端口号 | 0-1023 | IANA统一分配 | 标准服务固定使用 | 系统服务、标准协议 |
| 登记端口号 | 1024-49151 | IANA登记管理 | 注册后避免冲突 | 用户应用程序 |
| 动态端口号 | 49152-65535 | 系统动态分配 | 临时使用,通信结束释放 | 客户端临时端口 |
常用熟知端口号
| 应用协议 | 端口号 | 传输协议 | 服务描述 |
|---|---|---|---|
| FTP | 21 | TCP | 文件传输协议控制连接 |
| TELNET | 23 | TCP | 远程终端协议 |
| SMTP | 25 | TCP | 简单邮件传输协议 |
| DNS | 53 | UDP/TCP | 域名系统 |
| TFTP | 69 | UDP | 简单文件传输协议 |
| HTTP | 80 | TCP | 超文本传输协议 |
| SNMP | 161 | UDP | 简单网络管理协议 |
动态端口分配机制
- 分配时机:客户端进程发起连接时由操作系统自动分配
- 生命周期:仅在通信期间有效,连接结束后立即释放
- 重用性:端口号可在不同时间被不同进程重复使用
- 别名:也称为临时端口号或短暂端口号
传输层服务模式
传输层提供两种截然不同的服务模式,分别对应TCP和UDP协议,满足不同应用场景的需求。
面向连接服务(TCP)
服务特征
- 连接导向:通信前必须建立连接,通信后必须释放连接
- 可靠传输:保证数据无差错、不丢失、不重复、按序到达
- 全双工通信:支持双向同时数据传输
- 点对点连接:每条TCP连接只能连接两个端点
可靠性保障机制
| 机制类型 | 功能描述 | 实现方式 |
|---|---|---|
| 确认机制 | 确保数据正确接收 | 接收方发送ACK确认 |
| 重传机制 | 处理数据丢失问题 | 超时或冗余ACK触发重传 |
| 流量控制 | 防止接收方缓存溢出 | 滑动窗口机制 |
| 拥塞控制 | 避免网络过载 | 慢开始、拥塞避免等算法 |
| 连接管理 | 管理连接生命周期 | 三次握手建立、四次挥手释放 |
适用场景与典型应用
| 应用类型 | 协议示例 | 选择TCP的原因 |
|---|---|---|
| 文件传输 | FTP | 要求数据完整性,不能丢失 |
| 网页浏览 | HTTP/HTTPS | 需要完整的页面内容 |
| 远程登录 | TELNET/SSH | 命令传输必须准确无误 |
| 电子邮件 | SMTP/POP3/IMAP | 邮件内容不能有错误 |
无连接服务(UDP)
服务特征
- 无连接:发送数据前无需建立连接
- 不可靠传输:尽最大努力交付,不保证可靠性
- 简单高效:协议开销小,处理速度快
- 支持多种通信模式:一对一、一对多、多对一、多对多
核心功能
| 功能 | 描述 | 与IP层的区别 |
|---|---|---|
| 多路复用/分用 | 通过端口号区分不同应用进程 | IP层只能区分到主机级别 |
| 差错检测 | 可选的检验和机制 | 提供端到端的数据完整性检查 |
| 数据封装 | 添加UDP首部信息 | 为应用数据提供传输层封装 |
适用场景与典型应用
| 应用类型 | 协议示例 | 选择UDP的原因 |
|---|---|---|
| 域名解析 | DNS | 查询简单,重传成本低 |
| 简单文件传输 | TFTP | 文件小,实现简单 |
| 网络管理 | SNMP | 管理信息传输要求高效 |
| 实时应用 | RTP(音视频) | 对延迟敏感,可容忍少量丢失 |
| 广播/组播 | DHCP、组播协议 | 需要一对多通信模式 |
服务模式选择原则
| 考虑因素 | 选择TCP | 选择UDP |
|---|---|---|
| 可靠性要求 | 数据必须完整准确 | 可容忍少量数据丢失 |
| 实时性要求 | 对延迟不敏感 | 对延迟高度敏感 |
| 连接开销 | 可接受连接建立开销 | 需要避免连接开销 |
| 通信模式 | 点对点通信 | 需要广播或组播 |
| 应用复杂度 | 应用层实现相对简单 | 应用层需要处理可靠性 |
应用协议与传输层映射
协议选择原则与实例
不同的应用协议根据其特定需求选择合适的传输层协议,形成了典型的应用-传输层协议组合。
基于UDP的应用协议
| 应用协议 | 全称 | 端口号 | 选择UDP的原因 | 应用特点 |
|---|---|---|---|---|
| DNS | 域名系统 | 53 | 查询响应简单,对延迟敏感 | 短请求-响应模式 |
| TFTP | 简单文件传输协议 | 69 | 实现简单,文件较小 | 无需复杂的连接管理 |
| RIP | 路由信息协议 | 520 | 路由更新频繁,开销要小 | 周期性广播路由信息 |
| DHCP | 动态主机配置协议 | 67/68 | 需要广播功能 | 自动IP地址分配 |
| SNMP | 简单网络管理协议 | 161 | 管理信息传输要求高效 | 网络设备监控管理 |
| IGMP | 网际组管理协议 | - | 组播管理,无需可靠性 | IP组播成员管理 |
基于TCP的应用协议
| 应用协议 | 全称 | 端口号 | 选择TCP的原因 | 应用特点 |
|---|---|---|---|---|
| SMTP | 简单邮件传输协议 | 25 | 邮件传输必须可靠 | 邮件不能丢失或损坏 |
| TELNET | 远程终端协议 | 23 | 命令传输需要准确性 | 交互式远程登录 |
| HTTP | 超文本传输协议 | 80 | 网页内容必须完整 | 万维网内容传输 |
| FTP | 文件传输协议 | 20/21 | 文件传输要求完整性 | 大文件可靠传输 |
| SSH | 安全外壳协议 | 22 | 安全连接需要可靠性 | 加密远程访问 |
| HTTPS | 安全超文本传输协议 | 443 | 安全传输需要完整性 | 加密网页传输 |
传输层协议特性对比
数据传输视角
| 特性维度 | UDP数据报 | TCP报文段 | IP数据报 |
|---|---|---|---|
| 传输范围 | 端到端逻辑信道 | 端到端逻辑信道 | 网络层逐跳转发 |
| 路由器可见性 | 不可见(封装在IP中) | 不可见(封装在IP中) | 可见(路由转发依据) |
| 状态维护 | 无状态 | 有状态(连接信息) | 无状态 |
| 处理复杂度 | 简单 | 复杂 | 中等 |
服务层次对比
| 服务层次 | 虚电路(网络层) | TCP连接(传输层) |
|---|---|---|
| 状态保存位置 | 网络中间节点 | 仅在端系统 |
| 对网络层影响 | 限制为面向连接 | 不影响网络层服务模式 |
| 实现复杂度 | 网络设备复杂 | 端系统复杂 |
| 扩展性 | 受网络规模限制 | 仅受端系统能力限制 |
协议栈层次关系
封装与解封装过程
- 应用层:生成应用数据
- 传输层:添加TCP/UDP首部,形成报文段/数据报
- 网络层:添加IP首部,形成IP数据报
- 数据链路层:添加帧首部和尾部
- 物理层:转换为物理信号传输
层次独立性原则
- 传输层独立性:TCP/UDP的选择不影响网络层的服务模式
- 网络层透明性:传输层协议对中间路由器透明
- 应用层灵活性:应用可根据需求选择合适的传输层协议
TCP与UDP协议对比分析
协议栈层次服务特征
传输层服务提供模式
| 协议栈层次 | UDP服务模式 | TCP服务模式 | 底层依赖 |
|---|---|---|---|
| 应用层 | 应用数据直接传递 | 应用数据直接传递 | 传输层服务 |
| 传输层 | 无连接不可靠服务 | 面向连接可靠服务 | 网络层服务 |
| 网络层 | 无连接不可靠服务 | 无连接不可靠服务 | 数据链路层服务 |
| 数据链路层 | 帧传输服务 | 帧传输服务 | 物理层服务 |
| 物理层 | 比特流传输 | 比特流传输 | 物理介质 |
服务质量对比
| 服务特性 | UDP | TCP | 说明 |
|---|---|---|---|
| 连接管理 | 无连接 | 面向连接 | TCP需要三次握手建立连接 |
| 可靠性保证 | 不可靠 | 可靠 | TCP提供确认、重传机制 |
| 数据顺序 | 不保证 | 保证 | TCP确保数据按序到达 |
| 流量控制 | 无 | 有 | TCP防止接收方缓存溢出 |
| 拥塞控制 | 无 | 有 | TCP避免网络过载 |
| 错误检测 | 可选 | 必须 | 都提供检验和机制 |
适用场景分析
UDP适用场景
- 实时应用:IP电话、视频会议、在线游戏
- 简单查询:DNS查询、SNMP网络管理
- 广播/组播:DHCP、路由协议更新
- 小数据传输:TFTP简单文件传输
TCP适用场景
- 可靠传输:文件传输(FTP)、网页浏览(HTTP)
- 交互应用:远程登录(TELNET/SSH)、电子邮件(SMTP)
- 大数据传输:数据库同步、软件下载
- 安全通信:HTTPS、加密数据传输
协议首部结构对比
UDP首部格式
UDP首部设计简洁,仅包含必要的传输信息,体现了其简单高效的特点。
| 字段名称 | 位长(bit) | 字节数 | 功能描述 |
|---|---|---|---|
| 源端口 | 16 | 2 | 发送方应用进程端口号 |
| 目的端口 | 16 | 2 | 接收方应用进程端口号 |
| 长度 | 16 | 2 | UDP首部+数据的总长度 |
| 检验和 | 16 | 2 | 错误检测(可选) |
UDP首部特点:
- 固定长度:8字节,结构简单
- 最小开销:仅提供基本的多路复用和错误检测
- 处理高效:字段少,解析速度快
TCP首部格式
TCP首部包含丰富的控制信息,支持可靠传输的各种机制。
固定首部字段(20字节)
| 字段名称 | 位长(bit) | 字节数 | 功能描述 |
|---|---|---|---|
| 源端口 | 16 | 2 | 发送方应用进程端口号 |
| 目的端口 | 16 | 2 | 接收方应用进程端口号 |
| 序列号 | 32 | 4 | 数据字节流中首字节的序号 |
| 确认号 | 32 | 4 | 期望接收的下一个字节序号 |
| 数据偏移 | 4 | 0.5 | TCP首部长度(以4字节为单位) |
| 保留 | 6 | 0.75 | 保留字段,必须为0 |
| 标志位 | 6 | 0.75 | 控制位(URG、ACK、PSH、RST、SYN、FIN) |
| 窗口大小 | 16 | 2 | 接收窗口大小(流量控制) |
| 检验和 | 16 | 2 | 错误检测(必须) |
| 紧急指针 | 16 | 2 | 紧急数据指针 |
可变选项字段(0-40字节)
| 选项类型 | 长度 | 功能 |
|---|---|---|
| 最大报文段长度(MSS) | 4字节 | 协商最大数据段大小 |
| 窗口扩大 | 3字节 | 扩展窗口大小范围 |
| 时间戳 | 10字节 | RTT测量和序列号回绕处理 |
| 选择确认(SACK) | 可变 | 选择性确认机制 |
TCP首部特点:
- 可变长度:20-60字节,功能丰富
- 控制复杂:支持连接管理、流量控制、拥塞控制
- 扩展性强:选项字段支持协议功能扩展
总结
| 特性 | UDP (User Datagram Protocol) | TCP (Transmission Control Protocol) |
|---|---|---|
| 连接 | 无连接 | 面向连接 |
| 端点通信 | 支持“一对一”、“一对多”、“多对一”和“多对多”交互通信 | 每一条 TCP 连接只能有两个端点 EP,只能是一对一通信 |
| 数据流类型 | 面向应用报文 | 面向字节流 |
| 可靠性 | 尽最大努力交付,即不可靠;不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 |
| 首部开销 | 首部开销小,仅 8 字节 | 首部开销最小 20 字节,最大 60 字节 |
习题查漏补缺
- 通信子网、传输层、资源子网
- 通信子网: 包括物理层、数据链路层和网络层,主要负责数据通信。
- 传输层: 主要任务是向高层用户屏蔽下面通信子网的细节 (如网络拓扑、路由协议等)。
- 资源子网: OSI 参考模型的上三层。
- 传输层面向连接服务的特性: 保证可靠和顺序交付。
- 一个 TCP 报文的首部长度是 20B, 一个 IP 数据报的首部长度也是 20B, 再加上 60B 的数据, 一个 IP 数据报的总长度为 100B, 从而数据占 60%。
- 若用户应用程序使用 UDP 进行数据传输, 则必须在传输层的上层即应用层提供可靠性方面的全部工作。
##UDP 协议
概述
UDP 仅在 IP 层的数据包服务之上增加了两个最基本的功能,复用和分用,以及差错检测。
UDP协议特征分析
UDP(User Datagram Protocol,用户数据报协议)是传输层的无连接协议,以其简单高效的特点在特定应用场景中发挥重要作用。
核心设计特点
| 特征维度 | UDP特点 | 技术优势 | 应用影响 |
|---|---|---|---|
| 连接管理 | 无连接服务 | 无需三次握手建立连接 | 降低通信延迟和系统开销 |
| 状态维护 | 无状态协议 | 不维护连接状态信息 | 服务器可支持更多并发客户端 |
| 首部开销 | 8字节固定首部 | 相比TCP节省75%首部空间 | 提高网络传输效率 |
| 流量控制 | 无流量控制 | 发送速率不受接收方限制 | 适合实时性要求高的应用 |
| 拥塞控制 | 无拥塞控制 | 不响应网络拥塞状况 | 保持恒定发送速率 |
| 通信模式 | 多种通信模式 | 支持1对1、1对多、多对1、多对多 | 灵活的网络拓扑支持 |
| 数据处理 | 面向报文 | 保持应用层报文边界 | 应用层需合理控制报文大小 |
协议工作机制
1. 无连接传输模式
- 即发即送:数据传输前无需建立连接
- 独立处理:每个数据报独立路由和处理
- 状态无关:发送方和接收方不维护连接状态
2. 面向报文的数据处理
- 边界保持:保留应用层报文的完整性
- 原样传递:不对报文进行分割或合并
- 大小控制:应用程序需选择合适的报文大小
3. 最小化协议开销
- 简化首部:仅包含必要的传输信息
- 快速处理:协议栈处理开销最小
- 高效传输:适合对延迟敏感的应用
UDP首部结构详解
首部字段组成
| 字段名称 | 位长(bit) | 字节数 | 字段范围 | 功能描述 |
|---|---|---|---|---|
| 源端口 | 16 | 2 | 0-65535 | 发送方应用进程端口号,回复时使用 |
| 目的端口 | 16 | 2 | 0-65535 | 接收方应用进程端口号,必须字段 |
| 长度 | 16 | 2 | 8-65535 | UDP首部+数据总长度(最小8字节) |
| 检验和 | 16 | 2 | 0-65535 | 差错检测,IPv4可选,IPv6必须 |
字段功能说明
源端口字段:
- 双向通信:用于接收方回复数据
- 可选性:单向通信时可设为0
- 多路复用:标识发送方应用进程
目的端口字段:
- 必要性:数据包正确投递的关键
- 服务标识:指定目标应用服务
- 解复用依据:传输层分发数据的基础
- 错误处理:端口不存在时,接收方丢弃报文并通过ICMP发送”端口不可达”错误
长度字段:
- 范围限制:8字节(仅首部)到65535字节
- 完整性:包含首部和数据部分总长度
- 验证作用:接收方验证数据包完整性
检验和字段:
- 差错检测:检验UDP数据报传输完整性
- 处理策略:发现错误直接丢弃数据报
- 版本差异:IPv4中可选(不用时设为0),IPv6中强制使用
UDP检验和机制
UDP检验和提供端到端的差错检测,虽然简单但能有效发现传输错误。
检验和计算流程
发送方处理过程:
- 构造伪首部:添加IP层信息用于检验
- 数据分组:将伪首部+UDP首部+数据按16位分组
- 求和计算:所有16位字相加,进位回卷
- 取反操作:对和值按位求反得到检验和
- 填入首部:将检验和写入UDP首部对应字段
接收方验证过程:
- 重构检验:按相同方式构造伪首部和分组
- 全部求和:包括接收到的检验和一起计算
- 结果判断:
- 结果为0:传输正确
- 结果非0:存在错误,丢弃数据包
伪首部结构
| 字段名称 | 位长(bit) | 字节数 | 内容来源 | 作用 |
|---|---|---|---|---|
| 源IP地址 | 32 | 4 | IP首部 | 验证数据包来源 |
| 目的IP地址 | 32 | 4 | IP首部 | 验证数据包目标 |
| 保留字段 | 8 | 1 | 全0 | 字节对齐 |
| 协议字段 | 8 | 1 | 17(UDP) | 标识上层协议 |
| UDP长度 | 16 | 2 | UDP首部 | 数据包长度信息 |
伪首部特点:
- 虚拟结构:仅用于检验和计算,不实际传输
- 跨层信息:结合网络层和传输层信息
- 完整性保证:确保数据包在正确的源和目的间传输
检验和策略差异
| 协议版本 | 检验和要求 | 处理方式 | 设计考虑 |
|---|---|---|---|
| IPv4环境 | 可选机制 | 不使用时设为0 | 兼容性考虑 |
| IPv6环境 | 强制要求 | 必须计算和验证 | 可靠性提升 |
与IP检验和的区别:
- 覆盖范围:UDP检验整个数据包,IP仅检验首部
- 检测能力:UDP能发现数据部分的传输错误
- 处理机制:UDP发现错误直接丢弃,不进行纠错
TCP协议详解
TCP协议概述
TCP(Transmission Control Protocol,传输控制协议)是传输层的面向连接协议,在不可靠的IP网络层之上提供可靠的端到端数据传输服务。TCP通过复杂的控制机制解决了网络通信中的可靠性、有序性、流量控制和拥塞控制等关键问题。
协议设计目标
| 设计目标 | 实现机制 | 技术手段 |
|---|---|---|
| 可靠传输 | 确认重传机制 | 序列号、确认号、超时重传 |
| 有序交付 | 序列号排序 | 32位序列号、接收缓冲区重排 |
| 流量控制 | 滑动窗口 | 接收窗口通告、流量调节 |
| 拥塞控制 | 拥塞窗口 | 慢启动、拥塞避免、快重传 |
| 连接管理 | 状态机制 | 三次握手、四次挥手 |
TCP核心特征分析
面向连接的服务模式
连接生命周期管理:
- 建立阶段:三次握手协商连接参数
- 数据传输:可靠的双向数据交换
- 释放阶段:四次挥手优雅关闭连接
连接状态维护:
- 发送状态:发送缓冲区、发送窗口、重传定时器
- 接收状态:接收缓冲区、接收窗口、确认机制
- 控制状态:拥塞窗口、RTT估计、连接状态
可靠传输保障机制
| 可靠性问题 | TCP解决方案 | 技术实现 |
|---|---|---|
| 数据丢失 | 超时重传 | 自适应重传定时器 |
| 数据重复 | 序列号去重 | 32位序列号空间 |
| 数据乱序 | 缓冲重排 | 接收缓冲区排序 |
| 数据损坏 | 检验和验证 | 强制性检验和机制 |
通信模式特点
点对点通信:
- 连接唯一性:每个TCP连接连接两个特定端点
- 资源独占:每个连接维护独立的状态信息
- 不支持广播:无法实现一对多通信模式
全双工数据传输:
- 双向独立:两个方向的数据流独立控制
- 缓冲机制:发送和接收缓冲区分离
- 异步操作:发送和接收可同时进行
面向字节流的数据处理
字节流特性:
- 无边界性:不保持应用层消息边界
- 连续性:将数据视为连续的字节序列
- 灵活分段:根据网络条件动态调整段大小
数据处理机制:
| 处理层面 | 发送方行为 | 接收方行为 |
|---|---|---|
| 应用层 | 提交不定长数据块 | 接收重组后的字节流 |
| TCP层 | 按MSS分段传输 | 缓冲重组字节流 |
| 网络层 | 独立IP数据包 | 独立接收处理 |
缓冲区管理机制:
| 缓冲区类型 | 功能作用 | 存储内容 | 管理策略 |
|---|---|---|---|
| 发送缓冲区 | 暂存待发送数据 | 应用数据、已发送未确认数据 | 滑动窗口控制 |
| 接收缓冲区 | 重组接收数据 | 按序数据、乱序数据 | 顺序交付应用 |
字节流处理示例:
1 | |
TCP与UDP协议对比
| 特征维度 | TCP | UDP | 适用场景 |
|---|---|---|---|
| 连接性 | 面向连接 | 无连接 | TCP适合可靠传输,UDP适合实时应用 |
| 可靠性 | 可靠传输 | 尽力而为 | TCP保证数据完整,UDP允许数据丢失 |
| 开销 | 高开销 | 低开销 | TCP功能丰富,UDP简单高效 |
| 报文长度 | 动态调整 | 应用决定 | TCP优化网络利用,UDP保持边界 |
TCP报文段结构
TCP报文段是TCP协议的基本传输单元,既承载用户数据,又实现连接控制功能。
TCP首部详细结构
固定首部字段(20字节)
| 字段名称 | 位长 | 字节偏移 | 功能描述 | 重要性 |
|---|---|---|---|---|
| 源端口 | 16位 | 0-1 | 发送方应用进程标识 | 多路复用基础 |
| 目的端口 | 16位 | 2-3 | 接收方应用进程标识 | 服务定位关键 |
| 序列号 | 32位 | 4-7 | 数据字节流位置标识 | 有序传输核心 |
| 确认号 | 32位 | 8-11 | 期望接收的下一字节号 | 可靠传输基础 |
| 首部长度 | 4位 | 12 | TCP首部长度(4字节单位) | 首部解析依据 |
| 保留字段 | 6位 | 12 | 未来扩展预留 | 协议兼容性 |
| 控制标志 | 6位 | 13 | 连接状态控制 | 状态机驱动 |
| 窗口大小 | 16位 | 14-15 | 接收窗口通告 | 流量控制机制 |
| 检验和 | 16位 | 16-17 | 数据完整性验证 | 错误检测 |
| 紧急指针 | 16位 | 18-19 | 紧急数据边界 | 优先数据处理 |
控制标志位详解
| 标志位 | 全称 | 功能作用 | 使用场景 | 组合使用 |
|---|---|---|---|---|
| URG | Urgent | 紧急指针有效 | 紧急数据传输 | 与紧急指针配合 |
| ACK | Acknowledgment | 确认号有效 | 数据确认 | 除SYN外几乎总是置1 |
| PSH | Push | 立即推送数据 | 交互式应用 | 提高响应性 |
| RST | Reset | 重置连接 | 异常处理 | 强制关闭连接 |
| SYN | Synchronize | 同步序列号 | 连接建立 | 三次握手使用 |
| FIN | Finish | 结束数据传输 | 连接释放 | 四次挥手使用 |
常见标志位组合:
- SYN=1, ACK=0:连接请求
- SYN=1, ACK=1:连接确认
- FIN=1, ACK=1:连接终止
- RST=1:连接重置
- PSH=1, ACK=1:数据推送
关键字段功能分析
序列号机制:
- 初始值:连接建立时随机选择
- 递增规则:按发送字节数递增
- 回绕处理:32位空间循环使用
- 同步作用:确保数据有序传输
确认号机制:
- 累积确认:确认连续接收的最大序号+1
- 有效条件:ACK标志位为1时有效
- 确认策略:可延迟确认提高效率
- 重复确认:触发快速重传机制
窗口字段:
- 流量控制:通告接收方缓冲区可用空间
- 动态调整:根据处理能力实时更新
- 零窗口:暂停发送,启动持续定时器
- 窗口扩大:通过选项字段扩展范围
检验和计算:
- 覆盖范围:TCP首部+数据+伪首部
- 强制性:TCP检验和必须计算
- 伪首部:包含IP地址信息
- 错误处理:检验失败直接丢弃
紧急数据处理:
- 优先传输:紧急数据插队发送
- 带外数据:不占用正常数据流序号
- 应用通知:接收方立即通知应用层
- 指针含义:指向紧急数据末尾位置
可变选项字段(0-40字节)
| 选项类型 | 选项长度 | 功能描述 | 使用时机 |
|---|---|---|---|
| MSS | 4字节 | 最大报文段长度 | 连接建立时协商 |
| 窗口扩大因子 | 3字节 | 扩展窗口大小范围 | 高带宽网络 |
| 时间戳 | 10字节 | RTT测量和PAWS | 高速网络 |
| SACK允许 | 2字节 | 启用选择确认 | 连接建立时 |
| SACK | 可变 | 选择确认块 | 数据传输时 |
选项字段特点:
- 可选性:根据需要添加
- 对齐要求:总长度4字节对齐
- 填充处理:不足部分用0填充
- 向后兼容:不识别的选项被忽略
TCP检验和机制
TCP检验和是强制性的端到端错误检测机制,确保数据在传输过程中的完整性。
检验和计算原理
算法特点:
- 强制性:TCP检验和必须计算,不可选
- 全覆盖:包含首部、数据和伪首部
- 简单高效:16位字求和算法
- 错误检测:能检测大部分传输错误
检验和计算流程
发送方处理步骤
| 步骤 | 操作内容 | 技术细节 | 注意事项 |
|---|---|---|---|
| 1 | 构造伪首部 | 添加IP层信息 | 包含源/目的IP地址 |
| 2 | 数据准备 | 检验和字段置0 | 为计算做准备 |
| 3 | 16位分组 | 按16位字划分 | 奇数字节需填充0 |
| 4 | 求和计算 | 所有16位字相加 | 进位回卷处理 |
| 5 | 取反操作 | 对和值按位求反 | 得到最终检验和 |
| 6 | 填入首部 | 写入检验和字段 | 完成报文段构造 |
计算示例:
1 | |
接收方验证步骤
| 步骤 | 操作内容 | 验证逻辑 | 处理结果 |
|---|---|---|---|
| 1 | 重构检验 | 按相同方式构造 | 包含接收到的检验和 |
| 2 | 全部求和 | 所有16位字相加 | 包括原检验和字段 |
| 3 | 结果判断 | 检查最终结果 | 0表示正确,非0表示错误 |
| 4 | 错误处理 | 丢弃错误报文段 | 不通知发送方 |
伪首部结构详解
| 字段名称 | 位长 | 字节数 | 数据来源 | 作用说明 |
|---|---|---|---|---|
| 源IP地址 | 32位 | 4 | IP首部 | 验证数据包来源正确性 |
| 目的IP地址 | 32位 | 4 | IP首部 | 验证数据包目标正确性 |
| 保留字段 | 8位 | 1 | 全0 | 字节对齐和协议兼容 |
| 协议字段 | 8位 | 1 | 6(TCP) | 标识传输层协议类型 |
| TCP长度 | 16位 | 2 | 计算得出 | TCP首部+数据总长度 |
伪首部作用:
- 跨层验证:结合网络层信息进行验证
- 路由保护:防止数据包被错误路由
- 协议识别:确保数据包被正确的协议处理
- 长度校验:验证数据包长度信息正确性
检验和特性分析
检测能力:
- 单比特错误:100%检测
- 双比特错误:高概率检测
- 突发错误:部分检测能力
- 随机错误:统计检测能力
性能考虑:
- 计算开销:相对较小
- 硬件支持:可硬件加速
- 实时性:不影响传输延迟
- 可靠性:提供基本错误检测
与其他协议对比:
| 协议 | 检验和要求 | 覆盖范围 | 错误处理 |
|---|---|---|---|
| TCP | 强制计算 | 首部+数据+伪首部 | 丢弃错误报文 |
| UDP | IPv4可选,IPv6强制 | 首部+数据+伪首部 | 丢弃错误报文 |
| IP | 仅首部 | 仅IP首部 | 丢弃错误数据包 |
TCP 运输连接
分为三个阶段:
- 通过 “三报文握手” 来建立 TCP 连接。
- 基于已建立的 TCP 连接进行可靠的数据传输。
- 在数据传输结束后还要通过 “四报文挥手” 来释放 TCP 连接。
“三报文握手” 建立 TCP 连接
目的: 在于解决以下三个主要问题:
- 使 TCP 双方能够确知对方的存在。
- 使 TCP 双方能够协商一些参数 (最大报文段长度、最大窗口大小、时间戳选项等)。
- 使 TCP 双方能够对运输实体资源进行分配和初始化,运输实体资源包括缓存大小、各状态变量、连接表中的项目等。
- 每条 TCP 连接有两个端点,此端点即套接字。每条 TCP 连接唯一地被通信的两个端点 (套接字) 确定。
- 同一个 IP 地址可以有多个不同的 TCP 连接,而同一个端口号也可以出现在多个不同的 TCP 连接中。
- TCP 连接的建立采用客户/服务器模式,主动发起连接建立的应用进程称为客户,而被动等待连接建立的应用进程称为服务器。
过程:
(此处原文有三张图片,逐步展示了 TCP 建立连接的 “三报文握手” 过程,包括 SYN 包、SYN-ACK 包、ACK 包的发送和状态转换。)
- 序号 seq 字段被设置了一个初始值 x,作为 TCP 客户进程所选择的初始序号。
- 请同学们注意:
- TCP 规定同步标志位 SYN 被设置为 1 的报文段 (例如 TCP 连接请求报文段和 TCP 连接请求确认报文段) 不能携带数据,但要消耗掉一个序号。
- 按上述规定,TCP 连接请求报文段不能携带数据 (即没有数据载荷),但是会消耗掉序号 x。
- 因此,TCP 客户进程下一次发送的 TCP 报文段的数据载荷的第一个字节的序号为 x+1。
- 补充: 上述过程发送的第三个普通的 TCP 报文段是否多余?(使用三报文握手而不是两报文握手建立 TCP 连接的原因)
- “三报文握手”建立 TCP 连接 ————使用“三报文握手”而不是“两报文握手”建立 TCP 连接的原因
(此处原文有一张图片,展示了使用两报文握手可能导致已失效的连接请求报文段被接受,从而造成资源浪费的场景。) - 采用 “三报文握手” 而不是 “两报文握手” 来建立 TCP 连接,是为了防止已失效的 TCP 连接请求报文段突然又传送到了 TCP 服务器进程,因而导致错误。
- “三报文握手”建立 TCP 连接 ————使用“三报文握手”而不是“两报文握手”建立 TCP 连接的原因
“四报文挥手” 释放 TCP 连接
第一步: 客户机发送连接释放报文段,并停止发送数据,主动关闭 TCP 连接。该报文段终止位 FIN 设置为 1,序号 seq=u (等于前面已传送过的数据的最后一个字节的序号加 1)。
(此处原文有一张图片,展示了 TCP 释放连接的第一步,客户机发送 FIN 包,进入 FIN-WAIT-1 状态。)
- TCP 连接释放报文段首部中的终止标志位 FIN 和确认标志位 ACK 的值都被设置为 1。
- 表明这是一个 TCP 连接释放报文段,同时也对之前收到的 TCP 报文段进行确认。
第二步: 服务器收到连接释放报文段后发出确认。
(此处原文有一张图片,展示了 TCP 释放连接的第二步,服务器收到 FIN 包后发送 ACK 包,进入 CLOSE-WAIT 状态。)
- TCP 规定终止标志位 FIN 等于 1 的 TCP 报文段即使不携带数据,也要消耗掉一个序号。
- 从 TCP 客户进程到 TCP 服务器进程这个方向的连接就释放了。
- 此时的 TCP 连接属于半关闭状态。
- TCP 客户进程已经没有数据要发送了。但 TCP 服务器进程如果还有数据要发送,TCP 客户进程仍要接收,也就是从 TCP 服务器进程到 TCP 客户进程这个方向的连接并未关闭。
- 半关闭状态可能会持续一段时间。
第三步: 若服务器已经没有要向客户机发送的数据,就通知 TCP 释放连接。
(此处原文有一张图片,展示了 TCP 释放连接的第三步,服务器发送 FIN 包,进入 LAST-ACK 状态。)
- TCP 连接释放报文段首部中的终止标志位 FIN 和确认标志位 ACK 的值都被设置为 1。
- 表明这是一个 TCP 连接释放报文段,同时也对之前收到的 TCP 报文段进行确认。
第四步:
(此处原文有一张图片,展示了 TCP 释放连接的第四步,客户机发送 ACK 包,进入 TIME-WAIT 状态,服务器进入 CLOSED 状态。)
- TIME-WAIT (时间等待) 状态
- MSL 是最长报文段寿命 (Maximum Segment Lifetime) 的英文缩写词,[RFC793] 建议为 2 分钟。也就是说,TCP 客户进程进入时间等待 (TIME-WAIT) 状态后,还要经过 4 分钟才能进入关闭 (CLOSED) 状态。
- 补充: 为何要经过 2MSL 后才进入关闭状态?
- 处于时间等待 (TIME-WAIT) 状态后要经过 2MSL 时长,可以确保 TCP 服务器进程能够收到最后一个 TCP 确认报文段而进入关闭 (CLOSED) 状态。
- 另外,TCP 客户进程在发送完最后一个 TCP 确认报文段后,再经过 2MSL 时长,就可以使本次连接持续期内所产生的所有报文段都从网络中消失。这样就可以使下一个新的 TCP 连接中不会出现旧连接中的报文段。
总结:
| 阶段 | 建立连接 | 释放连接 |
|---|---|---|
| 1 | SYN=1 seq=x | FIN=1 seq=u |
| 2 | SYN=1 ACK=1 seq=y ack=x+1 | ACK=1 seq=v ack=u+1 |
| 3 | ACK=1 seq=x+1 ack=y+1 | FIN=1 ACK=1 seq=w ack=u+1 |
| 4 | ACK=1 seq=u+1 ack=w+1 |
TCP 可靠传输
概述
TCP 在不可靠的 IP 层之上建立一种可靠数据传输服务,该服务保证接收方从缓存区读出的字节流与发送方发出的字节流完全一样。TCP 使用了检验、序号、确认和重传等机制来达到这一目的。
序号
TCP 将数据视为一个无结构但有序的字节流,序号建立在传送的字节流之上,而不建立在报文段之上。下图中第二个报文段的序号是 3。
(此处原文有一张图片,展示了 TCP 报文段中字节流的序号划分。)
确认
确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。
TCP 默认使用 【累积确认】, 即 TCP 只确认数据流中至第一个丢失字节为止的字节。
重传
超时和冗余 ACK 会导致 TCP 对报文段进行重传。
超时
TCP 每发送一个报文段就对这个报文段设置一个超时计时器。计时器设置的重传时间到但还未收到确认时,就要重传这一报文段。
TCP 采用一种自适应算法来计算超时计时器的重传时间。一个报文段发出的时间以及收到相应确认的时间的间隔称为报文段的往返时间 RTT。TCP 维护 RTT 的一个加权平均往返时间 RTTS,【超时重传时间】 应该略大于 RTTS。
冗余 ACK (冗余确认)
冗余 ACK 就是再次确认某个报文段的 ACK。
TCP 规定每当比期望序号大的失序报文段到达时,就发送一个冗余 ACK,指明下一个期待字节的序号。
例如 3,4,5 号报文段到达时不是自己所期望的 2 号报文段,那就发送 3 个对 1 号报文段的 ACK。
TCP 流量控制
概述
TCP 为应用程序提供了流量控制机制,以解决因发送方发送数据太快而导致接收方来不及接收,造成接收方的接收缓存溢出的问题。
方法
- 基本方法: 接收方根据自己的接收能力 (接收缓存的可用空间大小) 控制发送方的发送速率。
- 采用滑动窗口机制。 TCP 要求发送方维持一个接收窗口 rwnd,接收方根据当前接受缓存的大小动态地调整接收窗口的大小,这个值被放在接收方 TCP 报文段首部中的窗口字段,以通知发送方。发送方的发送窗口不能超过接收方给出的接收窗口值,以限制发送方向网络注入报文的速率。
- TCP 为每个连接设有一个【持续计时器】,只要发送方收到对方的零窗口通知就启动持续计时器。如果计时器超时,就发送一个零窗口探测报文段,对方就在确认这个探测报文段时给出现在的窗口值。如果窗口仍然为 0,则发送方收到确认报文段后就重新设置持续计时器。
(此处原文有一张图片,展示了 TCP 流量控制方法,包括零窗口探测报文段的发送和确认过程。)- 实际上 TCP 规定: 即使接收窗口值为 0,也必须接受零窗口探测报文段、确认报文段以及携带有紧急数据的报文段。
- 回答是肯定的。因为零窗口探测报文段也有重传计时器,当重传计时器超时后,零窗口探测报文段会被重传。
流量控制与数据链路层流量控制比较
| 特性 | 传输层 | 数据链路层 |
|---|---|---|
| 控制范围 | 端到端 (两个进程之间流量控制) | 两个中间的相邻结点之间的流量控制 |
| 窗口大小 | 窗口大小可动态变化 | 窗口大小不能动态变化 |
TCP 拥塞控制
拥塞控制和流量控制
- 拥塞控制: 指防止过多的数据注入网络,保证网络中的路由器或链路不致过载。
- 拥塞出现时,端点并不了解拥塞发生的细节,但是对于通信的端点来说,拥塞往往表现为通信时延的增加。
- TCP 的四种拥塞算法: 慢开始、拥塞避免、快重传和快恢复。
闭环拥塞控制算法分类
根据拥塞信息的反馈形式,可将闭环拥塞控制算法分为:
- 显式反馈算法: 从拥塞节点 (即路由器) 向源点提供关于网络中拥塞状态的显式反馈信息。
- 隐式反馈算法: 源点自身通过对网络行为的观察 (例如超时重传或往返时间 RTT) 来推断网络是否发生拥塞。TCP 采用的就是隐式反馈算法。
(此处原文有一张图片,展示隐式反馈和显式反馈算法的区别。)- 拥塞控制并不仅仅是运输层要考虑的问题。显式反馈算法就必须涉及网络层。虽然一些网络体系结构 (如 ATM 网络) 主要在网络层实现拥塞控制,但因特网主要利用隐式反馈在运输层实现拥塞控制。
区别
- 流量控制: 通常指点对点的通信量控制,要做的是抑制发送端发送数据的速率,以便接收端来得及接收。
- 拥塞控制: 让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
拥塞窗口 (cwnd)
TCP 除了上文的接收窗口,还要求发送方维持一个拥塞窗口,其大小取决于网络的拥塞程度,动态变化。
发送方控制拥塞窗口的原则: 只要网络出现拥塞,拥塞窗口就减小一些。
发送窗口的上限值取接收窗口 rwnd 和拥塞窗口 cwnd 中较小的一个。
- 发送窗口上限值 = min{rwnd, cwnd}
慢开始和拥塞避免 (拥塞避免并不能完全避免拥塞,只是使得网络不容易出现拥塞)
慢开始算法
- 具体方法: 先发送少量数据探测一下,若没有发生拥塞则适当增大拥塞窗口。(从小到大逐渐增大拥塞窗口 (发送窗口))
- 慢开始门限 (ssthresh): 每经过一个传输轮次 (RTT),cwnd 就会加倍。cwnd 随轮次指数增长。
- 慢开始一直把 cwnd 增大到一个规定的 ssthresh,然后改用拥塞避免算法。
拥塞避免算法
- 具体方法: 每经过一个往返时延 RTT 就把发送方拥塞窗口 cwnd 加 1,而不是翻倍。
- 过程:
- cwnd < ssthresh, 使用慢开始。
- cwnd > ssthresh, 改用拥塞避免算法。
- cwnd = ssthresh, 通常使用拥塞避免算法,也可以使用慢开始。
网络拥塞处理
无论在何阶段,只要发送方判断网络出现拥塞,就首先把慢开始门限 ssthresh 设置为出现拥塞时发送方 cwnd 值的一般 (不能小于 2),然后把 cwnd 重新设置为 1,继而执行慢开始算法。
注意: 慢开始阶段,如果 2cwnd > ssthresh,则下一个 RTT 后 cwnd 等于 ssthresh,而非 2cwnd。
快重传和快恢复
快重传概述
个别报文段在网络中丢失,但是此时网络其实并未发生拥塞,但发送方收不到确认就会误认为网络发生了拥塞,从而启动慢开始算法降低传输效率。
原理
使发送方尽早尽快地进行重传,不等计时器超时再重传。接收方即使受到了失序的报文段也要立即发出对已收到的报文段的重复确认。发送方一旦连续收到 3 个冗余 ACK (重复确认),就立即重传相应的报文段。
快恢复原理
当发送方收到 3 个冗余 ACK (重复确认) 时,执行 “乘法减小”,把慢开始门限 ssthresh 调整为当前 cwnd 的一半。发送方此时认为网络很可能没有发生拥塞。并把 cwnd 值夜调整为当前 cwnd 的一半,此时 cwnd 等于 ssthresh,然后开始执行拥塞避免算法。
(此处原文有一张图片,展示了 TCP 拥塞控制的慢开始、拥塞避免、快重传和快恢复四种算法的结合图。)
TCP 拥塞控制机制中四种算法的同时应用
TCP 连接建立和网络出现超时时,采用慢开始和拥塞避免算法 (ssthresh=cwnd/2, cwnd=1)。
发送方收到 3 个冗余 ACK 时,采用快重传和快恢复算法 (ssthresh=cwnd/2, cwnd=ssthresh)。
习题查漏补缺
- 在 TCP 首部中没有目标主机 IP 地址。
- TCP 报文段和 UDP 报文段都包含源端口、目的端口、检验号。因为 UDP 提供不可靠的传输服务,所以不需要对报文进行编号,不会有序列号字段。相比之下,TCP 需要有序列号字段。
- TCP 的滑动窗口协议中规定重传分组的数量最多可以是滑动窗口的大小。
- 假设 TCP 客户与 TCP 服务器的通信已结束,端到端的往返时间为 RTT。t 时刻 TCP 客户请求断开连接,则从 t 时刻起 TCP 服务器释放该连接的最短时间是 1.5 个 RTT。
- 1.5 个 RTT。t 时刻 TCP 客户请求断开连接,发出连接释放 FIN 报文段。当 TCP 服务器收到 TCP 客户发来的 FIN 报文段后不能再发送数据,因此同时发出确认 ACK 报文段和连接释放 FIN 报文段,即直接跳过 CLOSED-WAIT 状态。TCP 客户收到 FIN 报文段后必须发出确认,TCP 服务器收到确认后就进入 CLOSED 状态,共经历 1.5 个 RTT。
- TCP 采用对 【报文段】 的确认机制。
- TCP 中滑动窗口的值设置得太大,对主机的影响是 【由于传送的数据过多而使路由器变得拥挤,主机可能丢失分组】。