网络层

网络层核心功能与拥塞控制

网络层核心功能详解

网络层(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)基于网络状态的实时反馈来动态调整。系统通过监测拥塞信号(如丢包、时延)来采取相应措施。适应性强,效果好实现复杂,有反馈时延

典型拥塞控制算法

网络层拥塞控制的经典算法主要体现在流量整形和调度上。

  1. 流量整形 (Traffic Shaping)
    流量整形通过平滑数据包的发送速率来限制流量的突发性,从而使网络流量更加平稳可预测。

    • 漏桶算法 (Leaky Bucket)
      该算法将数据包视为水滴,放入一个固定容量的桶中。桶底有一个小孔,以恒定的速率漏水(发送数据包)。

      • 优点:强制输出速率恒定,消除流量突发。
      • 缺点:即使网络空闲,输出速率也不能提高,无法利用网络空闲资源。
      漏桶参数描述
      桶容量 (Bucket Size)允许的突发数据量上限。
      漏水速率 (Leak Rate)数据包的恒定发送速率。
    • 令牌桶算法 (Token Bucket)
      系统以恒定速率向桶中放入令牌(Token)。发送数据包时,必须消耗与数据包大小相当的令牌。

      • 优点:允许一定程度的突发,只要桶中有足够的令牌。当网络空闲时,可以累积令牌用于后续的突发传输。
      • 缺点:实现比漏桶复杂。
      令牌桶参数描述
      桶容量 (Bucket Size)允许累积的最大令牌数,决定了最大突发量。

| 令牌生成速率 (Token Rate) | 平均发送速率。 |

  1. 分组调度 (Packet Scheduling)
    当多个数据包在路由器队列中等待发送时,分组调度算法决定下一个被发送的数据包。

    • 公平排队 (Fair Queuing, FQ)
      为每个流(Flow)维护一个独立的队列,并循环地从每个非空队列中取出一个数据包进行发送,从而保证各个流之间能够公平地共享链路带宽。
      • 优点:隔离不同流,防止一个高流量的流影响其他流。
      • 缺点:计算复杂,开销较大。

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秒与邻居交换一次路由表。
  • 缺点:最大跳数限制了网络规模,收敛速度慢,容易产生路由环路。

链路状态算法中,每个路由器都试图获取网络的完整拓扑信息。它通过向网络中所有其他路由器广播自己的链路状态信息(与哪些邻居相连以及链路成本)来实现这一点。

核心思想:迪杰斯特拉算法 (Dijkstra)。每个路由器在拥有了完整的网络拓扑图后,以自己为根节点,计算到所有其他节点的最短路径。

工作流程

  1. 发现邻居:路由器启动时,向邻居发送Hello包,建立邻接关系。
  2. 测量成本:测量到每个邻居的链路成本(如延迟、带宽)。
  3. 构建链路状态包 (LSP):将自己的身份、邻居列表和链路成本打包成LSP。
  4. 广播LSP:通过**泛洪(Flooding)**方式将LSP发送给网络中所有其他路由器。
  5. 计算最短路径:每个路由器根据收集到的所有LSP,构建出完整的网络拓扑图,并使用Dijkstra算法计算最短路径。

Dijkstra算法伪代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function Dijkstra(Graph, source):

create vertex set Q

for each vertex v in Graph:
dist[v] = INFINITY
prev[v] = UNDEFINED
add v to Q
dist[source] = 0

while Q is not empty:
u = vertex in Q with min dist[u]
remove u from Q

for each neighbor v of u:
alt = dist[u] + length(u, v)
if alt < dist[v]:
dist[v] = alt
prev[v] = u

return dist[], prev[]

典型协议:OSPF

开放最短路径优先 (Open Shortest Path First, OSPF) 是目前应用最广泛的内部网关协议,基于链路状态算法。

  • 成本度量:基于带宽计算,与链路带宽成反比。
  • 更新机制:当链路状态发生变化时才进行触发式更新,效率高。
  • 区域划分:支持将大型网络划分为多个区域(Area),减少了路由信息的交换量,提高了可扩展性。

距离向量 vs. 链路状态

对比维度距离向量 (DV)链路状态 (LS)
拓扑认知只了解邻居,对全局拓扑无知拥有完整的网络拓扑图
信息交换与邻居交换路由表向全网广播链路状态
算法复杂度简单,但可能收敛慢复杂 (Dijkstra),但收敛快
收敛速度慢,可能存在无穷计数问题快,触发式更新
可扩展性差,受网络规模限制好,通过区域划分支持大型网络
典型协议RIP, IGRPOSPF, 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)4IP协议版本号,对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)4IP协议版本号,对IPv6恒为6。
流量类别 (Traffic Class)8类似于IPv4的DS字段,用于QoS。
流标签 (Flow Label)20标识属于同一“流”的数据包,用于特定服务质量的请求。
有效载荷长度 (Payload Length)16IPv6报头之后的数据部分长度,不包括基本报头。
下一报头 (Next Header)8标识紧跟在基本报头后的扩展报头类型或上层协议。
跳数限制 (Hop Limit)8相当于IPv4的TTL。
源地址 (Source Address)128发送方的IPv6地址。
目的地址 (Destination Address)128接收方的IPv6地址。

IPv6扩展报头:IPv6将选项功能放入可串联的扩展报头中,只有需要时才添加,常见的扩展报头包括逐跳选项、路由、分片、认证、封装安全有效载荷等。

虚电路与数据报

虚电路服务

  • 概述:两台计算机进行通信时首先建立网络层的连接(一条逻辑上的虚电路,VC,不是物理连接。),连接建立后就固定了虚电路对应的物理路径

    比较:采用电路交换的电话通信是建立一条真正的物理连接。

  • 特点

    • “虚”:指的是这条电路不是专用的。一段物理链路可以有很多条虚电路。
      节点到其他节点之间的链路可能同时有若干条虚电路通过,亦或是建立。也不需要为每条VC预分配带宽。
    • 核心思想:可靠通信由网络自身来保证。

通信过程(三个阶段):

  1. 虚电路建立
    • 每次建立将一个未用过的虚电路号(VCID)分配给虚电路。
    • 分组的首部仅在连接建立时使用完整的目的地址,之后每个分组的首部只需携带虚电路编号即可。
    • 【动作】 A发“呼叫请求”分组,B收到并同意连接,发送“呼叫应答”分组进
  2. 数据传输
    • 建立虚电路后,AB可以相互传送数据分组
  3. 虚电路释放
    • 结束后,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工作流程

  1. 意图转译:将管理员的业务意图(如“保证视频会议的质量”)转译为网络策略。
  2. 策略部署:自动化地在全网设备上配置相应策略。
  3. 持续验证:实时监控网络状态,确保网络行为与原始意图一致。
  4. 智能修复:当出现偏差时,自动进行调整和修复,形成闭环控制。

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
字段基本单位首部长度总长度片偏移
偏移量4B1B8B

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地址:

网路类别最大可用网络数第一个可用的网络号最后一个可用的网络号每个网络中的最大主机数
A2^7-211262^24-2
B2^14128.0191.2552^16-2
C2^21192.0.0223.255.2552^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路由器工作原理

  1. 某家庭获得一个全球IP地址,家庭里的三台主机使用私有地址(10.0.0.0网段)。
  2. 用户主机10.0.0.1想发送数据到128.119.40.186:80 ;
  3. NAT为IP分组生成新端口号,更改源地址为NAT的全球IP地址,更改源端口号为新端口号,并增加表项;
  4. 对方不知道分组已经变换,也不知道专用地址是多少,照常返回数据;
  5. NAT重新转换,改回原来的端口号和原来的专用地址。

划分子网 (目的是减少广播域的大小,结果是增加网络数量)

**概述:**两级IP地址的空间利用率低;给每个网络都划分一个网络后会使得路由表变得过大,降低性能。【改进】增加“子网号字段”,这就得到了三级IP地址。

基本思路:

  1. 子网划分是内部事务,外部并不知道
  2. 从主机号借用若干位作为子网号。 地址结构变为<网络号>,<子网号>,<主机号>
  3. 路由器的分组转发仍然是按照目的网络号。 只是本单位路由器收到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.0000000010000000.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编制,可以按照前缀的长短把前缀最长的放在第一行。只有检索到匹配的就停止检索。

子网划分方法:定长的子网掩码,变长的子网掩码

定长子网掩码

概述:

  1. 各子网使用相同的子网掩码。
  2. 各子网分配的IP地址数量相同(造成地址资源的浪费)

过程:

  1. 某单位拥有一个CIDR地址块208.115.21.0/24 不难看出主机号占最后八位
  2. 划分子网。 有4个单位,则划分成4个子网。从主机号的高位借两位作为子网划分。
  3. 现在主机号还剩下6位。这样每个子网可分配的地址数为2^8-2

变长的网络掩码划分子网

**概述:**每个子网可以使用不同的子网掩码。并且每个子网所分配的IP地址数量可以不同。

过程:

  1. 某单位拥有一个CIDR地址块208.115.21.0/24 不难看出主机号占最后八位。要划分给三个部门。

  2. 部门1的主机号需要6位,剩下26位作网络前缀。部门2需要5位,剩下27位作前缀。部门3的主机号需.位,剩余29位作前缀。

  3. 地址范围划分方法
    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
  4. 这种划分方案从大的开始划。部门1需要6位主机号,所以有2^6-2=62个可分配地址,剩下2位用来划分子网,并且部门1为00.

网络层转发过程

**概述:**分组转发基于目的主机所在网络(压缩转发表大小),转发表信息 (目的网络地址,下一跳地址),路由器根据IP地址的网络前缀来查表找到下一跳地址。

两种特殊路由:

  • 【特定主机路由】对特定目的主机的IP地址专门指明一个路由。

    作用:方便管理员控制和测试网络

  • 【默认路由】用特殊前缀0.0.0.0/0表示默认路由。 当目的网络是其他网络(不是自身)也不在转发表中就一律选择默认路由

    作用:通常用于路由器到互联网的路由(因为路由表不可能包含互联网上所有路由)

路由器分组转发算法:

  1. 从IP分组首部提取目的目的主机的IP地址
  2. 查找【特定主机路由】,找得到则按照这一项转发;找不到则开始按前缀长度顺序查找
  3. 对于查找中的一行,将【一行的子网掩码】与【目的地址】逐位【与】(AND),如果与结果和这一行的前缀匹配,结束查找。按下一跳转发。否则继续找下一行。
  4. 如果有一个【默认路由】,就传递给默认路由,没有,则【转发分组出错】。

注意:

  • 因为转发表只给出下一跳地址,并非完整路径,所以传到一个路由器都要查一次它的转发表
  • !! 得到下一跳IP地址后,将它通过ARP转换成MAC地址然后填到MAC帧首部,再根据这个MAC地址去找到下一跳的路由器

IP地址与硬件地址

各种地址

IP地址MAC地址(硬件地址)
网络层及之上使用的地址,是分层式的。位于IP数据报首部。IP数据报封装成MAC帧之后,数据链路层是看不见IP地址的。在数据链路层使用,平面式的。位于MAC帧首部。

**网络层寻址:**网络层只使用IP地址来寻址(因为路由器的隔离,无法通过广播MAC地址来跨网络寻址)。

寻址过程:

  1. 寻址时,每个路由器依据它的路由表选择到目标网络需要转发到的下一跳
  2. IP数据报通过多次路由转发到达目标网络后改为在目标局域网中通过数据链路层的MAC地址以广播的方式寻址

性质:

  1. 在IP层抽象的互联网上只能看到IP数据报
  2. IP数据报首部有源IP地址,但是路由器只使用目的IP地址来转发
  3. 局域网的链路层只能看到MAC帧,MAC帧中是封装的IP数据报。MAC帧首部的源地址和目的地址会不断地改变,因为IP数据报在每次转发过程中都会被拆解重新封装(路由器根据下一跳IP地址通过ARP转换成MAC地址填进MAC帧首部)
  4. 无法使用MAC地址跨网络通信。因为每次转发都要修改MAC地址,如上所述。
  5. IP层抽象的互联网屏蔽了下层复杂的细节,在网络层上可以使用统一抽象的IP地址来研究不同主机的通信

ARP 地址解析协议

ARP概述:

  1. 一种方法,旨在完成IP地址到MAC地址的映射。如果目的主机和源主机不在同一个局域网上,要通过ARP找到本局域网的某个路由器硬件地址,发分组传给它,并由这个路由器把分组转发给下一个网络。
  2. ARP工作在网络层(看得见IP地址);NAT工作在传输层(看得见端口).

ARP表:每个主机都有的一个ARP高速缓存,存放本局域网上各主机和路由器的IP地址到MAC地址的映射表

**原理:**A向本局域网主机B发送IP数据报: (ARP请求分组:广播发送 ARP响应分组:单播发送

  1. 查ARP高速缓存,如果有B的IP地址,直接得到对应硬件地址,把它写入MAC帧,并发送给B
  2. 如果没有,通过使用目的MAC地址为FF-FF-FF-FF-FF-FF的帧封装和广播ARP请求分组。所有主机都会收到ARP请求。
  3. B收到后向A发送ARP响应分组,在分组里告诉A它(B)的IP地址和MAC地址映射关系,这样A可以写入它的ARP缓存,从而发送MAC帧

补充:

  • ARP用来解决同一局域网主机/路由器的IP地址和硬件地址映射问题。不在一个局域网,则通过ARP找到某个路由器的硬件地址,发给这个路由器,让它转给下一个网络。
  • IP地址到硬件地址的解析自动进行,用户并不知道。
  • 主机或路由器和本网络另一个已知IP地址的主机或路由器进行通信时,ARP自动将IP地址解析成数据链路层需要的硬件地址

动态主机配置协议 DHCP

DHCP概述:

  1. 用于给主机动态地分配IP地址。
  2. 提供即插即用的联网机制,允许一台计算机加入新的网络和自动获取IP地址
  3. 应用层协议(通过客户/服务器模式工作),基于UDP

工作原理:

  1. 使用客户/服务器模型
  2. 需要IP地址的主机启动时向【DHCP服务器】广播发送【发现报文】,从而成为【DHCP客户】;
  3. 所有主机都能收到这个广播报文,但是只有【DHCP服务器】可以回答。
  4. 【DHCP服务器】在自己的数据库里查找这台主机的配置信息,找得到返回,找不到则从服务器的IP地址池中取一个地址分配给这台计算机。
  5. 【提供报文】DHCP服务器的回答报文。

过程:

  1. DHCP客户广播发现报文(源地址0.0.0.0,目的地址255.255.255.255)
  2. 服务器收到这个广播报文,广播【提供报文】,这里面包括给DHCP客户的IP地址,报文源地址为DHCP服务器地址,目的地址为255.255.255.255
  3. DHCP客户收到提供报文,如果接受这个IP地址,就需要广播“DHCP请求”给DHCP服务器。源地址0.0.0.0,目的地址255.255.255.255(同1.)
  4. DHCP服务器广播“DHCP确认”消息,把IP地址分配给这个客户。源地址目的地址同2.

注意点:

  1. 可以有多台DHCP服务器,可能有多个应答消息,但是DHCP客户只挑选其中一个(最先到达的)
  2. DHCP分配给客户的IP地址是【临时的】,客户只能在【租用期】内使用,租用期由服务器决定,客户也可以在报文中提出租用期要求。
  3. 交互过程采用广播方式。采用UDP。

ICMP 网际控制报文协议

ICMP概述:

  1. 目的:有效转发IP数据报,提高交付成功机会。
  2. 允许主机或路由器报告差错和异常情况
  3. 虽然ICMP报文封装在IP数据报中发送,但ICMP是依然是网络层协议。
  4. ICMP报文有两种:【ICMP差错报告报文】【ICMP询问报文】

ICMP差错报告报文及其五种类型:用于目标主机或到目标主机路径上的路由器。目的是向源主机报告差错和异常情况。

  1. 终点不可达:路由器/主机不能交付数据时向源主机发送
  2. 源点抑制:路由器/主机因为【拥塞】而丢弃数据报。 源点抑制报文告诉源点应该降低数据报的发送速率。
  3. 时间超过:
    • 路由器收到生存时间TTL为0的数据报,除丢弃这个数据报外还需要向源点发送时间超过报文。
    • 终点在预先规定的时间内不能收到一个数据报全部数据报片时,就把已收到的数据报片全部丢弃,然后向源点发送时间超过报文。
  4. 参数问题:收到的数据报首部有的字段的值不正确,则丢弃并发送参数问题报文
  5. 改变路由(重定向):告诉主机下次应该把数据报发送给另外的路由器,可通过更好地路由

ICMP差错报告报文不应该发送:

​ 情况一:对ICMP差错报告报文不再发送ICMP差错报告报文

​ 情况二:第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报文

​ 情况三:对于具有多播地址的数据报都不发送ICMP差错报告报文

​ 情况四:对于特殊地址的数据报也不发送

ICMP询问报文的四种类型

  1. 回送请求和回答报文
  2. 时间戳请求和回答报文
  3. 地址掩码请求和回答报文
  4. 路由器询问和通告报文

ICMP常见应用:

  1. 分组网间探测PING:测试两台主机间的连通性。工作在应用层,直接使用网络层的ICMP。
  2. Traceroute:跟踪分组经过的路由。 工作在网络层。

习题查漏补缺

一、IPv4计算首部检验和

  1. 先把IP数据报首部划分为许多16位字的序列,并把检验和字段置零。把所有16位字相加后,将得到的和的反码写入检验和字段。
  2. 接收方收到数据报后,将首部的所有16位字再使用反码算术运算相加一次。将得到的和取反码,即得出接收方检验和的计算结果。
  3. 若首部未发生任何变化,则此结果必为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地址类型

  1. 单播
  2. 多播
  3. 任播(新增)

过渡技术

  1. 双协议栈
  2. 隧道技术

路由算法和协议

路由算法分类

类型特点示例
静态手工配置-
动态自动调整RIP, OSPF, BGP

路由协议对比

协议类型特点
RIP距离向量跳数限制15
OSPF链路状态支持分层区域
BGP路径向量AS间路由

IP多播

多播地址

  • IPv4:D类地址(224.0.0.0~239.255.255.255)
  • IPv6:FF00::/8

多播协议

  1. IGMP:组成员管理
  2. 多播路由协议:构建多播树

移动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-1023IANA统一分配标准服务固定使用系统服务、标准协议
登记端口号1024-49151IANA登记管理注册后避免冲突用户应用程序
动态端口号49152-65535系统动态分配临时使用,通信结束释放客户端临时端口

常用熟知端口号

应用协议端口号传输协议服务描述
FTP21TCP文件传输协议控制连接
TELNET23TCP远程终端协议
SMTP25TCP简单邮件传输协议
DNS53UDP/TCP域名系统
TFTP69UDP简单文件传输协议
HTTP80TCP超文本传输协议
SNMP161UDP简单网络管理协议

动态端口分配机制

  • 分配时机:客户端进程发起连接时由操作系统自动分配
  • 生命周期:仅在通信期间有效,连接结束后立即释放
  • 重用性:端口号可在不同时间被不同进程重复使用
  • 别名:也称为临时端口号或短暂端口号

传输层服务模式

传输层提供两种截然不同的服务模式,分别对应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连接(传输层)
状态保存位置网络中间节点仅在端系统
对网络层影响限制为面向连接不影响网络层服务模式
实现复杂度网络设备复杂端系统复杂
扩展性受网络规模限制仅受端系统能力限制

协议栈层次关系

封装与解封装过程

  1. 应用层:生成应用数据
  2. 传输层:添加TCP/UDP首部,形成报文段/数据报
  3. 网络层:添加IP首部,形成IP数据报
  4. 数据链路层:添加帧首部和尾部
  5. 物理层:转换为物理信号传输

层次独立性原则

  • 传输层独立性:TCP/UDP的选择不影响网络层的服务模式
  • 网络层透明性:传输层协议对中间路由器透明
  • 应用层灵活性:应用可根据需求选择合适的传输层协议

TCP与UDP协议对比分析

协议栈层次服务特征

传输层服务提供模式

协议栈层次UDP服务模式TCP服务模式底层依赖
应用层应用数据直接传递应用数据直接传递传输层服务
传输层无连接不可靠服务面向连接可靠服务网络层服务
网络层无连接不可靠服务无连接不可靠服务数据链路层服务
数据链路层帧传输服务帧传输服务物理层服务
物理层比特流传输比特流传输物理介质

服务质量对比

服务特性UDPTCP说明
连接管理无连接面向连接TCP需要三次握手建立连接
可靠性保证不可靠可靠TCP提供确认、重传机制
数据顺序不保证保证TCP确保数据按序到达
流量控制TCP防止接收方缓存溢出
拥塞控制TCP避免网络过载
错误检测可选必须都提供检验和机制

适用场景分析

UDP适用场景

  • 实时应用:IP电话、视频会议、在线游戏
  • 简单查询:DNS查询、SNMP网络管理
  • 广播/组播:DHCP、路由协议更新
  • 小数据传输:TFTP简单文件传输

TCP适用场景

  • 可靠传输:文件传输(FTP)、网页浏览(HTTP)
  • 交互应用:远程登录(TELNET/SSH)、电子邮件(SMTP)
  • 大数据传输:数据库同步、软件下载
  • 安全通信:HTTPS、加密数据传输

协议首部结构对比

UDP首部格式

UDP首部设计简洁,仅包含必要的传输信息,体现了其简单高效的特点。

字段名称位长(bit)字节数功能描述
源端口162发送方应用进程端口号
目的端口162接收方应用进程端口号
长度162UDP首部+数据的总长度
检验和162错误检测(可选)

UDP首部特点

  • 固定长度:8字节,结构简单
  • 最小开销:仅提供基本的多路复用和错误检测
  • 处理高效:字段少,解析速度快

TCP首部格式

TCP首部包含丰富的控制信息,支持可靠传输的各种机制。

固定首部字段(20字节)
字段名称位长(bit)字节数功能描述
源端口162发送方应用进程端口号
目的端口162接收方应用进程端口号
序列号324数据字节流中首字节的序号
确认号324期望接收的下一个字节序号
数据偏移40.5TCP首部长度(以4字节为单位)
保留60.75保留字段,必须为0
标志位60.75控制位(URG、ACK、PSH、RST、SYN、FIN)
窗口大小162接收窗口大小(流量控制)
检验和162错误检测(必须)
紧急指针162紧急数据指针
可变选项字段(0-40字节)
选项类型长度功能
最大报文段长度(MSS)4字节协商最大数据段大小
窗口扩大3字节扩展窗口大小范围
时间戳10字节RTT测量和序列号回绕处理
选择确认(SACK)可变选择性确认机制

TCP首部特点

  • 可变长度:20-60字节,功能丰富
  • 控制复杂:支持连接管理、流量控制、拥塞控制
  • 扩展性强:选项字段支持协议功能扩展

总结

特性UDP (User Datagram Protocol)TCP (Transmission Control Protocol)
连接无连接面向连接
端点通信支持“一对一”、“一对多”、“多对一”和“多对多”交互通信每一条 TCP 连接只能有两个端点 EP,只能是一对一通信
数据流类型面向应用报文面向字节流
可靠性尽最大努力交付,即不可靠;不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
首部开销首部开销小,仅 8 字节首部开销最小 20 字节,最大 60 字节

习题查漏补缺

  1. 通信子网、传输层、资源子网
    • 通信子网: 包括物理层、数据链路层和网络层,主要负责数据通信。
    • 传输层: 主要任务是向高层用户屏蔽下面通信子网的细节 (如网络拓扑、路由协议等)。
    • 资源子网: OSI 参考模型的上三层。
  2. 传输层面向连接服务的特性: 保证可靠和顺序交付。
  3. 一个 TCP 报文的首部长度是 20B, 一个 IP 数据报的首部长度也是 20B, 再加上 60B 的数据, 一个 IP 数据报的总长度为 100B, 从而数据占 60%。
  4. 若用户应用程序使用 UDP 进行数据传输, 则必须在传输层的上层即应用层提供可靠性方面的全部工作。

##UDP 协议

概述

UDP 仅在 IP 层的数据包服务之上增加了两个最基本的功能,复用和分用,以及差错检测。

UDP协议特征分析

UDP(User Datagram Protocol,用户数据报协议)是传输层的无连接协议,以其简单高效的特点在特定应用场景中发挥重要作用。

核心设计特点

特征维度UDP特点技术优势应用影响
连接管理无连接服务无需三次握手建立连接降低通信延迟和系统开销
状态维护无状态协议不维护连接状态信息服务器可支持更多并发客户端
首部开销8字节固定首部相比TCP节省75%首部空间提高网络传输效率
流量控制无流量控制发送速率不受接收方限制适合实时性要求高的应用
拥塞控制无拥塞控制不响应网络拥塞状况保持恒定发送速率
通信模式多种通信模式支持1对1、1对多、多对1、多对多灵活的网络拓扑支持
数据处理面向报文保持应用层报文边界应用层需合理控制报文大小

协议工作机制

1. 无连接传输模式

  • 即发即送:数据传输前无需建立连接
  • 独立处理:每个数据报独立路由和处理
  • 状态无关:发送方和接收方不维护连接状态

2. 面向报文的数据处理

  • 边界保持:保留应用层报文的完整性
  • 原样传递:不对报文进行分割或合并
  • 大小控制:应用程序需选择合适的报文大小

3. 最小化协议开销

  • 简化首部:仅包含必要的传输信息
  • 快速处理:协议栈处理开销最小
  • 高效传输:适合对延迟敏感的应用

UDP首部结构详解

首部字段组成

字段名称位长(bit)字节数字段范围功能描述
源端口1620-65535发送方应用进程端口号,回复时使用
目的端口1620-65535接收方应用进程端口号,必须字段
长度1628-65535UDP首部+数据总长度(最小8字节)
检验和1620-65535差错检测,IPv4可选,IPv6必须

字段功能说明

源端口字段

  • 双向通信:用于接收方回复数据
  • 可选性:单向通信时可设为0
  • 多路复用:标识发送方应用进程

目的端口字段

  • 必要性:数据包正确投递的关键
  • 服务标识:指定目标应用服务
  • 解复用依据:传输层分发数据的基础
  • 错误处理:端口不存在时,接收方丢弃报文并通过ICMP发送”端口不可达”错误

长度字段

  • 范围限制:8字节(仅首部)到65535字节
  • 完整性:包含首部和数据部分总长度
  • 验证作用:接收方验证数据包完整性

检验和字段

  • 差错检测:检验UDP数据报传输完整性
  • 处理策略:发现错误直接丢弃数据报
  • 版本差异:IPv4中可选(不用时设为0),IPv6中强制使用

UDP检验和机制

UDP检验和提供端到端的差错检测,虽然简单但能有效发现传输错误。

检验和计算流程

发送方处理过程

  1. 构造伪首部:添加IP层信息用于检验
  2. 数据分组:将伪首部+UDP首部+数据按16位分组
  3. 求和计算:所有16位字相加,进位回卷
  4. 取反操作:对和值按位求反得到检验和
  5. 填入首部:将检验和写入UDP首部对应字段

接收方验证过程

  1. 重构检验:按相同方式构造伪首部和分组
  2. 全部求和:包括接收到的检验和一起计算
  3. 结果判断
    • 结果为0:传输正确
    • 结果非0:存在错误,丢弃数据包

伪首部结构

字段名称位长(bit)字节数内容来源作用
源IP地址324IP首部验证数据包来源
目的IP地址324IP首部验证数据包目标
保留字段81全0字节对齐
协议字段8117(UDP)标识上层协议
UDP长度162UDP首部数据包长度信息

伪首部特点

  • 虚拟结构:仅用于检验和计算,不实际传输
  • 跨层信息:结合网络层和传输层信息
  • 完整性保证:确保数据包在正确的源和目的间传输

检验和策略差异

协议版本检验和要求处理方式设计考虑
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
2
3
4
5
6
7
8
9
发送方应用: [1000字节] [500字节] [1500字节]

TCP分段: [1000] [500] [1460] [40]

网络传输: 独立的IP数据包

TCP重组: 连续的3000字节流

接收方应用: [2000字节] [1000字节] (应用层自定义边界)

TCP与UDP协议对比

特征维度TCPUDP适用场景
连接性面向连接无连接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位12TCP首部长度(4字节单位)首部解析依据
保留字段6位12未来扩展预留协议兼容性
控制标志6位13连接状态控制状态机驱动
窗口大小16位14-15接收窗口通告流量控制机制
检验和16位16-17数据完整性验证错误检测
紧急指针16位18-19紧急数据边界优先数据处理
控制标志位详解
标志位全称功能作用使用场景组合使用
URGUrgent紧急指针有效紧急数据传输与紧急指针配合
ACKAcknowledgment确认号有效数据确认除SYN外几乎总是置1
PSHPush立即推送数据交互式应用提高响应性
RSTReset重置连接异常处理强制关闭连接
SYNSynchronize同步序列号连接建立三次握手使用
FINFinish结束数据传输连接释放四次挥手使用

常见标志位组合

  • 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字节)
选项类型选项长度功能描述使用时机
MSS4字节最大报文段长度连接建立时协商
窗口扩大因子3字节扩展窗口大小范围高带宽网络
时间戳10字节RTT测量和PAWS高速网络
SACK允许2字节启用选择确认连接建立时
SACK可变选择确认块数据传输时

选项字段特点

  • 可选性:根据需要添加
  • 对齐要求:总长度4字节对齐
  • 填充处理:不足部分用0填充
  • 向后兼容:不识别的选项被忽略

TCP检验和机制

TCP检验和是强制性的端到端错误检测机制,确保数据在传输过程中的完整性。

检验和计算原理

算法特点

  • 强制性:TCP检验和必须计算,不可选
  • 全覆盖:包含首部、数据和伪首部
  • 简单高效:16位字求和算法
  • 错误检测:能检测大部分传输错误

检验和计算流程

发送方处理步骤
步骤操作内容技术细节注意事项
1构造伪首部添加IP层信息包含源/目的IP地址
2数据准备检验和字段置0为计算做准备
316位分组按16位字划分奇数字节需填充0
4求和计算所有16位字相加进位回卷处理
5取反操作对和值按位求反得到最终检验和
6填入首部写入检验和字段完成报文段构造

计算示例

1
2
3
4
伪首部 + TCP首部 + 数据 → 16位字序列
0x4500 + 0x0028 + 0x1234 + ... → 求和
进位回卷:(sum & 0xFFFF) + (sum >> 16)
按位取反:~sum & 0xFFFF
接收方验证步骤
步骤操作内容验证逻辑处理结果
1重构检验按相同方式构造包含接收到的检验和
2全部求和所有16位字相加包括原检验和字段
3结果判断检查最终结果0表示正确,非0表示错误
4错误处理丢弃错误报文段不通知发送方

伪首部结构详解

字段名称位长字节数数据来源作用说明
源IP地址32位4IP首部验证数据包来源正确性
目的IP地址32位4IP首部验证数据包目标正确性
保留字段8位1全0字节对齐和协议兼容
协议字段8位16(TCP)标识传输层协议类型
TCP长度16位2计算得出TCP首部+数据总长度

伪首部作用

  • 跨层验证:结合网络层信息进行验证
  • 路由保护:防止数据包被错误路由
  • 协议识别:确保数据包被正确的协议处理
  • 长度校验:验证数据包长度信息正确性

检验和特性分析

检测能力

  • 单比特错误:100%检测
  • 双比特错误:高概率检测
  • 突发错误:部分检测能力
  • 随机错误:统计检测能力

性能考虑

  • 计算开销:相对较小
  • 硬件支持:可硬件加速
  • 实时性:不影响传输延迟
  • 可靠性:提供基本错误检测

与其他协议对比

协议检验和要求覆盖范围错误处理
TCP强制计算首部+数据+伪首部丢弃错误报文
UDPIPv4可选,IPv6强制首部+数据+伪首部丢弃错误报文
IP仅首部仅IP首部丢弃错误数据包

TCP 运输连接

分为三个阶段:

  1. 通过 “三报文握手” 来建立 TCP 连接。
  2. 基于已建立的 TCP 连接进行可靠的数据传输。
  3. 在数据传输结束后还要通过 “四报文挥手” 来释放 TCP 连接。

“三报文握手” 建立 TCP 连接

目的: 在于解决以下三个主要问题:

  • 使 TCP 双方能够确知对方的存在。
  • 使 TCP 双方能够协商一些参数 (最大报文段长度、最大窗口大小、时间戳选项等)。
  • 使 TCP 双方能够对运输实体资源进行分配和初始化,运输实体资源包括缓存大小、各状态变量、连接表中的项目等。
  1. 每条 TCP 连接有两个端点,此端点即套接字。每条 TCP 连接唯一地被通信的两个端点 (套接字) 确定。
  2. 同一个 IP 地址可以有多个不同的 TCP 连接,而同一个端口号也可以出现在多个不同的 TCP 连接中。
  3. 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 连接。该报文段终止位 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 连接中不会出现旧连接中的报文段。

总结:

阶段建立连接释放连接
1SYN=1 seq=xFIN=1 seq=u
2SYN=1 ACK=1 seq=y ack=x+1ACK=1 seq=v ack=u+1
3ACK=1 seq=x+1 ack=y+1FIN=1 ACK=1 seq=w ack=u+1
4ACK=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)。

习题查漏补缺

  1. 在 TCP 首部中没有目标主机 IP 地址。
  2. TCP 报文段和 UDP 报文段都包含源端口、目的端口、检验号。因为 UDP 提供不可靠的传输服务,所以不需要对报文进行编号,不会有序列号字段。相比之下,TCP 需要有序列号字段。
  3. TCP 的滑动窗口协议中规定重传分组的数量最多可以是滑动窗口的大小。
  4. 假设 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。
  5. TCP 采用对 【报文段】 的确认机制。
  6. TCP 中滑动窗口的值设置得太大,对主机的影响是 【由于传送的数据过多而使路由器变得拥挤,主机可能丢失分组】