# 绪论

# 计算机网络定义

计算机网络是互连的、自治的计算机集合。
计算机网络向用户可以提供连通性共享服务

# 互联网的组成

# 边缘部分

由各主机构成,用户直接进行信息处理和信息共享;低速连入核心网。

# 客户 / 服务器模式
  • 客户:被用户调用后运行,在打算通信时主动向远地服务器发起通信,必须知道服务器的地址;不需要很特殊的硬件和很复杂的操作系统
  • 服务器:一种专门用来提供某种服务的程序,可以同时处理多个客户的请求;系统启动后即自动调用并一直不断地运行着,被动地等待着来自各地的客户端的请求,不需要知道客户端的地址;一般需要强大的硬件和高级的操作系统
# 对等连接
  • 对等连接:两个对等的进程之间的通信,两个进程在通信时既可以是客户也可以是服务器,两个进程之间的关系是对等的,没有主从之分

# 核心部分

在网络核心部分其特殊作用的是路由器。路由器是实现分组交换的关键构件。由各路由器连网,负责为边缘部分提供高速远程分组交换。

# 电路交换的特点
  • 电路交换:在通信开始前,通信的两端要先建立一条专用的物理通路,通信结束后再撤销这条通路
  • 面向连接的
  • 电路交换的三个阶段:建立连接、通信、释放连接
  • 优点:端对端通信质量因约定了通信资源获得可靠保障,对连续传送大量数据效率高
  • 缺点:电路交换传输计算机数据效率低。
# 报文交换的特点
  • 报文交换:通信的两端不需要先建立专用的物理通路,而是直接向网络发送报文,报文中包含目的地址,网络根据目的地址选择合适的路径传送报文、
  • 优点:无须预约传输带宽,动态逐段利用传输带宽对突发式数据通信效率高,通信迅速。
  • 缺点:时延较长
# 分组交换的特点
  • 分组交换:报文交换的基础上,将报文划分为固定长度的数据块,称为分组,每个分组都携带有目的地址,网络根据目的地址选择合适的路径传送分组
  • (1)报文分组,加首部(2)经路由器储存转发(3)在目的地合并
  • 优点:
    • 高效:动态分配传输带宽,对通信链路是逐段占用
    • 灵活:以分组为传送单位和查找路由
    • 迅速:不必先建立连接就能向其他主机发送分组
    • 可靠:保证可靠性的网络协议;分布式的路由选择协议使网络具有很好的生存性
  • 问题:
    • 分组在各节点存储转发,需要缓存和排队,增加了时延
    • 分组必须携带的首部也造成了一定开销

# 计算机网络的分类

# 按网络的作用范围分类

  • 广域网(WAN):覆盖范围广,跨越城市、国家、甚至全球
  • 城域网(MAN):覆盖范围小,跨越一个城市
  • 局域网(LAN):覆盖范围更小,跨越一个建筑物或者一个校园
  • 个人区域网(PAN):覆盖范围更小,跨越个人工作空间

# 按网络的使用者分类

  • 公用网:为大众提供服务,如电话网、互联网
  • 专用网:为某个组织或个人提供服务,如企业网、家庭网

# 计算机网络的性能

# 速率

  • 速率:数据传输速率,指单位时间内传输的数据量

# 带宽

  • 带宽:信道的传输能力,指单位时间内通过信道的最高数据率

# 吞吐量

  • 吞吐量:单位时间内通过网络的实际数据量

# 时延

  • 时延:数据从网络的一端传输到另一端所需的时间
  • 发送时延:发送时延=数据长度发送速率发送时延=\frac{数据长度}{发送速率}
  • 传播时延:传播时延=传播距离传播速率传播时延=\frac{传播距离}{传播速率}
  • 处理时延:数据包在路由器中排队、检错、转发所需的时间
  • 排队时延:数据包在路由器的输出队列中等待传输所需的时间
  • 总时延:总时延=发送时延+传播时延+处理时延+排队时延总时延=发送时延+传播时延+处理时延+排队时延

# 时延带宽积

  • 时延带宽积:时延带宽积=传播时延带宽时延带宽积=传播时延*带宽
  • 时延带宽积反映了网络中的数据量

# 往返时间 RTT

  • 往返时间 RTT:数据从发送端发送到接收端,再返回发送端所需的时间

# 利用率

  • 利用率:信道的利用率,指信道被占用的时间比例
  • 网络利用率:全网络信道利用率的加权平均值
  • 时延D0D_0 与网络利用率UU 的关系:D=D01UD=\frac{D_0}{1-U}UU 是网络利用率,数值在 0-1 之间

# 计算机网络的非性能指标

  • 费用
  • 质量
  • 标准化
  • 可靠性
  • 可扩展性和可升级性
  • 易于管理和维护

# 计算机网络的体系结构

# 协议与划分层次

  • 协议是进行网络中的数据交换而建立的规则、标准或约定,是控制两个对等实体进行通信的规则的集合。在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务,而要实现本层协议,还需要使用下面一层提供服务
  • 实体(entity)表示任何可发送或接收信息的硬件或软件进程
  • 协议栈:指计算机网络体系结构采用分层模型后,每层的主要功能由对等层协议的运行来实现,因而每层可用一些主要协议来表征,几个层次画在一起很像一个栈的结构.
  • 对等层:在网络体系结构中,通信双方实现同样功能的层
  • 协议数据单元:对等层实体进行信息交换的数据单位
  • 服务访问点:在同一系统中相邻两层的实体进行交互(即交换信息)的地方
  • 服务访问点 SAP 是一个抽象的概念,它实体上就是一个逻辑接口

协议和服务的概念的区分

  • 协议的实现保证了能够向上一层提供服务。本层的服务用户只能看见服务而无法看见下面的协议。下面的协议对上面的服务用户是透明的
  • 协议是 “水平的”,即协议是控制两个对等实体进行通信的规则。但服务是 “垂直的”,即服务是由下层通过层间接口向上层提供的。上层使用所提供的服务必须与下层交换一些命令,这些命令在 OSI 中称为服务原语
# 网络协议的组成要素
  • 语法:数据与控制信息的结构或格式
  • 语义:需要发出何种控制信息,完成何种动作以及做出何种响应。
  • 同步:即事件实现顺序的详细说明。

# 接口

接口:同一结点相邻两层间交换信息的连接点,系统内部规定,同一结点相邻两层的实体通过服务访问点 SAP 进行交互,是抽象概念

# OSI 参考模型和 TCP/IP 参考模型

OSI TCP/IP 信息格式
应用层 应用层 报文流
表示层
会话层
传输层 传输层(TCP、UDP) 分组
网络层 网络互联层(IP) IP 数据报
数据链路层 网络接口层 帧比特流
物理层

# 分层的好处

  • 各层之间是独立的
  • 灵活性好
  • 结构上可分割开
  • 易于实现和维护
  • 能促进标准化工作

# 物理层

# 物理层的基本概念

# 物理层要解决哪些问题

  1. 物理层要尽可能地屏蔽掉物理设备和传输媒体,通信手段的不同,使数据链路层感觉不到这些差异,只考虑完成本层的协议和服务。
  2. 给其服务用户(数据链路层)在一条物理的传输媒体上传送和接收比特流(一般为串行按顺序传输的比特流)的能力,为此,物理层应该解决物理连接的建立、维持和释放问题
  3. 在两个相邻系统之间唯一地标识数据电路

# 物理层的主要特点

  1. 由于在 OSI 之前,许多物理规程或协议已经制定出来了,而且在数据通信领域中,这些物理规程已被许多商品化的设备所采用,加之,物理层协议涉及的范围广泛,所以至今没有按 OSI 的抽象模型制定一套新的物理层协议,而是沿用已存在的物理规程,将物理层确定为描述与传输媒体接口的机械电气功能规程特性。
  2. 由于物理连接的方式很多,传输媒体的种类也很多,因此,具体的物理协议相当复杂。

# 物理层的主要任务

主要任务:确定与传输媒体的接口的一些特性

  1. 机械特性:接口的几何形状、引脚数目、引脚位置等
  2. 电气特性:指明在接口电缆的各条线上出现的电压的范围
  3. 功能特性:指明某条线上出现的某一电平的电压表示何意。
  4. 归程特性:指明对于不同功能的各种可能事件的出现顺序

# 数据通信的基础知识

# 数据通信系统的模型

一个数据通信系统包括三大部分:原系统、传输系统和目的系统

# 常用术语

  • 数据:运送信息的实体
  • 信号:数据的电气或电磁的表现
  • 码元:在一定时间间隔内的信号的离散数值
  • 模拟信号:代表消息的参数的取值是连续的
  • 数字信号:代表消息的参数的取值是离散的

目前主流:数字信道通信
优点:抗干扰能力强,传输差错可控制、便于处理、便于加密、可以综合传递各种信息
数字通信可以传递数字信号,也可以传递经过数字化处理的模拟信号

# 信道的基本概念

信道:一般用来表示像某一个方向传送信息的媒体,与通信电路不同

# 通信双方的交互方式
  • 单工通信(单向通信):只能有一个方向的通信
  • 半双工通信(双向交替通信):通信的双方都可以发送和接收信息,但不能同时进行
  • 全双工通信(双向同时通信):通信的双方可以同时发送和接收信息
# 基带信号的调制

基带信号(即基本频带的信号):来自信源的型号信号,一般是低频信号,不能直接用于传输,需要调制

# 基带调制(编码)
  • 仅对波形进行变换,使他能与信道的基本特性相适应,仍是数字信号
  • 信息传输之前编码:传输编码
    • 提高抗干扰能力;
    • 携带同步信息实现同步;
    • 可实现纠错检偏;
    • 降低传输损耗;
    • 简化传输设备;

常用编码方式

  • 不归零制:正电平表示 1,负电平表示 0
  • 归零制:正脉冲表示 1,负脉冲表示 0
  • 曼彻斯特编码:位周期中心向上跳变表示 0,中心向下跳变表示 1,但也可以反过来
  • 差分曼彻斯特编码:位开始边界有跳变表示 0,无跳变表示 1

曼彻斯特编码和差分曼彻斯特编码具有自同步性

# 带通调制
  • 带通信号:需要载波
  • 把型号的频率范围搬移到较高的频段,并转换为模拟信号,以便在模拟信道上传输
  • 仅在一段频率范围内能够通过信道

图 1

  • 调幅(AM):调制信号的幅度随基带信号的变化而变化
  • 调频(FM):调制信号的频率随基带信号的变化而变化
  • 调相(PM):调制信号的初始相位随基带信号的变化而变化

# 信道的极限容量

# 影响因素
  • 信道能够通过的频率范围
  • 信道的信噪比
# 信道的极限容量 —— 带宽
  • 信道的带宽:物理信道能过允许顺利通过的最大的连续频率范围
  • 带宽是传输介质的一种物理特征,通常取决于介质的材料构成、厚度和长度
  • 信道的带宽越宽,能够通过的信号高频分量越多,可以用更高的速率传送码元而不出现码间串扰
  • 码间串扰:如果高频分量在传输时受到衰减,码元之间的界限就会变得模糊,这种现象称为码间串扰
# 奈氏准则

在带宽为WW( Hz)的低通信道中,极限码元传输速率2W2W 波特,极限信息传输速率CC(bps)满足:C=2Wlog2VC=2W\log_2V,其中VV 代表不同的码元数

# 信道的极限容量 —— 信噪比
  • 信噪比:信号功率与噪声功率之比,常记为S/NS/N,单位为分贝,SNR=10log10SNSNR=10\log_{10}\frac{S}{N}
# 香农定理
  • 香农定理:在有高斯白噪声的信道中,极限信息传输速率CC(bps)满足:C=Wlog2(1+SN)C=W\log_2(1+\frac{S}{N}),其中WW 为信道的带宽,SS 为信号功率,NN 为噪声功率

码元传输速率受奈氏准则的限制,信息传输速率受香农公式的限制
香农公式在数据通信中的意义是:只要信息传输速率低于信道的极限传信率,就可实现无差传输。
bit/s(bps)是信息传输速率的单位
码元传输速率,单位波特(Baud),也称为调制速率、波形速率或符号速率。
一个码元不一定对应于一个比特

# 物理层下面的传输媒体

# 导引型传输媒体

传输媒体 分类 优点 缺点
双绞线 屏蔽双绞线(STP) 价格低、安装方便、易于维护 传输距离短(几到十几公里)、传输速率低、易受干扰、传输误码率高
非屏蔽双绞线(UTP)
同轴电缆 50Ω 同轴电缆:LAN / 数字传输 传输距离远、传输速率高、抗干扰能力强 安装维护困难、价格高
75Ω 同轴电缆:有线电视 / 模拟传输
光纤 多模光纤(近距离) 电磁绝缘性能好、信号衰减小、频带较宽、传输距离较大(100km 以上)、传输误码率低、保密性好 断裂连接非常困难、技术要求高、成本高
单模光纤(远距离)

# 非导引型传输媒体

  • 短波通信:通信质量差,传输速度低
  • 微波在空间直线传播,分为地面微波接力通信和卫星通信

# 信道复用技术

# 常用的信道复用技术

# 频分复用(FDM)

频分复用的所有用户同时占用不同的频带资源并行通信
图 3

# 时分复用(TDM)

时分复用的所有用户在不同的时间占用同样的频带
图 4

# 波分复用(WDM)

根据频分复用的设计思想,可在一根光纤上同时传输多个频率(波长)相近的光载波信号,实现基于光纤的频分复用技术。
图 5

# 码分复用(CDM)

与 FDM 和 TDM 不同,CDMA 的每个用户可以在相同的时间使用相同的频带进行通信。

  • CDMA 将每个比特时间划分为 m 个更短的时间片,称为码片(Chip)。m 的取值通常为 64 或 128。为了简单起见,在后续的举例中,我们假设 m 的取值为 8。
  • CDMA 中的每个站点都被指派一个唯一的 m 比特码片序列(Chip Sequence)。
    • 某个站要发送比特 1,则发送它自己的 m 比特码片序列;
    • 某个站要发送比特 0,则发送它自己的 m 比特码片序列的反码。
  • 如果有两个或多个站同时发送数据,则信道中的信号就是这些站各自所发送一系列码片序列或码片序列反码的叠加。为了从信道中分离出每个站的信号,给每个站指派码片序列时,必须遵循以下规则:
    • 分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列。
    • 分配给每个站的码片序列必须相互正交,即各码片序列相应的码片向量之间的规格化內积为 0。

令向量 A 表示站 A 的码片向量,向量 B 表示站 B 的码片向量。两个不同站 A 和 B 的码片序列相互正交,就是向量 A 与向量 B 的规格化內积为 0,如下式所示。

AB=1mi=1mAiBi=0A \cdot B = \frac{1}{m} \sum_{i=1}^{m} A_i \cdot B_i = 0

# 数据链路层

# 三个基本问题

# 封装成帧

封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。

首部和尾部的一个重要作用就是进行帧定界 (即确定帧的界限)。此外,首部和尾部还包括许多必要的控制信息。在发送帧时,是从帧首部开始发送的。

每一种链路层协议都规定了所能传送的帧的数据部分长度上限 - 最大传送单元 MTU (Maximum Transfer Unit)

# 透明传输

透明传输是指在数据链路层传输数据时,不对数据进行任何修改,即不对数据进行加字节、删字节、改字节等操作。这样,接收端收到的数据与发送端发送的数据完全一样。

# 差错检测

差错检测是指在数据链路层传输数据时,对数据进行差错检测,以保证数据的正确传输。差错检测的方法有很多种,常用的有循环冗余检测 CRC (Cyclic Redundancy Check) 和纵向奇偶校验 VRC (Vertical Redundancy Check)。

# 循环冗余检测 CRC

CRC 是一种差错检测方法,它是通过对数据进行除法运算来检测数据中的差错。CRC 的基本思想是:在发送端,将数据 D 与一个固定的除数 G 进行除法运算,得到余数 R,然后将 R 附加到数据 D 的后面一起发送出去;在接收端,将接收到的数据与除数 G 进行除法运算,如果余数为 0,则说明数据传输正确,否则说明数据传输错误。

图 2

  1. 构造 “被除数”: 待发送数据后面添加生成多项式最高次数个 0
  2. 构造 “除数”: 生成多项式各项系数构成的比特串作为除数
  3. 做 “二进制模 2 除法”: 相当于对应位进行逻辑异或运算
  4. 检查 “余数”: 余数的位数应与生成多项式最高次数相同, 如果位数不够,则在余数前补 0 来凑足位数。

在接收端对收到的每一帧经过 CRC 检验后,有以下两种情况:

  1. 若得出的余数 R=O, 则判定这个帧没有差错,就接受 (accept)。
  2. 若余数 R!=O, 则判定这个帧有差错 (但无法确定究竟是哪一位或哪几位出现了差
    错),就丢弃。

一种较方便的方法是用多项式来表示循环冗余检验过程。在上面的例子中,用多项式 P (X) = X3 + X2 + 1 表示上面的除数 P = 1101 (最高位对应于 X3,最低位对应于 X0)。多项式 P (X) 称为生成多项式。

最后再强调一下,在数据链路层若仅仅使用循环冗余检验 CRC 差错检测技术,则只能做到对帧的无差错接受,即:“凡是接收端数据链路层接受的帧,我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错 "。接收端丢弃的帧虽然曾收到了,但最终还是因为有差错被丢弃,即没有被接受。以上所述的可以近似地表述为 (通常都是这样认为):“凡是接收端数据链路层接受的帧均无差错”。

# 点对点协议 PPP

# PPP 帧的格式

图 6

PPP 帧的格式如上图所示,它由 7 个部分组成,各部分的含义如下:

  1. 帧起始标志 (Flag):一个字节,固定为 01111110(7E),表示一个帧的开始。
  2. 地址 (Address):一个字节,固定为 11111111(FF)
  3. 控制 (Control):一个字节,固定为 00000011(03)
  4. 协议 (Protocol):两个字节,表示上层协议的类型,如 IP 协议的类型为 0x0021。
  5. 信息 (Information):0 到多个字节,表示上层协议的数据。
  6. 帧校验序列 (FCS):两个字节,表示帧校验序列,用于差错检测。
  7. 帧结束标志 (Flag):一个字节,固定为 01111110(7E),表示一个帧的结束。

# PPP 帧的透明传输

# 字节填充(异步传输)
  • 7E -> 7D 5E
  • 7D -> 7D 5D
  • 若信息字段中出现 ASCII 码的控制字符 (即数值小于 Ox20 的字符),则在该字符前面要加入一个 Ox7D 字节,同时将该字符的编码加以改变。例如,出现 Ox03 (在控制字符中 是 “传输结束 “ ETX ) 就要把它转变为 2 字节序列 ( 7D 23 )
# 零比特填充(同步传输)

如果数据中出现了连续的 5 个 1 ,则在这 5 个 1 之后插入一个 0

# PPP 帧的工作状态

图 7

# CSMA/CD 协议

CSMA/CD 协议是一种多路访问协议,它的全称是 Carrier Sense Multiple Access with Collision Detection,即带冲突检测的载波监听多路访问协议。CSMA/CD 协议的工作原理如下:

  • 多址接入:多个站点共享一个信道
  • 载波监听:在发送数据之前,先监听信道,如果信道空闲,则发送数据;如果信道忙,则等待
    • 若检测到总线空闲 96 比特时间(发送 96 比特所耗费的时间,也称为帧间最小间隔),则发送这个帧;
    • 若检测到总线忙,则继续检测并等待总线转为空闲 96 比特时间,然后发送这个帧。
  • 碰撞检测:如果发送数据的同时,检测到信道上有其他数据,说明发生了碰撞,立即停止发送数据,并发送一个特殊的信号,以通知其他站点发生了碰撞,然后等待一段时间后再次发送数据
  • 强化碰撞: 发送帧的站点一旦检测到碰撞,除了立即停止发送帧外,还要再继续发送 32 比特或 48 比特的人为干扰信号(Jamming Signal),以便有足够多的碰撞信号使所有站点都能检测出碰撞。

图 8

显然,在使用 CSMA/CD 协议时,一个站不可能同时进行发送和接收 (但必须边发送边监听信道)。因此使用 CSMA/CD 协议的以太网不可能进行全双工通信而只能进行双向交替通信 (半双工通信)。

# 争用期

站点从发送帧开始,最多经过时长2τ2\tau(即δ0\delta \rightarrow 0)就可检测出所发送的帧是否遭遇了碰撞。
因此,共享总线以太网的端到端往返时间2τ2\tau 被称为争用期(Contention Period)或碰撞窗口(Collision Window),它是一个非常重要的参数。

图 9

10Mb/s 共享总线以太网(传统以太网)规定:争用期2τ2\tau 的值为 512 比特的发送时间,即51.2μs51.2\mu s

2τ=512b10Mb/s=51.2μs2\tau = \frac{512b}{10Mb/s} = 51.2\mu s

# 二进制指数退避算法

退避时间 = 争用期 * 随机数

  • 争用期:2τ2\tau
  • 随机数:0-2k-1,k=min (n,10),n 为重传次数,若重传次数达到 16 次,则放弃发送并向上层报告

# 信道利用率

图 10

极限信道利用率:Smax=11+aS_{max} = \frac{1}{1+a},其中a=τT0a=\frac{\tau}{T_{0}}T0T_{0} 为信道传播时延

# 使用集线器的星形拓扑

# 星形以太网 10Base-T

  • 10:传输速率为 10Mb/s
  • Base:基带传输
  • T:双绞线

# 集线器的特点

  1. 集线器是使用电子器件来模拟实际电缆线的工作,因此整个系统仍然像一个传统的以太网那样运行。
  2. 使用集线器的以太网在逻辑上仍是一个总线网,各工作站使用的还是 CSMA/CD 协议,并共享逻辑上的总线。
  3. 集线器很像一个多接口的转发器,工作在物理层。
  4. 集线器采用了专门的芯片,进行自适应串音回波抵消,减少了近端串音。

# 以太网的 MAC 层

# MAC 层的硬件地址

  • 前 24 位:厂商编号
  • 后 24 位:序列号
# I/G 位
  • I/G 位:第一个字节的最低位,指示地址是单播地址还是组播地址
    • I=0:单播地址(单站地址)
    • I=1:组播地址(组地址)
    • I=1,G=1:广播地址(全 48 位为 1)
# G/L 位
  • G/L 位:第一个字节的次低位,指示地址是全局地址还是本地地址
    • G=0:全局地址
    • G=1:本地地址
# 适配器检查
  • 适配器检查:接收到的帧的目的地址与适配器的地址进行比较,如果不匹配,则丢弃
    • 单播帧(一对一):目的地址与适配器地址匹配
    • 广播帧(一对所有):目的地址为全 1
    • 多播帧(一对多):目的地址为多播地址
  • 混杂模式:适配器接收所有帧,不进行适配器检查,适用于网络分析(嗅探器)

# MAC 层的帧格式

# 以太网 v2 帧格式
目的地址 源地址 类型 数据 FCS
6 字节 6 字节 2 字节 46-1500 字节 4 字节
  • 目的地址:6 字节,接收方的 MAC 地址
  • 源地址:6 字节,发送方的 MAC 地址
  • 类型:2 字节,表示上层协议的类型,如 IP 协议的类型为 0x0800
  • 数据:46-1500 字节,表示上层协议的数据
  • FCS:4 字节,帧校验序列,用于差错检测
  • 以太网 v2 帧格式中的数据部分长度上限为 1500 字节,即 MTU 为 1500 字节
  • 以太网 v2 帧格式中的数据部分长度下限为 46 字节,即数据部分长度不足 46 字节时,要用填充字节进行填充
  • 还需要在前面插入 8 个字节,第 — 个字段是 7 个字节的前同步码 (1 和 0 交替码),它的作用是 使接收端的适配器在接收 MAC 帧时能够迅速调整其时钟频率,使它和发送端的时钟同步, 也就是 “实现位同步”(位同步就是比特同步的意思)。第二个字段是帧开始定界符,定义为 10101011。它的前六位的作用和前同步码一样,MAC 帧的 FCS 字段的检验范围不包 括前同步码和帧开始定界符
# 无效帧
  1. 帧的长度不是整数个字节:
  2. 用收到的帧检验序列 FCS 查出有差错;
  3. 收到的帧的 MAC 客户数据字段的长度不在 46~1500 字节之间。考虑到 MAC 帧首部和尾部的长度共有 18 字节,可以得出有效的 MAC 帧长度为 64~1518 字节之间。

对于检查出的无效 MAC 帧就简单地丢弃。以太网不负责重传丢弃的帧。

# IEEE 802.3 和以太网 v2 的区别

  1. IEEE 802.3 规定的 MAC 帧的第三个字段是 “长度 / 类型”。
  2. 当 “长度 / 类型” 字段值小于 Ox0600 时,数据字段必须装入上面的逻辑链路控制 LLC 子层的 LLC 帧。
  3. 在 802.3 标准的文档中,MAC 帧的帧格式包括了 8 字节的前同步码和帧开始定界符。

# 拓展的以太网

# 在物理层拓展以太网

  • 光纤
  • 集线器
    • 优点:使原来属于不同碰撞域的以太网上的计算机能够进行跨碰撞域的通信;扩大了以太网覆盖的地理范围。
    • 缺点:一个系的和连起来三个系的总的吞吐量一样;不能连接不同数据率的碰撞域。

# 在数据链路层拓展以太网

# 网桥

网桥对收到的帧根据其 MAC 帧的目的地址进行转发和过滤。 当网桥收到一个帧时,并不是向所有的端口转发此帧,而是根据此帧的目的 MAC 地址,查找网桥中的地址表,然后确定将该帧转发到哪一个端口,或者是把它丢弃 (即过滤)。

# 交换机

以太网交换机实质上就是一个多端口的网桥,通常都有十几个或更多的端口,和工作在物理层的转发器、集线器有很大的差别。以太网交换机的每个端口都直接与一个单台主机或另一个以太网交换机相连,并且一般都工作在全双工方式。以太网交换机还具有并行性,即能同时连通多对端口,使多对主机能同时通信 (而网桥只能一次分析和转发一个帧)。相互通信的主机都独占传输媒体,无碰撞地传输数据。换句话说,每一个端口和连接到端口的 主机构成了一个碰撞域,具有 N 个端口的以太网交换机的碰撞域共有 N 个。

# 以太网交换机的自学习机制

以太网交换机的自学习机制是指以太网交换机在工作过程中,能够自动学习网络中各个主机的 MAC 地址,并根据学习到的 MAC 地址建立地址表,以便在转发帧时能够快速地查找目的地址。

以太网交换机的自学习机制的基本原理如下:

  1. 当以太网交换机收到一个帧时,它首先检查帧的源 MAC 地址,然后查找地址表,看看这个源 MAC 地址是否已经在地址表中。
  2. 如果源 MAC 地址不在地址表中,则将源 MAC 地址和接收到这个帧的端口号添加到地址表中。
  3. 如果源 MAC 地址已经在地址表中,则更新源 MAC 地址的时间戳。
  4. 然后,以太网交换机检查帧的目的 MAC 地址,查找地址表,看看这个目的 MAC 地址是否在地址表中。
  5. 如果目的 MAC 地址在地址表中,则查找目的 MAC 地址对应的端口号,并将这个帧转发到这个端口。
  6. 如果目的 MAC 地址不在地址表中,则将这个帧转发到除接收到这个帧的端口外的所有端口。
  7. 以太网交换机还会定期地检查地址表中的条目,如果某个条目的时间戳超过了一定的时间,则将这个条目从地址表中删除。

# 虚拟局域网 VLAN

# Dot1q 协议

目的地址 源地址 VLAN 标识 类型 数据 FCS
6 字节 6 字节 4 字节 2 字节 46-1500 字节 4 字节
TPID PRI CFI VLAN ID
2 字节(16 位) 3 位 1 位 12 位
  • VLAN 标识:4 字节,表示 VLAN 的标识
    • TPID:2 字节,固定为 0x8100
    • PRI:3 位,优先级
    • CFI:1 位,规范位
    • VLAN ID:12 位,VLAN 的标识,0 和 4095 保留

# 网络层

# 网际协议 IP

# IPv4 地址

# IPv4 地址的分类编址

图 11

类别 最小可指派网络号 最大可指派网络号 可指派网络数量 每个网络最大可分配地址数量 不能指派的网络号
A 1 126 28-1-2 224-2 0 和 127
B 128.0 191.255 216-2 216-2
C 192.0.0 223.255.255 224-3 28-2
# 子网划分

子网掩码可以表明分类 IPv4 地址的主机号部分被借用了几个比特作为子网号。

  • 用左起多个连续的比特 1 对应 IPv4 地址中的网络号和子网号;
  • 之后的多个连续的比特 0 对应 IPv4 地址中的主机号。
  • 将划分子网的 IPv4 地址与相应的子网掩码进行逐比特的逻辑与运算,就可得到该 IPv4 地址所在子网的网络地址。
# 无分类编址 CIDR

无分类的两级编址的记法是: IP地址/前缀长度{<网络前缀>,<主机号>}

# 地址解析协议 ARP

ARP 协议是一种地址解析协议,它的作用是将网络层的 IP 地址解析为数据链路层的 MAC 地址。

ARP 协议的工作原理如下:

  1. 主机 A 发送一个 ARP 请求分组,该分组内容为 “我是主机 A,我的 IP 地址是 xxx,我的 MAC 地址是 yyy,我要找到 IP 地址为 zzz 的主机的 MAC 地址”。
  2. 所有的主机都接收到这个 ARP 请求分组、
  3. 主机 B 收到 ARP 请求分组后,发现自己的 IP 地址与 ARP 请求分组中的 IP 地址相同,就收下这个 ARP 请求分组,并向主机 A 发送一个 ARP 响应分组,同时在这个 ARP 响应分组中包含自己的 MAC 地址,即 “我的 IP 地址是 zzz,我的 MAC 地址是 www”。
  4. 主机 A 收到 ARP 响应分组后,就在自己的 ARP 缓存表中添加一条主机 B 的 IP 地址和 MAC 地址的映射。

当主机 A 向 B 发送数据报时,很可能以后不久主机 B 还要向 A 发送数据报,因而主机 B 也可能要向 A 发送 ARP 请求分组。为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就把自己的 IP 地址到 MAC 地址的映射写入 ARP 请求分组。当主机 B 收到 A 的 ARP 请求分组时,就把主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。以后 主机 B 向 A 发送数据报时就很方便了。

  • ARP 请求分组的目的地址是广播地址,即全 1,路由器不转发广播分组,因此 ARP 请求分组只能在一个局域网中传播。
  • 如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
# ARP 的四种典型情况
  • 发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
  • 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
  • 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
  • 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成。

# IP 数据报的格式

图 12

  • 版本:4 位,IPv4
  • 首部长度:4 位,单位为 4 字节,最小值为 5,最大值为 15
  • 区分服务:8 位,用于指定数据报的优先级和服务质量
  • 总长度:16 位,指定整个 IP 数据报的长度,单位为字节
  • 标识:16 位,用于标识数据报的分片。IP 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1, 并将此值赋给标识字段。
  • 标志:3 位,用于指定数据报的分片情况
    • 位 0:保留位,必须为 0
    • 位 1:DF(Don't Fragment),禁止分片,DF=1 时,数据报不能分片
    • 位 2:MF(More Fragment),更多分片,MF=1 时,表示后面还有分片
  • 片偏移:13 位,指定数据报片的相对位置,单位为 8 字节
  • 生存时间:8 位,指定数据报在网络中的生存时间,单位为跳数
  • 协议:8 位,指定上层协议的类型,如 TCP 协议的类型为 0x06
  • 首部校验和:16 位,用于检验 IP 首部的正确性
  • 源地址:32 位,指定数据报的源 IP 地址
  • 目的地址:32 位,指定数据报的目的 IP 地址
  • 可选字段:可选,用于指定 IP 数据报的选项
# 首部检验和计算
  • 首部检验和:16 位,用于检验 IP 首部的正确性
  • 首部检验和的计算方法是:将 IP 首部中的所有 16 位字相加,如果有溢出,则将溢出部分回卷到低位,然后取反,得到的结果就是首部检验和。

# 默认路由

静态路由配置是指用户或网络运维人员使用路由器的相关命令给路由器人工配置路由表。

# 互联网的路由选择协议

# 路由选择协议的特点

  • 自适应性:路由选择协议能够根据网络的拓扑结构和链路状态的变化,自动调整路由表,以适应网络的变化。
  • 分布式:路由选择协议是分布式的,即每个路由器只知道与自己直接相连的路由器的信息,而不知道整个网络的拓扑结构。
  • 分层次:路由选择协议是分层次的,即路由选择协议分为内部网关协议和外部网关协议两个层次。

# 自治系统 AS

在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由。

# 路由信息协议 RIP

# RIP 基本概念
  • RIP 使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。
    • 路由器到直连网络的距离定义为 1
    • 路由器到非直连网络的距离定义为所经过的路由器数加 1。
    • 允许一条路径最多只能包含 15 个路由器,距离等于 16 时相当于不可达。因此 RIP 只适用于小型互联网。
    • 当到达同一目的网络有多条 RIP 距离相等的路由时,可以进行等价负载均衡,也就是将通信量均衡地分布到多条等价的路径上。
# RIP 特点
  • 仅和相邻路由器交换信息。
  • 交换路由器自己的路由表。
  • 周期性交换(例如,每个约 30 秒)。
  • 为了加快 RIP 的收敛速度,当网络拓扑发生变化时,路由器要及时向相邻路由器通告拓扑变化后的路由信息,这称为触发更新
# RIP 基本工作过程
  1. 路由器刚开始工作时,只知道自己到直连网络的 RIP 距离为 1。
  2. 每个路由器仅和相邻路由器周期性地交换并更新路由信息。
  3. 若干次交换和更新后,每个路由器都知道到达本自治系统 AS 内各网络的最短距离和下一跳路由器,称为收敛

更新算法

  1. 到达目的网络,相同的下一跳最新消息,要更新
  2. 发现了新的网络,添加
  3. 到达目的网络,不同的下一跳新路由优势,要更新
  4. 到达目的网络,不同的下一跳RIP 距离相等,可以等价负载均衡,添加
  5. 到达目的网络,不同的下一跳新路由劣势更新
# RIP 的优缺点
  • 优点:简单、好消息传得快
  • 缺点:限制了网络的规模、交换完整的路由表,开销大、坏消息传得慢
# RIP 报文格式

图 13

# 开放最短路径优先协议 OSPF

# OSPF 基本概念
  • 链路状态(Link State,LS)是指本路由器都和哪些路由器相邻,以及相应链路的 “代价(cost)”。
  • OSPF 相邻路由器之间通过交互问候(Hello)分组来建立和维护邻居关系。问候(Hello)分组封装在 IP 数据报中,发往组播地址 224.0.0.5。IP 数据报首部中的协议号字段的取值为 89,表明 IP 数据报的数据载荷为 OSPF 分组。
  • 运行 OSPF 协议的路由器有 3 张表,邻居表、链路状态表和路由表。
# OSPF 划分区域
  • 为了使 OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干个更小的范围,叫作区域。
  • 每一个区域都有一个 32 位的区域标识符(用点分十进制表示)。
  • 区域也不能太大,在一个区域内的路由器最好不超过 200 个。
# OSPF 分组

图 14

# OSPF 的优缺点
  • 当互联网规模很大时,OSPF 协议要比距离向量协议 RIP 好得多。
  • OSPF 没有 “坏消息传播得慢” 的问题

# 边界网关协议 BGP

# BGP 协议的特点
  • 使用 TCP 协议
  • 交换路由信息的结点数量级是自治系统数的量级:少。
  • 每一个自治系统中 BGP 发言人的数目是很少的:自治系统之间的路由选择不致过分复杂。
  • BGP 支持 CIDR,:路由表包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
  • 在 BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表。但以后只需要在发生变化时更新有变化的部分:节省网络带宽和路由器的处理开销

# 网际控制报文协议 ICMP

# ICMP 的基本概念

  • 为了更有效地转发 IP 数据报以及提高 IP 数据报交付成功的机会,TCP/IP 体系结构的网际层使用了网际控制报文协议(Internet Control Message Protocol,ICMP)[RFC 792]。
  • 主机或路由器使用 ICMP 来发送差错报告报文和询问报文。
  • ICMP 报文被封装在 IP 数据报中发送。

# ICMP 报文格式

图 15

# ICMP 报文种类

  • 差错报告报文
    • 终点不可达
    • 源点抑制:网络拥塞,控制流量。
    • 时间超过 :类型字段值为 11,代码字段值为 0 表示传输超时,代码字段值为 1 表示分段重组超时。
    • 参数问题:参数不正确,丢弃此数据报,同时发送此报文给源点。
    • 改变路由(重定向): 通知主机下次发送数据报到别的路由器。
  • 询问报文
    • 回显请求和回显应答:用于测试网络连接。
    • 时间戳请求和时间戳应答:用于测试网络连接。

不应发送 ICMP 差错报告报文的几种情况

  • ICMP 差错报告报文
  • 第一个分片的数据报片的所有后续数据报片
  • 具有多播地址的数据报
  • 具有特殊地址(如 127.0.0.0 或 0.0.0.0)的数据报

# 虚拟专用网 VPN 和网络地址转换 NAT

# VPN

# 本地地址与全球地址
  • 本地地址 —— 仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
  • 全球地址 —— 全球唯一的 IP 地址,必须向互联网的管理机构申请。
# VPN 的基本概念
  • 专用地址块:
    • 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
  • 采用这样的专用 IP 地址的互连网络称为专用互联网或本地互联网,或更简单些,就叫作专用网。
  • 因为这些专用地址仅在本机构内部使用。专用 IP 地址也叫作可重用地址 (reusable address)。
  • 利用公用的互联网作为本机构各专用网之间的通信载体:虚拟专用网 VPN (Virtual Private Network)。
  • 为本机构的主机用于机构内部的通信
  • 并没有真正使用通信专线
  • 由部门 A 和 B 的内部网络所构成的虚拟专用网 VPN 又称为内联网 (intranet),表示部门 A 和 B 都是在同一个机构的内部。
  • 一个机构和某些外部机构共同建立的虚拟专用网 VPN 又称为外联网 (extranet)

# NAT

# NAT 的基本概念
  • 需要在专用网连接到互联网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫作 NAT 路由器,它至少有一个有效的外部全球 IP 地址
  • 所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和互联网连接。
# 网络地址转换的过程
  • 内部主机 A 用本地地址 IPA 和互联网上主机 B 通信所发送的数据报必须经过 NAT 路由器。
  • NAT 路由器将数据报的源地址 IPA 转换成全球地址 IPG,并把转换结果记录到 NAT 地址转换表中,目的地址 IPB 保持不变,然后发送到互联网。
  • NAT 路由器收到主机 B 发回的数据报时,知道数据报中的源地址是 IPB 而目的地址是 IPG。
  • 根据 NAT 转换表,NAT 路由器将目的地址 IPG 转换为 IPA,转发给最终的内部主机 A。

图 16

可以看出,在内部主机与外部主机通信时,在 NAT 路由器上发生了两次地址转换:

  1. 离开专用网时:替换源地址,将内部地址替换为全球地址;
  2. 进入专用网时:替换目的地址,将全球地址替换为内部地址;
# NAT 的特点
  • 当 NAT 路由器具有 n 个全球 IP 地址时,专用网内最多可以同时有 n 台主机接入到互联网。
  • 通过 NAT 路由器的通信必须由专用网内的主机发起。专用网内部的主机不能充当服务器用
# 网络地址与端口转换 NAPT

使多个拥有本地地址的主机,共用一个 NAT 路由器上的全球 IP 地址

# IPv6

# IPv6 的首部

# IPv6 基本首部

图 17

  • 版本 (version)—— 4 位。它指明了协议的版本,对 IPv6 该字段总是 6。
  • 通信量类 (traffic class)—— 8 位。这是为了区分不同的 IPv6 数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。
  • 流标号 (flow label)—— 20 位。 “流” 是互联网络上从特定源点到特定终点的一系列数据报, “流” 所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。
  • 有效载荷长度 (payload length)—— 16 位。它指明 IPv6 数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是 64 KB。
  • 下一个首部 (next header)—— 8 位。它相当于 IPv4 的协议字段或可选字段。
  • 跳数限制 (hop limit)—— 8 位。源站在数据报发出时即设定跳数限制。路由器在转发数据报时将跳数限制字段中的值减 1。
    当跳数限制的值为零时,就要将此数据报丢弃。
  • IPv6 将首部长度变为固定的 40 字节,称为基本首部。
  • 把首部中不必要的功能取消了,使得 IPv6 首部的字段数减少到只有 8 个。
  • IPv6 对首部中的某些字段进行了如下的更改:
    • 取消了首部长度字段,因为首部长度是固定的 40 字节;
    • 取消了服务类型字段;
    • 取消了总长度字段,改用有效载荷长度字段;
    • 把 TTL 字段改称为跳数限制字段;
    • 取消了协议字段,改用下一个首部字段;
    • 取消了检验和字段;
    • 取消了选项字段,而用扩展首部来实现选项功能。
# IPv6 的扩展首部

IPv6 把原来 IPv4 首部中选项的功能都放在扩展首部中,并将扩展首部留给路径两端的源站和目的站的主机来处理。

数据报途中经过的路由器都不处理这些扩展首部(只有一个首部例外,即逐跳选项扩展首部)。

这样就大大提高了路由器的处理效率

# IPv6 的地址

# IPv6 地址的分类
  • 单播 (unicast):传统的点对点通信。
  • 多播 (multicast):一点对多点的通信。
  • 任播 (anycast):这是 IPv6 增加的一种类型。任播的目的站是一组计算机,但数据报在交付时只交付其中的一个,通常是距离最近的一个。
# IPv6 地址的表示
  • 地址长度:IPv6 地址的长度是 128 位,是 IPv4 地址长度的 4 倍。
  • 在十六进制记法中,允许把数字前面的 0 省略。例如把 0000 中的前三个 0 省略,写成 1 个 0。
  • 冒号十六进制记法可以允许零压缩 (zero compression),即一连串连续的零可以为一对冒号所取代。在任一地址中只能使用一次零压缩。
# IPv6 地址的类型
地址类型 前缀
未指明地址 ::/128
回环地址 ::1/128
链路本地地址 FE80::/10
多播地址 FF00::/8
全球单播地址 其他

# 从 IPv4 到 IPv6

# 双协议栈

在完全过渡到 IPv6 之前,使一部分主机(或路由器)装有两个协议栈,一个 IPv4 和一个 IPv6。
双协议栈的主机(或路由器)记为 IPv6/IPv4,同时具有两种 IP 地址:一个 IPv6 地址和一个 IPv4 地址。
根据 DNS 返回的地址类型可以确定使用 IPv4 地址还是 IPv6 地址。

# 隧道技术

在 IPv6 数据报要进入 IPv4 网络时,
把 IPv6 数据报封装成为 IPv4 数据报,整个的 IPv6 数据报变成了 IPv4 数据报的数据部分。
当 IPv4 数据报离开 IPv4 网络中的隧道时,
再把数据部分(即原来的 IPv6 数据报)交给主机的 IPv6 协议栈。

# 传输层

# 传输层的基本概念

# 传输层的主要功能

  • 运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信):端口的复用和分用。
  • 运输层还要对收到的报文进行差错检测。
  • 运输层提供面向连接和无连接的服务。

# 传输层的两个主要协议

# TCP

传输控制协议(Transmission Control Protocol,TCP)为其上层提供的是面向连接的可靠的数据传输服务
使用 TCP 通信的双方,在传送数据之前必须首先建立 TCP 连接(逻辑连接,而非物理连接)。数据传输结束后必须要释放 TCP 连接。
TCP 为了实现可靠传输,就必须使用很多措施,例如 TCP 连接管理、确认机制、超时重传、流量控制以及拥塞控制等。
TCP 的实现复杂,TCP 报文段的首部比较大,占用处理机资源比较多。

# UDP

用户数据报协议(User Datagram Protocol,UDP)为其上层提供的是无连接的不可靠的数据传输服务。
使用 UDP 通信的双方,在传送数据之前不需要建立连接。
UDP 不需要实现可靠传输,因此不需要使用实现可靠传输的各种机制。
UDP 的实现简单,UDP 用户数据报的首部比较小。

# 传输层的端口

TCP/IP 体系结构的运输层使用端口号来标识和区分应用层的不同应用进程。端口号的长度为 16 比特,取值范围是 0~65535。
端口就是运输层服务访问点 TSAP。
软件端口:TCPIP 协议中的端口,它是一种抽象的软件结构,包括一些数据结构和 I/O 缓冲区。
端口的作用就是让应用层的各种应用进程都能将其数据通过端口向下交付给运输层,以及让运输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。

软件端口与硬件端口

  • 在协议栈层间的抽象的协议端口是软件端口。
  • 路由器或交换机上的端口是硬件端口。
  • 硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址
# 端口分类
  • 熟知端口:0~1023,是系统端口,由 IANA(互联网数字分配机构)指定,用于知名服务。
  • 登记端口:1024~49151,是用户端口,用于一些注册的服务。
  • 短暂端口:49152~65535,是私有端口,用于动态分配。
# 服务和端口的关系

客户端通过 IP 地址定位服务器,通过协议和端口号定位服务器上的服务。
客户端软件可以同时访问多个服务器上的服务,客户端会为每个出去的流量分配一个唯一的原端口

# 发送方的复用和接收方的分用

图 18

# 用户数据报协议 UDP

# UDP 概述

  • UDP 只在 IP 的数据报服务之上增加了很少一点的功能:
    • 复用和分用的功能
    • 差错检测的功能

# UDP 的特点

  • UDP 是无连接的,即发送数据之前不需要建立连接。
  • UDP 是不可靠的,即不保证数据传输的可靠性。
  • UDP 是面向报文的,即应用程序交给 UDP 多长的报文,UDP 就照样发送,不合并,也不拆分
  • UDP 没有拥塞控制,因此网络出现拥塞时,UDP 的性能会急剧下降。
  • UDP 支持一对一、一对多、多对一和多对多的交互通信。
  • UDP 的首部开销小,只有 8 个字节,比 TCP 的首部开销要小很多。
    图 19

# UDP 的首部格式

图 20

# 传输控制协议 TCP

# TCP 的特点

  • TCP 是面向连接的运输层协议,提供可靠交付的服务。
  • TCP 提供全双工通信。
  • 面向字节流
    • TCP 中的 “流”(stream)指的是流入或流出进程的字节序列。
    • “面向字节流” 的含义是:虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流。
    • TCP 不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。

图 21

TCP 的数据编号与确认

  • TCP 协议是面向字节的。TCP 将所要传送的报文看成是字节组成的数据流,并使每一个字节对应于一个序号。
  • 在连接建立时,双方要商定初始序号。序号字段:该报文段中的数据部分的第一个字节的序号。
  • TCP 的确认是对接收到的数据的最高序号表示确认。确认号:已收到的数据的最高序号加 1。接收端期望下次收到的数据中的第一个数据字节的序号

解决重复帧的问题
使每一个数据帧带上不同的发送序号。每发送一个新的数据帧就把它的发送序号加 1。若结点 B 收到发送序号相同的数据帧,就表明出现了重复帧。但此时结点 B 还必须向 A 发送确认帧 ACK,因为 B 已经知道 A 还没有收到上一次发过去的确认帧
ACK。

# TCP 的连接

每一条 TCP 连接有两个端点
TCP 连接的端点叫做套接字(socket)。
套接字:端口号拼接到 IP 地址, socket = (IP地址:端口号)

# TCP 的首部格式

图 22

  • 源端口号和目的端口号:用于标识发送端和接收端的应用进程。
  • 序号:占 32 比特,取值范围 0~232-1。当序号增加到最后一个时,下一个序号又回到 0。用来指出本 TCP 报文段数据载荷的第一个字节的序号。
  • 确认号:占 32 比特,取值范围 0~232-1。只有当 ACK=1 时,确认号字段才有效。确认号表示期望收到对方下一个报文段的第一个数据字节的序号。
  • ACK :占 1 比特,表示确认号字段有效。当 ACK=1 时,确认号字段有效,当 ACK=0 时,确认号无效,不能用来确认报文段。在 TCP 连接建立后,所有传送的 TCP 报文段都必须把 ACK 置 1
  • 数据偏移:占 4 比特,指出 TCP 报文段的数据起始位置距离 TCP 报文段的起始位置有多远,实际上指出了 TCP 报文段的首部长度
  • 保留:占 6 比特,保留为将来使用,目前未使用。
  • 窗口:占 16 比特,取值范围 0~216-1。窗口字段用来指出还能接收多少字节的数据,指出发送本报文段的一方的接收窗口的大小,即接收缓存的可用空间大小,这用来表征接收方的接收能力
  • 校验和:占 16 比特,用来检验 TCP 报文段在传输过程中是否发生了改动或出错。
  • SYN :占 1 比特,用来建立连接。当 SYN=1ACK=0 时,表明这是一个 TCP 连接请求报文段。对方若同意建立连接,则应在响应的 TCP 报文段的首部中使 SYN=1ACK=1 。综上所述, SYN 为 1 的 TCP 报文段要么是一个连接请求报文段,要么是一个连接响应报文段。
  • FIN :占 1 比特,用来释放连接。当 FIN=1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
  • RST :占 1 比特,用来复位连接。当 RST=1 时,表明 TCP 连接出现严重问题,要求对方重新建立连接,还用来拒绝一个非法的 TCP 报文段或拒绝打开一个 TCP 连接
  • PSH :占 1 比特,发送方 TCP 把 PSH 置 1,并立即创建一个 TCP 报文段发送出去,而不需要积累到足够多的数据再发送。接收方 TCP 收到 PSH 为 1 的 TCP 报文段,就尽快地交付给应用进程,而不再等到接收到足够多的数据才向上交付。
  • URG :占 1 比特,表示紧急指针字段有效。当 URG=1 时,表明紧急指针字段有效,紧急指针指出的是紧急数据的最后一个字节的序号。
  • 紧急指针:占 16 比特,只有当 URG=1 时,紧急指针才有效。紧急指针指出的是紧急数据的最后一个字节的序号。紧急数据是指在正常数据传送过程中,突然出现的一些重要数据,这些数据要优先传送,而不受前面数据的影响。
  • 选项:占 0~320 比特(40 字节),可选字段,用来对 TCP 报文段进行扩充,如时间戳、最大报文段长度等。
    • 最大报文段长度 MSS 选项:指出 TCP 报文段数据载荷部分的最大长度,而不是整个 TCP 报文段的长度。
    • 窗口扩大选项:用来扩大窗口,提高吞吐率。
    • 时间戳选项:
      • 用于计算往返时间 RTT
      • 用于处理序号超范围的情况,又称为防止序号绕回 PAWS。
    • 选择确认选项:用来实现选择确认功能。
  • 填充:用来填充 TCP 报文段,使 TCP 报文段的数据部分的长度为 4 字节的整数倍。

# 可靠传输

# 停止等待协议

图 23

  • 接收方收不到数据分组,就不会发送相应的 ACK 或 NAK。
  • 如果不采取措施,发送方就会一直处于等待接收方 ACK 或 NAK 的状态。
  • 为解决上述问题,发送方可在每发送完一个数据分组时就启动一个超时计时器(Timeout Timer)。一般可将超时重传时间 RTO 设置为略大于收发双方的平均往返时间 RTT。
  • 若到了超时计时器所设置的超时重传时间 (Retransmission Time-Out, RTO),但发送方仍未收到
  • 接收方的 ACK 或 NAK,就重传之前已发送过的数据分组。
  • 为了避免分组重复这种传输错误,必须给每个分组带上序号。
  • 对于停止 - 等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了,序号有 0 和 1 这两个。
  • 使用超时重传机制后,就可以不使用否认机制了,这样可使协议实现起来更加简单。但是,如果点对点链路的误码率较高,使用否认机制可以使发送方在超时计时器超时前就尽快重传。
  • 为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止。等待协议的特性,只需 1 个比特编序号即可,即序号 0 和序号 1。
  • 为了让发送方能够判断所收到的确认分组是否是重复的,需要给确认分组编号,所用比特数量与数据分组所用比特数量一样。
  • 给超时计时器设置的超时重传时间 RTO 应当仔细选择,一般将 RTO 设置为略大于收发双方的平均往返时间 RTT。
  • 停止等待协议属于自动请求重传(Automatic Repeat reQuest,ARQ)协议。即重传的请求是发送方自动进行的,而不是接收方请求发送方重传某个误码的数据分组。
# 停止等待协议的信道利用率

图 25

信道利用率U=TDTD+RTT+TA\text{信道利用率} U = \frac{T_D}{T_D + RTT + T_A}

  • TDT_D:数据分组传输时间
  • RTTRTT:往返时间
  • TAT_A:确认分组传输时间

# 回退 N 帧协议

  • 回退 N 帧协议是一种滑动窗口协议,它允许发送方连续发送 N 个数据分组,而不必等待接收方的确认。

图 26

  • 发送方需要维护一个发送窗口 WT ,在未收到接收方确认分组的情况下,发送方可将序号落入 WT 内的所有数据分组连续发送出去,WT 的范围是 (0, 2N-1]。
  • 接收方需要维护一个接收窗口 WR ,只有正确到达接收方(无误码)且序号落入 WR 内的数据分组才被接收方接收,WR 的值为 1。
  • 接收方每正确收到一个序号落入接收窗口的数据分组,就将接收窗口向前滑动一个位置,这样就有一个新的序号落入接收窗口。与此同时,接收方还要给发送方发送针对该数据分组的确认分组。
  • 发送方每收到一个按序确认的确认分组,就将发送窗口向前滑动一个位置,这样就有一个新的序号落入发送窗口,序号落入发送窗口内的数据分组可继续被发送。
  • 在回退 N 帧协议的工作过程中,发送方的发送窗口和接收方的接收窗口按上述规则不断向前滑动。因此,这类协议又称为滑动窗口协议。
  • 回退 N 帧协议的接收方采用累积确认方式
    • 接收方不必对收到的每一个数据分组都发送一个确认分组,而是可以在收到几个序号连续的数据分组后,对按序到达的最后一个数据分组发送确认分组
    • 确认分组 ACKn 表明序号为 n 及之前的所有数据分组都已正确接收。

# 选择重传协议

用 n 个比特来编号数据分组,发送窗口 WT 和接收窗口 WR 的关系为

1<WRWTWT+WR2n}1WR2n\begin{rcases} 1 < W_R \leq W_T \\ W_T + W_R \leq 2^n \end{rcases} 1 \leq W_R \leq 2^n

发送方

  • 可在未收到接收方确认分组的情况下,将序号落入发送窗口内的多个数据分组全部发送出去。
  • 只有按序收到对已发送数据分组的确认分组时,发送窗口才能向前滑动到相应位置。
  • 如果收到未按序到达的确认分组,应对其进行记录,以防止其相应数据分组的超时重发,但发送窗口不能向前滑动。

接收方

  • 可接收未按序到达但没有误码并且序号落入接收窗口内的数据分组。
  • 为了使发送方仅重传出现差错的分组,接收方不再采用累积确认,而需要对每一个正确接收到的数据分组进行逐一确认。
  • 只有在按序接收数据分组后,接收窗口才能向前滑动到相应位置。

# TCP 的连接管理

TCP 的传输连接有三个阶段:

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

# TCP 的连接建立

“三报文握手” 建立 TCP 连接的目的在于解决以下三个主要问题:

  1. 使 TCP 双方能够确知对方的存在。
  2. 使 TCP 双方能够协商一些参数(例如最大报文段长度、最大窗口大小、时间戳选项等)。
  3. 使 TCP 双方能够对运输实体资源进行分配和初始化。运输实体资源包括缓存大小、各状态变量、连接表中的项目等。

图 27

  • 第一次握手:客户端发送一个带有 SYN=1、ACK=0、随机序号 X 的数据包到服务器,进入 SYN_SENT 状态。
  • 第二次握手:服务器收到数据包后,返回一个带有 SYN=1、ACK=1、确认号为 X+1、随机序号 Y 的数据包给客户端,进入 SYN_RCVD 状态。
  • 第三次握手:客户端收到数据包后,返回一个带有 SYN=0、ACK=1、确认号为 Y+1 的数据包给服务器,进入 ESTABLISHED 状态。
  • 三次握手完成,TCP 连接建立。

采用 “三报文握手” 而不是 “两报文握手” 来建立 TCP 连接,是为了防止已失效的 TCP 连接请求报文段突然又传送到了 TCP 服务器进程,因而导致错误。

# TCP 的连接释放

图 28

  • 处于时间等待(TIME-WAIT)状态后要经过 2MSL 时长,可以确保 TCP 服务器进程能够收到最后一个 TCP 确认报文段而进入关闭(CLOSED)状态。
  • 另外,TCP 客户进程在发送完最后一个 TCP 确认报文段后,再经过 2MSL 时长,就可以使本次连接持续时间内所产生的的所有报文段都从网络中消失。这样就可以使下一个新的 TCP 连接中不会出现旧连接中的报文段。

TCP 保活计时器的作用

图 29

# TCP 的流量控制

# TCP 的流量控制原理

  • TCP 的流量控制是通过滑动窗口机制来实现的。
  • TCP 的接收方在接收到数据分组后,会向发送方发送一个确认分组,其中包含了接收窗口的大小。
  • 发送方根据接收方发送的接收窗口大小来调整发送窗口的大小,以控制发送方发送数据的速率。

图 30

为了打破由于非零窗口通知报文段丢失而引起的双方互相等待的死锁局面,TCP 为每一个连接都设有一个持续计时器。

  • 只要 TCP 连接的一方收到对方的零窗口通知,就启动持续计时器。
  • 当持续计时器超时时,就发送一个零窗口探测报文段,仅携带 1 字节的数据。
  • 对方在确认这个零窗口探测报文段时,给出自己现在的接收窗口值。
  • 如果接收窗口值仍然是 0,那么收到这个报文段的一方就重新启动持续计时器。
  • 如果接收窗口值不是 0,那么死锁的局面就可以被打破了。

# TCP 的拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫作拥塞(congestion)。

# 流量控制与拥塞控制的区别

  • 流量控制是以接收方的接收能力控制发送方(源点)的发送速率,只与特定的点对点通信的发送方和接收方之间的流量有关
  • 拥塞控制是源点根据各方面因素,按拥塞控制算法自行控制发送速率,全局性问题,涉及网络中所有的主机、路由器

# TCP 的拥塞控制的基本方法

图 34

# 慢开始算法

由小到大逐渐增大拥塞窗口

  • 拥塞窗口 cwnd 的初始值为 1 个 MSS
  • 发送窗口 swnd = min(cwnd, rwnd)
  • cwnd 每次的增加量为 min(N, MSS) , N 为接收方返回确认报文段中确认的字节数
  • cwnd 达到一个阈值 ssthresh 时,进入拥塞避免阶段

图 31

# 拥塞避免算法

cwnd 每次增加 1 个 MSS

  • 重传计时器超时,判断网络可能出现了拥塞,进行调整:
    • 将 ssthresh 值调整为发生拥塞时 cwnd 值的一半
    • 将 cwnd 的值减小为 1,并重新开始执行慢开始算法。

图 32

# 快重传算法

“快重传” 是指使发送方尽快(尽早)进行重传,而不是等重传计时器超时再重传。这就要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。发送方一旦收到 3 个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的重传计时器超时再重传。

图 33

# 快恢复算法

与快重传算法配合使用的是快恢复算法,发送方一旦收到 3 个重复确认,就知道现在只是丢失了个别的报文段,于是不启动慢开始算法,而是执行快恢复算法。发送方将慢开始门限 ssthresh 的值和拥塞窗口 cwnd 的值都调整为当前 cwnd 值的一半,并开始执行拥塞避免算法。

图 35

# TCP 的可靠传输

# 以字节为单位的滑动窗口

  • 发送方在没有收到接收方确认的情况下,可以把序号落入发送窗口内的数据依次全部发送出去。
  • 凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。
  • 发送窗口并不总是和接收窗口一样大(因有一定的时间滞后)。
  • TCP 标准没有规定对不按序到达的数据应如何处理。通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。
  • TCP 要求接收方必须有累积确认的功能,这样可以减小传输开销。

# TCP 超时重传时间的选择

可以利用每次测量得到的 RTT 样本计算加权平均往返时间 RTTs,这样可以得到比较平滑的往返时间。

RTTS1=RTT1RTTS new=(1α)×RTTS old+α×RTT sample,0α1RTT_{S_1}=RTT_1\\ RTT_{S\text{ new}} = (1 - \alpha) \times RTT_{S\text{ old}} + \alpha \times RTT_{\text{ sample}}, 0 \leq \alpha \leq 1

  • α\alpha:加权因子,一般取值 0.125

[RFC 6298] 建议使用下式来计算超时重传时间 RTO:

RTO=RTTS+4×RTTDRTTD1=RTT1÷2RTTD new=(1β)×RTTD old+β×RTTSRTT sample,0β1RTO = RTT_{S} + 4 \times RTT_{D}\\ RTT_{D_1}=RTT_1 \div 2\\ RTT_{D\text{ new}} = (1 - \beta) \times RTT_{D\text{ old}} + \beta \times | RTT_S - RTT_{\text{ sample}} |, 0 \leq \beta \leq 1

  • β\beta:加权因子,一般取值 0.25

报文段发生重传,就不采用 RTT 样本计算 RTO,而是把 RTO 增大一些。典型的做法是将新 RTO 的值取为旧 RTO 的 2 倍。

# TCP 的选择确认

假设这些字节的序号都在接收窗口内,那么接收方就先收下这些数据,但要把这些信息准确地告诉发送方,使发送方不再重复发送这些数据。

图 36

# 应用层

# 客户 - 服务器和 P2P

  • 客户 / 服务器(Client/Server,C/S)方式
    • 客户和服务器是指通信中所涉及的两个应用进程。
    • 客户 / 服务器方式所描述的是进程之间服务和被服务的关系。
    • 客户是服务请求方,服务器是服务提供方。
    • 服务器总是处于运行状态,并等待客户的服务请求。
  • 对等(Peer-to-Peer,P2P)方式
    • 在 P2P 方式中,没有固定的服务请求者和服务提供者,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方。对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者。
    • P2P 方式的最突出特性之一就是它的可扩展性。因为系统每增加一个对等方,不仅增加的是服务的请求者,同时也增加了服务的提供者,系统性能不会因规模的增大而降低。
    • P2P 方式具有成本上的优势,因为它通常不需要庞大的服务器设置和服务器带宽。为了降低成本,服务提供商对于将 P2P 方式用于应用的兴趣越来越大。

# DHCP 协议

动态主机配置协议 DHCP 可为计算机自动配置网络参数,使得计算机 “即插即联网”(Plug-and-Play Networking)

图 37

# 域名系统 DNS

# DNS 的基本概念

  • 因特网采用层次树状结构的域名结构。
  • 域名的结构由若干个分量组成,各分量之间用 “点” 隔开,分别代表不同级别的域名。
    • 每一级的域名都由英文字母和数字组成,不超过 63 个字符,不区分大小写字母。
    • 级别最低的域名写在最左边,而级别最高的顶级域名写在最右边。
    • 完整的域名不超过 255 个字符。

# DNS 的工作原理

# 递归查询

图 38

通常,主机向本地域名服务器查询时使用。
若不知道,就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。

# 迭代查询

图 39

本地域名服务器向根域名服务器查询时使用。
要么给出所要查询的 IP 地址,要么告诉下一个要查询的域名服务器的 IP 地址。
本地域名服务器继续后续查询。

# DNS 的高速缓存

为了提高 DNS 的查询效率,并减轻根域名服务器的负荷和减少因特网上的 DNS 查询报文数量,在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。由于域名到 IP 地址的映射关系并不是永久不变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并删除超过合理时间的项(例如,每个项目只存放两天)。

不但在本地域名服务器中需要高速缓存,在用户主机中也很需要。许多用户主机在启动时从本地域名服务器下载域名和 IP 地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才向域名服务器查询。同理,主机也需要保持高速缓存中内容的正确性。

# FTP 协议

FTP 提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用 ASCII 码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。
FTP 屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。

# FTP 的工作原理

# 主动模式

图 40

有数据传送时,FTP 客户通过命令通道告知 FTP 服务器来与自己的另一个临时端口号建立 TCP 连接,以建立数据通道。

  • 控制连接在整个会话期间一直保持打开,用于传送 FTP 相关控制命令。
  • 数据连接用于文件传输,在每次文件传输时才建立,传输结束就关闭。
# 被动模式

图 41

有数据传送时,FTP 客户通过命令通道告知 FTP 服务器开启某个临时端口被动等待连接,以建立数据通道。

# TFTP 协议

  • 小且易于实现的文件传送协议。
  • TFTP 使用客户服务器方式和使用 UDP 数据报,因此 TFTP 需要有自己的差错改正措施。
  • TFTP 只支持文件传输而不支持交互。
  • TFTP 没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。

# 电子邮件

# 电子邮件系统的组成

  • 用户代理(User Agent,UA):用户使用的邮件客户端。
  • 邮件服务器(Mail Server):邮件服务器是邮件系统的核心部分,它负责接收、存储、转发和发送邮件。
  • 电子邮件所需的协议:SMTP、POP3、IMAP

图 42

# SMTP 协议

图 43

  • SMTP 是一个简单的文本协议,它使用 7 位 ASCII 码传输。
  • SMTP 使用 TCP 连接,端口号为 25。

# 电子邮件的信息格式

电子邮件的信息格式并不是由 SMTP 定义的。一个电子邮件有信封和内容两部分。而内容又由首部和主体两部分构成。

# 多用途互联网邮件扩展(MIME)

MIME 是一种多用途互联网邮件扩展,它允许邮件包含非 ASCII 码字符、多媒体内容、附件等。

图 44

# 邮件读取协议

  • POP3:邮局协议第 3 版(Post Office Protocol Version 3)端口号为 110
    • 用户只能以下载并删除方式或下载并保留方式从邮件服务器下载邮件到用户方计算机。
    • 不允许用户在邮件服务器上管理自己的邮件。(例如创建文件夹,对邮件进行分类管理等)。
  • IMAP:互联网邮件访问协议(Internet Mail Access Protocol)端口号为 143
    • 用户在自己的计算机上就可以操控邮件服务器中的邮箱,就像在本地操控一样,因此 IMAP 是一个联机协议

# 基于 Web 的电子邮件

通过浏览器登录(提供用户名和口令)邮件服务器万维网网站就可以撰写、收发、阅读和管理电子邮件。这种工作模式与 IMAP 很类似,不同的是用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器。

图 45

# 万维网

# 统一资源定位符 URL

URL 是万维网上的资源的地址,它是用来指定万维网上的资源的标准格式。
格式: <协议>://<主机>:<端口>/<路径>

# HTTP 协议

HTTP/1.0 采用非持续连接方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立 TCP 连接,当收到响应后就立即关闭连接。

  • 每请求一个文档就要有两倍的 RTT 的开销。若一个网页上有很多引用对象(例如图片等),那么请求每一个对象都需要花费 2RTT 的时间。
  • 为了减小时延,浏览器通常会建立多个并行的 TCP 连接同时请求多个对象

图 46

HTTP/1.1 采用持续连接方式。在该方式下,万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。这并不局限于传送同一个页面上引用的对象,而是只要这些文档都在同一个服务器上就行。为了进一步提高效率,HTTP/1.1 的持续连接还可以使用流水线方式工作,即浏览器在收到 HTTP 的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后,服务器就发回一个接一个的响应报文。这样就节省了很多个 RTT 时间,使 TCP 连接中的空闲时间减少,提高了下载文档的效率。

# HTTP 报文

面向文本的,是 ASCII 码格式的。

图 47

图 48

Cookie 提供了一种机制使得万维网服务器能够 “记住” 用户,而无需用户主动提供用户标识信息。也就是说,Cookie 是一种对无状态的 HTTP 进行状态化的技术。

图 49
图 50

# Web 缓存与代理服务器

Web 缓存把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按 URL 的地址再次去因特网访问该资源。
万维网缓存又称为 Web 缓存(Web Cache),可位于客户机,也可位于中间系统上,位于中间系统上的 Web 缓存又称为代理服务器(Proxy Server)。