type
status
date
slug
summary
tags
category
icon
password
fullWidth
fullWidth
食用说明:
- 标有*的章节是个人认为比较重要的。
- 由于参考了英文教材,一些重要的概念后面标注了英文。
网络概述
因特网概述
具体构成角度
- 计算设备:数以亿计的互联设备
- 主机:运行网络应用程序
- 通信链路:光纤、同轴电缆、无线电、卫星等
- 分组交换设备:路由器(Router)和交换机(Switch),用于转发分组(Packets)
- 节点:
- 主机及其应用程序
- 路由器、交换机等网络交换设备
- 边(通信链路):
- 接入网链路(Access Link):主机连接到互联网的链路
- 主干链路(Backbone Link):路由器之间的链路
- 协议:规范和控制消息的发送和接收
- 如 TCP、IP、HTTP、FTP
- 对等层实体沟通的标准,包括报文格式、次序及传输动作
服务角度
- 分布式应用:如 Web、VoIP、Email、电子商务、社交网络、分布式游戏
- 通信基础设施:
- 提供应用程序接口(API)
- 连接发送和接收数据的应用程序
- 提供服务类型:无连接不可靠服务(Connectionless Unreliable Service)或面向连接的可靠服务(Connection-Oriented Reliable Service)
网络边缘
网络边缘包括主机及其运行的应用程序。
通信模式
- C/S 模式(Client/Server Model):客户端请求服务,服务器响应
- 如 Web 浏览器和服务器、Email 客户端和服务器
- P2P 模式(Peer-to-Peer Model):每个主机同时是客户端和服务器
- 如 Gnutella、KaZaA、Emule
传输协议
- 传输控制协议(Transmission Control Protocol,TCP):
- 可靠、保序的数据传输
- 流量控制和拥塞控制
- 用户数据报协议(User Datagram Protocol,UDP):
- 无连接、不可靠、不保序的数据传输
- 无流量控制和拥塞控制
应用实例
- 使用 TCP:HTTP、FTP、Telnet、SMTP
- 使用 UDP:流媒体、远程会议、DNS、Internet 电话
网络核心
网络核心由路由器构成的网状网络,数据传输方式包括:
电路交换(Circuit Switching)
- 为每个呼叫预留专有电路
- 独享资源,适合电话网
- 不适合计算机通信,因连接建立时间长、资源浪费
- 网络资源被分成片,有频分(Frequency Division)、时分(Time Division)、波分(Wavelength Division),为呼叫分配片,如果某呼叫没有数据,则其资源片处于空闲状态

分组交换(Packet Switching)
- 将要传输的数据分成一个个单位(分组),以分组为单位进行存储、转发
- 将分组从一个路由器传到相邻路由器(Hop)一段段最终从源端传到目标端
- 在转发之前,节点必须收到整个分组
- 排队延迟和丢失:如果分组到达速率高于链路传输速率,分组会排队等待传输;如果路由器缓存用完了,分组会被抛弃

网络核心的关键功能
- 路由(Routing):用路由算法决定分组采用的从源到目标的路径

- 转发(Forwarding):将分组从路由器的输入链路转移到输出链路
数据报(Datagram)的工作原理
- 通信之前无需建立起连接,有数据就传输
- 每一个分组都独立路由(由于路径不一样,可能会失序)
- 路由器根据分组的目标地址进行路由
虚电路(Virtual Circuit)的工作原理
- 在数据传输前,发送方和接收方之间通过信令协议建立一条逻辑连接。
- 网络节点根据路由算法选择路径,并预留资源(如带宽、缓冲区)。建立完成后,网络会分配一个虚电路标识符(Virtual Circuit Identifier,VCI),用于标识该连接。
接入网
怎样将端系统和边缘路由器连接?
住宅接入网络
- 调制(Modem):将上网数据调制加载到音频信号上,在电话线上传输,端系统将数据解调出来;拨号调制解调器以 56kbps 的速率直接接入路由器,不能同时上网和打电话
- 调幅(Amplitude Modulation)
- 调频(Frequency Modulation)
- 调相位(Phase Modulation)
- 综合调制(Hybrid Modulation)
- 数字用户线路(DSL,Digital Subscriber Line):一种通过普通电话线提供高速互联网接入的技术。
- 它利用电话线中的高频段传输数据,不影响低频段的语音通信,因此可以同时上网和打电话。
- DSL 线路上的数据被传到互联网(4kHz 以上),语音被传到电话网(4kHz 以下)。
- 分给数据的线路分为上行和下行。

- 线缆网络(Cable Network):
- 有线电视信号线缆双向改造:在不同频段传输不同信道的数据,数字电视和上网数据(上下行)
- 光纤和同轴电缆:线缆和光纤将家庭用户接入到 ISP 路由器,各用户贡献到线缆头端的接入网络

单位接入网络
- 端系统直接接到以太网交换机上

无线网络
- WLAN(Wireless Local Area Network):建筑物内部
- 广域无线接入(Wide-Area Wireless Access):由电信运营商提供
物理媒体
导引性媒体(Guided Media)
- 同轴电缆(Coaxial Cable):两根同轴地铜导线、双向
- 基带电缆(Baseband Cable):电缆上有单个信道
- 宽带电缆(Broadband Cable):电缆上有多个信道
- 光纤和光缆(Fiber Optics):光脉冲,一个脉冲代表 1bit,高速、低误码率、安全
非导引性媒体(Unguided Media)
- 无线电(Radio)
- 传播环境效应:反射、吸收、干扰
- 类型:地面微波、WLAN(WiFi)、wide-area(蜂窝)、卫星
:开放空间传输电磁波无需物理线缆
因特网结构和 ISP
ISP(Internet Service Provider)
ISP 是向用户提供互联网接入和服务的公司或组织。
- 主要服务:
- 互联网接入:通过宽带、光纤、DSL、无线等方式连接互联网。
- 电子邮件和网页托管:提供电子邮箱和网站托管服务。
- 虚拟专用网(VPN):提供安全的远程访问服务。
- 云服务:提供数据存储、备份等云服务。
- 技术支持:提供网络设置、故障排除等帮助。
- 类型:
- 拨号 ISP:通过电话线接入,速度较慢。
- 宽带 ISP:提供高速连接,如 DSL、光纤等。
- 无线 ISP:通过无线技术提供接入。
- 卫星 ISP:通过卫星为偏远地区提供连接。
端系统通过接入 ISP链接到互联网,接入 ISP 是互相连接的;每个 ISP 都连接到全局 ISP(Global ISP),接入 ISP 和全局 ISP 往往有经济合约。
- 对等连接(Peering Connection):对等连接是指两个或多个 ISP 之间直接互联,以交换流量,而不通过第三方网络。
- IXP(Internet Exchange Point):互联网交换点,是不同网络服务提供商(ISP)和内容分发网络(CDN)之间交换流量的物理基础设施。

ICP(Internet Content Provider)
ICP 是指在互联网上提供各类信息、服务或应用的公司或组织。它们通过网站、应用程序等平台向用户提供内容。
- 主要类型:
- 新闻门户:如新浪、搜狐,提供新闻资讯。
- 视频平台:如优酷、爱奇艺,提供视频内容。
- 社交网络:如微信、微博,提供社交服务。
- 电子商务:如淘宝、京东,提供在线购物。
- 搜索引擎:如百度、Google,提供信息检索。
ICP 为了减少运营支出、给用户提供更好的服务,会在全球各地部署数据中心机房,用专线连接在一起,数据中心机房往往靠近核心 ISP 的路由设备。

分组延时、丢失和吞吐量
分组延时(Packet Delay)
在路由缓冲区有分组队列,分组等待排到队头被传输。
- 四种延时
- 节点处理延时:检查 bit 级差错,检查分组头部并决定将分组导向何处。
- 排队延时:在输出链路上等待传输的时间,依赖于路由器的拥塞程度。
- 传输延时: , 是链路带宽(bps), 是分组长度(bits)。
- 传播延时: , 是链路带宽(bps), 媒介传输速度(km/s)。
- 流量强度: ,流量强度不能超过 1。
分组丢失(Packet Loss)
由于链路的队列缓冲区容量有限,当分组到达一个满的队列时,该分组会丢失。丢失的分组可能会被前一个节点或端系统重传,或根本不重传。
吞吐量(Throughput)
在源端和目标端之间的传输速率(数据量/单位时间)。
- 瞬间吞吐量(Instantaneous Throughput):某一时刻的传输速率,反映当前网络的瞬时性能。
- 平均吞吐量(Average Throughput):在一段时间内的平均传输速率,反映网络的整体性能。
- 瓶颈链路(Bottleneck Link):端到端的路径上,限制端到端吞吐的链路。

协议层次和服务模型
层次化方式实现复杂网络功能
- 将网络复杂的功能分成功能明确的分层次,每一层实现其中一组功能,功能中有其上层可以使用的功能:服务。
- 本层协议实体相互交互执行本层的协议动作,目的是实现本层功能,通过接口为上层提供更好的服务。
- 在实现本层协议的时候,直接利用了下层所提供的服务。
服务(Service)
下层实体向上层实体提供的它们之间通信的能力。
原语(Primitive)
上层使用下层服务的形式,上层使用下层提供的服务以及下层向上层提供服务的都是通过服务访问原语来进行交互的。
服务访问点(Service Access Point, SAP)
上层使用下层提供的服务通过的层间接口,用于下层服务区分不同的上层用户。
- 传输层的 SAP:端口(Port)
- 邮箱的 SAP:地址(Address)
服务类型
- 面向连接的服务(Connection-Oriented Service):建立连接、通信、拆除连接,网络层的连接成为虚电路,适合传输大的数据块。
- 无连接的服务(Connectionless Service):两个对等层实体在通信前不需要建立连接,适用于传输。
数据单元(Data Unit)
- 服务数据单元(Service Data Unit, SDU):*某一层从上层接收到的数据单元,是该层需要处理或传输的*有效载荷(Payload)。
- 协议数据单元(Protocol Data Unit, PDU):头部 + 服务数据单元;如果服务数据很大,可能被拆成多份并分别加上头部;如果服务数据很小,可能和多个服务数据合成一份并加上头部。
各层的协议数据单元的名称
不同协议层次对 PDU 的命名不同。
- 应用层(Application Layer):消息(Message)
- 传输层(Transport Layer):段(Segment,TCP)或数据报(Datagram,UDP)
- 网络层(Network Layer):分组(Packet,有连接)或数据报(Datagram,无连接)
- 数据链路层(Data Link Layer):帧(Frame)
- 物理层(Physical Layer):比特流(Bit Stream)
互联网协议栈
- 应用层(Application Layer):为应用进程提供网络应用服务,如 FTP、SMTP、HTTP、DNS。
- 传输层(Transport Layer):在网络层提供的端到端通信基础上,细分为进程到进程的通信,如 TCP 和 UDP。
- 网络层(Network Layer):为数据报从源主机到目标主机选择路由,传输以分组为单位的端到端的数据,如 IP、路由协议。
- 链路层(Link Layer):相邻 2 个网络节点之间传输以帧为单位的数据,如 点对点协议、802.11(WiFi)、Ethernet。
- 物理层(Physical Layer):在线路上传输 bit。
OSI 模型
OSI 模型比互联网协议栈多了表示层(Presentation Layer)和会话层(Session Layer)。
- 表示层(Presentation Layer):允许应用解释传输的数据,加密、压缩、机器相关的表示转换。
- 会话层(Session Layer):数据交换的同步、检查点、恢复。
互联网历史
1960 年之前
计算机网络采用线路交换。有三个小组独立开展分组交换的研究:
- 1961:Kleinrock(美国麻省理工学院)
- 1964:Baran(美国兰德公司)
- 1964:Donald(英国国家物理实验室)
1961-1972:早期的分组交换概念
- 1967:美国高级研究计划研究局考虑 ARPAnet
- 1961:第一个 ARPAnet 节点开始工作
- 1969:ARPAnet 拥有 4 个节点
- 1972:ARPAnet 公众演示、第一个 email 程序、有 15 个节点
1972-1980:专用网络和网络互联
1980-1990:体系结构变化,网络数量激增,应用丰富
- 1983:TCP/IP 部署、DNS 定义
- 1982:SMTP 协议定义
- 1985:FTP 协议定义、OSI 模型提出
- 1988:TCP 拥塞控制
1990-2000:商业化、Web、新应用
应用层
Web 和 HTTP
Web 概述
Web 由一些对象组成,对象可以是 HTML 文件、JPEG 图像、Java 小程序、MP3 文件等。每个 Web 页包含一个基本的 HTML 文件,该文件包含若干对象的引用(链接),每个对象可以通过统一资源定位符(URL)访问。
URL 格式
URL 格式如下:
- 协议名称:如 HTTP、FTP。
- 用户:口令:可选,用于身份验证。
- 主机名:如
www.someSchool.edu
。
- 路径名:如
/someDept/pic.gif
。
- 端口:可选,HTTP 协议默认 80 端口,FTP 协议默认 21 端口。
HTTP 协议
- HTTP(HyperText Transfer Protocol,超文本传输协议)是 Web 应用层协议,采用 C/S 模式:
- 客户端:浏览器请求、接收和渲染 Web 对象。
- 服务器:对请求进行响应,发送对象。
- HTTP 是基于 TCP 的协议:
- 客户端发起一个与服务器的 TCP 连接(建立套接字),服务器接受连接。
- 浏览器与 Web 服务器交换 HTTP 报文(应用层报文)。
- TCP 连接关闭。
- HTTP 是无状态的,服务器不维护关于客户的任何信息。
非持久 HTTP(HTTP/1.0)
- 每个 TCP 连接最多传输一个对象。
- 下载多个对象需要多个 TCP 连接。
- 方法:GET、POST、HEAD。
- 缺点:
- 每个对象需要两个 RTT(Round-Trip Time):一个用于建立连接,一个用于传输数据。
- 操作系统必须为每个 TCP 连接分配资源。
持久 HTTP(HTTP/1.1 默认)
- 多个对象可以在一个 TCP 连接上传输。
- 服务器在发送响应后仍保持 TCP 连接,后续请求和响应报文通过相同连接进行传送。
- 客户端在遇到一个引用对象时尽快发送请求。
- 方法:GET、POST、HEAD、PUT(上传文件)、DELETE(删除文件)。
- 模式:
- 非流水线模式:客户端在收到前一个请求的响应后再发送新的请求。
- 流水线模式(HTTP/1.1 默认):客户端遇到一个引用对象就立刻发送请求。
HTTP 请求报文格式
HTTP 请求报文由请求行、请求头和请求体组成。

HTTP 响应报文格式
- 状态行:包含协议版本、状态码和状态信息(如 200 OK、404 Not Found)等。
- 首部行:包含
Content-Length
,因为 TCP 不维护报文边界。

- 数据:响应的实际内容。
常见状态码
- 200 OK:请求成功。
- 301 Moved Permanently:资源永久重定向。
- 400 Bad Request:请求无效。
- 404 Not Found:资源未找到。
- 505 HTTP Version Not Supported:HTTP 版本不支持。
文件传输协议(FTP)
文件传输协议(FTP):用于向远程主机传输文件或从远程主机接收文件。
- C/S 模式:
- 客户端:发起传输的一方。
- 服务器:远程主机。
- 默认端口:21(控制连接)和 20(数据连接)。
FTP 控制连接和数据连接
- 控制连接:用于身份验证和命令传输。
- 数据连接:用于文件传输。
- 特点:
- 控制连接和数据连接分开。
- 服务器在收到文件传输命令时,主动建立数据连接。
- 文件传输完成后,服务器关闭连接。
- 带内:数据连接,传输数据。
- 带外:控制连接,传输指令。
- FTP 是有状态的协议,服务器维护客户端状态。
电子邮件(Email)
三个主要组成部分
- 用户代理(User Agent):
- 又名“邮件阅读器”,用于撰写、编辑和阅读邮件。
- 邮件服务器(Mail Server):
- 管理和维护发送给用户的邮件。
- 输出报文队列保持待发送邮件报文。
- 通过 SMTP 协议发送邮件报文。
- 邮件传输协议
简单邮件传输协议(SMTP)
- 使用 TCP 协议在客户端和服务器之间传输报文,端口为 25。
- 传输分为握手、传输报文、关闭连接三个阶段。
- 命令是 ASCII 码文本,响应是状态码和状态信息。

多媒体邮件扩展(MIME)
MIME(Multimedia Mail Extension)用于支持多媒体邮件。
- 在报文首部用额外的行声明 MIME 内容类型。

邮件访问协议
- POP(Post Office Protocol):
- 用户确认身份并下载邮件。
- 会话中是无状态的。
- 本地管理文件夹。
- IMAP(Internet Mail Access Protocol):
- 在服务器上处理存储的报文。
- 支持目录组织报文。
- 会话中保留用户状态。
- HTTP:使用 HTTP 协议访问邮件,如 Hotmail、Yahoo Mail。
域名系统(DNS)
域名系统(DNS)的必要性
- IP 地址标识主机和路由器,但不易记忆。
- 域名便于人类使用,如
www.baidu.com
。
- DNS 实现域名到 IP 地址的转换。
DNS 的实现方式
- 分层的、基于域的命名机制。
- 分布式数据库完成名字到 IP 地址的转换。
- 运行在 UDP协议 之上,端口号为 53。
DNS 的功能
- 域名到 IP 地址的转换。
- 主机别名到规范名字的转换。
- 邮件服务器别名到邮件服务器正规名字的转换。
- 负载均衡。
DNS 域名结构
- 顶级域(Top Level Domains):如
.com
、.edu
、.cn
。
- 子域(Subdomains)。
- 叶子节点:主机。

根名字服务器(Root Name Server)
用于管理顶级域的地址信息,全球共有13个根名字服务器,确保 DNS 查询可靠性。
域名的管理
- 一个域管理其下的子域,如
.cn
被划分为edu.cn
、com.cn
等。
- 创建一个新的域必须征得它所属域的同意。
- 域的划分和物理网络结构无关。
区域(Zone)
- 将DNS名字空间划分为互不相交的区域。
- 每个区域都有一个权威名字服务器(Authoritative Record)维护它所管辖区域的权威信息,上层域的名字服务器中有指针指向下层域的名字服务器(NS记录)。
- 权威名字服务器允许被放置在区域之外,以保障可靠性。
- 对于权威名字,组织机构可以选择自己维护或某个服务提供商来维护。

DNS 记录
- RR 格式:(Name, Value, Type, TTL)。
- Type = A:Name 为主机,Value 为 IP 地址。
- Type = NS:Name 为子域的域名,Value 为子域的权威名字服务器的域名。
- Type = CNAME:Name 为规范名字的别名,Value 为规范名字。
- Type = MX:Name 为邮件服务器的别名,Value 为邮件服务器的规范名字。
DNS 工作过程
- 应用调用解析器(Resolver)。
- 解析器向名字服务器发送查询报文。
- 名字服务器返回响应报文。
本地名字服务器(Local Name Server)
- 每个 ISP 都有一个本地名字服务器。
- 当主机发起 DNS 查询时,查询被发送到其本地名字服务器。
- 本地名字服务器起着代理作用,将查询转发到层次结构中。
名字解析过程
- 若目标名字在本地名字服务器的缓存中:直接查询缓存中的IP地址。
- 若目标名字不在本地名字服务器的缓存中:
- 递归查询:联系根名字服务器,顺着根的顶级域名服务器一直找到权威名字服务器。
- 迭代查询:服务器返回下一个 NS 的地址,最后由权威名字服务器给出解析结果。


点到点(P2P)
纯 P2P 架构
- 没有(或极少)一直运行的服务器。
- 任意端系统都可以直接通信。
- Peer节点间歇上网,每次IP地址都有可能变化。
- 例子:文件分发、流媒体、VoIP。
P2P 类型
- 非结构化 P2P。
- 结构化 P2P(DHT)。
P2P 的实现方式
- 集中式目录服务器:存在单点故障、性能瓶颈的问题。
- 完全分布式:使用广度优先搜索泛洪式查询。
- 混合式:每个对等方是组长或隶属于一个组长,对等方与组长之间使用 TCP 连接;组长对之间也使用 TCP 连接。组长跟踪其所有组员的内容,组员向组长发起请求:如果组内有,组长直接返回资源;如果组内没有,组长转发查询给其他组长,获得其他组的数据。
BitTorrent 文件分发
- 节点向跟踪服务器(Tracking Server)注册,获得 peer 节点列表,随机和部分peer构成链接关系。
- 一开始没有块,但会通过其他节点积累文件块,优先请求稀缺的块优先请求稀缺的块。
- peer 下载时可以同时向其他 peer 提供上载服务;且 peer 节点可能随时上线或下线。
- “优化疏通”(Tit for Tat)和随机选择。

内容分发网络(CDN)
- 背景:如何向上百万用户同时提供流化视频内容?
- 选择 1
- 缺点:单点故障、性能瓶颈。
:单个超级服务中心——Mega Server。
- 选择 2:通过 CDN,全网部署缓存节点,就近为用户提供内容加速服务。
CDN 部署策略
- Enter Deep:将 CDN 服务器深入接入网,数量多、离用户近。
- Bring Home:部署在少数关键位置,采用租用线路将服务器簇链接起来。
套接字(Socket)
套接字是应用进程与端到端传输协议(TCP 或 UDP)之间的门户。
TCP Socket
- 服务端
- 绑定本机 IP 地址和应用程序端口号。
welcomeSocket
守候在某个端口,等待客户端连接。- 客户端连接后返回
connectionSocket
作为会话标志。
:
- 客户端
- 隐式绑定本机 IP 地址和应用程序端口号。
- 指定服务器的 IP 地址和端口号进行连接。
- 连接后返回
connectionSocket
作为会话标志。
:

UDP Socket
- 客户端和服务端之间没有建立连接、没有握手。
- 发送端在每一个报文中指定接收端的 IP 地址和端口号。
- 接收端从收到的分组中提取发送端的 IP 地址和端口号。
TCP 代码示例
- 服务端
- 客户端
UDP 代码示例
- 服务端
- 客户端
传输层
传输层服务
传输层为运行在不同主机上的应用进程提供逻辑通信。传输协议运行在端系统,可选择不同的协议(如 TCP 和 UDP)。
- 发送方:将应用层的报文分成报文段,传递给网络层。
- 接收方:将报文段重组成报文,传递给应用层。
传输层依赖网络层的服务,并对网络层的部分服务进行增强(如数据丢失、乱序、加密可以增强,但延时和带宽不可增强)。
多路复用与解复用
TCP 的复用与解复用
- 复用:
- 应用层将消息和 TCP Socket(包含源 IP、源 Port、目标 IP、目标 Port)传递给传输层。
- TCP 层将源 Port、目标 Port 和消息封装成 TCP 段(Segment),并与源 IP、目标 IP 一起传递给网络层。
- 解复用:
- IP 层将 TCP 段和源 IP、目标 IP 传递给 TCP 层。
- TCP 层根据 TCP 段中的源 Port、目标 Port 和目标 IP 地址查询对应的 Socket 和 PID,将消息传递给应用进程。

UDP 的复用与解复用
- 复用:
- 应用层将消息、UDP Socket(包含源 IP、源 Port)和目标 IP、目标 Port 传递给传输层。
- UDP 层将源 Port、目标 Port 和消息封装成 UDP 段(Datagram),并与源 IP、目标 IP 一起传递给网络层。
- 解复用:
- IP 层将 UDP 段和源 IP、目标 IP 传递给 UDP 层。
- UDP 层根据目标 IP 和目标 Port 查询对应的 Socket 和 PID,将消息传递给应用进程。

Socket 的作用
- 复用:从多个套接字接收来自多个进程的报文,根据套接字对应的 IP 地址和端口号封装报文。
- 解复用:根据报文段头部信息的 IP 地址和端口号将接收到的报文段发给正确的套接字和对应的应用进程。
用户数据报协议(UDP)
UDP 数据报格式
- 头部(8 字节):
- 源端口(Source Port):2 字节,标识发送方的端口号;若不使用则置为0。
- 目的端口(Destination Port):2 字节,标识接收方的端口号。
- 长度(Length):2 字节,表示整个 UDP 报文的长度;最小值为8(仅头部),最大值为65535。
- 校验和(Checksum):2 字节,用于检测传输中的错误;在IPv4中可选,若未计算则置为0;在IPv6中强制使用。
- 应用程序数据:载荷。

UDP 的优点
- 简单:发送端和接收端没有连接状态。
- 头部小:开销低。
- 快速发送:无需建立连接。
校验和的工作原理
- 发送方:
- 数据分块:将数据划分为 16 位(bit)的块。
- 求和:对块进行二进制求和(进位回滚)。
- 取反码:取反码得到校验和。
- 插入校验和:将校验和插入报文头部。
- 接收方:
- 对接收到的数据(包括校验和)进行二进制求和。
- 若结果不为 0,数据有误,丢弃报文。
- 伪头部(UDP/TCP):
- 在校验和计算中加入伪头部,包含源IP、目的IP、协议类型和长度等信息,确保这些字段未被篡改。
可靠数据传输
信道的不可靠特点决定了可靠数据传输协议的复杂性。

RDT 1.0:可靠信道上的传输
- 假设:信道完全可靠,无比特差错,无分组丢失。
- 发送方:封装,再直接发送数据。
- 接收方:直接接收数据,再解封装。
RDT 2.0:具有比特差错的信道 —— 停止等待协议(Stop-and-Wait)
- 差错检测:使用校验和来检测比特级差错。
- 恢复机制:
- 确认(ACK):接收方显式确认分组被正确接收。
- 否定确认(NAK):接收方显式通知发送方分组出错,发送方收到 NAK 后重传。
- 副本:发送方发完之后要留个副本,用于检错重传。

RDT 2.1:发送方处理出错的 ACK/NAK
发送方收到的 ACK/NAK 有可能是出错(Corrupt)的。
- 发送方:为分组编号,若发现收到的 ACK/NAK 出错,重传上次分组。
- 在分组中加入序列号,如果一次只发送一个未经确认的分组,用两个序列号(0和1)就够了
- 必须检测 ACK/NAK 是否出错(Corrput)。
- 状态机中的状态数变成了原来的两倍,因为需要记当前分组的序列号是 0 还是 1。

- 接收方:为 ACK/NAK 添加差错控制编码(EDC);在等待 n+1 号 packet 时(说明之前已经收到过 n 号 packet):
- 再次收到没出错的 n 号packet,把收到的 n 号packet丢弃,并发送一个ACK。
- 再次收到出错的 packet,就发送一个 NAK。
- 收到没出错的 n+1 号 packet,解封装、向上层传递数据,然后发送一个 ACK,进入等待 n+2 号 packet 的状态。

RDT 2.2:无 NAK 的协议 (NAK Free)
- 特点:仅使用 ACK,且 ACK 需编号。
- 恢复机制:若收到重复 ACK,发送方重传当前分组。
- 接收方对最后正确接收的分组发 ACK ,以代替 NAK;且发的 ACK 必须显示地包含被正确接收的分组的序号;比如接收方收 1 号 packet 出错,不是发 NAK1,而是发 ACK0,表示 1 号 packet 接收出错。
- 当发送方重复收到某编号的 ACK(如再次收到ACK0)时,发送方重传当前分组。

RDT 3.0:超时重传机制
引入超时重传机制的原因:下层信道可能会丢失分组(ACK丢失或packet丢失)
- 造成死锁
- 目前的机制(检验和、序列号、ACK、重传)还不够处理这种状况
解决方法:
- 发送端超时重传,每次发送分组后启动计时器,如果超过 Timeout 还没有收到该分组的 ACK,就重传分组并重置计时器。
- 和RDT2.2不同,发送端收到上一个 packet 的 ACK 之后,并不会立即重传,而是“按兵不动”,等待超时,因为超时也会触发重传。
- 超时计时器需要设置合理的 Timeout 值,若 Timeout 值设置太短,也能正常工作,但是效率较低,会重复发送数据包。
- 数据链路层的 Timeout 时间是确定的,传输层的 Timeout 时间是适应性的(动态计算)。

RDT 3.0的性能:信道容量较大的情况下,一次发一个协议数据单元不能充分利用链路的传输能力,瓶颈在于网络协议限制了物理资源的利用。

流水线协议(Pipeline) —— 区别于停止等待协议
允许发送方在未得到对方确认的情况下一次发送多个分组
- 必须增加序号的范围,用多个 bit 表示分组序号
- 发送方/接收方要有缓冲区:
- 发送方缓冲:未得到确认,可能需要重传分组
- 接收方缓冲:1.上层用户取用数据的速率 ≠ 接收到的数据速率,需要缓冲队列;2.接收到的数据可能乱序,需要排序后交付上层。

滑动窗口协议(Sliding Window)—— 流量控制
滑动窗口协议通过动态调整发送窗口大小,控制发送方和接收方之间的数据流量,确保数据可靠传输。回退N步协议(Go-Back-N,GBN)和选择重传(Selective Repeat,SR)是滑动窗口协议的两种具体实现方式。
- 发送缓冲区
- 定义:发送方用于临时储存待发送数据的内存区域。
- 功能:
- 临时储存待发送的分组,落入缓冲区的分组将按顺序发送。
- 存储已发送但未确认的分组,以备重传。
- 发送缓冲区的大小
- 停止等待协议:发送缓冲区大小为1,每次只能发送一个分组。
- 发送缓冲区中的分组
- 未发送的分组:可以按顺序连续发送。
- 已发送但未确认的分组:只有在收到 ACK 后才能从缓冲区中删除。
- 发送窗口
- 定义:发送窗口是发送缓冲区的一个子集,表示已发送但未确认的分组的序号范围。
- 初始状态:未发送任何分组时,后沿等于前沿。
- 发送过程:
- 每发送一个分组,前沿向前移动一个单位。
- 收到确认后,发送缓冲区和发送窗口整体向前移动。
- 发送窗口的移动:
- GBN协议:发送方只有在收到对窗口起始序号的数据包的 ACK 后,才会滑动发送窗口。
- SR协议:每收到一个数据包的 ACK,发送方就会标记该数据包为“已确认”;发送窗口的起始位置会滑动到第一个未确认的数据包(因此也可能不滑动)。
- 发送端超时重发
- GBN协议:发送方检测到丢包(超时或收到重复ACK),会从窗口起始序号开始重传所有未确认的数据包:假设发送窗口大小为4,当前窗口范围为
[2, 3, 4, 5]
;如果发送方收到 ACK 2,它会将窗口滑动到[3, 4, 5, 6]
;如果发送方检测到2
丢失(收到ACK 1
或超时还未收到ACK 2
),它会重传2, 3, 4, 5
。 - SR协议:发送方检测到丢包(超时或收到重复ACK),只会重传该丢失的数据包,而不是整个窗口:假设发送窗口大小为4,当前窗口范围为
[2, 3, 4, 5]
;如果发送方收到ACK 2
,它会将窗口滑动到[3, 4, 5, 6]
;如果发送方检测到4
丢失(超时还未收到ACK 4
),只会重传4
。 - 发送端定时器:
- GBN协议:发送方只设置一个定时器,即最老的未确认分组的定时器,当定时器超时,重传所有未确认的分组。
- SR协议:发送方为每个未确认的分组都设置一个定时器,当某个分组的定时器超时,只发送该分组。

- 接收窗口
- 定义:接收窗口等同于接收缓冲区,用于控制哪些分组可以被接收。
- 功能:
- 只有序号落入接收窗口的分组才会被接收。
- 序号在接收窗口外的分组将被丢弃。
- 滑动机制
- 顺序接收:最低序号的分组到达时,接收窗口滑动。
- 乱序接收(窗口>1):非最低序号的分组到达时,缓存但不交付,接收窗口不滑动。
- 接收窗口大小
- GBN协议:接收窗口大小=1,只能顺序接收,只有当接收方收到当前期望序号的数据包时,接收窗口才会向前滑动 1。
- SR协议:接收窗口大小>1,可以乱序接收,但提交给上层的分组必须按序,只有当接收窗口的前 n 个连续的包都收到时,才将窗口中连续的数据包一起交付给上层,接收窗口向前滑动 n。
- 确认机制
- GBN协议:接收窗口大小=1,采用累计确认,发送连续收到的最大分组的确认。
- SR协议:接收窗口大小>1,采用非累计确认,收到哪个分组就发送哪个分组的确认。

两种流水线协议:GBN与SR
- 相同点
- 发送窗口大小>1。
- 允许一次发送多个未经确认的分组。
- 不同点
特性 | GBN(Go-Back-N)协议 | SR(Selective Repeat)协议 |
接收窗口大小 | = 1 | > 1 |
接收方式 | 只能顺序接收 | 可以乱序接收 |
发送方重传机制 | 重传缓冲区中所有未确认的分组 | 选择性重传,只重传未确认的分组 |
定时器设置 | 只设置一个定时器,超时后重传所有未确认的分组 | 为每个未确认的分组设置独立的定时器 |
优点 | 实现简单,资源消耗少 | 出错时重传代价小,带宽利用率高 |
缺点 | 出错时回退代价大,带宽利用率低 | 实现复杂,接收方需要更多缓存资源 |
适用场景 | 出错率低的链路 | 高延迟、大带宽的链路 |
窗口大小的限制
- GBN协议:
- 发送窗口大小不能超过 $2^{N}-1$( $2^N$ 为数据包序列号长度)。
- 原因:避免接收方混淆新旧分组,如果发送窗口大小超过 $2^{N}-1$,可能会导致接收方无法区分新旧数据包。
- 反例:
- 假设序列号位数为3,序列号范围为
[0, 1, 2, 3, 4, 5, 6, 7]
。 - 如果发送窗口大小为8,发送方发送第一波数据包
[0, 1, 2, 3, 4, 5, 6, 7]
。 - 接收方成功接收并发送了
ACK 0
到ACK 7
,但这些ACK全部丢失(例如被拦截或网络故障)。 - 发送方未收到任何ACK,触发超时重传,重新发送
[0, 1, 2, 3, 4, 5, 6, 7]
。 - 接收方在等待下一波的
0
,但发送方发送的是上一波的0
,从而导致混淆。
- SR协议:
- 发送窗口和接收窗口大小均不能超过 。
- 原因:防止发送方和接收方的窗口重叠,导致分组混淆。
- 反例:
- 假设序列号位数为2,序列号范围为
[0,1,2,3]
。 - 如果发送窗口大小为3,发送方发送第一波数据报
[0,1,2]
。 - 接收方成功接收并发送了
ACK 0
到ACK 2
,但这些ACK全部丢失(例如被拦截或网络故障),接收方把窗口移动到[3,0,1]
。 - 发送方未收到任何ACK,触发
0
的超时重传,重新发送0
。 - 接收方在等待下一波的
0
,但发送方发送的是上一波的0
,从而导致混淆。

面向连接的传输:TCP
TCP 连接的特点
- 点对点:一个发送方,一个接收方。
- 可靠传输:可靠的、保序的字节流服务。
- 全双工通信:在同一连接中数据双向流动。
- 管道化:发送方可以连续发送多个报文。
TCP 报文结构
- 序号:报文段首个字节在字节流中的编号。
- 确认号:期望从另一方收到的下一个字节的序号。

TCP 超时重传机制
- 超时时间计算:
- EstimatedRTT:平滑的 RTT 估计值, ,推荐 。
- DevRTT:RTT 的偏差估计, ,推荐 。
- Sample RTT:测量从报文段发出到收到确认的时间,如果有重传,忽略这次测量

TCP的可靠数据传输机制
- 流水线的报文段
- TCP使用流水线方式发送报文段,允许多个报文段同时在网络中传输。
- 这种方式结合了 GBN 和 SR 协议的特点:
- GBN:累计确认、单个重传计时器。
- SR:选择性重传、乱序缓存。
- 接收方的确认机制
- 接收方发送的 ACK 是累计确认,ACK 号表示接收方期望收到的下一个字节的序号。
- 例如,如果接收方发送
ACK 100
,表示它已经成功接收了序号0-99
的字节,期望收到序号100
的字节。
- 发送方的重传机制
- 单个重传计时器:
- 发送方只维护一个重传计时器,用于检测最早的未确认字节是否丢失。
- 如果计时器超时,发送方会重传最早的未确认字节(类似于SR协议的选择性重传)。
- 快速重传机制:
- 当发送方收到3个或更多重复 ACK 时,会立即重传丢失的数据包,而不必等待计时器超时。
- 这种机制可以更快地恢复丢失的数据包,减少传输延迟。
- 乱序数据的处理
- 是否接受乱序数据:
- TCP 规范没有明确规定接收方是否必须缓存乱序数据。
- 大多数 TCP 实现会选择缓存乱序数据,等待前面的数据到达后再按序交付给上层应用。
- 接收方的辅助定时器
- 接收方可能会使用一个辅助定时器,用于检测是否发生了数据包丢失。
- 如果接收方收到乱序数据包,但未收到前面的数据包,辅助定时器可以帮助接收方更快地检测到丢失的数据包。
TCP 流量控制
- 接收窗口(RWND):接收方通过 TCP 头部的窗口大小字段告知发送方其当前可用的缓冲区空间。
- 发送方:根据 RWND 调整发送窗口,避免发送过多数据。
TCP 连接管理
- 三次握手:防止两次握手造成的虚假连接和数据老旧问题。

- 四次挥手:对称释放两个半连接,对称拆除连接并不完美,客户端用超时时间弥补。

拥塞控制
拥塞的定义与表现
- 定义:网络中的数据量超过其处理能力。
- 表现:分组丢失、超时重传、延迟增加。
拥塞控制方法
- 端到端的拥塞控制
- 没有来自网络的显式反馈
- 端系统根据延迟和丢失事件判断是否有拥塞
- 网络辅助的拥塞控制
- 单个bit置位,显示有拥塞(SNA、DECbit、TCP/IP、ECN、ATM)
- 显式提供发送端可以采用的速率(Explicit Rate)
- 拥塞的交换机可能会降低ER的值
- 发送端发送速率是最低可支持速率
TCP 拥塞控制
- 端到端控制
- 路由器的负担较轻
- 符合网络核心简单的 TCP/IP 架构原则
:发送方根据网络状态调整发送速率。
- 拥塞发生检测
- 超时(某些段的超时时间到了,但 ACK 还没到来)
- 网络拥塞(某个路由器的缓冲区没有空间了,被丢弃) => 概率大
- 出错被丢弃(没有通过各级的数据校验) => 概率小
- 有关某个段的3次重复ACK => 轻微拥塞
- 拥塞窗口(CongWin):发送方维护一个可动态调整的拥塞窗口,用于限制已发送但未确认的数据量的上限。
- CongWin的增加:
- 慢启动(Slow-Start)阶段:
- CongWin初始值为1 MSS(最大报文段大小)。
- 每收到一个ACK,CongWin增加1 MSS(指数增长:1, 2, 4, 8, ...)。
- 当CongWin达到阈值(Threshold)时,进入拥塞避免阶段。
- 拥塞避免(Congestion-Avoidance)阶段:
- CongWin每经过一个RTT增加1 MSS(线性增长)。
- 目标是逐步接近网络的拥塞点,避免突然引发拥塞。
- CongWin的减少:
- 超时:
- 如果发生超时,发送方认为网络拥塞严重。
- CongWin降为1 MSS,Threshold 降为 CongWin/2 。
- 重新进入慢启动阶段。
- 3个重复ACK:
- 如果收到3个重复ACK,发送方认为发生了轻微拥塞。
- CongWin降为 CongWin/2,Threshold 降为 CongWin/2。
- 进入拥塞避免阶段。


- 和流量控制的联合动作:发送端控制发送但未确认的量的同时,也不能超过接收端的接收窗口大小,也即 SendWin = Math.Min(CongWin, RecvWin) ,从而同时满足流量控制和拥塞控制的要求。
TCP 公平性
- 公平性:多个 TCP 会话共享链路带宽时,每个会话的有效带宽为 $\frac{R}{K}$。
- 原因: 每个 TCP 会话都试图最大化自己的发送速率,但由于拥塞控制机制,它们会相互竞争并最终达到平衡。

网络层
网络层的主要功能
- 数据传输:
- 在发送主机和接收主机之间传送段(Segment)。
- 发送端将段封装到数据报中,接收端将段上交给传输层实体。
- 协议实现:
- 网络层协议存在于每一个主机和路由器。
- 路由器检查每一个经过它的IP数据报的头部。
转发(数据平面)
- 本地功能:决定路由器输入端口到达的分组如何转发到输出端口。
- 转发方式:
- 传统方式:基于目标主机IP地址和转发表。
- SDN方式:基于多个字段和流表。
路由(控制平面)
- 全局功能:决定数据报如何在路由器之间路由,决定数据报从源到目标主机之间端到端的路径。
- 控制平面方法:
- 传统路由算法:在路由器中实现,数据平面和控制平面紧耦合,控制平面计算路由表,数据平面 IP 协议根据目标 IP 和路由表决定数据报在此路由器上的局部转发。
- SDN:远程服务器中实现,远程服务器与本地控制代理(Control Agent)交互,本地控制代理根据多个字段对数据报进行转发、丢弃、泛洪、修改等操作。
网络服务模型
- 单个数据报的服务:
- 可靠传输。
- 延迟保证。
- 数据报流的服务:
- 保序传达。
- 保证流的最小带宽。
- 分组之间的延迟差。
路由器组成
路由器的功能:路由和转发,输入端口和输出端口是整合在一起的。
- 输入端口缓存:解决Head-of-the-Line (HOL) blocking问题(由于排在队头的数据报会阻止队列中其他数据报向前移动)。
- 输出端口缓存:1.数据报的到达速率可能比传输速率快,因此需要输出端口缓存;2.数据报并不是先到先发,而是根据调度规则选择队列中的数据报进行传输。
- 调度规则:
- FIFO:先到先传
- 优先权调度:发送最高优先权的分组
- Round Robin(RR):循环扫描不同类型的队列,发完一类再发下一类
- Weighted Fair Queuing(WFQ):一般化的Round Robin,每个类在每一循环中获得不同权重的服务量
第一代路由器
- 在 CPU 直接控制下交换,采用传统的计算机
- 分组被拷贝到系统内存,CPU 从分组的头部提取目标 IP 地址,查找转发表,找到并拷贝到输出端口
- 转发速率被内存的带宽限制且数据报需要拷贝两次
- 一次只能转发一个分组

第二代路由器
- 数据报通过共享总线,从输入端口转发到输出端口
- 总线竞争:交换速度受限于总线的带宽
- 一次处理一个分组

第三代路由器
- 同时并发转发多个分组,克服总线带宽限制

IP 协议
IP数据报的格式:包括版本、头部长度、服务类型、总长度、标识、标志、片偏移、生存时间、协议、头部校验和、源地址、目标地址等字段。
image-20250307114528011
IP分片和重组:
- 大的 IP 数据报在网络上被分片(Fragment)成小的数据报,它们:
- 具有相同的ID
- 不同的偏移量
- 最后一个分片标记为0
- “重组”只在最终的目标主机进行,目标主机设置定时器,超时后所有的分片没到齐就丢弃。
- IP头部的信息被用于标识和排序相关分片。
IP地址:32位,对主机或路由器接口的编址
接口:主机或路由器和物理链路的连接处
- 路由器通常拥有多个接口
- 主机也可能有多个接口
- 一个IP地址和一个接口相关联
层次编址和路由聚集
- 层次编址
- 分层结构:
- IP地址分为网络部分和主机部分,网络部分可进一步划分子网。
- 示例:
- IP地址:192.168.1.1
- 子网掩码:255.255.255.0
- 网络地址:192.168.1.0
- 主机地址:1
- 简化路由:
- 路由器只需关注网络部分,减少路由表条目。
- 路由聚集
将多个连续IP地址块合并为一个更大的地址块,减少路由表条目,提高路由器效率。
- 示例:
- 多个网络:
- 192.168.1.0/24
- 192.168.2.0/24
- 192.168.3.0/24
- 路由聚集:192.168.0.0/22
子网(Subnet)
- 一个子网内的节点(主机或路由器),它们的IP地址的高位部分相同,这些节点构成的网络的叫子网。
- 无需路由器介入(可借助交换机),子网内各主机在物理上可以互相直接到达,即一跳可达。

IP地址分类
- A类地址
- 范围:1.0.0.0 到 126.0.0.0
- 子网掩码:255.0.0.0 或 /8
- 用途:适用于大型网络,如跨国公司或大型机构。
- B类地址
- 范围:128.0.0.0 到 191.255.0.0
- 子网掩码:255.255.0.0 或 /16
- 用途:适用于中型网络,如大学或中型企业。
- C类地址
- 范围:192.0.0.0 到 223.255.255.0
- 子网掩码:255.255.255.0 或 /24
- 用途:适用于小型网络,如小型企业或家庭网络。
- D类地址
- 范围:224.0.0.0 到 239.255.255.255
- 用途:用于多播通信,如视频会议和在线游戏。
- E类地址
- 范围:240.0.0.0 到 255.255.255.255
- 用途:保留用于实验和研究,不用于公共网络。

特殊地址
- 127.0.0.1:回环地址,用于本地测试。
- 内网专用地址:不会被当做公共地址来分配,在局域网中用于区分不同的设备,路由器不对目标地址是专用地址的分组进行转发
- A类:10.0.0.0 到 10.255.255.255
- B类:172.16.0.0 到 172.31.255.255
- C类:192.168.0.0 到 192.168.255.255
子网掩码的特殊规定
- 子网部分全0 => 本网络
- 主机部分全0 => 本主机
- 主机部分全1 => 广播地址,表示这个网络的所有主机
无类域间路由(Classless InterDomain Routing,CIDR)
CIDR 解决了传统IP地址分类带来的地址浪费和路由表膨胀问题。
- 核心思想:CIDR 允许 IP 地址的网络部分和主机部分的划分更加灵活,不再局限于传统的A类、B类、C类地址的固定划分。
- 表示方法:CIDR 使用斜线表示法(Slash Notation),例如
192.168.1.0/24
,其中/24
表示前24位是网络部分,后8位是主机部分。
路由器的工作流程
- 路由器从 IP 数据报中提取目标地址。
- 对于路由表中的每个表项:
- 如果 目标IP地址 & 子网掩码 == 表项中的目标子网,则按照对应接口转发数据报。
- 如果未找到匹配项,则使用默认表项转发数据报。
主机如何获得IP地址
- 静态配置:
- 系统管理员手动配置IP地址。
- 动态主机配置协议(DHCP):
- 功能:
- 动态分配IP地址。
- 更新IP地址租用期。
- 支持移动用户加入网络。
- 工作原理:
- 主机广播
DHCP Discover
报文。 - DHCP服务器响应
DHCP Offer
报文。 - 主机发送
DHCP Request
报文请求IP地址。 - DHCP服务器发送
DHCP Ack
报文确认分配。

网络地址转换(NAT)
在 私有网络 和 公共网络之间转换 IP 地址,主要目的是解决 IPv4 地址不足的问题,并提高网络的安全性。
- 作用:
- IP地址转换:将私有IP地址转换为公共IP地址,以便与外部网络通信。
- 节省公共IP地址:多个设备可以共享一个公共IP地址访问互联网。
- 增强安全性:隐藏内部网络的真实 IP 地址,防止外部直接访问内部设备。
- 工作原理:
- NAT 设备维护一个转换表,记录内部IP和端口与外部IP和端口的映射关系。
IPv6
IPv6 是为了解的IPv4网络地址枯竭和路由表急剧膨胀而诞生的。
- 特点:
- 128位地址,固定40字节报文头部。
- 移除校验和,减少路由器处理负担。
- 新增ICMPv6,新增了“Packet Too Big”的报文类型,并支持多播组管理。
- IPv4到IPv6过渡:采用隧道技术(Tunneling),将IPv6分组封装在IPv4数据报中传输。

*通用转发和SDN
传统网络设备控制平面
- 特点:
- 分布式实现:每台设备独立实现数据平面和控制平面功能。
- 垂直集成:硬件、操作系统和协议私有实现。
- 固定功能:设备按固定方式工作,不同网络功能需要不同中间设备(如防火墙、负载均衡器、NAT设备等)。
- 问题:升级代价大,管理困难。

软件定义网络(SDN)
- 核心思想:
- 将控制平面从设备中分离,集中到逻辑控制器中。
- 控制器决定分组转发逻辑,控制器代理(Control Agent,CA)执行逻辑。
- SDN 架构:
- 网络控制应用:
- 利用 SDN 控制器的 API 实现多样化网络功能。
- SDN控制器:
- 北向接口:与网络控制应用交互。
- 南向接口:与网络交换机交互。
- 维护网络状态信息,逻辑上集中,实现上分布式。
- OpenFlow协议:
- SDN交换机与控制器之间的通信协议。
- SDN的功能实现
- SDN通过匹配(Match)表项执行相应的行为(Action),即 Macth + Action模式。
- 路由器:Match 最长前缀匹配,Action 通过指定链路转发。
- 交换机:Match 目标MAC地址,Action 转发或泛洪。
- 防火墙:Match IP地址和TCP/UDP端口号,Action 放行或禁止。
- NAT:Match IP地址和端口号,Action 重写地址和端口号。

*路由选择算法
路由协议的目标
- 按照某种指标(如传输延迟、经过的站点数目等),确定从源端到目标端之间的“较好”路径(路由器的序列)。
- 实际计算以子网到子网为目标,而非主机到主机。
- 目标特性:正确性、简单性、健壮性(适应网络拓扑变化)、稳定性、公平性、最优性。
最优化原则——汇集树(Sink Tree)
- 汇集树是每个节点到所有其他节点的最优路径形成的树。
- 路由选择算法的目标是为所有路由器找到汇集树。
路由选择算法的分类
- 链路状态(Link State,LS)算法
- 特点:
- 全局式:所有路由器拥有完整的网络拓扑和边的代价信息。
- 基于迪杰斯特拉算法计算最短路径。
- 工作流程:
- 发现邻居节点,计算到邻居的代价。
- 组装 LS 分组,描述到邻居的代价。
- 通过泛洪将 LS 分组发送给所有路由器。
- 每个路由器使用迪杰斯特拉算法计算最短路径。
- 距离向量(Distance Vector,DV)算法
- 特点:
- 分布式:路由器仅知道邻居路由器和到邻居的代价。
- 基于弗洛伊德算法,通过迭代与邻居交换路由信息。
- 工作流程:
- 每个路由器维护一张路由表。
- 定期或事件触发时,与邻居交换路由表。
- 根据邻居的路由信息更新自己的路由表。
- 问题:
- 好消息传得快,坏消息传得慢:链路断开可能导致路由环路和无穷计算。
- 解决方法:水平分裂(Split Horizon),又称毒性逆转(Poison Reverse);如果一个路由器从某个接口学到了某条路由信息,它不会通过同一接口将这条信息再通告回去,防止路由器之间互相传递错误的路由信息。
- LS算法与DV算法的对比
特性 | 链路状态(LS)算法 | 距离向量(DV)算法 |
消息复杂度 | 高(需泛洪LS分组) | 低(仅与邻居交换信息) |
收敛时间 | 快(但可能震荡) | 慢(可能产生路由环路) |
健壮性 | 高(错误信息影响范围小) | 低(错误信息可能扩散到全网) |
*自洽网络系统的内部网关协议
自洽网络系统
定义:网络内部的组件、协议或机制能够相互协调,通过内部反馈调节机制维持网络的稳定性、可靠性和高效性。
特点:
- 自动适应变化。
- 解决冲突并优化性能。
- 不依赖外部干预。
开放式最短路径优先(Open Shortest Path First,OSPF)协议
- 算法:基于链路状态(LS)算法。
- 特点:
- 携带每一个邻居路由器的表项信息的 LS 分组通过泛洪在自洽系统内传播。
- 每个节点维护全局网络拓扑和链路代价。
- 优势:
- 安全性:所有报文经过认证。
- 多路径支持:允许存在多个代价相同的路径。
- 多播集成:支持单播和多播。
- 层次化:适合大型网络,支持层次化 OSPF。
路由信息协议(Routing Information Protocol,RIP)
- 算法:基于距离向量(DV)算法。
- 特点:
- 每条链路代价为1,最大跳数为15。
- 每30秒通过 UDP 协议交换路由信息。
- 每个通告最多包含25个子网的可达性。
- 故障检测:若180秒内未收到邻居的通告,判断邻居或链路失效。
- 防环机制:使用水平分裂和最大跳数(15跳)防止路由环路。
RIP 和 OSPF 对比
特性 | RIP | OSPF |
算法类型 | 距离向量(Distance Vector, DV) | 链路状态(Link State, LS) |
适用网络规模 | 小型网络 | 大型网络 |
路由更新方式 | 定期更新(每30秒) | 触发更新(拓扑变化时) |
路由更新内容 | 仅发送距离向量(跳数) | 发送完整的链路状态信息 |
最大跳数 | 15(超过15跳视为不可达) | 无跳数限制 |
收敛速度 | 慢(通过Floyd算法逐步收敛,且可能产生路由环路) | 快(通过Dijkstra算法计算最短路径) |
资源消耗 | 低(仅维护距离向量) | 高(维护全局拓扑信息) |
安全性 | 无内置安全机制 | 支持报文认证 |
多路径支持 | 不支持 | 支持(允许存在多条等价路径) |
多播支持 | 不支持 | 支持(集成多播功能) |
层次化支持 | 不支持 | 支持(层次化OSPF) |
防环机制 | 水平分裂、最大跳数 | 无环路(基于Dijkstra算法) |
协议复杂度 | 简单 | 复杂 |
适用场景 | 小型网络、简单拓扑 | 大型网络、复杂拓扑 |
边界网关协议(BGP)
- 层次路由
- 自洽系统(AS):
- 每个AS有唯一的AS号(ASN)。
- 一个ISP可能包含多个AS。
- 路由层次:
- AS内部路由(Intra-AS):使用RIP、OSPF等协议。
- AS间路由(Inter-AS):使用BGP协议。
- BGP的工作机制
- eBGP(外部BGP):
- 从相邻AS获取子网可达信息。
- 基于距离向量算法,但包含详细路径(ASN列表),避免路由环路。
- iBGP(内部BGP):
- 将子网可达信息传播到AS内部所有路由器。
- 路径选择规则
- 本地偏好:优先选择本地偏好值高的路径。
- 最短AS路径:优先选择经过AS数量最少的路径。
- 热土豆策略:优先选择最近的下一跳路由。

数据链路层和物理层
广域网与局域网
1. 广域网(WAN)
- 连接方式:通常采用点到点连接。
- 特点:
- 带宽大,距离远。
- 链路层功能简单,只需封装和解封装。
2. 局域网(LAN)
- 连接方式:通常采用多点连接。
- 特点:
- 多个节点连接到共享介质或交换机。
- 链路层功能复杂,需处理共享介质访问控制。
数据链路层服务
- 成帧和链路接入:
- 将数据报封装成帧,添加帧头和帧尾。
- 帧头部使用 MAC 地址标识源端和目标端。
- 在共享介质中,需通过协议获得信道访问权。
- 可靠数据传输:
- 在低出错率链路(如光纤)中较少使用。
- 在高出错率链路(如无线链路)中常用。
- 流量控制:
- 确保发送方和接收方的速度匹配。
- 错误检测:
- 检测信号衰减和噪声引起的差错。
- 接收端检测到错误后丢弃帧,并通知发送端重传。
- 差错纠正:
- 接收端检查和纠正比特错误。
*差错校验方法
单比特奇偶校验
- 原理:在数据后添加一个奇偶校验位,使数据中 1 的个数为奇数或偶数。
- 特点:只能检测单比特错误,无法纠正。
二维奇偶校验
- 原理:将数据排列成矩阵,对每行和每列分别进行奇偶校验。
- 特点:可以检测并纠正单比特错误。
Internet校验和
- 原理:将数据分成16位字,求和后取反码作为校验和。
- 应用:用于TCP和UDP协议。
循环冗余校验(CRC)
- 原理:将数据比特 D 视为二进制数,除以生成多项式 G,得到的余数为校验码:
- 性能:
- 能检测所有单比特和双比特错误。
- 能检测所有长度 的错误。
- 出现长度 的错误,检测失败的概率为 。
- 出现长度 的错误,检测失败的概率为 。

*多点连接和媒体访问控制协议
局域网内部链路的连接形式:
- 点对点连接
- 拨号访问
- 以太网交换机和主机之间
- 共享链路
- 传统以太网
- 无限局域网
媒体访问控制(Medium Access Control):决定节点如何使用共享信道,可以分为三类协议:
- 信道划分协议:把信道根据时间、频率或编码划分成小片
- 案例:TDMA、FDMA、CDMA
- 随机访问协议:信道不划分允许冲突
- 案例:时隙ALOHA、纯ALOHA、CSMA/CA、CSMA/CD
- 轮流协议
- 案例:轮询和令牌传递
信道划分协议
- 时分多址(Time Division Multiple Access,TDMA):
- 信道的时间划分为周期,节点轮流使用信道,每个节点使用每周期中固定的时隙传输帧。
- 如果某节点没有帧传输,时隙空闲。
- 频分多址(Frequency Division Multiple Access,FDMA):
- 信道的有效频率范围被划分成一个个小的频段。
- 每个节点分配一个固定的频段传输帧。
- 如果某节点没有帧传输,频段空闲。
- 码分多址(Code Division Multiple Access,CDMA):
- 所有节点在整个频段上同时进行传输,采用编码原理加以区分。
- 完全无冲突,线性叠加。
随机存取协议
- 当节点有帧要发送时,以信道带宽的全部进行发送,没有节点间的预先协调
- 两个或多个节点同时传输,会发生冲突
- 随机存取协议规定如何检测冲突以及如何从冲突中恢复
- 随机存取协议:CSMA/CD、CSMA/CA
轮流协议
- 轮询:主节点依次邀请其他节点传输。
- 令牌传递:令牌在节点间传递,持有令牌的节点可传输。
*常见的媒体访问控制协议
时隙ALOHA
- 原理:节点在时隙开始时传输数据,若冲突则随机等待后重试。
- 优点:
- 节点可以以信道带宽全速连续传输。
- 高度分布式,仅需要节点之间在时钟上同步。
- 缺点:
- 冲突和概率发送会浪费时隙。
- 没有延迟上限保证。
- 节点需要在时钟上同步。
- 效率:1/e,约37%。

纯ALOHA(非时隙)
- 原理:节点有数据时立即传输,冲突后随机等待重试。
- 优点:无需时钟同步。
- 缺点:冲突概率增加,若帧在t0时刻发送,会和其它在 区间内开始发送的帧冲突。
- 效率:1/2e,约17.5%。

载波监听多点接入/碰撞检测(Carrier Sense Multiple Access with Collision Detection,CSMA/CD)
- 原理:
- 每个节点发送数据前先侦听信道,若信道空闲则发送,若忙则等待。
- 发送过程中持续检测冲突,一旦发现冲突,就发送一个强化冲突的Jam信号;停止发送并等待随机时间后重试,等待时间通过与载荷自适应的二进制指数退避算法得到。
- 应用:主要用于传统以太网(如 10BASE5、10BASE2)。
- 优点:
- 实时冲突检测。
- 适用于有线网络,延迟较低。
- 效率:1/ (1 + 5t_prop/t_trans),其中t_props是两个节点的最大传播延迟,t_trans是传输最大帧的时间。
载波监听多点接入/碰撞避免(Carrier Sense Multiple Access with Collision Avoidance,CSMA/CA)
- 原理:
- 每个节点发送数据前先侦听信道,若信道空闲则发送,若忙则等待。
- 在WLAN中,由于隐藏终端和暴露终端等现象的存在,不冲突和传输成功之间没有关联;通过随机退避时间来减少冲突概率(信道空闲时并不是立即发送,而是在随机回退值*时隙之后再发送),且即使采用随机退避的方法,依然无法完全避免冲突(两个节点互相隐藏,或两个节点选择了非常接近的随机回退值)。
- 接收方收到数据后会隔一段时间发送确认帧(ACK)。
- 应用:主要用于Wi-Fi(如IEEE 802.11)
- 特点:
- 通过随机退避机制避免冲突
- 适用于无线网,延迟较高
轮询(Take Turn)
- 原理:主节点邀请其他节点依次传送。
- 缺点:
- 轮询开销:轮询本身消耗信道带宽。
- 等待时间:每个节点要等到主节点轮询后才开始传输。
- 单点故障:主节点失效造成整个系统无法工作。

令牌传递(Token Passing)
原理:令牌报文从一个节点到下一个节点传递,数据环绕一周,接收方拷贝接收,最后传回发送方。
- 缺点:
- 令牌开销:令牌传递消耗带宽。
- 延迟:只有等到拥有令牌才可传输。
- 单点故障:令牌丢失会造成整个系统无法传输,重新生成令牌恢复时间长。

局域网(LANs)
局域网指有限区域内由计算机和其它网络设备互联组成的计算机网络。
媒体访问控制(Media Access Control,MAC)地址
- 也称局域网地址,是网络设备的物理地址,用于在局域网中唯一标识设备。
- 长度48bit,通常表示为12个十六进制数,如
00:1A:2B:3C:4D:5E
。
- MAC 地址由设备制造商分配,并固化在网卡中。

地址解析协议(Address Resolution Protocol)
- 作用:用于将IP地址解析为MAC地址,当设备需要与同一局域网内的另一设备通信时,它通过ARP 请求获取目标设备的MAC地址:
- ARP 请求:源设备广播一个ARP请求,询问目标IP地址对应的MAC地址。
- ARP 响应:拥有该IP地址的设备回复请求方其MAC地址。
- 缓存:源设备将IP与MAC地址的映射存入ARP缓存(ARP表),供后续通信使用,缓存一段时间(通常是20分钟)后消失。
交换机(Switch)
- 监听流入的数据帧,学习并记录源MAC地址与端口的映射关系,存储在MAC地址表中。
- 当交换机收到数据帧时,它会检查目标MAC地址:
- 已知地址:若目标MAC地址在MAC地址表中,交换机会将数据帧仅转发到对应的端口;如果目标MAC地址和源MAC地址相同,则不转发(过滤)。
- 未知地址:若目标MAC地址不在表中,交换机会将数据帧广播(泛洪)到所有端口,以确保数据帧到达目标设备。
- 在复杂网络中,交换机使用生成树协议(STP)来防止环路,避免广播风暴和数据包无限循环。
曼彻斯特(Manchester)编码
- 每个比特的位时中间有一个信号跳变。
- 目的是在接收方和发送方节点之间进行时钟同步。
- 缺点:编码后数据占的带宽会加倍。

4B5B编码
- 原理:用5个比特代表4个比特。
- 目的:避免连续高电平或连续低电频的情况,因为这两种情况发送方难以检测时钟周期。

- Author:Yuki
- URL:http://shirakoko.xyz/article/top-down
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts