连通性:计算机网络使上网用户之间都可以交换信息,使用户的计算机可以彼此连通。
共享:即资源共享,如,信息共享、软件共享,硬件共享。
网络(network):由若干结点 (node) 和连接这些结点的链路 (link) 组成。
网络的网络 (network of networks):网络和网络通过路由器互联起来,即互联网。
第一阶段:从单个网络 ARPANET 向互联网发展的过程。
第二阶段:建成三级结构的因特网。
第三阶段:逐渐形成多层次 ISP 结构的因特网。
与因特网相接的计算机及其他设备位于因特网的边缘,称为端系统。
端系统 = 主机,可以被划为下面两种:
客户服务器方式(C/S 方式): 即Client/Server方式
对等方式(P2P 方式): 即 Peer-to-Peer方式
网络核心:由端系统的分组交换机和链路构成的网状网络。为网络边缘部分提供服务
在网络核心部分起特殊作用的是路由器(router)。
如果举一个电话的例子
因此,
电路交换必定是面向连接的。
电路交换有三个阶段:建立连接、通信、释放连接
由于建立链接和释放链接的耗时很长,而计算机数据具有突发性,这样就导致通信线路的利用率很低。
交换机
交换的含义
分组交换采用存储转发技术
发送端
先把较长的报文(数据)划分成较短的、固定长度的数据段。
每一个数据段前面添加上首部构成分组
分组交换网以“分组”作为数据传输单元。
依次把各分组发送到接收端
接收端
存储转发
路由器实现,转发分组,进行分组交换
分组交换的优点
TCP
协议保证数据传输是可靠的分组交换的缺点
报文交换的存储转发单位为报文,需要交换机接收到整个报文后才能输出。
在 20 世纪 40 年代,电报通信也采用了基于存储转发原理的报文交换(message switching)
报文交换的时延较长,从几分钟到几小时不等
最简单的定义:计算机网络是一些互相连接的、自治的计算机的集合
因特网 (Internet) 是“网络的网络”
速率,指数据在数据信道上的传送速率,即数据率(data rate)或比特率(bit rate)
表示网络的通信线路实际能传送比特数据的能力
表示在单位时间内通过某个网络(或信道、接口)的数据量
总时延 = 发送时延 + 传播时延 + 处理时延 + 处理时延
发 送 时 延 = 数 据 块 长 度 ( b i t ) 信 道 带 宽 ( b i t / s ) 发送时延=\frac{数据块长度(bit)}{信道带宽(bit/s)} 发送时延=信道带宽(bit/s)数据块长度(bit)
注意:信号传输速率(即发送速率)和信号在信道上的传播速率是完全不同的概念。
传 播 时 延 = 信 道 长 度 ( m ) 信 号 在 信 道 上 的 传 播 速 率 ( m / s ) 传播时延=\frac{信道长度(m)}{信号在信道上的传播速率(m/s)} 传播时延=信号在信道上的传播速率(m/s)信道长度(m)
注意
对于高速网络链路,我们提高的仅仅是数据的发送速率而不是比特在链路上的传播速率。
提高链路带宽减小了数据的发送时延。
注意:由于时延,信道利用率并非越高越好
令 D 0 D_0 D0 表示网络空闲时的时延, D D D 表示网络当前的时延,在适当的假定条件下, D 0 D_0 D0 和 D D D 之间的关系可表示为
D = D 0 1 − U D=\frac{D_0}{1-U} D=1−UD0
U U U :网络的利用率,数值在 0 到 1 之间
从发送方发送数据开始,到发送方收到接收方的确认所经历的时间
傅里叶变换:区分不同频率的信号
体系结构的解决方案:“分层” 策略。将庞大而复杂的问题,转化为若干较小的局部问题 → \to → 这些较小的局部问题比较易于研究和处理。
TCP/IP 常被称为事实上的国际标准
计算机网络的各层 + 协议 = 计算机网络的体系结构
计算机网络中的数据交换必须遵守事先约定好的规则
规则:明确规定 “所交换的数据的格式” 以及 “有关的同步” 问题(同步含有时序的意思) → \to → 网络协议
网络协议(network protocol) :为进行网络中的数据交换而建立的规则、标准或约定
Q u e s t i o n Question Question 主机 1 通过网络向主机 2 发送文件
计算机网络的体系结构 (architecture):计算机网络的各层及其协议的集合
底层的网络通信
使用 1 , 2 1,2 1,2 层就可以构造一个 LAN
对于TCP/IP协议
对于上课来说,教授们杜撰了一个五层的体系结构
屏蔽硬件设备和传输媒体的差异,确定与传输媒体的接口有关的特性
数据(data):运送消息(message)的实体。
信号(signal):数据的电气或电磁表现
模拟信号:连续变化的信号,如话音信号和广播电视信号,采用连续变化的信号电压。
数字信号:离散变化的信号,如计算机通信所用的二进制代码 “1” 和 “0” 组成的高低电平信号、光脉冲。
码元(code)—— 时间域(时域)内的波形。不同基本波形,用于表示不同的数字信号
波特率和比特率
许多信道不能传送基带信号(数字信号)
任何实际的信道都不是理想的,在传输信号时会产生各种失真以及带来多种干扰。码元传输的速率越高,或信号传输的距离越远,在信道的输出端的波形的失真就越严重。
香农公式
带宽受限且有高斯白噪声干扰的信道的极限、无差错信息传输速率 C C C 为
C = W l o g 2 ( 1 + S / N ) b / s C = W log_2(1+S/N) \ \ \ b/s C=Wlog2(1+S/N) b/s
W W W :信道的带宽(以 H z Hz Hz 为单位)(非网络带宽)
S S S :信道内所传信号的平均功率
N N N :信道内部的高斯噪声功率
对于频带宽度 W W W 已确定的信道,如果信噪比不能再提高,并且码元传输速率也达到上限值。则,提高信息的传输速率方法是:用编码的方法让每一个码元携带更多比特的信息量(但是区分码元也就更加困难)。
并行传输,指数据是一次发送 n n n 个比特,为此,在发送端和接收端之间需要有 n n n 条传输线路(e.g. 内存条、SATA硬盘接口)
串行传输,指数据是一个比特一个比特依次发送的,因此在发送端和接收端之间只需要一条传输线路 (e.g. 鼠标)
传输媒体:为电磁波传输的媒介
可靠性:双绞线 > > > 同轴电缆
时分复用:将时间划分为一段段等长的时分复用帧(TDM 帧),每一个时分复用的用户在每一个 TDM 帧中占用固定序号的时隙(slot)。
每个用户所占用的时隙周期性出现(其周期就是 TDM 帧的长度)。
TDM 信号也称为等时(isochronous)信号。
即:时分复用的所有用户是在不同的时间占用同样的频带宽度。
波分复用:本质上是光的频分复用。
常用的名词:码分多址 CDMA (Code Division Multiple Access)。
各用户使用经过特殊挑选的不同码型,可以在同时使用同样的频带通信,彼此不会造成干扰。(相当于大家使用不同的暗语,同时喊话,收听者只会收听自己能听懂的暗语)
优点:发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。
**CDMA工作原理 **
e . g . e.g. e.g. S S S 站的 8 8 8 bit 码片序列是 00011011 00011011 00011011
CDMA 的特点
码片序列的正交关系
S × T = 1 m ∑ i = 1 m S i T i = 0 S \times T =\frac{1}{m} \sum_{i=1}^{m}S_iT_i=0 S×T=m1i=1∑mSiTi=0
注意:计算时,必须将: 0 0 0 写为 − 1 -1 −1, 1 1 1 写为 + 1 +1 +1
这样做,就可以区分一个基站是否发送了数据,如果基站发送了数据, r e s = 1 o r − 1 res=1\ or \ -1 res=1 or −1 ,分别对应发送 1 和 -1 两种二进制数据,如果计算结果为 0 ,则这个基站就没有发送数据。如果不这样做的话,没有发送数据和发送了 -1 所得到的结果都是 r e s = 0 res=0 res=0 这样无法区分发送的数据 0 和没有发送数据 1 .
参考资料
脉码调制 PCM (Pulse code Modulation)体制:最初是为了在电话局之间的中继线上传送多路的电话。
以 Δ t \Delta t Δt 时间对电信号采样,把它离散化
对每个采样点所对应的数值确定一种二进制的表示方式,实现从模拟信号到数字信号的转换
e.g. 这是一个例子
设采样频率 S = 8 k H z S = 8kHz S=8kHz ( k k k 在描述数据量大小的时候才是 1024 1024 1024,其它时候都是 1000 1000 1000,同理 M M M 在其他时候是 1 0 6 10^6 106),即采样周期 T = 125 u s T = 125us T=125us,每秒 8000 8000 8000 个脉冲信号
如果每个脉冲信号用 8 8 8 位二进制编码 → \to → PCM速率: 8 × 8000 = 64 k b p s 8\times 8000 = 64kbps 8×8000=64kbps
为提高线路利用率(因为PCM 每隔 T T T 采样一个信号传送,其它时间空闲),采用时分复用方法将一秒划分为三十二个时分复用帧(长度 T = 125 μ s T=125\mu s T=125μs,即每秒可以传送 8000 8000 8000 个时分复用帧)划分为 32 个 slots(即32个时隙)
每个 slot 传送 8 b i t s 8 bits 8bits,因此PCM一次群 E1 的数据率: 32 × 8 × 8000 = 2048 k b p s = 2.048 M b p s 32\times8\times 8000 = 2048 kbps = 2.048Mbps 32×8×8000=2048kbps=2.048Mbps
32个slot中,有2个slot用于帧同步和传送信令,因此一个E1时分复用帧共有30个话路.
解决无法连接到主干网用户的问题
利用高频部分进行传输
xDSL 技术:用数字技术对现有的模拟电话用户线进行改造,使它能够承载宽带业务。
标准模拟电话信号的频带被限制在 300~3400 Hz 的范围内,但用户线本身实际可通过的信号频率超过 1 MHz。
xDSL 技术把 0~4 kHz 低端频谱留给传统电话使用,把原来没有被利用的高端频谱留给用户上网使用。高频部分分成两份,上传数据和下载数据所用的频道分开
DSL:数字用户线(Digital Subscriber Line)的缩写。
DSL 的前缀 x :表示在数字用户线上实现的不同宽带方案。
xDSL 的几种类型
- ADSL (Asymmetric Digital Subscriber Line):非对称数字用户线。用数字技术改造电话用户线,实现宽带数字业务;
- HDSL (High speed DSL):高速数字用户线
- SDSL (Single-line DSL):1 对线的数字用户线
- VDSL (Very high speed DSL):甚高速数字用户线
- DSL :ISDN 用户线。
- RADSL (Rate-Adaptive DSL):速率自适应 DSL,是 ADSL 的一个子集,可自动调节线路速率)。
ADSL 的极限传输距离与数据率以及用户线的线径有很大的关系(用户线越细,信号传输时的衰减就越大),所能得到的最高数据传输速率与实际的用户线上的信噪比密切相关。
DMT 调制技术采用频分复用的方法,
HFC 网具有比 CATV 网更宽的频谱,且具有双向传输功能,理论速率比 ADSL 快几百倍
FTTx(光纤到……)也是一种实现宽带居民接入网的方案。这里字母 x 可代表不同意思。
各种政府机构、大型企业和大学校园的用户通常通过内部的以太网接入到因特网
无线广域接入:通过蜂窝移动通信系统接入到因特网。
无线局域接入:通过无线局域网接入到因特网。
数据链路层概述
数据链路层使用的信道主要有两种类型(连接方式)
说明
链路(link):一条无源的点到点的物理线路段,中间没有任何其他的交换结点
数据链路(data link) :除物理线路外,还必须有通信协议来控制数据的传输
在两个对等的数据链路层之间画出一个数字管道,在这条数字管道上传输的数据单位是帧
一开始,使用字符串进行帧定界
但是,传送的数据本身包含EOT,就会使得接收端收到的帧不完整
解决透明传输问题
数据中出现控制字符“SOH”或“EOT”:
在传输过程中可能会产生比特差错:1 可能变成 0,而 0 也可能变成 1
运算方法
下面是一个例子
接收端对收到的每一帧进行 CRC 检验
若得出的余数 R = 0 R = 0 R=0,则判定这个帧没有差错,就接受
若余数 R ≠ 0 R \ne 0 R=0,则判定这个帧有差错,就丢弃
对于发送的每一个信号,接收方发送一个确认信息,如果发送和接受都顺畅(在倒计时内),认为传输成功
通过超时重传实现可靠传输
协议特点
自动重传请求ARQ :使用确认和重传机制,可以在不可靠的传输网络上实现可靠的通信,接收方不需要请求发送方重传某个出错的分组
信道利用率
U = T D T D + R T T + T A U=\frac{T_D}{T_D+RTT+T_A} U=TD+RTT+TATD
RTT
(Round-Trip Time): 往返时延
优点
缺点
解决方法
GBN
协议)来进行浏览控制 (选择的方案)滑动窗口协议的特点
发送窗口的大小由接收方决定,接收方有接收缓存和接收窗口,接收窗口一般大于发送窗口,但为了方便起见,接收窗口一般取等于发送窗口的大小
通信双方在正式传输之前进行协商
注意:如果用 k k k 位表示帧序号,在 GBN 协议中,发送窗口和接收窗口的最大大小应为 2 k − 1 2^{k-1} 2k−1 (原因:滑动窗口协议:发送窗口大小与序号空间大小关系)
对于滑动窗口 (go-back-N)
协议,一个分组的差错可能引起大量分组的重传,这些分组可能已经被接收方正确接收了,但由于未按序到达而被丢弃
设法只重传出现差错的分组。但必须加大接收窗口,以便先收下失序到达但仍然处在接收窗口中的哪些分组,等到所缺分组收齐后再一并送交上层。这就是选择重传 SR(Selective Repeat)
协议
但由于这样操作的效率太低,故被废弃
实现可靠传输需要付出代价(如会降低传输效率),应当根据链路的具体情况来决定是否需要让链路层向上提供可靠传输服务
现在全世界使用得最多的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)
PPPoE
,即 PPP over Ethernet,将PPP帧再封装成以太帧,可在以太网上运行。PPPoE
PPP 协议的三个组成部分
LCP
(Link Control Protocol)
NCP
(Network Control Protocol)
IP
, DECnet
等)PPP 有一个 2 个字节的协议字段
0x0021
时,PPP 帧的信息字段就是 IP 数据报0xC021
, 则信息字段是 PPP 链路控制数据0x8021
,则表示这是网络控制数据F :flag,A:Address,C:Control
High-level Data Link Control
的做法一样)
在发送端,只要发现有 5 个连续 1,则立即填入一个 0
接收端对帧中的比特流进行扫描。每当发现 5 个连续 1 时,就把这 5 个连续 1 后的一个 0 删除
理由是:原因:
flag
= = =0x7E
= = =0111 1110
- 将信息字段中出现的每一个
0x7E
字节转变成为 2 字节序列:(0x7D, 0x5E)
- 若信息字段中出现一个
0x7D
的字节, 则将其转变成为 2 字节序列:(0x7D, 0x5D)
- 若信息字段中出现 ASCII 码的控制字符(即数值小于
0x20
的字符),则在该字符前面要加入一个0x7D
字节,同时将该字符的编码加以改变。
- 如:
0x03
→ \to →(0x7D, 0x23)
原因
PPP
协议较为合理FCS
字段可保证无差错接收LCP : Link Control Protocol
NCP: Network Control Protocol
在多用户的网络中,现有的 PPP 协议有以下问题
主要内容:媒体接入控制和局域网
两种媒体接入控制技术:(协调如何共享信道)
静态划分信道:代价高,不适合于局域网使用
动态接入控制(多点接入):信道(以独占式)根据需要动态分配给用户
网络为一个单位所拥有,且地理范围和站点数目均有限
匹配电阻:吸收在总线上传播的电阻,避免在总线上产生有害的电磁波反射
总线网需要 T
头连接
星形网、环形网、树形网本质上都是总线网
交换机不仅把电脑连接起来,还可以处理数据
MAC
)的通信,类似于 IP 协议,将数据封装成 LLC
格式(IEEE 802.3)进行传输
MAC
层网络接口板:又称为通信适配器(adapter)或网络接口卡 NIC (Network Interface Card),或“网卡”
在局域网中,硬件地址又称为物理地址,或 MAC 地址。 802 标准所说的 “地址” ,严格地讲应当是每一个站的 “名字” 或标识符
分配MAC地址
IEEE 的注册管理机构 RA 负责向厂家分配地址字段的前三个字节(即高位 24 位),即组织唯一标示符号OUI
地址字段中的后三个字节(即低位 24 位)由厂家自行指派,称为扩展标识符EUI
,必须保证生产出的适配器没有重复地址
MAC 地址的I/G、G/L位
I/G=0
:单个站地址I/G=1
: 组地址,用于多播(全部为1,即 FFF.FFFF.FFFF
)OUI
,规定MAC地址的第1字节的最低第2位为G/L
位(Global/Local):
G/L=1
:MAC全球管理,全球唯一G/L=0
:MAC本地管理,不能在互联网上使用适配器检查 MAC 地址
I/G=0
1
以太网适配器的“混杂方式”(promiscuous mode):该工作方式下,适配器只要“听到”有帧在以太网上传输,就全部接收
在发生碰撞的那一刹那,碰撞双方并不知道发生了碰撞,只有碰撞信号到达双方时,才知道发生了碰撞
发生碰撞
产生信道碰撞的原因
争用期
最先发送数据帧的站,在发送数据帧后至多经过时间 2 τ 2\tau 2τ (两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞。
以太网的端到端往返时延 2 τ 2\tau 2τ 称为争用期,或碰撞窗口
经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
计算随机时间:截断二进制指数退避算法
发生碰撞的站在停止发送数据后,推迟(退避)一个随机时间才能再发送数据
确定基本退避时间,一般是取为争用期 2 τ 2\tau 2τ
定义重传次数 k k k , k ≤ 10 k \le 10 k≤10,即
k = M i n [ 重 传 次 数 , 10 ] k = Min[重传次数, 10] k=Min[重传次数,10]
从整数集合 [ 0 , 1 , … , ( 2 k − 1 ) ] [0,1,…, (2^{k}-1)] [0,1,…,(2k−1)]中随机地取出一个数,记为 r r r。重传所需的时延就是 r r r 倍的基本退避时间。
重传的总时延 T T T
T = r × 2 τ T=r\times 2\tau T=r×2τ
争用期的长度
以太网取 2 τ = 51.2 μ s 2\tau = 51.2 \mu s 2τ=51.2μs 为争用期的长度
e.g. 对于 10 Mb/s 以太网,在争用期内可发送 512 bit,即 64 字节:
以太网在发送数据时,若前 64 字节没有发生冲突,则后续的数据就不会发生冲突(根据争用期得出)。如果发生冲突,就一定是在发送的前 64 字节之内,由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于 64 字节
因此,以太网规定,一个合法帧的长度大于等于 64
字节
凡是小于 64 字节的帧都是因为碰撞终止的无效帧,收到无效帧应该立即丢弃
α = τ n τ + T 0 + τ \alpha=\frac{\tau}{n\tau+T_0+\tau} α=nτ+T0+ττ
对以太网参数的要求
τ \tau τ 的大小与连线的长度有关:
当数据率一定时,以太网的连线的长度受到限制,否则 τ \tau τ 的数值会太大。
以太网的帧长不能太短,否则 T 0 T_0 T0 的值会太小,使 α \alpha α 值太大。
无效的 MAC 帧
使用物理层扩展局域网, 会造成平均可利用信道资源的下降, 发生碰撞的概率上升
e.g. 某大学有三个系,各自有一个局域网
优点
使原来属于不同碰撞域 (冲突域) 的局域网上的计算机能够进行跨碰撞域的通信。
扩大了局域网覆盖的地理范围
缺点
使用网桥,网桥工作在数据链路层:根据 MAC 帧的目的地址对收到的帧进行转发
优点
缺点
MAC
子层并没有流量控制功能,导致速度快的设备超量发送数据但是接收方接收速度慢导致缓冲区满,致使帧丢失网桥和集线器(或转发器)不同
透明网桥
指局域网上的站点并不知道所发送的帧将经过哪几个网桥,网桥对各站来说是看不见的
透明网桥是一种即插即用设备,只要把网桥接入局域网,不需要改动硬件和软件,无需设置地址开关,无需装入路由表或参数,网桥就能工作
透明网桥的局限性:如果两个终端之间存在环,转发的数据就有可能在不停地兜圈子,导致了网络资源被白白的消耗了
源路由网桥
源路由(source route
)网桥:在发送帧时将详细的路由信息放在帧的首部中
源站以广播方式向欲通信的目的站发送一个发现帧,每个发现帧交换机能同时连通许多对接口,使每一对相互通信的主机能像独占通信媒体那样,进行无碰撞地传输数据都记录所经过的路由
发现帧到达目的站时就沿各自的路由返回源站。源站在得知这些路由后,从所有可能的路由中选择出一个最佳路由
凡从该源站向该目的站发送的帧的首部,都必须携带源站所确定的这一路由信息
以太网交换机的每个接口都直接与主机相连,并且一般都工作在全双工方式(每一个站点和另一个站点通信的时候都是独占信道的,传输的数据都是无碰撞数据)
交换机能同时连通许多对接口,使每一对相互通信的主机能像独占通信媒体那样,进行无碰撞地传输数据
以太网交换机使用专用的交换结构芯片,交换速率较高
以太网交换机独占传输媒体的带宽:对于拥有 N N N 对接口的 10 M b / s 10 \ Mb/s 10 Mb/s交换机的总容量为 N × 10 M b / s N\times10 \ Mb/s N×10 Mb/s
以太网接口的两种通讯模式
虚拟局域网 VLAN
:由一些局域网网段构成的与物理位置无关的、具有某些共同需求的逻辑组
VLAN
的帧都有一个明确的标识符,指明发送这个帧的工作站是属于哪一个 VLAN
e . g . e.g. e.g.
对于上图
- 当 B 1 B_1 B1 向
VLAN2
工作组内成员发送数据时,工作站 B 2 B_2 B2 和 B 3 B_3 B3 将会收到广播的信息- B 1 B_1 B1 发送数据时,工作站 A 1 A_1 A1, A 2 A_2 A2 和 C 1 C_1 C1都不会收到 B 1 B_1 B1 发出的广播信息
- 虚拟局域网限制了接收广播信息的工作站数,使得网络不会因传播过多的广播信息(即“广播风暴”)而引起性能恶化
基本入网方式:与接入点 AP 建立关联(association)
移动自组网络
又称自组网络(ad hoc network) : 是没有固定基础设施(即没有 AP)的无线局域网。这种网络由一些处于平等状态的移动站之间相互通信组成的临时网络
通过在网络中的设备进行存储和转发, 所有的设备都是转发节点
移动IP | 移动自组网络 | |
---|---|---|
目的 | 移动终端接入Internet | 移动终端之间的互联 |
协议 | 采用固定互联网路由协议 | 拥有自己的路由协议 |
残桩网络Stub network | 是,即允许通信量进入网络, 允许网络发出通信量, 但不允许外部通信量穿越网络 | |
身份 | IP地址(是一种身份,一种IP地址) | 是网络 |
难点 | IP地址不能直接用于路由 |
残桩网络:通信量可以进入该网络,也可以从该网络发出,但不允许外部的通信量穿越的网络
使用CSMA/CA 协议
隐蔽站问题
当 A 和 C 检测不到无线信号时,都以为 B 是空闲的,
因而都向 B 发送数据,结果发生碰撞。
确认与帧间间隔
所有的站在完成发送后,必须再等待一段很短的时间(继续监听)才能发送下一帧。这段时间的通称是帧间间隔 IFS (Inter Frame Space)
p.s. 通过帧间间隔区分发送的优先级
争论:在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)
借助电信网的成功经验让网络负责可靠交付
因特网采用的设计思路
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点时不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
网桥存在的问题
解决这个问题: IP 地址
要实现这种方法
IP 地址:给每个连接在因特网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符
为了方便识别和记忆,常使用点分十进制表示 IP 地址
e.g. 在网络上:域名 → \to → (域名解析) → \to → IP 地址
每一类地址都由两个固定长度的字段组成,
两级的 IP 地址可以记为
I P 地 址 : : = { < 网 络 号 > , < 主 机 号 > } IP 地址 ::= \{ <网络号>,<主机号>\} IP地址::={<网络号>,<主机号>}
通过最高位的数字判断网络号
特殊的IP地址
全0 IP地址代表本机
全1 IP地址代表广播
私有的IP地址
IP地址的分配
查询和转发
网络号 | 下一跳 |
---|---|
192.168.2 | I 1 I_1 I1 (接口) |
192.168.3 | I 2 I_2 I2 |
… | … |
从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位
如果同一网络号具有两个不同的接口,使用子网号划分子网
将 I P B IP_B IPB 和子网掩码做与运算,得到下一跳,这样只使用一个网络号,得到了两个子网
网络号+子网号(来源于主机号) | 下一跳 | 子网掩码 |
---|---|---|
192.168.2.128 | I 1 I_1 I1 | 255.255.255.128 |
192.168.2.0 | I 2 I_2 I2 | 255.255.255.128 |
计算子网掩码:目的是计算出网络号和子网号,在点分十进制的最后一个字段 n 1 − k n_{1-k} n1−k 都为 1 1 1
利用网络前缀,选择位数最深的那个(CIDR 无分类的IP地址),构成超网
CS 0*
O 10*
SE 110*
NE 111*
网络前缀 | 下一跳 | 掩码 |
---|---|---|
CS | I 1 I_1 I1 | 125 |
O | I 2 I_2 I2 | 126 |
SE | I 3 I_3 I3 | 127 |
NE | I 4 I_4 I4 | 127 |
IP地址::= {<网络前缀>, <主机号>}
IP 地址/网络前缀
所占比特数。其中,网络前缀所占比特数对应于网络号的部分, 等效于子网掩码中连续 1 的部分
128:14:32:5/20
这个地址, 它的掩码是 20 个连续的 1 和后续 12 个连续的 0, 通过逐位相 “与” 的方法可以得到该地址的网络前缀( 或直接截取前 20 位)不管网络层使用什么协议,在实际网络的链路上传送数据帧时,必须使用硬件地址
每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表
执行流程
逆地址解析协议 RARP 使只知道自己硬件地址的主机能够知道其 IP 地址
使用范围:
一 个 I P 数 据 报 = 首 部 + 数 据 一个 IP 数据报 = 首部 + 数据 一个IP数据报=首部+数据
首部的前一部分是固定长度,共 20 20 20 字节,是所有 IP 数据报必须具有的
在首部的固定部分的后面是一些可选字段 ( 1 ∼ 40 1\sim 40 1∼40 Byte),其长度是可变的
版本:IPV4 为 4 4 4
首部长度 n n n 的实际值为 4 n 4n 4n
区分服务:已经废弃
总长度:IP 分组的总长度
标识: 16 16 16 位二进制数
标志: 3 3 3 位(有一位空着不用)
片偏移(13 位):当数据报长度超过MTU,必须分片;较长的分组在分片后,某片在原分组中的相对位置
生存时间:IP 分组到达的最长时间(以跳为单位)
协议:指明以那一个协议传输
首部检验和(16 位) :只检验数据报的首部,不检验数据部分
从低位到高位,0+0=0,0+1=1,
1+1=10 即产生一个进位1,加到下一列。若最高位相加产生进位,最后结果要加1(加到最低位)
转发分组依赖路由表
若按目的主机号来制作路由表,则路由表会过于庞大
若按主机所在的**网络地址(网络号)**来制作路由表,那么可使路由表大大简化
因特网允许为特定目的主机指明一个路由 —— 特定主机路由。
采用特定主机路由,可使网络管理人员能更方便地控制网络和测试网络
也可在需要考虑某种安全问题时采用这种特定主机路由
只要目的网络不是 N1 和 N2,就一律选择默认路由,把数据报先间接交付路由器 R1,让 R1 再转发给下一个路由器
IP 数据报的首部中没有地方可以用来指明下一跳路由器的 IP 地址
当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件
网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部
然后根据这个硬件地址找到下一跳路由器
从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。
若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。
若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
报告转发分组出错。
(1) 分类网络路由器收到分组后,从收到的分组的首部提取目的 IP 地址 D。
(2) 先对与路由器直接相连的网络逐个用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。
若匹配,则将分组直接交付。
否则,间接交付,执行(3)。
(3) 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行(4)。
(4) 对路由表中的每一行的子网掩码和 D 逐位相“与”,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行(5)。
(5) 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行(6)。
(6) 报告转发分组出错。
使用单个网络前缀代表多个网络路由
使用 0/1 字典树进行前缀匹配
为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol):
ICMP 差错报告报文 前提是,IP 分组本身没有出错(首部检验和没问题) e.g. 传送的时候找不到这台电脑
ICMP 询问报文
ping 命令
C:\Users\huawei>ping www.baidu.com
正在 Ping www.a.shifen.com [14.215.177.39] 具有 32 字节的数据:
来自 14.215.177.39 的回复: 字节=32 时间=94ms TTL=50
来自 14.215.177.39 的回复: 字节=32 时间=14ms TTL=50
来自 14.215.177.39 的回复: 字节=32 时间=44ms TTL=50
来自 14.215.177.39 的回复: 字节=32 时间=48ms TTL=50
14.215.177.39 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 14ms,最长 = 94ms,平均 = 50ms
traceroute(linux)/tracert(win)
C:\Users\huawei>tracert www.baidu.com
通过最多 30 个跃点跟踪
到 www.a.shifen.com [14.215.177.39] 的路由:
1 3 ms 3 ms 6 ms 10.173.43.254
2 7 ms 3 ms 3 ms 10.10.202.21
3 6 ms 41 ms 3 ms 192.168.237.9
4 5 ms 3 ms 4 ms 10.10.202.65
5 * * 42 ms 10.168.100.101
6 19 ms 7 ms 6 ms 10.168.100.26
7 7 ms 7 ms 7 ms 61.144.27.21
8 45 ms 7 ms 7 ms 121.8.109.117
9 11 ms 5 ms 10 ms 117.176.37.59.broad.dg.gd.dynamic.163data.com.cn [59.37.176.117]
10 15 ms 10 ms 9 ms 249.32.63.58.broad.gz.gd.dynamic.163data.com.cn [58.63.32.249]
11 * 22 ms * 113.96.5.94
12 22 ms 12 ms 28 ms 94.96.135.219.broad.fs.gd.dynamic.163data.com.cn [219.135.96.94]
13 18 ms 12 ms 12 ms 14.29.121.190
14 * * * 请求超时。
15 * * * 请求超时。
16 20 ms 19 ms 71 ms 14.215.177.39
跟踪完成。
因特网太大了,无法维护所有的转发表
路由表的生成和维护 → \to → 路由选择协议
好的路由选择协议 → \to → 动态的
因特网过大 → \to → 无法构造出最优的路由选择协议 → \to → 将因特网划分为有限集合(一个个自治系统) → \to → 维护小范围内的最优解 → \to → 内部路由选择协议 (RIP 和 OSPF 协议)
最佳路由:只能是相对于某一种特定要求下得出的较为合理的选择而已。实际的路由选择算法,应尽可能接近于理想的算法
静态路由选择策略:即非自适应路由选择,其特点:简单和开销较小,但不能及时适应网络状态的变化
动态路由选择策略:即自适应路由选择,其特点:能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大
自治系统 AS (Autonomous System) :在单一的技术管理下的一组路由器
链路状态路由选择算法:最短路径优先 Dijkstra(OSPF)
距离向量路由选择算法:洪泛法 Bellman-Ford(RIP)
因特网的早期 RFC 文档中未使用路由器而是使用网关这一名词。但在新的 RFC 文档中又使用路由器这一名词。应当把这两个属于当作同义词
路由器在开始工作时,只知道到直接连接的网络的距离(此距离定义为1)。
每一个路由器只和数目非常有限的相邻路由器交换并更新路由信息。(基于距离向量算法)
经过若干次更新后,所有的路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址
收到相邻路由器(其地址为 X)的一个 RIP 报文:
先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,将所有的“距离”字段的值加 1。(每条项目:到目的网络、距离 、下一跳路由器)
对修改后的 RIP 报文中的每一个项目,重复以下步骤:
若项目中的目的网络不在路由表中,则把该项目加到路由表中。
否则
若下一跳字段给出的路由器地址是同样的,则把收到的项目替换原路由表中的项目。(一切以新的为准)
否则
若收到项目中的距离小于路由表中的距离,则进行更新,
否则,什么也不做。
若3分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为16(距离为16表示不可达)。
返回
RIP 协议最大的优点:实现简单,开销较小
RIP 存在的一个问题:当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器(好消息传的快,坏消息传的慢)
这样不断更新下去,直到 R1 和 R2 到网 1 的距离都增大到 16 时,R1 和 R2 才知道网 1 是不可达的,这里所需要的时间是很多的
OSPF 是一种链路状态协议,使用洪泛(广播)链路状态信息和 Dijkstra 最低开销算法 (LS: Link state algorithm 路由选择算法)
LS算法 = 广播路由 + Dijkstra算法
对公众开放
在自治系统内部维护链路状态数据库,和其它区域通信使用主干区域的路由器
BGP 是不同自治系统的路由器之间交换路由信息的协议
BGP配置
BGP 发言人(BGP speaker)
BGP 交换路由信息
三层交换机:路由器加上两个普通的交换机
VPN → \to → 外网(实际IP)访问内网资源(均是本地IP)
NAT → \to → 内网(本地IP)访问因特网资源(实际IP)
三个本地地址
10...
172...
192...
00-00-5E
00-00-5E-00-00-00
∼ \sim ∼ 00-00-5E-FF-FF-FF
整个 IP 地址不变
运输层的通信服务
运输层的主要功能
TCP和UDP协议
端口号:16 位二进制数
端口号是本地的
三类端口号
UDP 是无连接的,即发送数据之前不需要建立连接,减少了开销和发送数据之前的时延
UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制
使用反码求和法验证正确性
一个例子
下列数据反码求和
1100 1111 0001 1010
1111 1010 0001 1000
1000 0000 0000 0001
反码为:
0011 0000 1110 0101
0000 0101 1110 0111
0111 1111 1111 1110
--------------------
得:
0011 0110 1100 1100
0111 1111 1111 1110
=
1011 0110 1100 1010
UDP 支持一对一、一对多、多对一和多对多的交互通信。
UDP是面向报文的
UDP 的首部开销小,只有 8 个字节
UDP 可能产生的问题
TCP连接 :: = {socket_1, socket_2} = {(IP_1 : port_1), (IP_2 : port_2)}
序号(seq
):当前数据部分第一个字节的编号
确认号(ack
):当前还没收到的第一个字节的编号
数据偏移:4 bit
保留字段:6 bit,保留为今后使用,但目前应置为 0
标志位
URG
:当 URG = 1
时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)ACK
:只有当 ACK = 1
时确认号字段才有效。当 ACK = 0
时,确认号无效PSH
(PuSH) : 接收 TCP 收到 PSH = 1
的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付(提高交付速度)RST
(ReSeT) : 当 RST = 1
时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接SYN
: 同步 SYN = 1
表示这是一个连接请求或连接接受报文(建立连接时使用,用两次)FIN
(FINis) : 用来释放一个连接。FIN = 1
表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。 (用于释放连接,用两次)窗口字段
检验和:2 byte 检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。(同UDP)
(有歧义)紧急指针字段 :16 bit,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。 仅在URG=1时有效 . 即使窗口为0,也可发送紧急数据.
选项字段 —— 长度可变,选项部分最长可达 40字节 (由数据偏移求得)
填充:保证报文段是 4 4 4 的倍数
注
R T O = R T T S + 4 × R T T D RTO = RTT_S + 4 \times RTT_D RTO=RTTS+4×RTTD
Karn
算法在计算平均往返时间 RTT 时,只要报文段重传了,就不采用其往返时间样本(因为其 RTT 不可信)
Karn
算法运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行
连接建立过程中要解决以下三个问题
SYN = 1
,并选择序号 seq = x
,表明传送数据时的第一个数据字节的序号是 x
B 的 TCP 收到连接请求报文段后,如同意,则发回确认
B 在确认报文段中应使 SYN = 1
,使 ACK = 1
,其确认号ACK = x + 1
,自己选择的序号 seq = y
A 收到此报文段后向 B 给出确认,其 ACK = 1
,确认号 ACK = y + 1
A 的 TCP 通知上层应用进程,连接已经建立
B 的 TCP 收到主机 A 的确认后,也通知其上层,TCP 连接已经建立
三次握手的目的
e . g . e.g. e.g. 客户端连续发送多次 SYN
建立连接的报文,在网络拥堵情况下
SYN
报文」比「最新的 SYN
」 报文早到达了服务端SYN + ACK
报文给客户端RST
报文给服务端,表示中止这一次连接。如果是两次握手连接,就不能判断当前连接是否是历史连接,三次握手则可以在客户端(发送方)准备发送第三次报文时,客户端因有足够的上下文来判断当前连接是否是历史连接
RST
报文,以此中止历史连接ACK
报文,通信双方就会成功建立连接序列号在 TCP
连接中占据着非常重要的作用,所以当客户端发送携带「初始序列号」的 SYN
报文的时候,需要服务端回一个 ACK
应答报文,表示客户端的 SYN
报文已被服务端成功接收,那当服务端发送「初始序列号」给客户端的时候,依然也要得到客户端的应答回应,这样一来一回,才能确保双方的初始序列号能被可靠的同步
如果只有「两次握手」,当客户端的 SYN
请求连接在网络中阻塞,客户端没有接收到 ACK
报文,就会新发送 SYN
,由于没有第三次握手,服务器不清楚客户端是否收到了自己发送的建立连接的 ACK
确认信号,所以每收到一个 SYN
就只能先主动建立一个连接
如果客户端的 SYN
阻塞了,重复发送多次 SYN
报文,那么服务器在收到请求后就会建立多个冗余的无效链接,造成不必要的资源浪费
FIN
标志位被置为 1 的报文,也即 FIN
报文,之后客户端进入 FIN_WAIT_1
状态ACK
应答报文,接着服务端进入 CLOSED_WAIT
状态ACK
应答报文后,之后进入 FIN_WAIT_2
状态。 等待服务端处理完数据后,也向客户端发送 FIN
报文,之后服务端进入 LAST_ACK
状态FIN
报文后,回一个 ACK
应答报文,之后进入 TIME_WAIT
状态ACK
应答报文后,就进入了 CLOSED
状态,至此服务端已经完成连接的关闭2MSL
一段时间后,自动进入 CLOSED
状态,至此客户端也完成连接的关闭注意:主动关闭连接的,才有 TIME_WAIT
状态
为什么需要四次握手
FIN
时,仅仅表示客户端不再发送数据了但是还能接收数据FIN
报文时,先回一个 ACK
应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN
报文给客户端来表示同意现在关闭连接从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK
和 FIN
一般都会分开发送,从而比三次握手导致多了一次
为什么必须等待 2MSL 的时间
ACK
报文段能够到达服务端ACK
报文段后,再经过时间 2MSL
,可以使本连接持续的时间内所产生的所有报文段,都从网络中消失(超过生存时间 TTL
)这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,也就产生了拥塞。
拥塞控制
流量控制
开环控制方法:在设计网络时,事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞(设计难度非常大)
闭环控制方法:是基于反馈环路的概念。有以下几种措施
发送方维持一个称为拥塞窗口 cwnd (congestion window) 的状态变量
发送方控制拥塞窗口的原则是
慢开始算法的原理
在主机刚刚开始发送报文段时,设置拥塞窗口 cwnd = 1,即设置为一个最大报文段 MSS 的数值。
在每收到一个对新的报文段的确认后,将拥塞窗口加 1,即增加一个 MSS 的数值。(拥塞窗口增加1倍)
用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。
设定上界: 30
增加:1, 2, 4, 8, 16, 32, 33, 34...
设置 慢开始门限状态变量 ssthresh
ssthresh
的用法如下:(防止cwnd
增长过大)
cwnd
< ssthresh
时,使用慢开始算法。cwnd
= ssthresh
时,既可使用慢开始算法,也可使用拥塞避免算法。cwnd
> ssthresh
时,停止使用慢开始算法而改用拥塞避免算法。cwnd
缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd
加 1,而不是加倍,使拥塞窗口 cwnd
按线性规律(一个个往上加)缓慢增长只要出现超时重传现象,就可以认为网络上出现了拥塞,需要进行处理
ssthresh
设置为出现拥塞时的发送方窗口值(当时的 cwnd
值)的一半(但不能小于2)。cwnd
重新设置为 1,执行慢开始算法快重传算法
接收方每收到一个失序的报文段,立即发出重复确认。让发送方及早知道有报文段没有到达接收方。
发送方只要一连收到三个重复确认,应当立即重传对方尚未收到的报文段
快恢复算法
当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限 ssthresh 减半。但接下去不执行慢开始算法。
由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口 cwnd 现在不设置为 1,而是设置为慢开始门限 ssthresh 减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。