网络层与参数估计
@@ -2,6 +2,9 @@
|
||||
|
||||
> 用来记录各个科目的markdown笔记,并逐渐从有道云笔记将内容移植过来。
|
||||
|
||||
> 关于笔记记录的说明:我觉得笔记记录的内容过于细节。所有的知识应该以书上为准。整理笔记的目的应该是作为一种快速参考或者索引,而不是详细的记录所有的细节。说实话,我觉得你的笔记废话太多,自己都不一定会看。
|
||||
> 我觉得是时间放弃你愚蠢的笔记策略了。
|
||||
|
||||
|
||||
## 1 分类标题(用来描述主题的各个方面或者分类)
|
||||
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
# 参数的点估计
|
||||
|
||||
## 1 参数及其估计
|
||||
|
||||
假设存在$p(x,\theta)$总体分布簇。将与总体有关的待估计的量看成参数,包括$\theta$和与$\theta$的函数$q(\theta)$。例如总体的数学期望$E(X)$与方差$Var(X)$。
|
||||
> 可以将总体的期望和方差看做总体的本身的一种属性。
|
||||
|
||||
### 定义
|
||||
用于估计参数$\theta or q(\theta)$
|
||||
样本的统计量$T(X_1,X_2,\dotsm,X_n)$
|
||||
称为估计量或估计值。构造统计量$T(x_1,x_2,\dotsm,x_n)$作为参数$q(\theta)$的估计。
|
||||
$$
|
||||
\hat{q}(x_1,x_2,\dotsm,x_n)=T(x_1,x_2,\dotsm,x_n)
|
||||
$$
|
||||
|
||||
|
||||
## 2 频率替换原理
|
||||
|
||||
n次重复独立实验,每次实验中有m个可能的结果$v_1,v_2,\dotsm,v_i$。每个结果的概率为$p_i$。用$n_i$表示n次独立重复实验中$D_i$发生的次数,则分布律为:
|
||||
$$
|
||||
p(n_1,n_2,\dotsm,n_m)=\frac{n!}{n_1!n_2!\dotsm n_m!}p_1^{n_1}p_2^{n_2}\dotsm p_m^{n_m}
|
||||
$$
|
||||
概率=频率。前者是形式计算、估计量;后者是统计计算、统计量。
|
||||
$\hat{p}=\frac{n_i}{n}$是$p_i$的频率估计
|
||||
|
||||
形式计算:可以计算均值方差,包含未知数。统计量:基于样本能够计算均值、方差。二者可以建立方程。
|
||||
|
||||
可以基于联合概率进行计算
|
||||
$P(x_1,x_2,\dotsm,x_n,\theta)=f(\theta)$
|
||||
|
||||
## 替换原理
|
||||
|
||||
n次重复独立实验,每次实验中有k个可能的结果$v_1,v_2,\dotsm,v_i$。每个结果的概率为$p_i$
|
||||
|
||||
### 频率估计
|
||||
|
||||
## 3 矩估计
|
||||
|
||||
### 通过概率分布函数或者联合概率。
|
||||
联立方程组解未知数。
|
||||
## 4 极大似然估计
|
||||
116
概率论与数理统计/第5节 参数点估计.md
Normal file
@@ -0,0 +1,116 @@
|
||||
# 参数的点估计
|
||||
|
||||
## 1 参数及其估计
|
||||
|
||||
假设存在$p(x,\theta)$总体分布簇。将与总体有关的待估计的量看成参数,包括$\theta$和与$\theta$的函数$q(\theta)$。例如总体的数学期望$E(X)$与方差$Var(X)$。
|
||||
|
||||
> 可以将总体的期望和方差看做总体的本身的一种属性。
|
||||
|
||||
### 定义
|
||||
用于估计参数$\theta$ 或 $q(\theta)$
|
||||
样本的统计量$T(X_1,X_2,\dotsm,X_n)$
|
||||
称为估计量或估计值。构造统计量$T(x_1,x_2,\dotsm,x_n)$作为参数$q(\theta)$的估计。
|
||||
$$
|
||||
\hat{q}(x_1,x_2,\dotsm,x_n)=T(x_1,x_2,\dotsm,x_n)
|
||||
$$
|
||||
|
||||
|
||||
## 2 频率替换原理
|
||||
|
||||
### 定义
|
||||
n次重复独立实验,每次实验中有m个可能的结果$v_1,v_2,\dotsm,v_i$。每个结果的概率为$p_i$。用$n_i$表示n次独立重复实验中$D_i$发生的次数,则联合分布概率为:
|
||||
$$
|
||||
p(n_1,n_2,\dotsm,n_m)=\frac{n!}{n_1!n_2!\dotsm n_m!}p_1^{n_1}p_2^{n_2}\dotsm p_m^{n_m}
|
||||
$$
|
||||
概率=频率。前者是形式计算、估计量;后者是统计计算、统计量。$\hat{p}=\frac{n_i}{n}$是$p_i$的频率估计。
|
||||
|
||||
> 形式计算:可以计算均值方差,包含未知数。统计量:基于样本能够计算均值、方差。二者可以建立方程。
|
||||
|
||||
### 含义理解
|
||||
|
||||
每一个$p_i$可以用多个参数$\theta_i$表征。每一个$p_i$又可以通过频率替换的方法来表示。可以建立方程,使用频率替换的方法计算位置参数$\theta_i$。这个过程称为频率替换的参数估计。
|
||||
|
||||
### 频率替换估计过程
|
||||
|
||||
$$
|
||||
\begin{cases}
|
||||
p_1 = h_1(\theta_1,\dotsm,\theta_s)\\
|
||||
\dotsm \\
|
||||
p_m = h_m(\theta_1,\dotsm,\theta_s)
|
||||
\end{cases}
|
||||
$$
|
||||
反解方程组得:
|
||||
$$
|
||||
q(\theta)=g(p_1,\dotsm,p_m)
|
||||
|
||||
$$
|
||||
频率替换原理得:
|
||||
$$
|
||||
q(\theta)=g(\frac{n_1}{n},\dotsm,\frac{n_m}{n})
|
||||
$$
|
||||
|
||||
|
||||
## 3 矩估计
|
||||
|
||||
### 定义
|
||||
|
||||
总体分布族$\{p(x;\theta):\theta\in\Theta\}$
|
||||
|
||||
参数$\theta=(\theta_1,\dotsm,\theta_s)$
|
||||
|
||||
样本的k阶原点矩$A_k=\frac{1}{n}\sum_{i=1}^nx_i^k,k=1,2,\dotsm$
|
||||
|
||||
总体的r阶原点矩$\mu_r=E_\theta(|X|^r)$
|
||||
|
||||
由大数定律克制,若总体距存在,则样本矩依概率收敛于响应的总体矩。
|
||||
|
||||
### 含义理解
|
||||
每一个r阶原点矩$u_r$可以用多个参数$\theta_i$表征。每一个$u_r$又可以通过样本原点矩替换的方法来表示。可以建立方程,使用样本原点矩计算参数$\theta_i$。这个过程称为矩估计。
|
||||
|
||||
### 矩估计过程
|
||||
|
||||
|
||||
$$
|
||||
\begin{cases}
|
||||
u_1 = g_1(\theta_1,\dotsm,\theta_s)\\
|
||||
\dotsm \\
|
||||
u_r = g_r(\theta_1,\dotsm,\theta_s)
|
||||
\end{cases}
|
||||
$$
|
||||
反解方程组得:
|
||||
$$
|
||||
q(\theta)=h(u_1,\dotsm,u_r)
|
||||
$$
|
||||
频率替换原理得:
|
||||
$$
|
||||
q(\theta)=g(A_1,\dotsm,A_r)
|
||||
$$
|
||||
## 4 极大似然估计
|
||||
|
||||
### 定义
|
||||
参数空间$\Theta$,**似然函数**:
|
||||
|
||||
$$
|
||||
L(\theta,x_1,\dotsm,x_n)=L(\theta,x)=L(\theta)= {\Pi_{i=1}^n} p(x_i;\theta)
|
||||
$$
|
||||
|
||||
$\theta=\hat{\theta}$时取最大值,**极大似然函数MLE**:
|
||||
|
||||
$$
|
||||
L(\hat{\theta})=sup\{L(\theta)\}
|
||||
$$
|
||||
|
||||
我们不关注最大值是多少,我们只关心似然函数取最大值的时候,自变量、参数$\theta$的取值是多少。$\ln L(\theta)$是**对数似然函数**,最大值具有相同的$\hat{\theta}$。对于多个$\theta_i$可以得到**似然方程组**:
|
||||
|
||||
$$
|
||||
\frac{\partial\ln L(\theta)}{\partial\theta_i}=0
|
||||
$$
|
||||
|
||||
|
||||
|
||||
### 理解
|
||||
在给定样本观察值的条件下,用使这组样本观察值出现概率最大的$\hat{\theta}$作为$\theta$的的估计。
|
||||
|
||||
在样本的实验中出现了一种情况。这总情况可以用带参数的联合概率计算公式表示。在参数范围取参数的一个值使得本次实验的情况达到最大值。
|
||||
|
||||
### 例题
|
||||
@@ -1,8 +1,176 @@
|
||||
# 估计量的评优准则
|
||||
|
||||
> 数学在某些方面具有通用规律。比如导数与指数,本来两个毫不相关的东西,却存在着很默契的联系。
|
||||
> * n阶求导可以降低幂函数的n阶指数。
|
||||
> * 在泰勒展开式中,就通过n阶导数与n阶指数来从不同阶次逼近一个函数。
|
||||
>
|
||||
> 而在概率统计这一部分,n阶矩与n阶指数n阶导数也有着关系。似乎一个统计量可以展开成n阶矩的表示方法,一阶中心距逼近,二阶中心距逼近,三阶中心距逼近等。
|
||||
|
||||
> UMVUE 计算必考
|
||||
|
||||
|
||||
## 1 均方误差准则
|
||||
|
||||
### 均方误差定义
|
||||
|
||||
$$
|
||||
MSE_\theta(T(x))=E_\theta[T(X)-q(\theta)]^2 \\
|
||||
$$
|
||||
若$MSE<+\infin$
|
||||
$$
|
||||
MSE_\theta(T(x))=Var_\theta(T(x))+E^2_\theta[T(X)- q(\theta)]
|
||||
$$
|
||||
上式成立,因为方差加减一个常数,不影响方差的大小。
|
||||
|
||||
### 评优准则
|
||||
|
||||
$$
|
||||
MSE_\theta(T(x))\leq MSE_\theta(S(x))
|
||||
$$
|
||||
则成T(x)比S(x)好。
|
||||
|
||||
## 2 无偏估计
|
||||
|
||||
### 定义
|
||||
$$
|
||||
E(T(x))=q(\theta) \\
|
||||
MSE_\theta(T(x))=Var_\theta(T(x))
|
||||
$$
|
||||
则成为无偏估计。
|
||||
|
||||
> 关于估计:统计量对参数的估计。
|
||||
>
|
||||
> 一阶中心距为零的时候,为无偏估计。此时只有二阶中心距与更高阶中心距存在。
|
||||
|
||||
### 说明
|
||||
* 无偏估计对参数空间中所有的取值都成立。
|
||||
* 无偏估计可能不存在
|
||||
* 若无偏估计存在,则一般是不唯一的。
|
||||
* 均方误差准则下,无偏估计不一定是好的估计。
|
||||
* 函数变换下,无偏性可能会小时。
|
||||
|
||||
### 定义-可估的
|
||||
|
||||
若参数$q(\theta)$的无偏估计存在,则称$q(\theta)$是可估的。表示为
|
||||
$$
|
||||
U_q=\{T(x):E_\theta(T(x))=q(\theta),Var_\theta(T(x))<\infin,\forall\theta\in\Theta\}
|
||||
$$
|
||||
|
||||
|
||||
## 3 一致最小方差无偏估计
|
||||
|
||||
### 定义
|
||||
若存在无偏估计,对参数空间中的任意一个估计量:
|
||||
$$
|
||||
Var_\theta(T^*(x))\leq Var(T(x))
|
||||
$$
|
||||
则称$T^*(x)$为参数$q(\theta)$的一致最小方差无偏估计。
|
||||
|
||||
### 存在性定理
|
||||
T(x)是一致最小方差无偏估计的等价条件:
|
||||
$$
|
||||
T(x)\in U_q,\forall T_0(x)\in U_0,\forall\theta\in\Theta \\
|
||||
E_\theta[T_0(x)T(x)]=0
|
||||
$$
|
||||
|
||||
### 线性可加性
|
||||
(→表示一致最小方差无偏估计)
|
||||
若
|
||||
$$
|
||||
T_1(x)\rightarrow q_1(\theta) \\
|
||||
T_2(x)\rightarrow q_2(\theta)
|
||||
$$
|
||||
则
|
||||
$$
|
||||
aT_1(x)+bT_2(x)\rightarrow aq_1(\theta)+bq_2(\theta)
|
||||
$$
|
||||
|
||||
### 唯一性定理
|
||||
|
||||
一致最小方差无偏估计是唯一的。
|
||||
|
||||
## 4 充分统计量
|
||||
> 基于充分统计量的无偏估计
|
||||
|
||||
> 对充分统计量的理解,充分统计量能够完整的反映未知参数$\theta$的变换关系。当充分统计量确定后,未知参数也确定了,则整个等式会减少一维的未知关系。
|
||||
>
|
||||
> 说实话我觉得这里的总结理解更像是一种哲学关系。不是面对具体问题的数学方法,而是针对大多数数学方法的抽象统一。
|
||||
### 充分无偏统计量定理
|
||||
假设
|
||||
$$
|
||||
S(x)是充分统计量,\varphi(x)\in U_q是\theta的无偏估计\\
|
||||
给定S(x)下的条件数学期望:\\
|
||||
T(x)=E_\theta(\varphi(x)|S(x))
|
||||
$$
|
||||
结论
|
||||
$$
|
||||
T(x)是q(\theta)的无偏估计。\\
|
||||
Var_\theta(T(x))\leq Var_\theta(\varphi(x))\\
|
||||
当且仅当T(x)=\varphi(x)时等号成立。
|
||||
$$
|
||||
|
||||
### 充分无偏估计
|
||||
|
||||
|
||||
充分统计量$S(x)$的函数$h(S(x))$作为参数$q(\theta)$的无偏估计。则成$h(S(x))$是$q(\theta)$的充分无偏估计量。
|
||||
|
||||
若$h(S(x))$是$q(\theta)$的无偏估计,则称估计量$h(S(x))$为参数$q(\theta)$的充分无偏估计。
|
||||
|
||||
$$
|
||||
U_q^S=\{T(x)=E_\theta(\varphi(x)|S(x)): \\ E_\theta(T(x))=q(\theta),Var_\theta(T(x))<\infin,\forall\theta\in\Theta\}
|
||||
$$
|
||||
|
||||
T(x)是S(x)的函数,是充分估计量。T(x)是无偏估计。所以T(x)是充分无偏估计量。
|
||||
|
||||
## 5 充分完全统计量
|
||||
|
||||
> 基于完全统计量的一致最小方差无偏估计。
|
||||
|
||||
### 定义
|
||||
|
||||
$g(X)是任一随机变量。对于所有的\theta\in\Theta,E_\theta(g(X))=0 则称分布族\{P_\theta:\theta\in\Theta\}$是完全的。完全分布族总体的样本的统计量,是完全统计量。
|
||||
|
||||
### 定理2.2.4
|
||||
|
||||
条件
|
||||
$$
|
||||
x_1,\dotsm,x_n是总体{P_\theta:\theta\in\Theta}的简单样本。\\
|
||||
总体密度函数p(x,\theta)\\
|
||||
联合密度函数p(x_1,\dotsm,x_n;\theta)= \\ c(\theta)h(x_1,\dotsm,x_n)exp\{\sum_{k=1}^mw_k(\theta)T_k(x_1,\dotsm,x_n)\} \\
|
||||
h(x_1,\dotsm,x_n)仅仅是x的函数。c(\theta)仅是\theta的函数 \\
|
||||
w(\theta)是m维实值函数。
|
||||
$$
|
||||
假设
|
||||
$$
|
||||
m维度w_m(\theta)值域包含内点。
|
||||
$$
|
||||
结论
|
||||
$$
|
||||
m维统计量T_m(x_1,\dotsm,x_n)是完全充分统计量。
|
||||
$$
|
||||
|
||||
### 定理2.2.5
|
||||
|
||||
假设
|
||||
$$
|
||||
S(x)是完全统计量\\
|
||||
\varphi(x)是q(\theta)的方差有限的无偏估计,\varphi(x)\in U_q\\
|
||||
$$
|
||||
结论
|
||||
$$
|
||||
T(x)=E_\theta(\varphi(x)|S(x))是q(\theta)唯一的一致最小方差无偏估计。
|
||||
$$
|
||||
|
||||
## 6 求解无偏估计
|
||||
|
||||
当UqS是完全充分的时候,其内只有一个元素。因为完全统计量的
|
||||
|
||||
|
||||
完全统计量+充分统计量S(x)+无偏估计=一致最小无偏估计UMVUE
|
||||
|
||||
1. hh
|
||||
证明统计量的充分性--】-证明统计量完全性---构造无偏估计。
|
||||
2. jj
|
||||
|
||||
求一个无偏估计---对完全充分统计量取条件期望=一致最小方差无偏估计UMVUE
|
||||
|
||||
## 3 一致最小方差无偏估计
|
||||
50
概率论与数理统计/第7节 信息不等式.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# 信息不等式
|
||||
|
||||
> 计算无偏估计的下界。
|
||||
> 知道UMVUE与无偏估计下界的关系。
|
||||
|
||||
## 相关定义
|
||||
|
||||
### Cramer-Rao正则族
|
||||
|
||||
* 声明
|
||||
$$
|
||||
\{p(x;\theta):\theta\in\Theta\}
|
||||
$$
|
||||
|
||||
* 假设
|
||||
$$
|
||||
A_\theta={x:p(x;\theta)>0}与参数\theta 无关\\
|
||||
\frac{\partial\ln p(x;\theta)}{\partial\theta}存在,\forall x\in A_\theta,\forall\theta\in\Theta\\
|
||||
\frac{\partial}{\partial\theta}\int_{-\infin}^{+\infin} T(x_1,\dotsm,x_n)p(x_1,\dotsm,x_n;\theta)dx_1\dotsm dx_n=\\ \int_{-\infin}^{+\infin}T(x_1,\dotsm,x_n)p(x_1,\dotsm,x_n;\theta)dx_1\dotsm dx_n
|
||||
$$
|
||||
* 结论
|
||||
$$
|
||||
\{p(x;\theta:\theta\in\Theta)\}是Cramer-Rao正则族
|
||||
$$
|
||||
* 说明
|
||||
|
||||
三个条件可以描述为:x与$\theta$无关,偏导存在,统计量与$\theta$无关。
|
||||
|
||||
### Fisher信息量
|
||||
* 假设
|
||||
$$
|
||||
Cramer-Rao正则族
|
||||
$$
|
||||
* 结论
|
||||
|
||||
$$
|
||||
|
||||
Fisher信息量:I(\theta)=E_\theta[\frac{\partial}{\partial\theta}\ln p(x;\theta)]^2 \\
|
||||
0\leq I(\theta)\leq +\infin
|
||||
$$
|
||||
|
||||
* 假设
|
||||
$$
|
||||
\frac{d^2}{d\theta^2}\int_{-\infin}^{+\infin}p(x;\theta)dx=\int_{-\infin}^{+\infin}\frac{\partial^2p(x;\Theta)}{\partial\theta^2}dx
|
||||
$$
|
||||
* 结论
|
||||
|
||||
$$
|
||||
I(\theta)=-E_\theta[\frac{\partial^2}{\partial\theta^2}\ln p(x;\theta)]
|
||||
$$
|
||||
@@ -1,5 +0,0 @@
|
||||
# 其他估计方法
|
||||
|
||||
> 这节课没怎么听,需要问一下别人数学课讲了啥。
|
||||
|
||||
##
|
||||
0
概率论与数理统计/第9节 区间估计.md
Normal file
BIN
程序设计语言原理/image/发展历史.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
程序设计语言原理/image/词法分析.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
35
程序设计语言原理/第1节 绪论.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# 绪论
|
||||
|
||||
## 1 语言
|
||||
|
||||
### 语言的一般特性
|
||||
* 媒体性
|
||||
* 规范性
|
||||
* 演进性
|
||||
* 抽象性
|
||||
* 冗余多义性
|
||||
|
||||
### 程序设计语言的特性
|
||||
|
||||
* 人工语言
|
||||
* 对象是机器
|
||||
* 用于表达软件
|
||||
|
||||
### 程序设计语言的作用
|
||||
|
||||
*
|
||||
## 2 程序设计语言的定义与处理器
|
||||
|
||||
### 解释器
|
||||
解释器读入一段相对完整源代码(多数情况下是一句)翻译为目标代码后,立即解释执行。
|
||||
|
||||
### 编译器
|
||||
|
||||
编译器读入一个独立的编译单元(程序的逻辑单元,如主程序 、函数,子程序。或若干个逻辑单元组成的编译单元,如文件、模块、包) 翻译为可执行的目标代码单元,经过连接必要的库支持例程成为可执行内存映象,加载到内存中运行,由于是按单元翻译,可以经过上下文分析作若干次优化,目标代码质量高。
|
||||
|
||||
### 元语言(metalanguage)
|
||||
|
||||
表达每一个语法特征
|
||||
* 字符集、词条表由它们提供标识符、运算符、关键字、空格、限制符、各种数字量、字符串常量等语法概念。
|
||||
* 注释 注释符号之内(或以后)的符号串是为人们阅读,处理器要略去的。
|
||||
* 语法结构定义,定义以上符号组合的合法结构。它给出语句、表达式、程序单元、块(如FORTRAN的循环域)、作用域、嵌套与结合等语法概念。
|
||||
66
程序设计语言原理/第2节 发展与分类.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# 发展与分类
|
||||
|
||||
## 1 历史
|
||||
|
||||
|
||||

|
||||
|
||||
## 2 分类
|
||||
|
||||
### 对机器依赖程度
|
||||
|
||||
* 低级语言
|
||||
* 中级语言
|
||||
* 高级语言
|
||||
|
||||
### 应用领域
|
||||
|
||||
### 实现计算方式
|
||||
* 编译型语言
|
||||
* 解释型语言
|
||||
|
||||
### 使用方式
|
||||
* 交互式语言
|
||||
* 非交互式语言
|
||||
|
||||
### 程序设计范型
|
||||
> 单范型语言、多范型语言
|
||||
|
||||
|
||||
* 命令式语言
|
||||
* 面向对象语言
|
||||
* 数据流语言
|
||||
* 函数式语言
|
||||
* 逻辑式语言
|
||||
* 并发程序设计语言
|
||||
|
||||
|
||||
### 断代
|
||||
|
||||
* 第一代:机器语言
|
||||
* 第二代:汇编语言
|
||||
* 第三代:高级语言
|
||||
* 第四代:非过程语言
|
||||
* 第五代:自然语言(人工智能)
|
||||
|
||||
## 3 形式语言与图灵机
|
||||
|
||||
### 形式语言特点
|
||||
|
||||
* 符号集
|
||||
* 转换规则
|
||||
|
||||
### 图灵机五元组
|
||||
$$(q_i,S_j,S_k,(R,L,N),q_j)$$
|
||||
机器当前状态读入$S_j$后写入$S_k$,进行操作$R/L/N$,转换为装填$q_j$。
|
||||
|
||||
### 指令系统
|
||||
|
||||
* CISC(reduced instruction set computer)。指令复杂,执行较慢。不利于大规模集成电路设计。
|
||||
* RISC(complex instruction set computer)。简化了指令系统,适合大规模集成电路设计。执行速度快。提供高级程序设计语言支持,简化了编程设计过程。
|
||||
|
||||
## 4 发展过程
|
||||
|
||||
* 汇编语言。与机器指令一一对应。
|
||||
* 虚拟机,在计算机机器语言之上,虚拟各种不同语言的计算机环境。
|
||||
* 语言要求:Go、Python、Scala。
|
||||
51
程序设计语言原理/第3节 设计概述.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# 设计概述
|
||||
|
||||
## 1 表示与抽象
|
||||
|
||||
自然语言描述、高级语言表示、汇编语言表示、机器语言表示,是同一个程序在不同抽象层次上的表示。
|
||||
### 不同抽象层次
|
||||
* 客观世界自然语言描述
|
||||
* 数学模型数学语言描述
|
||||
* 程序设计程序语言描述
|
||||
* 机器指令机器语言描述
|
||||
|
||||
## 2 设计目标
|
||||
|
||||
### 具体目标
|
||||
定义一组能表示某种范型的特征集,每个特征有严格定义并可在机器上高效实现,程序员可灵活运用这些特征表达它所希望的任何计算。
|
||||
|
||||
### 评价标准
|
||||
* 模型有力 Model Power
|
||||
* 语义清晰 Semantic Clarity
|
||||
* 移植性好 Portability
|
||||
* 可读性好 Readability
|
||||
* 程序质量 Quality
|
||||
* 安全性
|
||||
* 并发
|
||||
* 方便 Convenience
|
||||
* 简单 Simplicity
|
||||
* 高效 Efficiency
|
||||
* 灵活性 Flexibility
|
||||
* 可扩充性 Extensible
|
||||
* 可重用性 Reusable
|
||||
|
||||
|
||||
## 3 设计准则
|
||||
|
||||
### 具体准则
|
||||
* 频度准则:越常用越简单
|
||||
* 结构一致:程序结构和计算的逻辑结构一致,可读、方便
|
||||
* 局部性 Locality:
|
||||
- 只有全局变量 Basic
|
||||
- 不鼓励全局变量 Pascal, C
|
||||
- 无全局变量函数式 Java
|
||||
* 词法内聚 Lexical Coherence : 变量在使用处就近声明(Pascal 声明和语句严格分开)
|
||||
* 语法一致性
|
||||
* 安全性Security
|
||||
* 正交性和正规性
|
||||
* 数据隐藏。封装,以名字封装内部数据设计者可见使用者不可见
|
||||
* 抽象表达
|
||||
|
||||
|
||||
## 4 规格说明
|
||||
|
||||
0
程序设计语言原理/补充:Fortran补充.md
Normal file
87
程序设计语言原理/补充:编译原理.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# 程序设计语言规格说明
|
||||
|
||||
## 1 语言字符集
|
||||
|
||||
允许出现在语言的程序里出现的字符的全体
|
||||
|
||||
## 2 词法
|
||||
### 词法定义
|
||||
|
||||
构成程序的基本词法元素包括标识符、运算符、字面量、注释等。复杂的词需要明确定义的构词法,即词法
|
||||
|
||||
|
||||
### 词法元素
|
||||
|
||||
* 标识符:文字形式的词法对象,用于表示语言里的关键字、程序对象的名字
|
||||
* 关键字:语言规定了特殊意义的标识符
|
||||
* 保留字:语言中规定了特殊意义,而且不允许程序员用于其他用途的标识符,C语言中的关键字都是保留字。
|
||||
* 运算符:有预定义意义的特殊字符或特殊字符序列。语言定义的运算、算术运算、逻辑运算
|
||||
* 分隔符:用于分隔程序里的不同词法元素的特殊符号或标识符。空格,换行和制表符
|
||||
|
||||
### 词法分析
|
||||
|
||||
* 由程序的字符序列得到词法元素序列的过程就是词法分析。
|
||||
* 编译器处理表示源程序的字符序列,根据词法规则做词法分析,将 源程序切分为符合词法的段,识别出源程序的有意义单词
|
||||
* 词法分析得到一个(表达被分析的源程序的)单词流,流中各单词 标明了词法类别。
|
||||
* 词法分析中抛弃所有无保留价值的分隔符(如空白符)和噪声词
|
||||
* 词法分析通常采用最长可能原则,确定可能成为单词的最长字符串。
|
||||
|
||||
### 词法分析语法分析总过程
|
||||

|
||||
|
||||
## 3 语法
|
||||
|
||||
### 语法定义
|
||||
语法用于确定一个输入序列是否合法的程序。程序存在多个不同层次的合法性问题:局部结构、上下文关系(静态语法结构)、深层问题(动态语法结构)。静态语法结构可以在编译过程中进行检查,动态语法结构只能在程序执行过程中检查合法性。
|
||||
|
||||
### 文法定义
|
||||
|
||||
文法产生符合语法的语言规则。
|
||||
|
||||
### 文法描述
|
||||
$$
|
||||
G=(S,N,T,P) S∈N,T∩N=Φ^*
|
||||
$$
|
||||
|
||||
* T是终结符号串的有限集。
|
||||
* N是非终结符号串的有限集。T∩N = Φ,即它们是不相交的。
|
||||
* S是起始符号串, S∈N。
|
||||
* P是产生式
|
||||
|
||||
$$
|
||||
α→β \\α,β∈(T∪N)^*
|
||||
$$
|
||||
* “→”表示左端可推导出右端,如α→β, α→Υ, α→δ则可写为:α→β|Υ|δ
|
||||
* 如果产生式将语言的非终结符中的每一个标记都推得为终结符号, 则这一组产生式集即为该语言的全部文法。
|
||||
|
||||
## 4 Chomsky的四种文法
|
||||
|
||||
产生式左符号集→右符号集,由左符号集推导出右符号集。
|
||||
|
||||
### 0型文法
|
||||
$$
|
||||
α→β α∈(N∪T)+,β∈(N∪T)*
|
||||
$$
|
||||
递归可枚举语言 图灵机可以识别
|
||||
|
||||
|
||||
### 1型文法
|
||||
$$
|
||||
αAβ→αBβ α,β∈(N∪T)*,A∈N, B∈(N∪T)+
|
||||
$$
|
||||
上下文相关文法上下文敏感语言 线性有界自动机可识别
|
||||
|
||||
### 2型文法
|
||||
$$
|
||||
A→α α∈(NUT)*,A∈N
|
||||
$$
|
||||
上下文无关文法语言 非确定下推自动机可识别
|
||||
|
||||
### 3型文法
|
||||
$$
|
||||
A→αB|Bα α∈T*, A, B∈N
|
||||
$$
|
||||
正则文法、正则语言、有限自动机可以识别,可消除右端非终法符,P可以成为终结符表达式。
|
||||
|
||||
|
||||
|
||||
27
计算机网络/0 目录说明.md
Normal file
@@ -0,0 +1,27 @@
|
||||
知识目录
|
||||
|
||||
|
||||
协议与技术目录
|
||||
|
||||
## 应用层协议
|
||||
|
||||
## 传输层协议
|
||||
|
||||
### TCP协议
|
||||
### UDP协议
|
||||
|
||||
## 网络层协议
|
||||
|
||||
### IPV4协议
|
||||
### IPV6协议
|
||||
### CIDR编址
|
||||
### NAT/NPAT网络地址转换
|
||||
### ICMP网络控制报文协议
|
||||
|
||||
### RIP路由信息协议
|
||||
### OSPF开放最短路优先
|
||||
### BGP协议
|
||||
### ARP地址解析协议
|
||||
|
||||
## 链路层协议
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 网络成-基本原理
|
||||
# 网络层-基本原理
|
||||
|
||||
## 1 基本功能
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
当分组在网络中向目的地传输时,它会经过一系列路由器。每个路由器都使用该分组的目的地址来转发给分组。每台路由器都由一个将目的地址映射到链路接口的转发表,每当分组到达时,路由器就利用分组的目的地址在转发表中查找一个合适的输出链路接口,然后路由器将分组从该输出链路接口发送出去。
|
||||
在因特网中,路由器的转发表可以由选路算法或者管理员更新。由于转发表的修改可能发生在任意时刻,因而两个主机之间的分组在不同的时刻走的可能是不同的网络路径,并可能无序到达。
|
||||
|
||||
最长前缀匹配规则
|
||||
### 最长前缀匹配规则
|
||||
|
||||
网络前缀:是网络地址的前边某些连续比特。比如对于地址 11101111 11011110 1000000 00000001,其对应的8比特前缀为11101111 , 16比特前缀为11101111 11011110
|
||||
在该规则下,路由器的转发表中记录的是网络前缀和输出链路接口之间的对应关系。当查转发表时,仍然利用目的地址来进行匹配,但是可能会有很多歌匹配,这个时候取匹配到的比特数目最多的表象作为命中表项,并根据它来转发分组。
|
||||
@@ -45,59 +45,60 @@
|
||||
|
||||
## 4 路由器构成(硬件)
|
||||
|
||||

|
||||
|
||||
路由器在网络层是一个极其重要的设备,每台路由器都由一张转发表。路由器检查到达分组首部中的一个字段的值,然后利用该值在路由器的转发表中进行查询,以决定该如何转发该分组。查询的结果是分组将被转发的路由器的链路接口。
|
||||
路由器在网络层是一个极其重要的设备,每台路由器都由一张**路由转发表**。
|
||||
|
||||
网络层的最主要的功能是将分组从一台主机移动到另一台主机。该功能主要是由路由器完成的。典型的路由器结构如下:
|
||||
路由器检查到达分组首部中的一个字段的值,然后利用该值在路由器的转发表中进行查询,以决定该如何转发该分组。
|
||||
|
||||
查询的结果是分组将被转发的路由器的链路接口。
|
||||
|
||||
### 输入端口
|
||||
|
||||
它接入输入的物理链路,和链路远端的数据链路层交互,并完成查找和转发功能,以使得输入分组能够进入到合适输出链路接口。对于控制分组,它则会进入选路处理器。
|
||||
|
||||
确定一个到达的分组经交换结构转发给哪个输出端口。输出端口的选择是取决于转发表中的信息,转发表是由选路处理器计算的,每个输入端口都会有一份转发表的影子拷贝,并且会被及时更新。被阻塞的分组需要在输入端口排队。
|
||||
|
||||
|
||||
需要对转发表的组织和查询进行优化,常见的方式有:
|
||||
* 以树形结构存储转发表,树的每一级对应目的地址中的一个比特,如果地址比特位0则搜索其左子树,否则搜索右子树。采用这种结构,N比特的目的地址可以在N步之内找到相应的转发表项。
|
||||
|
||||
* 内容可寻址内存CAM,CAM允许将一个IP地址交给CAM,由CAM在常数时间内返回该地址对应的转发表项的内容。
|
||||
|
||||
* 将最近访问的转发表保存在高速缓存。
|
||||
|
||||
输入端口的线路端接功能与数据链路处理实现了与通向路由器的各个输入链路相关的物理层和数据链路层。输入端口的查找/转发功能对路由器的转发功能是非常重要的。在很多路由器中,就是在这里来确定一个到达的分组经交换结构转发给哪个输出端口。输出端口的选择是取决于转发表中的信息,虽然转发表是由选路处理器计算的,但是通常每个输入端口都会有一份转发表的影子拷贝,并且会被及时更新。正因为输入端口拥有转发表的本地拷贝因而就可以在每个输入接口做出转发决策,而无需调用中央选路处理器,这种模式可以避免在路由器的某个节点产生转发处理瓶颈。
|
||||
在输入端口处理能力受限的路由器中,输入端口会将分组转发给中央绚丽处理器,然后由它执行转发表查找并将分组转发到恰当的输出端口。
|
||||
在有了转发表后,转发决策就很简单,就是查找转发表,但是由于主干路由器的转发表规模很大, 而且我们期望输入端口的处理速度能够达到线速或者说我们期望查表的速度越快越好,因而就需要对转发表的组织和查询进行优化,常见的方式有:
|
||||
以树形结构存储转发表,树的每一级对应目的地址中的一个比特,如果地址比特位0则搜索其左子树,否则搜索右子树。采用这种结构,N比特的目的地址可以在N步之内找到相应的转发表项。
|
||||
内容可寻址内存CAM,采用树形结构对于主干路由器来说还是太慢了,CAM允许将一个IP地址交给CAM,然后由CAM在常数时间内返回该地址对应的转发表项的内容。
|
||||
将最近访问的转发表保存在高速缓存。
|
||||
找到分组输出端口后,分组就可以进入交换结构。这个时候分组可能会被阻塞,因而来自其它输入端口的分组可能正在使用交换结构。被阻塞的分组需要在输入端口排队。
|
||||
|
||||
### 交换结构
|
||||

|
||||
|
||||
它将路由器的输入接口连接到它的输出接口。
|
||||
|
||||
|
||||
|
||||
在这种由纵横式交换机构成的互联网络中任意两个端口之间都有自己的专用总线,因而可以克服单一、共享式总线的带宽限制。使用这种网络时,往往把长度变化的IP分组分片成固定尺寸的信元,加上标签通过互联网络进行交换,这些信元在输出接口再被装配成初始分组。这种方式能够极大的简化并加快通过互联网络的分组交换。
|
||||
|
||||
### 输出端口
|
||||
|
||||
存储经过交换结构发送给它的分组,并将分组发送出去。同时它执行和输入端口相反的链路层功能和物理层功能。
|
||||
选路处理器:执行选路协议,维护选路信息和转发表。
|
||||
|
||||
输出端口取出存放在输出端口内存中的分组并将它传送到输出链路上。它在数据链路层和物理层上实现与输入接口相反的功能
|
||||
|
||||
### 排队
|
||||
在输入端口和输出端口都可能出现排队。随着这些队列的增长,路由器的缓存空间可能会耗尽,进而导致出现丢包。
|
||||
对于有N个输入接口和N个输出接口的路由器,定义交换结构速率为交换结构能够从输入端口移动分组到输出端口的速率。则如果交换结构的速率至少是输入线路速率的N倍,则在输入端口不会出现排队,这是因为即便所有的N个端口都在接收报文,交换结构也能够将其全部移动到输出接口。但是对于输出接口,假设交换结构速率为线路速率的N倍,则在最坏情况下,到达所有N个输入端口的分组都要被发送到同一个输出端口,在这个情况下,输出端口发送一个分组的同时它要接收N个分组,因而就会导致排队,这种情况持续下去就会导致输出端口的队列不断增长并耗尽内存出现丢包。
|
||||
由于会出现排队,因而缓存大小的设置就非常关键,缓存大小设置的经验方法是:缓存量=平均往返时延*链路的容量。
|
||||
1.分组调度
|
||||
输出端口出现排队,一个重要的问题就是输出端口如何发送这些排队的分组,可能的方式有:
|
||||
先来先服务FCFS
|
||||
加权公平队列,它在具有排队等待传输的分组的不同的端到端连接之间公平的共享输出链路。
|
||||
2.队列管理
|
||||
另外的一个问题是如果没有足够的缓存来缓存一个分组,是丢弃该分组,还是丢弃一个已排队的分组来为新的分组腾出空间。相关的策略通常为主动队列管理算法AQM。随机早期检测算法RED是一种常见的算法,其思想是为输出队列长度维护一个加权平均值:
|
||||
当队列长度小于低的门限值Tmin时,不丢弃新到达的分组;
|
||||
当队列长度介于Tmin和Tmax之间时,以一定的概率丢弃分组,且分组概率随着队列长度的增长线性增加,
|
||||
当队列长度达到Tmax时,到达的分组全部被丢弃。
|
||||
这3个阶段分别被称作正常、拥塞避免和拥塞控制三个阶段。最坏情况的最大队列大小被限制为Tmax。
|
||||
存储经过交换结构发送给它的分组,并将分组发送出去。
|
||||
|
||||
|
||||
3.HOL
|
||||
如果交换结构不能快得使所有分组都能无时延的通过它传送,则在输入端口也将出现分组排队。假设
|
||||
所有链路速率都相同
|
||||
一个分组能够以与一个输入链路接收一个分组相同的时间从任意一个输入端口移动分组到给定的输出端口
|
||||
输入队列按照FCFS工作
|
||||
### 选路处理器
|
||||
|
||||
假设输入端口中的每个数字都表示一个分组,数字值标识其想要转发到的输出端口,并且输入端口和输出端口都从下标1开始从上到下编号。在图中的场景下,假设交换结构决定先移动输入端口1中的分组到其输出端口,则输入端口3中的分组必须等待,进一步的,由于输入端口的队列采用FCFS的工作模式,因而输入端口3中的目的端口为2的分组也必须等待,尽管此时并没有其他输入端口和它竞争输出端口2,这种现象就叫Head-Of-the-Line阻塞,即HOL阻塞。
|
||||
研究表明由于HOL阻塞,只要输入链路上的分组到达速率达到其容量的58%,在某些假设前提下,输入队列就将无限增大,从而导致丢包。
|
||||
执行选路协议,维护选路信息和转发表。
|
||||
|
||||
|
||||
## 5 排队
|
||||
在输入端口和输出端口都可能出现排队。缓存大小设置的经验方法是:缓存量=平均往返时延*链路的容量。
|
||||
|
||||
### 分组调度
|
||||
|
||||
输出端口出现排队,分组调度:
|
||||
* 先来先服务FCFS
|
||||
* 加权公平队列
|
||||
|
||||
|
||||
### 队列管理
|
||||
|
||||
主动队列管理算法AQM。
|
||||
|
||||
### HOL
|
||||
如果交换结构不能快得使所有分组都能无时延的通过它传送,则在输入端口也将出现分组排队。输入队列按照FCFS工作
|
||||
|
||||
@@ -1,214 +1,258 @@
|
||||
IP(internet protocol)协议是TCP/IP协议族的核心协议,是因特网的网络层。当前的版本号是4,也称为IPv4,下一代IP协议的版本号为6即IPv6。正如描述的网络层功能一样,IP层为因特网提供了选路和转发的功能。接入因特网的主机之间可以通过IP层而互相通信,在IP层,IP地址用于标识接入网络的接口,进而标识一台主机。当信息在TCP/IP协议栈中传递时,每层都会添加其自己的控制信息,即协议头,IP地址被添加在IP头中。IP头提供了IP协议以及数据报的信息。
|
||||
一、IPv4数据报格式
|
||||
当接入网络的两台设备通过IP层互相通讯时,交互的信息会被封装成网络层分组,网络层分组又被称为数据报。IPv4的数据报格式如下:
|
||||
# 网络层-网际协议
|
||||
|
||||
IP(internet protocol)协议是TCP/IP协议族的核心协议,是因特网的网络层。IP层为因特网提供了选路和转发的功能。在IP层,IP地址用于标识接入网络的接口,进而标识一台主机。
|
||||
|
||||
## 1 IPv4协议
|
||||
|
||||
### IPv4数据报
|
||||
网络层分组被称为数据报。IPv4的数据报格式如下:
|
||||

|
||||
|
||||
* 版本号:协议版本号,IPv4为4,IPv6则为6(当然IPv6的头部不完全是这样,但是4个比特含义一致)
|
||||
* 首部长度:首部长度指的是首部占32 bit字的数目,包括任何选项。因此IPv4首部最长为60个字节
|
||||
* 服务类型:服务类型(TOS)字段包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位但必须置0。4 bit的TO S分别代表:最小时延、最大吞吐量、最高可靠性和最小费用
|
||||
* 数据报长度:以字节为单位的整个IP数据报的长度(包括首部)。
|
||||
* 标识、标志、片偏移:标识用来唯一确定主机发送的每一个IP数据报。标志和片偏移用来支持IP分片,当然它们必须和标识一起使用。
|
||||
* 生存时间:数据报可以经过的路由器数,这使得IP数据报早晚会在网络中消失,即要么被消失,要么由于生存时间达到而“死亡”
|
||||
* 协议:标识IP层承载的上一层协议类型,比如UDP/TCP/SCTP。
|
||||
* 首部校验和:首部检验和字段是根据I P首部计算的检验和码。IPv6首部中不再包含首部校验和。
|
||||
* 源、目的地址:源的IP地址和目的的IP地址
|
||||
* 选项:最后一个字段是任选项,是数据报中的一个可变长的可选信息。主要包括:安全和处理限制、记录路径(让每个路由器都记下它的I P地址)、时间戳(让每个路由器都记下它的I P地址和时间)、宽松的源站选路(为数据报指定一系列必须经过的I P地址)、严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)。
|
||||
|
||||
|
||||
其各个字段的含义如下:
|
||||
版本号:协议版本号,IPv4为4,IPv6则为6(当然IPv6的头部不完全是这样,但是4个比特含义一致)
|
||||
首部长度:首部长度指的是首部占32 bit字的数目,包括任何选项。因此IPv4首部最长为60个字节
|
||||
服务类型:服务类型(TOS)字段包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位但必须置0。4 bit的TO S分别代表:最小时延、最大吞吐量、最高可靠性和最小费用
|
||||
数据报长度:以字节为单位的整个IP数据报的长度(包括首部)。
|
||||
标识、标志、片偏移:标识用来唯一确定主机发送的每一个IP数据报。标志和片偏移用来支持IP分片,当然它们必须和标识一起使用。IPv6则不允许在路由器分片,在IPv6中,分片和重组必须在源和目的进行
|
||||
生存时间:数据报可以经过的路由器数,这使得IP数据报早晚会在网络中消失,即要么被消失,要么由于生存时间达到而“死亡”
|
||||
协议:标识IP层承载的上一层协议类型,比如UDP/TCP/SCTP。
|
||||
首部校验和:首部检验和字段是根据I P首部计算的检验和码。IPv6首部中不再包含首部校验和。
|
||||
源、目的地址:源的IP地址和目的的IP地址
|
||||
选项:最后一个字段是任选项,是数据报中的一个可变长的可选信息。主要包括:
|
||||
安全和处理限制
|
||||
记录路径(让每个路由器都记下它的I P地址)
|
||||
时间戳(让每个路由器都记下它的I P地址和时间)
|
||||
宽松的源站选路(为数据报指定一系列必须经过的I P地址)
|
||||
严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)。
|
||||
1.IP分片
|
||||
数据链路层一般要限制每次发送数据帧的最大长度。任何时候IP层接收到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据(选路),并查询该接口获得其MTU。IP把MTU与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。但是分片报文只有到了最终目的地才会被重组。重新组装由目的地的IP层来完成,其目的是使分片和重新组装过程对运输层(比如TCP)是透明的。
|
||||
IP头部包含一个由数据报原始发送者设置的标识字段,它在由该发送者发送的IP数据报中是唯一的。该值在数据报分片时被复制到每个片中。标志字段用其中一个比特来表示“更多的片”。除了最后一片外,其他每个组成数据报的片都要把该比特置1。片偏移字段指的是该片偏移原始数据报开始处的位置。另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。
|
||||
标志字段中有一个比特称作“不分片”位。如果将这一比特置1,IP将不对数据报进行分片,在这种情况下,如果路由器判断需要分片就把数据报丢弃并发送一个ICMP差错报文(“需要进行分片但设置了不分片比特”)给数据报的源主机。
|
||||
当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据报片。
|
||||
但是IP分片存在一个严重的缺陷:即使只丢失一片数据也要重传整个数据报。
|
||||
在IPv6中,分片功能被限制在源主机进行,这是因为分片增加了网络核心(即路由器)的工作量,使得它不得不为所有报文进行分片处理的判断,网络核心应该更专注于它选路和转发的功能,而不是被额外的处理所打断。
|
||||
二、IPv4地址
|
||||
在因特网中,无论是主机还是路由器,都通过接口接入网络。接口是主机或路由器接入网络的装置,一般情况下,一个主机由一个接口,而路由器有多个接口。为了使得接口能够工作在网络层,每个接口都需要有IP地址。因此,IP实际上是和接口相关联的,而不是与主机或路由器相连的。
|
||||
1.IPv4地址格式
|
||||
### IP分片过程
|
||||
|
||||
1. 分片原理
|
||||
数据链路层一般要限制每次发送数据帧的最大长度。任何时候IP层接收到一份要发送的IP数据报时,查询该接口获得其MTU。IP把MTU与数据报长度进行比较,如果需要则进行分片。
|
||||
分片可以发生在原始发送端主机上,也可以发生在中间路由器上。
|
||||
但是分片报文只有到了最终目的地才会被重组。重新组装由目的地的IP层来完成,其目的是使分片和重新组装过程对运输层是透明的。
|
||||
|
||||
2. 分片标志
|
||||
IP头部包含一个由数据报原始发送者设置的标识字段,它在由该发送者发送的IP数据报中是唯一的。该值在数据报分片时被复制到每个片中。标志字段用其中一个比特来表示“更多的片”。除了最后一片外,其他每个组成数据报的片都要把该比特置1。片偏移字段指的是该片偏移原始数据报开始处的位置。另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。
|
||||
|
||||
3. 不分片标志
|
||||
标志字段中有一个比特称作“不分片”位。如果将这一比特置1,IP将不对数据报进行分片,在这种情况下,如果路由器判断需要分片就把数据报丢弃并发送一个ICMP差错报文(“需要进行分片但设置了不分片比特”)给数据报的源主机。
|
||||
当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据报片。
|
||||
|
||||
3. 补充
|
||||
IP分片存在一个严重的缺陷:即使只丢失一片数据也要重传整个数据报。在IPv6中,分片功能被限制在源主机进行。
|
||||
|
||||
|
||||
## 2 IPv4地址
|
||||
|
||||
|
||||
在因特网中,通过接口接入网络。一般主机有一个接口,而路由器有多个接口。为了使得接口能够工作在网络层,每个接口都需要有IP地址。因此,IP实际上是和接口相关联的,而不是与主机或路由器相连的。
|
||||
|
||||
|
||||
### IPv4地址格式
|
||||
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。
|
||||
|
||||
因特网中,每台主机或路由器的接口都有一个IP地址。但是每个接口的IP地址不能随意选择,每个接口的IP地址的组成部分需要由其连接的子网来决定。
|
||||
1.分类编址
|
||||
最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。Internet委员会定义了5种IP地址类型以适合不同容量的网络,即A类~E类。其中A、B、C3类(如下表格)由InternetNIC在全球范围内统一分配,D、E类为特殊地址。
|
||||
网络类别 最大网络数 第一个可用的网络号 最后一个可用的网络号 每个网络中的最大主机数
|
||||
A 126(2^7-2) 1 126 16777214
|
||||
B 16384(2^14) 128.0 191.255 65534
|
||||
C 2097152(2^21) 192.0.0 223.255.255 254
|
||||
|
||||
### 分类编址
|
||||
便于寻址以及层次化构造网络,每个IP地址包括两个标识码,即网络ID和主机ID(网络号和主机号)。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机有一个主机ID与其对应。Internet委员会定义了5种IP地址类型以适合不同容量的网络,
|
||||
|
||||
| 网络类别 | 最大网络数 | 第一个可用的网络号 | 最后一个可用的网络号 | 每个网络中的最大主机数 |
|
||||
|-|-|-|-|-|
|
||||
|A| 126(2^7-2) |1. |127. |16777214|
|
||||
|B |16384(2^14) |128.0. |191.255. |65534|
|
||||
|C| 2097152(2^21)| 192.0.0.| 223.255.255. |254|
|
||||
|
||||
|
||||
其地址布局如下图:
|
||||
|
||||

|
||||
|
||||
* A类IP地址
|
||||
网络地址的最高位必须是“0”。网络号长度为8位,主机号长度为24位。A类IP地址 地址范围1.0.0.0到127.255.255.255(二进制表示为:00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111111)。A类IP地址的子网掩码为255.0.0.0,每个网络支持的最大主机数为256的3次方-2=16777214台。
|
||||
* B类IP地址
|
||||
网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为16位,主机标识的长度为16位。B类IP地址地址范围128.0.0.0-191.255.255.255(二进制表示为:10000000 00000000 00000000 00000001 - 10111111 11111111 11111111 11111111)。B类IP地址的子网掩码为255.255.0.0,每个网络支持的最大主机数为256的2次方-2=65534台
|
||||
* C类IP地址
|
||||
网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为24位,主机标识的长度为8位。C类IP地址范围192.0.0.0-223.255.255.255(二进制表示为: 11000000 00000000 00000000 00000001 - 11011111 11111111 11111111 11111110)。C类IP地址的子网掩码为255.255.255.0,每个网络支持的最大主机数为256-2=254台
|
||||
* D类IP地址
|
||||
D类地址被IP用作多播。多播为IP提供了向过个目地转发数据的能力。D类地址的28bit均用作多播组号而不再表示其他。多播组地址包括为1110的最高4bit和多播组号。它们通常可表示为点分十进制数,范围从224.0.0.0到239.255.255.255。能够接收发往一个特定多播组地址数据的主机集合称为主机组(hostgroup)。一个主机组可跨越多个网络。主机组中成员可随时加入或离开主机组。主机组中对主机的数量没有限制,同时不属于某一主机组的主机可以向该组发送信息。
|
||||
* E类IP地址
|
||||
IP地址中凡是以“llll0”开头的E类IP地址都保留用于将来和实验使用。
|
||||
* 特殊的网址
|
||||
每一个主机号都为0的地址(“0.0.0.0”)对应于当前主机;
|
||||
每一个主机号都为1的IP地址(“184.289.255.255”)是当前子网的广播地址;网络ID的第一个6位组也不能全置为“0”,全“0”表示本地网络。127.X.X.X是保留地址,用做循环测试用的。
|
||||
|
||||
### CIDR编址
|
||||
|
||||
当前采用的地址分配策略为CIDR(Classless Inter-Domain Routing)无类别域间选路。CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
|
||||
|
||||
在这种编址方案中IP地址被分为网络号和主机号两部分,并且具有形式a.b.c.d/x,其中x指示了第一部分中的比特数。前x比特被称为该地址的前缀。该组织内部的设备得IP都将具有该前缀,因而对于外部的路由器,它只需要一条指向该前缀的路由即可。当数据报进入该组织内部网络后,内部的路由器将根据32/x比特的信息转发数据报。
|
||||
|
||||
|
||||
### 地址分配管理
|
||||
1. 地址管理和获取
|
||||
|
||||
用户需要从ISP获取一个IP地址或地址块,而ISP则向它的上一级ISP获取地址块,最终所有的地址都来自于ICANN,因特网名字与号码分配机构。
|
||||
|
||||
2. 获取主机地址
|
||||
|
||||
将IP分配给接口有两种方式,手动配置或动态配置。动态配置是通过DHCP,即动态主机配置协议实现的。可以用于获取IP信息,获取子网掩码,第一跳路由器,DNS服务器地址等等信息。
|
||||
|
||||
3. 私有地址
|
||||
|
||||
A类IP地址
|
||||
一个A类IP地址是指, 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。A类IP地址中网络的标识长度为8位,主机标识的长度为24位,A类网络地址数量较少,可以用于主机数达1600多万台的大型网络。
|
||||
A类IP地址 地址范围1.0.0.0到126.255.255.255[2](二进制表示为:00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111111)。最后一个是广播地址。
|
||||
A类IP地址的子网掩码为255.0.0.0,每个网络支持的最大主机数为256的3次方-2=16777214台。
|
||||
B类IP地址
|
||||
一个B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码。如果用二进制表示IP地址的话,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为16位,主机标识的长度为16位,B类网络地址适用于中等规模的网络,每个网络所能容纳的计算机数为6万多台。
|
||||
B类IP地址地址范围128.0.0.0-191.255.255.255[1](二进制表示为:10000000 00000000 00000000 00000001----10111111 11111111 11111111 11111110)。 最后一个是广播地址。
|
||||
B类IP地址的子网掩码为255.255.0.0,每个网络支持的最大主机数为256的2次方-2=65534台
|
||||
C类IP地址
|
||||
一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。如果用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为24位,主机标识的长度为8位,C类网络地址数量较多,适用于小规模的局域网络,每个网络最多只能包含254台计算机。
|
||||
C类IP地址范围192.0.0.0-223.255.255.255[1](二进制表示为: 11000000 00000000 00000000 00000001 - 11011111 11111111 11111111 11111110)。
|
||||
C类IP地址的子网掩码为255.255.255.0,每个网络支持的最大主机数为256-2=254台
|
||||
D类IP地址
|
||||
D类地址被IP用作多播。多播为IP提供了向过个目地转发数据的能力。
|
||||
D类地址的28bit均用作多播组号而不再表示其他。多播组地址包括为1110的最高4bit和多播组号。它们通常可表示为点分十进制数,范围从224.0.0.0到239.255.255.255。
|
||||
能够接收发往一个特定多播组地址数据的主机集合称为主机组(hostgroup)。一个主机组可跨越多个网络。主机组中成员可随时加入或离开主机组。主机组中对主机的数量没有限制,同时不属于某一主机组的主机可以向该组发送信息。
|
||||
一些多播组地址被IANA确定为知名地址。它们也被当作永久主机组。
|
||||
特殊的网址
|
||||
每一个字节都为0的地址(“0.0.0.0”)对应于当前主机;
|
||||
IP地址中的每一个字节都为1的IP地址(“255.255.255.255”)是当前子网的广播地址;
|
||||
IP地址中凡是以“llll0”开头的E类IP地址都保留用于将来和实验使用。
|
||||
IP地址中不能以十进制“127”作为开头,该类地址中数字127.0.0.1到127.255.255.255用于回路测试,如:127.0.0.1可以代表本机IP地址,用“http://127.0.0.1”就可以测试本机中配置的Web服务器。
|
||||
网络ID的第一个6位组也不能全置为“0”,全“0”表示本地网络。
|
||||
2.CIDR编址
|
||||
当前采用的地址分配策略为无类别域间选路(CIDR)。CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。在分类编址方案中,只有A,B,C三类地址可用,但是对于有的组织来说,它的大小可能位于B和C类之间,如果用C类地址,不够用,而用B类地址又会导致宝贵的地址资源的浪费。采用CIDR方案即可解决这个问题。
|
||||
在这种编址方案中IP地址被分为网络部分和主机部分两部分,并且具有形式a.b.c.d/x,其中x指示了第一部分中的比特数。前x比特被称为该地址的前缀。该组织内部的设备得IP都将具有该前缀,因而对于外部的路由器,它只需要一条指向该前缀的路由即可。当数据报进入该组织内部网络后,内部的路由器将根据32-x比特的信息转发数据报。
|
||||
CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。
|
||||
2.地址分配管理
|
||||
1.地址管理和获取
|
||||
虽然知道了IP的格式,但是用户不可能随意定义自己的IP。做个简单的比方,你不可能给你自家所在的地方随意起个名字,然后就让快递公司给你送件,快递公司是不知道你自定义的这个地址的信息的。为了获得一个可以工的IP地址,这个IP必须是被因特网中的路由器所承认的,为什么是路由器?因为路由器决定了数据报怎么选路,怎么转发,因而只有路由器能够将数据报转发给你的主机,你的主机才算是接入了网络,因而从这个意义说,路由器在因特网中扮演了核心角色。
|
||||
从因特网的结构上来说,用户需要从ISP获取一个IP地址或地址块,而ISP则向它的上一级ISP获取地址块,最终所有的地址都来自于ICANN,因特网名字与号码分配机构。
|
||||
2.获取主机地址
|
||||
上边描述的是地址的来源和管理方式。但是并没有真正将地址分配给接口。从技术上来说,将IP分配给接口有两种方式,手动配置或动态配置。更常用的是动态配置,因为这更加灵活方便,也可以降低 管理员的负担。动态配置是通过DHCP,即动态主机配置协议实现的。它不仅可以用于获取IP信息,它还可以获取子网掩码,第一条路由器,DNS服务器地址等等信息,因而也是很重要很常用的一个协议。
|
||||
3.私有地址
|
||||
ICANN只管理公共地址,还有部分地址私有地址。私有地址(Private address)属于非注册地址,专门为组织机构内部使用。
|
||||
以下列出留用的内部私有地址
|
||||
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
|
||||
3.NAT和UPnP
|
||||
1.NAT
|
||||
网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
|
||||
NAT将自动修改IP报文的源IP地址和目的IP地址,IP地址校验则在NAT处理过程中自动完成。有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以还需要同时对报文的数据部分进行修改,以匹配IP头中已经修改过的源IP地址。否则,在报文数据部分嵌入IP地址的应用程序就不能正常工作。
|
||||
|
||||
## 3 NAT网络地址转换
|
||||
|
||||
### 作用
|
||||
|
||||
网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术。NAT解决了lP地址不足的问题,能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
|
||||
|
||||
### 原理
|
||||
|
||||
NAT将自动修改IP报文的源IP地址和目的IP地址,IP地址校验则在NAT处理过程中自动完成。同时对报文的数据部分进行修改,以匹配IP头中已经修改过的源IP地址。在内部都使用了一张NAT转换表,它记录了地址转换的相关信息。
|
||||
|
||||
NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。
|
||||
静态转换:是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
|
||||
动态转换:是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
|
||||
端口多路复用(Port address Translation,PAT):是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。
|
||||
无论采用哪种方式,在内部都使用了一张NAT转换表,它记录了地址转换的相关信息。
|
||||
NAT也有一些争议:
|
||||
它使用了端口号,而端口号在设计中是为了区分网络程序的。
|
||||
它使得路由器必须处理网络层以上的信息,违反了分层原则
|
||||
它违反了端到端原则,即主机之间应相互直接通信
|
||||
2.UPnP
|
||||
UPnP指的是通用即插即用,它可以用来支持NAT穿越。它要求主机和NAT是UPnP兼容的。使用它时,在一台主机上运行的应用程序能够为某些请求的公告端口号请求一个NAT映射,该映射位于(私有IP地址,私有端口号)和(公共IP地址,公共端口号)之间。如果NAT接受了这个请求,并且声称该映射,则来自外部的节点就能够发起到(公共IP地址,公共端口号)的TCP连接。
|
||||
三、ICMP
|
||||
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
|
||||
ICMP属于网络层协议,它提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。
|
||||
ICMP报文如下:
|
||||
|
||||
* 静态转换:是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
|
||||
|
||||
* 动态转换:是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
|
||||
* 端口多路复用(Port address Translation,PAT):是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。
|
||||
|
||||
|
||||
|
||||
### UPnP通用即插即用
|
||||
|
||||
|
||||
UPnP(Universal Plug and Play)指的是通用即插即用,它可以用来支持NAT穿越。它要求主机和NAT是UPnP兼容的。使用它时,在一台主机上运行的应用程序能够请求一个NAT映射,该映射位于(私有IP地址,私有端口号)和(公共IP地址,公共端口号)之间。如果NAT接受了这个请求,并且声称该映射,则来自外部的节点就能够发起到(公共IP地址,公共端口号)的TCP连接。
|
||||
|
||||
## 4 ICMP协议
|
||||
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
|
||||
|
||||
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。ICMP属于网络层协议,它提供一致易懂的出错报告信息,但在IP协议之上,也应该属于应用层协议,但是协议服务于网络层。
|
||||
|
||||
### ICMP报文
|
||||
|
||||

|
||||
|
||||
ICMP报文可以分为两大类:ICMP查询报文和ICMP差错报文。
|
||||
对于ICMP差错报文,ICMP报文总是会包含引起该ICMP报文首次产生的IP数据报的首部和前8字节的内容,而且以下情形不会产生ICMP差错报文:
|
||||
ICMP差错报文。
|
||||
的地址是广播地址或多播地址的IP数据报。
|
||||
作为链路层广播的数据报。
|
||||
不是IP分片的第一片。
|
||||
源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。
|
||||
|
||||
对于ICMP差错报文,ICMP报文总是会包含引起该ICMP报文首次产生的IP数据报的首部和前8字节的内容
|
||||
|
||||
|
||||
ICMP查询报文被用来查询网络相关的一些信息,比如回显应答和请求(ping),路由器请求和通告,时间戳等。
|
||||
四、IPv6
|
||||
现在广泛使用的IP技术是IPv4,它存在一些问题:
|
||||
地址空间的局限性: I P地址空间的危机由来已久,并正是升级的主要动力。
|
||||
性能:尽管I P表现得不错,一些源自2 0年甚至更早以前的设计还能够进一步改进。
|
||||
安全性:安全性一直被认为是由网络层以上的层负责,但它现在已经成为IP的下一个版本可以发挥作用的地方。
|
||||
自动配置:对于I P v 4节点的配置一直比较复杂,而网络管理员与用户则更喜欢“即插即用”,即:将计算机插在网络上然后就可以开始使用。I P主机移动性的增强也要求当主机在不同网络间移动和使用不同的网络接入点时能提供更好的配置支持。
|
||||
这些问题是IP升级的动力,下一代的IP技术室IP版本6即IPv6。
|
||||
相对于IPv4,IPv6的变化主要包括:
|
||||
扩展地址。地址扩展到了128比特,地址空间增大了2的96次方倍。
|
||||
简化头格式。字段只有8个,加快报文转发,提高了吞吐量。
|
||||
增强对于扩展和选项的支持。可以支持更多的服务,也简化了报文转发的处理。
|
||||
流标记。路由器需要对流进行跟踪并保持一定的信息,这些信息在流中的每个包中都是不变的。这种方法使路由器可以对流中的包进行高效处理。
|
||||
身份验证和保密。身份认证和隐私权是IPV6的关键特性。
|
||||
1.IPv6头部
|
||||
|
||||
|
||||
## 5 IPv6协议
|
||||
|
||||
### IPv4存在问题
|
||||
|
||||
* 地址空间的局限性: IP地址空间的危机由来已久,并正是升级的主要动力。
|
||||
* 性能:尽管IP表现得不错,一些源自20年甚至更早以前的设计还能够进一步改进。
|
||||
* 安全性:安全性一直被认为是由网络层以上的层负责,但它现在已经成为IP的下一个版本可以发挥作用的地方。
|
||||
* 自动配置:对于IPv4节点的配置一直比较复杂,而网络管理员与用户则更喜欢“即插即用”,即:将计算机插在网络上然后就可以开始使用。IP主机移动性的增强也要求当主机在不同网络间移动和使用不同的网络接入点时能提供更好的配置支持。
|
||||
|
||||
### IPv6的变化
|
||||
* 扩展地址。地址扩展到了128比特,地址空间增大了2的96次方倍。
|
||||
* 简化头格式。字段只有8个,加快报文转发,提高了吞吐量。
|
||||
* 增强对于扩展和选项的支持。可以支持更多的服务,也简化了报文转发的处理。
|
||||
* 流标记。路由器需要对流进行跟踪并保持一定的信息,这些信息在流中的每个包中都是不变的。这种方法使路由器可以对流中的包进行高效处理。
|
||||
* 身份验证和保密。身份认证和隐私权是IPV6的关键特性。
|
||||
|
||||
|
||||
### IPv6数据报
|
||||
IPv6头部如下图所示:
|
||||
|
||||

|
||||
|
||||
* 版本。长度为4位,对于IPv6,该字段必须为6。
|
||||
* 类别。长度为8位,指明为该包提供了某种“区分服务”。该字段的定义独立于IPv6,目前尚未在任何RFC中定义。该字段的默认值是全0。
|
||||
* 流标签。长度为20位,用于标识属于同一业务流的包。一个节点可以同时作为多个业务流的发送源。流标签和源节点地址唯一标识了一个业务流。
|
||||
* 净荷长度。长度为16位,其中包括包净荷的字节长度,即IPv6头后的包中包含的字节数。这意味着在计算净荷长度时包含了IPv6扩展头的长度。
|
||||
* 下一个头。这个字段指出了IPv6头后所跟的头字段中的协议类型。与IPv4协议字段类似,下一个头字段可以用来指出高层是TCP还是UDP,但它也可以用来指明IPv6扩展头的存在。
|
||||
* 跳极限。长度为8位。每当一个节点对包进行一次转发之后,这个字段就会被减1。如果该字段达到0,这个包就将被丢弃。
|
||||
* 源IP地址。长度为128位,指出了IPv6包的发送方地址。
|
||||
* 目的IP地址。长度为128位,指出了IPv6包的接收方地址。这个地址可以是一个单播、多播或任意点播地址。如果使用了选路扩展头(其中定义了一个包必须经过的特殊路由),其目的地址可以是其中某一个中间节点的地址而不必是最终地址。
|
||||
|
||||
|
||||
### 与IPv4数据报相比的变化
|
||||
* 包头长度不存在了因为IPv6的头是固定长度。
|
||||
* 服务类型字段变成了流类别。
|
||||
* 数据报长度变成了净荷长度。IPv6的净荷长度中包含了扩展头,而IPv4数据报长度字段中则指明包含包头在内的整个数据报的长度。因而在IPv4中,路由器需要将数据报长度减去包头长度来计算包的净荷长度,而在IPv6中则无须这种计算。
|
||||
* 数据报ID,标识和标志三个字段被删除了,因为它们在IPv4中用于数据报分片,但是IPv6中分片通过分片扩展头来实现而且必须在源设备完成。
|
||||
* 生存字段变成了跳极限,使用方式类似
|
||||
* 协议字段变成了下一个头。v4中协议字段用来指示高层的协议类别,但是这里的下一个头可以用来指示扩展头或者高层协议头。
|
||||
* 头部校验和被删除,因为由于如TCP和UDP等高层协议均计算头的校验和,IPv4头校验显得有些多余,因此这个字段在IPv6中已消失。对于那些真的需要对内容进行身份验证的应用, IPv6中提供了身份验证头。
|
||||
* 源目地址被扩展到了128比特。
|
||||
|
||||
|
||||
## 6 ipv6地址
|
||||
|
||||
### 地址表达方式
|
||||
|
||||
IPv6地址的基本表达方式是X:X:X:X:X:X:X:X,其中X是一个4位十六进制整数(16位)。每一个数字包含4位,每个整数包含4个数字,每个地址包括8个整数,共计128位(4×4×8=128)。下面是一些合法的IPv6地址:
|
||||
* CDCD:910A:2222:5498:8475:1111:3900:2020
|
||||
* 1030:0:0:0:C9B4:FF12:48AA:1A2B
|
||||
* 2000:0:0:0:0:0:0:1
|
||||
|
||||
|
||||
在IPv4和IPv6的混合环境中。IPv6地址中的最低32位可以用于表示IPv4地址,该地址可以按照一种混合方式表达,即X:X:X:X:X:X:d.d.d.d,其中X表示一个16位整数,而d表示一个8位十进制整数。例如,地址
|
||||
* 0:0:0:0:0:0:10.0.0.1
|
||||
|
||||
版本。长度为4位,对于IPv6,该字段必须为6。
|
||||
类别。长度为8位,指明为该包提供了某种“区分服务”。该字段的定义独立于IPv6,目前尚未在任何RFC中定义。该字段的默认值是全0。
|
||||
流标签。长度为20位,用于标识属于同一业务流的包。一个节点可以同时作为多个业务流的发送源。流标签和源节点地址唯一标识了一个业务流。
|
||||
净荷长度。长度为16位,其中包括包净荷的字节长度,即IPv6头后的包中包含的字节数。这意味着在计算净荷长度时包含了IPv6扩展头的长度。
|
||||
下一个头。这个字段指出了IPv6头后所跟的头字段中的协议类型。与IPv6协议字段类似,下一个头字段可以用来指出高层是TCP还是UDP,但它也可以用来指明IPv6扩展头的存在。
|
||||
跳极限。长度为8位。每当一个节点对包进行一次转发之后,这个字段就会被减1。如果该字段达到0,这个包就将被丢弃。
|
||||
源地址。长度为128位,指出了IPv6包的发送方地址。
|
||||
目的地址。长度为128位,指出了IPv6包的接收方地址。这个地址可以是一个单播、多播或任意点播地址。如果使用了选路扩展头(其中定义了一个包必须经过的特殊路由),其目的地址可以是其中某一个中间节点的地址而不必是最终地址。
|
||||
与IPv4相比的变化有:
|
||||
包头长度不存在了因为IPv6的头是固定长度。
|
||||
服务类型字段变成了流类别。
|
||||
数据报长度变成了净荷长度。IPv6的净荷长度中包含了扩展头,而IPv4数据报长度字段中则指明包含包头在内的整个数据报的长度。因而在IPv4中,路由器需要将数据报长度减去包头长度来计算包的净荷长度,而在IPv6中则无须这种计算。
|
||||
数据报ID,标识和标志三个字段被删除了,因为它们在IPv4中用于数据报分片,但是IPv6中分片通过分片扩展头来实现而且必须在源设备完成。
|
||||
生存字段变成了跳极限,使用方式类似
|
||||
协议字段变成了下一个头。v4中协议字段用来指示高层的协议类别,但是这里的下一个头可以用来指示扩展头或者高层协议头。
|
||||
头部校验和被删除,因为由于如TCP和UDP等高层协议均计算头的校验和, IPv4头校验显得有些多余,因此这个字段在IPv6中已消失。对于那些真的需要对内容进行身份验证的应用, IPv6中提供了身份验证头。
|
||||
源目地址被扩展到了128比特。
|
||||
2.编址
|
||||
1.地址表达方式
|
||||
IPv6地址长度4倍于IPv4地址,表达起来的复杂程度也是IPv4地址的4倍。IPv6地址的基本表达方式是X:X:X:X:X:X:X:X,其中X是一个4位十六进制整数(16位)。每一个数字包含4位,每个整数包含4个数字,每个地址包括8个整数,共计128位(4×4×8=128)。例如,下面是一些合法的IPv6地址:
|
||||
CDCD:910A:2222:5498:8475:1111:3900:2020
|
||||
1030:0:0:0:C9B4:FF12:48AA:1A2B
|
||||
2000:0:0:0:0:0:0:1
|
||||
请注意这些整数是十六进制整数,其中A到F表示的是10到15。地址中的每个整数都必须表示出来,但起始的0可以不必表示。这是一种比较标准的IPv6地址表达方式,此外还有另外两种更加清楚和易于使用的方式。
|
||||
某些IPv6地址中可能包含一长串的0(就像上面的第二和第三个例子一样)。当出现这种情况时,标准中允许用“空隙”来表示这一长串的0。换句话说,地址
|
||||
2000:0:0:0:0:0:0:1
|
||||
可以被表示为:
|
||||
2000::1
|
||||
这两个冒号表示该地址可以扩展到一个完整的128位地址。在这种方法中,只有当16位组全部为0时才会被两个冒号取代,且两个冒号在地址中只能出现一次。
|
||||
在IPv4和IPv6的混合环境中可能有第三种方法。IPv6地址中的最低32位可以用于表示IPv4地址,该地址可以按照一种混合方式表达,即X:X:X:X:X:X:d.d.d.d,其中X表示一个16位整数,而d表示一个8位十进制整数。例如,地址
|
||||
0:0:0:0:0:0:10.0.0.1
|
||||
就是一个合法的IPv4地址。把两种可能的表达方式组合在一起,该地址也可以表示为:
|
||||
::10.0.0.1
|
||||
由于IPv6地址被分成两个部分—子网前缀和接口标识符,因此人们期待一个IP节点地址可以按照类似CIDR地址的方式被表示为一个携带额外数值的地址,其中额外数值指出了地址中有多少位是掩码。即,IPv6节点地址中指出了前缀长度,该长度与IPv6地址间以斜杠区分,例如:
|
||||
1030:0:0:0:C9B4:FF12:48AA:1A2B/60
|
||||
* 1030:0:0:0:C9B4:FF12:48AA:1A2B/60
|
||||
这个地址中用于选路的前缀长度为60位。
|
||||
|
||||
|
||||
IPv6128比特地址空间的划分如下图:
|
||||

|
||||
|
||||
|
||||
2.寻址模型
|
||||
### 寻址模型
|
||||
IPv6寻址模型与IPv4很相似。每个单播地址标识一个单独的网络接口。IP地址被指定给网络接口而不是设备,因此一个拥有多个网络接口的设备可以具备多个IPv6地址,其中任何一个IPv6地址都可以代表该设备。尽管一个网络接口能与多个单播地址相关联,但一个单播地址只能与一个网络接口相关联。每个网络接口必须至少具备一个单播地址。
|
||||
这里有一个非常重要的声明和一个非常重要的例外。这个声明与点到点链路的使用有关。在IPv4中,所有的网络接口,其中包括连接一个设备与路由器的点到点链路(用许多拨号Internet连接中),都需要一个专用的IP地址。随着许多机构开始使用点到点链路来连接其分支机构,每条链路均需要其自己的子网,这样一来消耗了许多地址空间。在IPv6中,如果点到点链路的任何一个端点都不需要从非邻居设备接受和发送数据的话,它们就可以不需要特殊的地址。即,如果两个设备主要是传递业务流,则它们并不需要具备IPv6地址。
|
||||
为每个网络接口分配一个全球唯一的单播地址的要求阻碍了IPv4地址的扩展。一个提供通用服务的服务器在高需求量的情况下可能会崩溃。因此,IPv6地址模型中又提出了一个重要的例外:如果硬件有能力在多个网络接口上正确地共享其网络负载的话,那么多个网络接口可以共享一个IPv6地址。这使得从服务器扩展至负载分担的服务器群成为可能,而不再需要在服务器的需求量上升时必须进行硬件升级。
|
||||
3.地址类型
|
||||
|
||||
|
||||
### 地址类型
|
||||
IPv6地址有三种类型:单播、多播和任意点播。广播地址已不再有效。RFC 2373中定义了三种IPv6地址类型:
|
||||
单播:一个单接口的标识符。送往一个单播地址的包将被传送至该地址标识的接口上。
|
||||
泛播:一组接口(一般属于不同节点)的标识符。送往一个泛播地址的包将被传送至该地址标识的接口之一(根据选路协议对于距离的计算方法选择“最近”的一个)。
|
||||
多播:一组接口(一般属于不同节点)的标识符。送往一个多播地址的包将被传送至有该地址标识的所有接口上。
|
||||
1.单播
|
||||
单播地址标识了一个单独的IPv6接口。一个节点可以具有多个IPv6网络接口。每个接口必须具有一个与之相关的单播地址。单播地址可被认为包含了一段信息,这段信息被包含在128位字段中:该地址可以完整地定义一个特定的接口。此外,地址中数据可以被解释为多个小段的信息。但无论如何,当所有的信息被放在一起后,将构成标识一个节点接口的128位地址。
|
||||
IPv6地址本身可以为节点提供关于其结构的或多或少的信息,这主要根据是由谁来观察这个地址以及观察什么。例如,节点可能只需简单地了解整个128位地址是一个全球唯一的标识符,而无须了解节点在网络中是否存在。另一方面,路由器可以通过该地址来决定,地址中的一部分标识了一个特定网络或子网上的一个唯一节点。
|
||||
RFC 2373定义的IPv6单播地址格式如下:
|
||||
1. 单播:一个单接口的标识符。送往一个单播地址的包将被传送至该地址标识的接口上。
|
||||
|
||||

|
||||
|
||||
1. 泛播:一组接口(一般属于不同节点)的标识符。送往一个泛播地址的包将被传送至该地址标识的接口之一(根据选路协议对于距离的计算方法选择“最近”的一个)。
|
||||
|
||||

|
||||
|
||||
1. 多播:一组接口(一般属于不同节点)的标识符。送往一个多播地址的包将被传送至有该地址标识的所有接口上。
|
||||
|
||||
|
||||
IPv6单播地址包括下面几种类型:
|
||||
可集聚全球地址。
|
||||
未指定地址或全0地址。
|
||||
回返地址。
|
||||
嵌有IPv4地址的IPv6地址。
|
||||
基于供应商和基于地理位置的供应商地址。
|
||||
OSI网络服务访问点(NSAP)地址。
|
||||
网络互联包交换(IPX)地址。
|
||||
2.多播
|
||||
多播用于标识一组节点,它的工作过程是:当设备预订多播地址时,它声明要成为多播的一个成员。于是任何本地路由器将以该节点的名义预订多播地址。同一网络上的其他设备要发送信息到该多播地址时,IP多播包将被封装到链路层多播数据传输单元中。并发送给设备。
|
||||
IPv6多播地址格式如下图:
|
||||
## 7 常见地址说明
|
||||
|
||||
### MAC地址
|
||||
|
||||
### IPV4地址
|
||||
|
||||
### IPV6地址
|
||||
|
||||
### 广播地址
|
||||
|
||||
主机位都为1,是广播地址。
|
||||
|
||||
|
||||
多播地址只能用作目的地址,没有数据报把多播地址用作源地址。地址格式中的第1个字节为全“1”,标识其为多播地址。多播地址占了IPv6
|
||||
地址空间的整整1/256。多播地址格式中除第1字节外的其余部分,包括如下三个字段:
|
||||
标志字段:由4个单个位标志组成。从左到右分别为:
|
||||
最高位为保留位,必须为 0。
|
||||
R 位取0 表示非内嵌RP 的组播地址;取1 则表示内嵌RP 的组播地址,此时P、T 位也必须置1。
|
||||
P 位取0 表示非基于单播前缀的组播地址;取1 则表示基于单播前缀的组播地址,此时T 位也必须置1。
|
||||
T 位取0 表示永久分配组播地址;取1 则表示非永久分配的组播地址。
|
||||
范围字段:长4位,用来表示多播的范围。即,多播组是只包括同一本地网、同一站点、同一机构中的节点,还是包括IPv6全球地址空间中任何位置的节点。该4位的可能值为0~15,
|
||||
组标识符字段:长112位,用于标识多播组。根据多播地址是临时的还是熟知的以及地址的范围,同一个多播标识符可以表示不同的组。永久多播地址用指定的赋予特殊含义的组标识符,组中的成员既依赖于组标识符,又依赖于范围。
|
||||
多播范围取值及其意义如图:
|
||||
### 网络地址(网络号)、主机地址(主机号)、子网掩码
|
||||
|
||||
|
||||
将IP地址分为网络地址与主机地址。通过子网掩码,就可以判断两个IP在不在一个局域网内部。子网掩码可以看出有多少位是网络号,有多少位是主机号。
|
||||
|
||||
|
||||
### 网关接口
|
||||
|
||||
网间连接器、协议转换器。实现局域网与广域网的互联。
|
||||
|
||||
## 8 常见表格说明
|
||||
|
||||
### 路由表
|
||||
|
||||
### 交换机表
|
||||
|
||||
### ARP表
|
||||
|
||||
### NAT表
|
||||
|
||||
|
||||
3.泛播
|
||||
多播地址在某种意义上可以由多个节点共享。多播地址成员的所有节点均期待着接收发给该地址的所有包。泛播地址与多播地址类似,同样是多个节点共享一个泛播地址,不同的是,只有一个节点期待接收给泛播地址的数据报。
|
||||
泛播对提供某些类型的服务特别有用,尤其是对于客户机和服务器之间不需要有特定关系的一些服务,例如域名服务器和时间服务器。名字服务器就是个名字服务器,不论远近都应该工作得一样好。同样,一个近的时间服务器,从准确性来说,更为可取。因此当一个主机为了获取信息,发出请求到泛播地址,响应的应该是与该泛播地址相关联的最近的服务器。
|
||||
1.泛播地址的分配及其格式
|
||||
泛播地址被分配在正常的IPv6单播地址空间以外。因为泛播地址在形式上与单播地址无法区分开,一个泛播地址的每个成员,必须显式地加以配置,以便识别泛播地址。
|
||||
2.泛播选路
|
||||
一个泛播地址必定带有一个选路项:该选路项包括一些指针,指向共享该泛播地址的所有节点的网络接口。这个信息将被用于路由器的选路。
|
||||
3.其它
|
||||
类似于IPv4,IPv6也使用了ICMP和DHCP,这两个协议都有对应于IPv6的版本。详细的信息可参考相关协议。
|
||||
@@ -1,89 +1,116 @@
|
||||
# 网络层-选路算法
|
||||
网络中的主机通常都直接与一台路由器相连接,该路由器即为该主机的默认路由器,它是该主机的第一跳路由器。每当主机发送一个分组时,它都首先将分组发送给起默认路由器,在接收端,目的主机的默认路由器把来自于网络上其它主机的分组转发给目的主机,因而网络中从源主机到目的主机的选路就是从源主机的默认路由器(也可以成为源路由器)到目的主机的默认路由器(也可以成为目的路由器)之间的选路问题。
|
||||
选路算法的目的很简单:给定一组路由器以及连接路由器的链路,选路算法要找到一条从源路由器到目的路由器之间的“好"路径。通常好路径指的是最低费用的路径。由于网络中的路由器组成的拓扑是典型的图结构,因而可以用图来研究选路问题。
|
||||
|
||||
## 1 路由概述
|
||||
|
||||
网络中的主机通常都直接与一台路由器相连接,该路由器即为该主机的默认路由器,它是该主机的第一跳路由器。
|
||||
|
||||
每当主机发送一个分组时,它都首先将分组发送给起默认路由器,在接收端,目的主机的默认路由器把来自于网络上其它主机的分组转发给目的主机,因而网络中从源主机到目的主机的选路就是从源主机的默认路由器(也可以成为源路由器)到目的主机的默认路由器(也可以成为目的路由器)之间的选路问题。
|
||||
|
||||
### 选路算法的目的
|
||||
|
||||
给定一组路由器以及连接路由器的链路,选路算法要找到一条从源路由器到目的路由器之间的“好"路径。通常好路径指的是最低费用的路径。由于网络中的路由器组成的拓扑是典型的图结构,因而可以用图来研究选路问题。
|
||||
|
||||
在网络图中,节点表示路由器,边表示路由器之间的链路。给边赋予一个表示费用的值(费用可以为链路速度,金钱,线路长度等等),然后选路算法的目的就变为在图中找到给定的两点之间的具有最低费用的路径。
|
||||
1.选路算法的分类
|
||||
|
||||
### 选路算法的分类
|
||||
|
||||
根据选路算法是全局的还是局部的,选路算法可以分为:
|
||||
全局选路算法:用完整的,全局性的网络信息来计算从源到目的的最低费用路径。这种算法通常称为链路状态算法即LS算法,因为该算法必须知道网络中每条链路的费用。
|
||||
分布式选路算法:以迭代的、分布式的方式计算出最低费用路径。没有节点拥有关于所有网络链路费用的完整信息,而每个节点仅有与其直接相连链路的费用信息即可开始工作。然后通过迭代计算过程并与相邻节点交换信息,一个节点逐渐计算出到达目的节点或者一组目的节点的最低费用路径。
|
||||
还可以根据算法是静态的还是动态的来分类:
|
||||
静态选路算法:随着时间的推移,路由的变化非常缓慢,同时是在人的干预下进行调整。
|
||||
动态选路算法:能够在网络流量负载或者拓扑发生变化时改变选路路径。动态选路算法可以周期性的运行或者在拓扑或链路费用发生变化时直接运行。
|
||||
还可以根据算法是负载敏感的还是负载迟钝的进行划分:
|
||||
负载敏感算法:链路费用会动态的变化以反映底层链路的当前拥塞水平。当前的因特网选路算法都是负载迟钝的。
|
||||
2.链路状态选路算法
|
||||
链路状态算法需要网络拓扑和所有链路费用信息作为输入。实践中,这可以通过让所有节点都向网络中的而所有其它路由器广播链路状态分组来完成。每个链路状态分组包含了它所连接的链路的特征和费用。广播的结果是所有节点都具有了该网络的同一个完整的视图。于是每个节点都可以运行LS算法从而计算出相同的最低费用路径集合。
|
||||
根据图论的知识,可以使用Dijkstra算法来计算最短路径,它计算从某个节点到网络中所有其它节点的最低费用路径,它是一个迭代算法,在k次迭代后,就可以得到从源节点触发到k个节点的最短路径。(Prim算法也可以用于计算图中两个节点之间的最短路径,根据图论的知识,它适用于具有稀疏边的图。)算法的复杂度为O(n2)。
|
||||
LS算法可能会导致网络震荡,以下图为例:
|
||||
* 全局选路算法:用完整的,全局性的网络信息来计算从源到目的的最低费用路径。这种算法通常称为链路状态算法即LS算法,因为该算法必须知道网络中每条链路的费用。
|
||||
* 分布式选路算法:以迭代的、分布式的方式计算出最低费用路径。没有节点拥有关于所有网络链路费用的完整信息,而每个节点仅有与其直接相连链路的费用信息即可开始工作。然后通过迭代计算过程并与相邻节点交换信息,一个节点逐渐计算出到达目的节点或者一组目的节点的最低费用路径。
|
||||
|
||||
|
||||
假设在该网络中链路费用等同于链路上的负载,初始状态为:
|
||||
节点X和Z都发送到目的地W的一个单位的流量,且都选择它们与W直接相连的链路。
|
||||
Y有目的地为W的流量e,并走通过X到达W的链路。
|
||||
此时非0费用的链路有:
|
||||
X,W之间的链路费用为1+e
|
||||
Y,X之间的链路费用为e
|
||||
Z,W之间的链路费用为1
|
||||
当LS运行时,则
|
||||
节点X发现,它与W直接相连的链路的费用是1+e,而Y->Z->W这条路径的总费用是1,因而它选择走该链路
|
||||
节点Y发现,它走X->W的费用是1+e,而走Z->W的费用是1,因而选择Z->W的路径。
|
||||
节点Z的选路不变
|
||||
此时非0费用的链路有:
|
||||
X,Y之间的链路费用为1
|
||||
Y,Z之间的链路费用为1+e
|
||||
Z,W之间的链路费用为2+e
|
||||
当LS运行时,则
|
||||
节点X发现,它与W直接相连的链路的费用是0,而Y->Z->W这条路径的总费用是3+2e,因而它选择走与W直接相连的路径
|
||||
节点Y发现,它走X->W的费用是0,而走Z->W的费用是2+e,因而选择走X->W
|
||||
节点Z发现,它走Y->X->W的费用为0,而走直接连接W的链路的费用是2+e,因而它选择Y->X->W的路径
|
||||
此时非0费用的链路有:
|
||||
Z,Y之间的链路费用为1
|
||||
Y,X之间的链路费用为1+e
|
||||
X,W之间的链路费用为2+e
|
||||
LS算法继续运行,就会不断震荡,解决方案是确保并非所有的路由器都在同一时刻运行LS算法。做法是对于每台路由器,随机的选择发送链路通告的时间。
|
||||
3.距离向量选路算法
|
||||
根据算法是静态的还是动态的来分类:
|
||||
* 静态选路算法:随着时间的推移,路由的变化非常缓慢,同时是在人的干预下进行调整。
|
||||
* 动态选路算法:能够在网络流量负载或者拓扑发生变化时改变选路路径。动态选路算法可以周期性的运行或者在拓扑或链路费用发生变化时直接运行。
|
||||
|
||||
根据算法是负载敏感的还是负载迟钝的进行划分:
|
||||
* 负载敏感算法:链路费用会动态的变化以反映底层链路的当前拥塞水平。
|
||||
* 负载迟钝算法:当前的因特网选路算法(RIP、OSPF、BGP)都是负载迟钝的。
|
||||
|
||||
|
||||
## 2 链路状态选路算法(LS)
|
||||
|
||||
### LS算法原理
|
||||
链路状态算法需要网络拓扑和所有链路费用信息作为输入。通过让所有节点都向网络中的所有其它路由器广播链路状态分组来完成。
|
||||
|
||||
每个链路状态分组包含了它所连接的链路的特征和费用。广播的结果是所有节点都具有了该网络的同一个完整的视图。于是每个节点都可以运行LS算法从而计算出相同的最低费用路径集合。
|
||||
|
||||
根据图论的知识,可以使用Dijkstra算法来计算最短路径。Prim算法也可以用于计算图中两个节点之间的最短路径,它适用于具有稀疏边的图。算法的复杂度为O(n2)。
|
||||
|
||||
|
||||
## 3 距离向量选路算法(DV)
|
||||
|
||||
### DV算法概述
|
||||
距离向量算法DV(Distance-vector)是一种迭代的、异步的和分布的算法:
|
||||
分布式的:每个节点都要从一个活多个直接相连的邻居收集某些信息,执行计算,然后将结果发回个邻居。
|
||||
迭代的:该过程要一直持续到邻居之间没有更多的信息要交换为止。
|
||||
异步的:各个节点的操作不需要保持一致。
|
||||
DV算法,利用了Bellman-Ford方程:
|
||||
dx(y)=minv{c(x,v)+dv(y)}
|
||||
其中dx(y)表示从节点x到节点y的最低费用路径的费用。c(x,v)的含义是节点x到其邻居v的路径费用。方程式的含义是从节点x到节点y的最低费用路径的费用等于所有邻居v中c(x,v)+dv(y)最小的那个。
|
||||
在DV算法中,Bellman-Ford的一个重要的贡献就是,得到最小值的那个v节点就是当前节点向y转发时的下一跳节点,当需要向y转发时,只需要将分组送给节点v即可。算法思想:对于网络N中的素有节点,令Dx=[Dx(y):y属于N]是节点x的距离向量,该向量是从x到N中所有其它节点y的费用估计向量。每个节点x维护下列选路数据:
|
||||
对于每个邻居v,从x到直接相连的邻居v的费用为c(x,v)。
|
||||
节点x的距离向量,它包含了x到N中所有目的地的费用的估计值
|
||||
它的每个邻居的距离向量,即对x的每个邻居v有Dv=[Dv(y):y属于N]
|
||||
DV算法中,每个节点不时的向它的每个邻居发送它的距离向量的拷贝。当节点x收到他的邻居v的一个新的距离向量时,它保存v的距离向量,然后根据Bellman-Ford方程更新自己的距离向量。如果节点x的距离向量因这个更新而改变,则节点x将向它的每个邻居发送它的更新后的距离向量。
|
||||
从邻居接收更新距离向量,重新计算选路表项和通知邻居到目的地的最低费用路径的费用已经变化的过程会一直持续知道无更新报文发送为止。DV算法被用于因特网的RIP和BGP。
|
||||
1.距离向量算法:链路费用变化和链路故障
|
||||
* 分布式的:每个节点都要从一个或多个直接相连的邻居收集某些信息,执行计算,然后将结果发回个邻居。
|
||||
* 迭代的:该过程要一直持续到邻居之间没有更多的信息要交换为止。
|
||||
* 异步的:各个节点的操作不需要保持一致。
|
||||
|
||||
### DV算法原理
|
||||
1. DV算法,利用了Bellman-Ford方程。
|
||||
其中dx(y)表示从节点x到节点y的最低费用路径的费用。c(x,v)的含义是节点x到其邻居v的路径费用。方程式的含义是从节点x到节点y的最低费用路径的费用等于所有邻居v中c(x,v)+dv(y)最小的那个。
|
||||
$$
|
||||
d_x(y)=min_v{c(x,v)+d_v(y)}
|
||||
$$
|
||||
|
||||
|
||||
2. 在DV算法中,得到最小值的那个v节点就是当前节点向y转发时的下一跳节点,当需要向y转发时,只需要将分组送给节点v即可。算法思想:对于网络N中的素有节点,令Dx=[Dx(y):y属于N]是节点x的距离向量,该向量是从x到N中所有其它节点y的费用估计向量。每个节点x维护下列选路数据:
|
||||
* 对于每个邻居v,从x到直接相连的邻居v的费用为c(x,v)。
|
||||
* 节点x的距离向量,它包含了x到N中所有目的地的费用的估计值
|
||||
* 它的每个邻居的距离向量,即对x的每个邻居v有Dv=[Dv(y):y属于N]
|
||||
|
||||
3. DV算法中,每个节点不时的向它的每个邻居发送它的距离向量的拷贝。当节点x收到他的邻居v的一个新的距离向量时,它保存v的距离向量,然后根据Bellman-Ford方程更新自己的距离向量。如果节点x的距离向量因这个更新而改变,则节点x将向它的每个邻居发送它的更新后的距离向量。 从邻居接收更新距离向量,重新计算选路表项和通知邻居到目的地的最低费用路径的费用已经变化的过程会一直持续知道无更新报文发送为止。DV算法被用于因特网的RIP和BGP。
|
||||
|
||||
### DV算法过程
|
||||
1. 距离向量算法:链路费用变化和链路故障
|
||||
运行DV算法的节点在检测到其到邻居的链路费用发生变化时就会更新器距离向量,并且如果最低费用路径发生了变化,它就向邻居通知其新的距离向量。当链路费用降低时,DV算法可以就得到变化后的最低费用。但是如果是链路费用增加,则会出现一点问题,如下图所示拓扑:
|
||||
|
||||

|
||||
|
||||
链路费用变化前,网络拓扑如上图所示,则Dy(x)=4,Dy(z)=1, Dz(y)=1, Dz(x)=5,在t0时刻,y检测到链路费用变化(从4增加到40)。y会更新器最低费用路径,根据Bellman-Ford方程,其计算出来的值为6。但是观察这个时候的网络拓扑,显然这是不正确的。出现这个现象的原因是:y更新器距离向量时,利用了z通告给它的z的距离向量,Dz(x)=5,但是显然,Dz(x)是依赖于Dy(x)的,在Dy(x)变化后它显然是一个错误的值。更重要的是在这个时刻,会出现选路环路:为了到达x,y通过z选路,而z又选择通过y选路,这样的选路结果是分组无法到达目的地。
|
||||
y计算出来了一个新的到x的最低费用,因而它在t1时刻将新的距离向量通告给z
|
||||
z收到y的新的距离向量后更新其距离向量,它计算出来的新的Dz(x)=7
|
||||
该过程一直循环,直到计算出来一个正确的值Dy(x)=40,Dz(x)=41
|
||||
从上述过程可以看到使用DV算法时,坏消息传递的比较慢。而且上述过程只是一个链路的费用变高了,如果有多个链路的费用变高,则会遇到所谓的计数到无穷的问题。
|
||||
2.距离向量算法:增加毒性逆转
|
||||
|
||||
2. 距离向量算法:增加毒性逆转
|
||||
毒性逆转可以解决上述特定的网络拓扑中的环路状况。其思想是:如果z通过y选路,则z在通告y时会告诉y它(z)到x的距离是无穷大。毒性逆转只能解决这种特殊环路的问题,如果环路涉及到3个或更多的节点,则它也无能为力
|
||||
3.LS和DV算法比较
|
||||
DV算法中,每个节点仅与它的直接邻居交换信息,但它为它的邻居提供了通过它到达网络中(它所知道的)所有其它节点的最低费用估计。LS算法中,每个节点与所有节点交换信息,但它仅仅告其它节点与它直接相连的链路的费用。二者的比较
|
||||
报文复杂性:LS算法要求每个节点都要知道网络中每条链路的费用,因而它需要发送O(|N||E|)个报文,而且无论何时一条链路的费用发生变化,都必须向所有节点发送新的链路费用。DV算法要求在每次迭代时,在两个直接邻居之间交换报文。当链路费用发生变化时,仅当新的费用导致与该链路相连的节点的最低费用发生了变化时,才会传播已改变的链路费用。
|
||||
收敛速度:LS算法是一个O(n2)的算法,而DV算法收敛较慢,且在收敛时会遇到选路环路。
|
||||
健壮性:由于LS算法中每个节点都独立的计算自己的路由,因而这在一定程度上提供了健壮性。而DV算法中一个节点的不正确信息则会扩散到整个网络。
|
||||
4.层次选路
|
||||
采用层次选路的原因:
|
||||
规模:因特网由上亿台主机组成,如果不采用层次选路,则路由器需要存储选路信息会需要极大的内存,而且如果采用LS算法,则可以预期网络将淹没在LS广播中无法工作;如果采用DV算法,可以预期它根本就不会收敛。
|
||||
管理自治:某些组织可能倾向于按自己的意愿管理自己的网络,对外隐藏自己的内部网络面貌。
|
||||
|
||||
### LS和DV算法比较
|
||||
|
||||
DV算法中,每个节点仅与它的直接邻居交换信息,但它为它的邻居提供了通过它到达网络中(它所知道的)所有其它节点的最低费用估计。LS算法中,每个节点与所有节点交换信息,但它仅仅告其它节点与它直接相连的链路的费用。
|
||||
|
||||
* 报文复杂性:LS算法要求每个节点都要知道网络中每条链路的费用,因而它需要发送O(|N||E|)个报文,而且无论何时一条链路的费用发生变化,都必须向所有节点发送新的链路费用。DV算法要求在每次迭代时,在两个直接邻居之间交换报文。当链路费用发生变化时,仅当新的费用导致与该链路相连的节点的最低费用发生了变化时,才会传播已改变的链路费用。
|
||||
* 收敛速度:LS算法是一个O(n2)的算法,而DV算法收敛较慢,且在收敛时会遇到选路环路。
|
||||
* 健壮性:由于LS算法中每个节点都独立的计算自己的路由,因而这在一定程度上提供了健壮性。而DV算法中一个节点的不正确信息则会扩散到整个网络。
|
||||
|
||||
## 4 层次选路
|
||||
### 采用层次选路的原因:
|
||||
* 规模:因特网由上亿台主机组成,如果不采用层次选路,则路由器需要存储选路信息会需要极大的内存,而且如果采用LS算法,则可以预期网络将淹没在LS广播中无法工作;如果采用DV算法,可以预期它根本就不会收敛。
|
||||
|
||||
* 管理自治:某些组织可能倾向于按自己的意愿管理自己的网络,对外隐藏自己的内部网络面貌。
|
||||
|
||||
### 自治系统AS
|
||||
|
||||
解决这两个问题采用的方法是将路由器组织到自制系统(AS)。
|
||||
每个AS由一组通常在相同管理控制下的路由器组成,相同的AS内部的路由器都运行同样的选路算法,且具有彼此之间的信息。在一个自制系统内运行的选路算法叫自制系统内部选路协议。AS内的一台或多台路由器将有另外的任务,即负责向本AS之外的目的地转发分组,这些路由器被称为网关路由器。
|
||||
每个AS由一组通常在相同管理控制下的路由器组成,相同的AS内部的路由器都运行同样的选路算法,且具有彼此之间的信息。在一个自制系统内运行的选路算法叫**自制系统内部选路协议**。AS内的一台或多台路由器将有另外的任务,即负责向本AS之外的目的地转发分组,这些路由器被称为**网关路由器**。
|
||||
|
||||
当AS只有一个网关路由器时,AS内的路由器很容易将目的地不属于本AS的分组转发到网关路由器(因为AS内的路由器都知道自己到达网关路由器的最短路径),然后由网关路由器转发到AS外部。
|
||||
但是当AS有多个网关路由器时,AS就需要
|
||||
知道经过与自己的网关路由器相连的其它AS可以到达哪些目的地
|
||||
在本AS内部传播这些可达信息
|
||||
|
||||
* 知道经过与自己的网关路由器相连的其它AS可以到达哪些目的地
|
||||
* 在本AS内部传播这些可达信息
|
||||
|
||||
|
||||
这两项任务是由自治系统间选路协议完成的。因特网的所有AS都运行相同的自治系统间选路协议。每台路由器都接收来自一个AS内部的内部选路协议和一个AS间选路协议的信息,并使用这些信息配置自己的转发表。
|
||||
|
||||
|
||||
当一个AS通过自治系统间选路协议知道它可以通过自己的多个网关路由器到达某个目的地时,AS内部的路由器如何添加自己到该目的的路由?通常采用的策略是热土豆选路(hot potato routing),其思想是让AS尽快摆脱分组,即尽快将分组转发给其它AS,路由器将选择具有下列特性的网关路由器,然后根据本路由器到该网关路由器的路径添加路由:
|
||||
该网关路由器可以到达该目的地
|
||||
该网关路由器到本路由器具有最低费用路径
|
||||
* 该网关路由器可以到达该目的地
|
||||
* 该网关路由器到本路由器具有最低费用路径
|
||||
|
||||
|
||||
当一个AS从一个相邻AS知道了一个目的地时,它可以向它的某些其它邻居AS通告该路由信息,但是是否通告,通告哪些内容是一个AS的管理策略问题。取决于AS的配置管理策略。
|
||||
|
||||
|
||||
因此总结起来,在一个AS内部,所有路由器都运行相同的内部选路协议。在各AS之间,AS运行相同的自治系统间选路协议。AS内部的路由器仅需要知道本AS内部的路由器,AS的管理组织可以运行它选择的任何内部选路协议。
|
||||
@@ -1,89 +1,128 @@
|
||||
一、RIP
|
||||
在因特网中,AS即自制系统内部使用的两个选路协议是RIP(路由信息协议,Routing information Protocol)和OSPF(Open Shortcut Path First)。
|
||||
RIP是一种距离向量协议,运行方式和理想化的DV算法相似。在RIP中,DV算法中的费用采用的是跳数,即从源路由器到目的路由器的最短路径上的路由器数。RIP中一条路径的最大跳数被限制为15,因此RIP被限制用在网络直径不超过15的自制系统内。DV算法需要在路由器之间发送每个路由器的距离向量信息,RIP通过RIP通告(也称为RIP响应报文)来完成这个功能,RIP通告大约30秒相互交换一次。RIP通告包含了选路更新信息。
|
||||
每台路由器都维护有一张选路表,它包含了路由器的距离向量个该路由器的转发表。
|
||||
# 网络层-路由协议
|
||||
|
||||
> 在因特网中,AS即自制系统内部使用的两个选路协议是RIP(路由信息协议,Routing information Protocol)和OSPF(Open Shortcut Path First)。
|
||||
|
||||
## 1 因特网自制系统内部的路由选择:RIP
|
||||
|
||||
### RIP协议原理
|
||||
|
||||
RIP是一种距离向量协议,运行方式和理想化的DV算法相似。在RIP中,DV算法中的费用采用的是跳数,即从源路由器到目的路由器的最短路径上的路由器数。RIP中一条路径的最大跳数被限制为15,因此RIP被限制用在网络直径不超过15的自制系统内。
|
||||
|
||||
DV算法需要在路由器之间发送每个路由器的距离向量信息,RIP通过RIP通告(也称为RIP响应报文)来完成这个功能,RIP通告大约30秒相互交换一次。RIP通告包含了选路更新信息。每台路由器都维护有一张路由表,它包含了路由器的距离向量的该路由器的转发表。
|
||||
|
||||
运行RIP协议的路由器每隔30秒就会发送RIP通告,如果一台路由器超过180秒还没收到邻居的RIP通告,它就认为邻居不再可达。此时它会更新自己的距离向量,并向相邻路由器通告该信息。
|
||||
|
||||
RIP也允许路由器主动发送请求报文请求某个邻居更新其路由信息,这是通过发送RIP请求报文实现的。RIP协议使用了DUP协议并使用端口520。
|
||||
二、OSPF
|
||||
OSPF也用于自制系统内部,但是它通常被应用于较顶层的ISP中,而RIP一般用于较底层的ISP和企业网内。
|
||||
OSPF的核心是使用洪泛链路状态信息的链路状态协议和一个Dijkstra最低费用路径算法。使用OSPF时,每台路由器都有一副关于整个自制系统的链路状态的完整拓扑图。每台路由器在本地运行Dijkstra算法,以确定一颗以自己为根节点的到所有子网的最短路径。
|
||||
在OSPF中各条链路的费用是由管理员设置的,这样管理员就可以影响最短路径的选择,比如管理员可以采用将链路权重值按与链路容量成反比的方式来设置,这样在选路时,有限被选择的就是高带宽链路。OSPF没有强制的链路权值设置策略,它只提供了为给定链路权值确定最低费用路径的机制。
|
||||
|
||||
|
||||
## 2 因特网自治系统内部的路由选择:OSPF
|
||||
|
||||
### OSPF协议原理
|
||||
|
||||
OSPF也用于自制系统内部,但是它通常被应用于较顶层的ISP中,而RIP一般用于较底层的ISP和企业网内。OSPF的核心是使用洪泛链路状态信息的链路状态协议和一个Dijkstra最低费用路径算法。
|
||||
|
||||
使用OSPF时,每台路由器都有一副关于整个自制系统的链路状态的完整拓扑图。每台路由器在本地运行Dijkstra算法,以确定一颗以自己为根节点的到所有子网的最短路径。
|
||||
|
||||
在OSPF中各条链路的费用是由管理员设置的,这样管理员就可以影响最短路径的选择,比如管理员可以采用将链路权重值按与链路容量成反比的方式来设置。OSPF没有强制的链路权值设置策略,它只提供了,为给定权值的链路,确定最低费用路径的机制。
|
||||
|
||||
在OSPF中,路由器向自治系统内部的所有其它路由器广播选路信息。每当一条链路状态变化时,路由器就会广播链路状态信息。即使链路状态没有变化,OSPF也要周期性地广播链路状态(至少每隔30分钟)。
|
||||
|
||||
OSPF通告包括在OSPF报文中,OSPF报文直接运行在IP之上,它的协议号是89。
|
||||
OSPF的优点:
|
||||
安全:OSPF对路由器之间的OSPF报文进行了保护。
|
||||
多路径:OSPF允许到达某个目的地有多条费用相同的路径。(这可以通过为不同的IP服务类型创建不同的路由来实现。)
|
||||
支持单播和多播:MOSPF是对OSPF的扩展,它提供了多播选路。
|
||||
支持在单个选路域内的层次结构:OSPF具有按层次结构构造一个自制系统的能力。
|
||||
### OSPF的优点
|
||||
* 安全:OSPF对路由器之间的OSPF报文进行了保护。
|
||||
* 多路径:OSPF允许到达某个目的地有多条费用相同的路径。(这可以通过为不同的IP服务类型创建不同的路由来实现。)
|
||||
* 支持单播和多播:MOSPF是对OSPF的扩展,它提供了多播选路。
|
||||
* 支持在单个选路域内的层次结构:OSPF具有按层次结构构造一个自制系统的能力。
|
||||
|
||||
|
||||
一个OSPF自制系统可以配置成多个区域,每个区域都运行自己的OSPF算法,一个区域内的每台路由器都向该区域内的所有其它路由器广播其链路状态。在一个区域内,一台或多台区域边界路由器负责为发送到该区域以外的分组选路。
|
||||
在OSPF层次结构中,一个区域被配置成主干区域,它包含了AS内所有区域的区域边界路由器以及一些不在任何其它区域内的路由器,该区域的目的是为AS内其它区域之间的流量选路。
|
||||
三、BGP
|
||||
|
||||
## 3 因特网自治系统间的路由选择:BGP
|
||||
BGP是因特网中使用的自制系统间的选路协议,它极其复杂。
|
||||
四、广播和多播选路
|
||||
广播选路指的是网络层提供的从一个源节点到网络中所有其它节点的分组选路服务。
|
||||
多播选路指的是网络层提供的从一个源节点到网络中一组节点的分组选路服务。
|
||||
1.广播选路
|
||||
|
||||
|
||||
> 广播选路指的是网络层提供的从一个源节点到网络中所有其它节点的分组选路服务。多播选路指的是网络层提供的从一个源节点到网络中一组节点的分组选路服务。
|
||||
|
||||
|
||||
## 4 广播选路
|
||||
最直接的实现广播选路的方法是由发送节点向所有目的地发送分组的拷贝,这种方法看起来很简单,但是它有一些缺点使得它实用:
|
||||
效率低下,一个分组变成了N个分组,极大的浪费了带宽
|
||||
无法知道所有潜在目的地的地址,除非设计新的协议用于该目的,但是这无疑加大了其难度
|
||||
链路状态协议使用了广播来更新链路状态信息,在这种情况下,广播的目的是产生和更新单播路由,因而如果再反过来用单播来实现广播就变得不明智了
|
||||
因而必须采用其它方式来实现广播选路。
|
||||
1.无控制泛洪
|
||||
1. 无控制泛洪
|
||||
实现广播最显而易见的方式是使用泛洪,即所有节点都向除了它接收分组的那个邻居之外的所有邻居转发分组。只要网络是连通的,分组必然可以到达所有节点,但是根据最简单的图论知识也可以知道,分组将在整个网络内不受限制的被复制,直到它们的生存时间到期。这将形成广播风暴,导致网络变得不可用。
|
||||
2.受控泛洪
|
||||
2. 受控泛洪
|
||||
避免广播风暴的关键在于:每个节点可以选择泛洪分组的时机。有两种方案可以解决广播风暴的问题:
|
||||
序号控制泛洪:源节点将其地址以及广播序号放入广播分组,再向网络泛洪分组。每个节点维护它收到的、复制的和转发的每个广播分组的序号列表,每当它收到一个广播分组时,都检查该表,如果已经存在就不泛洪,否则泛洪,并将新的信息更新到该表中。
|
||||
反向路径转发(RPF):当一台路由器接收到具有给定源地址的广播分组时,仅当该分组到达的链路正好是位于它自己到其源的最短单播路径上时,它才泛洪分组。否则它丢弃分组。
|
||||
3.生成树广播
|
||||
3. 生成树广播
|
||||
受控泛洪解决了广播风暴的问题,但是网络中还是会存在冗余的广播分组。生成树方案可以解决该问题。
|
||||
生成树:包含网络中的所有节点的,并使用网络中的链路所连接起来的连通图。
|
||||
最小生成树:每段链路的费用之和在所有生成树中最小的生成树。
|
||||
生成树广播指的是首先先对网络节点狗仔一棵生成树,当一个节点要发送一个广播分组时,它向所有属于该生成树的特定链路发送分组。该方案的复杂性在于生成树的生成和维护。
|
||||
实际中,OSPF使用了序号控制方法。
|
||||
2.多播选路
|
||||
|
||||
## 5 多播选路
|
||||
多播用于将分组交付给网络节点的一个子集。
|
||||
多播通信中,有两个问题,一是怎样标识多播分组的接收方,怎么为多播分组的接收方编址。解决方案是使用简介地址编址,即用一个标识来标识一组接收方,寻址到该组的分组会被交付给与该分组相关的多播接收方。IPv4使用D类地址用于该目的,IPv6也有自己的多播地址格式。与一个多播地址关联的接收方组称为多播组。
|
||||
1.IGMP
|
||||
### IGMP
|
||||
在有了多播地址后,如果一个主机想要接收多播分组,就必须在多播地址和它自己之间建立关联关系,这是通过IGMP协议来实现的,主机通过该协议来通知主机的默认路由器“我要加入到某个多播组或者退出某个多播组”,路由器根据该信息来决定是否转发多播分组到主机。
|
||||
2.多播选路
|
||||
### 多播选路
|
||||
多播选路的目的是发现一颗链路树,该树连接了所有属于该多播组的主机相连的路由器。之后多播分组就可以沿着该树从发送方路由到所有属于该多播组的主机。选路树的构建有两种方法:
|
||||
使用一颗组共享树进行多播选路:该方法基于一棵构建的树,该树包括了所有具有该多播组相连主机的路由器。该多播组的分组基于该树转发
|
||||
基于一棵基于源的树进行多播 选路:该方法为多播组中的每个源构建一颗多播选路数。实际中采用了RPF算法来构建该树,同时使用剪枝算法来修正该树。剪枝算法是指:如果一台路由器接收到了娿一个多播分组,而它无加入到该分组的主机,就向其上游发送一个剪枝报文,收到该剪枝报文的路由器将不会向该路由器转发该多播组的分组;如果一台路由器的每个下游路由器都向它发送了剪枝报文,它就向其上游发送一个剪枝报文。
|
||||
因特网中使用的多播选路算法有DVMRP(Distance Vector Multicast Routing Protocol)和PIM(Protocol-Independent Multicast)。
|
||||
五、MAC地址到IP地址的映射
|
||||
网络层用于在因特网中标识主机,并为主机之间提供选路和转发功能,但是物理上一个接口能否接收报文则取决于它的链路层地址(不考虑混杂模式,混杂模式下接口网卡会接收所有报文)。对于广播和组播,IP地址和链路层地址之间的关系是有固定算法的,所以很容易由IP地址得到链路层地址,但是对于单播,就必须有一种方法来将IP地址和链路层地址关联起来,在IPv4中这是通过地址解析协议ARP来实现的。ARP为IP地址和对应的硬件地址之间提供了动态映射。
|
||||
1.多播地址的MAC地址
|
||||
|
||||
|
||||
## 6 ARP地址解析协议
|
||||
|
||||
MAC地址到IP地址的映射
|
||||
|
||||
网络层用于在因特网中标识主机,并为主机之间提供选路和转发功能,但是物理上一个接口能否接收报文则取决于它的链路层地址。对于广播和组播,IP地址和链路层地址之间的关系是有固定算法的,所以很容易由IP地址得到链路层地址,但是对于单播,就必须有一种方法来将IP地址和链路层地址关联起来,在IPv4中这是通过地址解析协议ARP来实现的。ARP为IP地址和对应的硬件地址之间提供了动态映射。
|
||||
|
||||
|
||||
### 多播地址的MAC地址
|
||||
IPv4中多播地址与MAC地址的对应关系如图:
|
||||
|
||||
|
||||

|
||||
即MAC地址的高25比特固定为00000001 00000000 01011110 0,低23比特取自IP多播地址的低23比特。由于除了作为前缀的4个比特之外,还有5个比特未进入MAC地址,因而一个MAC多播地址对应了32个IP多播地址。
|
||||
IPv6中多播地址与MAC地址的对应关系如图:
|
||||
|
||||
|
||||

|
||||
|
||||
即MAC地址的高16比特固定为3333,低32比特取自IP多播地址的低32比特。
|
||||
2.ARP的报文格式为:
|
||||
|
||||
### ARP报文
|
||||
|
||||

|
||||
|
||||
* 以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全1的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。
|
||||
* 两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。
|
||||
* 形容词hardware(硬件)和protocol(协议)用来描述ARP分组中的各个字段。例如,一个ARP请求分组询问协议地址(这里是IP地址)对应的硬件地址(这里是以太网地址)。
|
||||
* 硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0x0800即表示IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同。
|
||||
* 接下来的两个1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。
|
||||
* 操作字段指出四种操作类型,它们是ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4)(我们在第5章讨论RARP)。这个字段必需的,因为ARP请求和ARP应答的帧类型字段值是相同的。
|
||||
|
||||
* 接下来的四个字段是发送端的硬件地址(在本例中是以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址。注意,这里有一些重复信息:在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。
|
||||
* 对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。
|
||||
|
||||
|
||||
以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全1的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。
|
||||
两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。
|
||||
形容词hardware(硬件)和protocol(协议)用来描述ARP分组中的各个字段。例如,一个ARP请求分组询问协议地址(这里是IP地址)对应的硬件地址(这里是以太网地址)。
|
||||
硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0x0800即表示IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同。
|
||||
接下来的两个1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。
|
||||
操作字段指出四种操作类型,它们是ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4)(我们在第5章讨论RARP)。这个字段必需的,因为ARP请求
|
||||
和ARP应答的帧类型字段值是相同的。
|
||||
接下来的四个字段是发送端的硬件地址(在本例中是以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址。注意,这里有一些重复信息:在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。
|
||||
对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。
|
||||
3.ARP的简单工作过程
|
||||
### ARP原理
|
||||
当一台主机需要和另一台主机通信时,它会首先查找路由表来获得下一跳的信息,如果下一跳信息中不包含MAC地址,它就需要解析下一跳的MAC地址,这时它就发送一个ARP请求到下一跳,而下一跳收到该请求后,就会发送一个ARP应答报文来告诉请求者它的MAC地址。在获得这个MAC地址之后,主机就可以继续自己的通信过程了。
|
||||
ARP请求报文是一个广播报文,目的MAC地址为全F,而源MAC地址为自己的MAC地址。负载中的信息包含了发送者的IP地址和MAC地址,以及目的IP地址,目的MAC地址为全0,一个例子如图:
|
||||
|
||||

|
||||
|
||||
ARP响应报文是一个单播报文,只会被发送给请求者。一个例子如图:
|
||||

|
||||
|
||||
|
||||
4.ARP代理
|
||||
### ARP代理
|
||||
如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托ARP或ARP代理(ProxyARP)。这样可以欺骗发起ARP请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。
|
||||
5.免费ARP
|
||||
|
||||
### 免费ARP
|
||||
一个ARP特性称作免费ARP(gratuitousARP)。它是指主机发送ARP查找自己的IP地址。通常,它发生在系统引导期间进行接口配置的时候。
|
||||
免费ARP可以有两个方面的作用:
|
||||
一个主机可以通过它来确定另一个主机是否设置了相同的IP地址。
|
||||
|
||||
@@ -162,19 +162,7 @@ display interface Ethernet1/0/1
|
||||
|
||||
|
||||
|
||||
## 5补充ip
|
||||
|
||||
### 子网掩码
|
||||
|
||||
将IP地址分为网络地址与主机地址。通过子网掩码,就可以判断两个IP在不在一个局域网内部。子网掩码可以看出有多少位是网络号,有多少位是主机号。
|
||||
|
||||
* 网络地址
|
||||
* 主机地址
|
||||
* 广播地址:网络位与主机位都为1,是广播地址。
|
||||
* 一个交换机下设置同网段的主机会处于同一个局域网下,设置不同网段的主机可以处于不同的局域网下。
|
||||
|
||||
### 网关
|
||||
网间连接器、协议转换器。实现局域网与广域网的互联。
|
||||
|
||||
|
||||
# 链路层实验
|
||||
BIN
计算机网络/image/ICMP报文.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
计算机网络/image/arp响应报文.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
计算机网络/image/arp地址解析协议.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
计算机网络/image/arp请求报文.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
计算机网络/image/dv过程1.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
计算机网络/image/ipv4.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
计算机网络/image/ipv6.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
计算机网络/image/ipv6单播.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
计算机网络/image/ipv6地址.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
计算机网络/image/ipv6多播.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
计算机网络/image/ip分段.jpeg
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
计算机网络/image/多播mac地址.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
计算机网络/image/多播mac地址2.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
计算机网络/image/路由器交换结构.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
计算机网络/image/路由器组成.png
Normal file
|
After Width: | Height: | Size: 11 KiB |