This commit is contained in:
estomm
2019-10-12 16:22:45 +08:00
parent d166428dd9
commit 4f92cac76e
33 changed files with 1261 additions and 55 deletions

View File

@@ -0,0 +1,106 @@
# 变量和基本类型
## 1基本内置类型
### 算术类型
* 字符型
bool 1
char 1
wchar_t 2
char16_t
char32_t
* 整型
short 2
int 4
long 4
long 8
* 浮点型
float 4
double 8
long double 16
### 类型修饰符-signed与unsigned
> 常见的类型修饰符signed、unsigned、long、short、const、static、extern、auto、register、mutable、thread_local、volatile、restrict
* signed 有符号
* unsigned 无符号
### 类型转换
* 强制类型转换
可能会丢失精度。
* 隐式类型转换
默认情况下会向上转换,即向位数更多的位置转换。
* 避免无符号和有符号的混用。
### 字面值常量
* 整型字面常量
不同进制指的是字面格式其转化为存储格式时都会变成二进制存储。不必担心十进制与二进制之间的运算。字面常量只是一种数字的表示方法。24,024,0x24。会自动选用尺寸最小的整型进行存储负号是对字面值取相反数不是字面值的一部分。
* 浮点型字面值常量
默认情况下使用double存储。3.14,3.14E0,10e4
* 字符和字符串的字面常量
'a'"adbd"字符串的字面值是由字符数组构成的。编译器会在每个字符串常量的末尾添加一个'\0'
* 转义序列
\n\t\a\v\\\b\"\?\'\r\f
\7\0\12\115
* 可以指定字面值常量的类型
常见前缀u U L u8
常见后缀u/U,l/L,ll/LL
## 2 变量
> 关于C++中常见的描述总结对象object存储数据并具有某种类型的内存空间。已经命名的对象叫变量。
### 变量定义
* 类型说明符+名称+初始化。
* 初始值:可以直接初始化、复制初始化。不等同于赋值。
* 列表初始化:使用{}进行初始化。
* 默认初始化:变量没有被显示初始化。
### 变量的声明和定义。
* 声明和定义可以分离。声明使得程序可以被程序所知道,定义负责创建与名字关联的实体。
* extern可以声明而不进行定义。变量可以被声明很多次但只能被定义一次。不能再函数体中对extern声明的变量进行修改extern声明的变量只能是外部变量。
```
extern int i;
int j;
```
### 标识符与关键字。
### 作用域
* 名字在所有花括号之外,则成为全局作用域。
* 名字在其他作用与内,则成为块作用域。
## 3 复合类型
### 引用
* int &ref=a.表示对a的引用。引用本身并非对象只是已经存在的对象的别名
* 引用必须在定义的时候被初始化。
* 引用是变量的别名,具有同一个变量地址。
* 允许多个连续的引用
int &r=i,r2=i2.表示r是i的引用但r2是int
### 指针
* 实现了间接访问。本身是一个对象。
* 允许对指针进行复制和copy。
* int* dp,dp1.其中dp是int指针dp1是int类型。
* 不能定义指向引用的指针,因为引用不是对象,没有内存空间。
*
### 指针值的四种状态
* 指向一个对象;
* 指向紧邻对象所占空间的下一个位置;
* 空指针意味着指针没有指向任何对象;
* 无效指针,指针指向的位置被释放。
### 指针访问
* 利用指针运算符访问指针指向的对象(*p
* 空指针的生成方法
```
int *p1 = nullptr;
```

29
Linux/第0章 概述.md Normal file
View File

@@ -0,0 +1,29 @@
# 概述
## 1 帮助命令
### man
查看完整帮助手册。
* command
* -k 能够搜索不完整命令
### whatis
查看简单讲解。
* command
### info
查看详细内容
* command
* -w name pattern contains shell style wildcard
### which
查看命令位置(一半为系统环境下命令的可执行文件的位置)
* command
### whereis keyword
查看所有搜索路径下关键词的位置。
* command

View File

@@ -1,23 +1,113 @@
# 第6章 Linux的文件权限域与目录配置
# 文件管理
## 1 文件目录操作
## 1 用户与用户组
### 用户
* owner
* 可以属于多个不同group
### 用户组
* 包含一组用户
* 一组用户拥有相同的权限。
### touch
创建文件
* filename
### others
* 其他人,不属于用户组。
### mkdir
创建目录
* dirname
### 记录位置
* 用户内容-/etc/passwd
* 密码内容-/etc/shadow
* 组内容-/etc/group
### mv
移动
* sourcefile destfile
* -r 递归
### cp
复制
* sourcefile destfile
* -r 递归
## 2 文件权限
### rm
删除
* dirname/filename
* -r 递归删除
* -f 强制删除不弹出确认步骤
### cd
切换目录
* pathname
### pwd
显示当前绝对路径
### ls
查看目录
* [filename*] 能够使用通配符
* -a 所有文件,包括隐藏文件
* -l 长格式输出
### alias
别名
* newname=aimname
### wc
print newline, word, and byte counts for each file.输出文件内容的统计数。
* file or files name
* -c byte counts
* -m character counts
* -l newline counts
* -w word counts
## 2 查看文件内容
### cat
查看文件内容
* filename
* -n 显示行号
### more
查看文件内容
* filename
### head
查看文件前几行内容
* filename
* -10 显示前十行
### tail
查看文件后几行
* filename
* -10 显示文件后10行
## diff
对比两个文件之间的差别。
* file1 file2
## 3 查找文件名称
### find
搜索目录,查找文件名。
* dirname
* -name keyword 指定字符串查找文件名,支持通配符。
> 这个命令还有很多更高级的用法日后用到再说。直接man查看用法这是个程序或者说软件。
### locate
搜索包含字符串的目录。
* stringname
### 4 查找文件内容
### grep
查找文件内容,根据文件内容进行匹配。
Global search Regular Expression and Print the line.
* pattern filename
* -i 不区分大小写
* -n 显示行号
* --color 高亮显示
* -c 只统计目标行数
* -o 只显示目标行的命中关键词
* -B 显示目标行之前的行
* -A 显示目标航之后的行
* -w 硬匹配到目标单词。
* -e 能够添加多个匹配项
* -E 表示支持扩展正则表达式
> 同find也是一个复杂的程序软件日后用到查看说明文档。
```
grep -e "am" hello.txt
```
## 5 文件权限操作
### 查看文件属性
```
@@ -33,19 +123,26 @@ ls-al
* 创建或者修改日期
* 文件名字
### 改变文件属性
### chgrp
改变文件属性
```
chgrp [-R] groupname dirname/filename
chgrp users install.log
```
* -R 递归更改组
### chwon
```
chown [-R] ownername dirname/filename
chwon estom install.log
```
* -R 递归更改拥有者
### chmod
```
chmod [-R] xyz dirname/filename
chmod 777 install.log
@@ -55,10 +152,19 @@ chmod u/g/o/a +/-/= r/w/x dirname/filename
* 1~7分别对应二进制文件权限
* ugoa 分别设置user,group,other,all的权限。
### 文件权限的意义
做好访问控制。
## 6 符号连接/硬连接
## 3 目录配置
### ln
创建一个指向目标的连接。
* filename destname
* -s 符号连接
```
ln cc ccAgain :硬连接;删除一个,将仍能找到;
ln -s cc ccTo :符号链接(软链接)删除源另一个无法使用后面一个ccTo 为新建的文件)
```
## 7 目录配置说明
### 目录配置标准FHS
@@ -85,3 +191,66 @@ chmod u/g/o/a +/-/= r/w/x dirname/filename
* /usr/includeC/C++等程序语言的头文件与包含文件
* /usr/lib包含软件的函数库、目标文件以及一般用户惯用的执行文件和脚本
## 8 管道和重定向
* 批处理命令连接执行,使用 |
* 串联: 使用分号 ;
* 前面成功,则执行后面一条,否则,不执行:&&
* 前面失败,则后一条执行: ||
```
ls /proc && echo suss! || echo failed
if ls /proc; then echo suss; else echo fail; fi
```
### 管道 |
表示第一个命令的输出可以作为第二个命令的输入。可以利用管道对前一个命令的输出进行处理、过滤、统计等。
```
find ./ | wc -l
```
wc 会把前一个命令的输出看做一个文件,然后输出这个文件的行数。所以能够显示./文件下的目录个数。
```
ls | cat -n
```
cat也会把前一个命令的输出看做一个文件然后对文件进行操作。
### 重定向> >>
将标准输出和标准错误重定向到一个文件当中。
```
> 覆盖文件内容
>> 添加新内容到结尾
ls proc/*.c > list 2> &l 将标准输出和标准错误重定向到同一文件;
```
## 9 设置环境变量
1. 在/etc/profile文件中添加变量【对所有用户生效(永久的)】
用VI在文件/etc/profile文件中增加变量该变量将会对Linux下所有用户有效并且是“永久的”。
例如:编辑/etc/profile文件添加CLASSPATH变量
```
# vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
```
注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。
2. 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】
用VI在用户目录下的.bash_profile文件中增加变量改变量仅会对当前用户有效并且是“永久的”。
例如编辑guok用户目录(/home/guok)下的.bash_profile
vi/home/guok/.bash.profile添加如下内容exportCLASSPATH=./JAVAHOME/lib;JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。
3. 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用[export 变量名=变量值] 定义变量,
该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,
shell关闭了变量也就失效了再打开新shell时就没有这个变量需要使用的话还需要重新定义。

View File

@@ -5,4 +5,22 @@
## 文件内容查阅
## 文件与目录的默认权限与隐藏权限
## 命令与文件查询
## 权限与命令的关系
## 权限与命令的关系
## 1 用户与用户组
### 用户
* owner
* 可以属于多个不同group
### 用户组
* 包含一组用户
* 一组用户拥有相同的权限。
### others
* 其他人,不属于用户组。
### 记录位置
* 用户内容-/etc/passwd
* 密码内容-/etc/shadow
* 组内容-/etc/group

View File

@@ -0,0 +1,69 @@
# 群体智能算法
## 1 群体智能
### 概念
* 英文swarm intelligence
* 超越个体智慧水平的总体智慧
* 面向共同问题,自发进行组织。
* 个体如何通过与群内其它个体的连接、信息交流、沟通、组织和自组织,产生群体的智能优化行为。
### 特点
* 自组织的self orgnization
* 分布式的distributed没有中心的控制与数据。
* 个体简单,群体复杂,信息交流
* 可扩充,
### 应用领域
* 旅行者商问题
* 车间任务调度问题
* 资源受限的工程调度问题
* 多机器人系统的任务分配
* 目标聚类
* 通信网的路由选择
* 图着色
* 分割等最优化问题
## 2 基本群体智能算法
### 粒子群优化算法PSO
### 人工蜂群算法ABC
### 蚁群优化算法ACO
### 布谷鸟算法CS
### 萤火虫优化算法GSO
### 灰狼算法GWO
### 蝙蝠算法
### 海豚算法
### 细菌觅食算法
### 蛙跳算法
## 3 群体智能应用方案
### 群体智能与漏洞挖掘
* 漏洞挖掘分析的自动化规模化
* 卡耐基梅隆大学Myahem自动挖掘与利用系统自动发现二进制代码中的漏洞。->自动化
* google的并行漏洞挖掘与分析系统->规模化
* 文章给出了群体智能与漏洞挖掘的理论模型,但并没有详细介绍结合方式。理论构成主要包括:主体集合、工具集合、目标任务集合、上下文环境集合、路径代价函数(负责利用四个集合,寻找最优路径)
* 违章给出了平台的架构设计:理论方法层、基础设施层、资源架构层、应用服务层。
### 群体智能算法与密码学
* 构造流密码密钥生成器。显然不知道这是个什么东西。
* 秘钥很难保证真正的随机。使用群体智能算法进行搜索。
### 群体智能在网络入侵检测中的应用
* 分布式地检测和响应系统。信息素服务器,发送警报信息素;观察者观测主机遭受到攻击时候的状况;淋巴细胞随机游走,寻找信息素,聚集到被感染的主机。
* PSO-BPPSO-SVM入侵检测
###
## 4 群体智能优化方案
> 还有各种诡异的名字的算法,留待以后补充。需要对这些基本的算法进行掌握。然后了解前沿的算法应用。

View File

View File

View File

View File

View File

@@ -4,11 +4,12 @@
## 待完成任务
- [ ] 编程__2019.10.07__Linux系统管理
- [ ] 编程__2019.10.07__群体智能算法实现
- [ ] 编程__2019.10.07__Linux系统管理(需要一本书,以及买一本命令参考手册)
- [ ] 编程__2019.10.07__群体智能算法实现(需要一本书,以及一个系统的教程)
- [ ] 编程__2019.10.15__遗传算法实现
- [ ] 编程__2019.10.25__神经网络算法学习与实现。完成具体任务。
- [ ] 编程__2019.10.01__C++拓展深入学习
- [ ] 编程__2019.10.01__C++拓展深入学习(需要一本书,以及相关的教程)
- [ ] 编程__2019.10.07__C++与Python数据可视化工具
- [ ] 编程__2019.10.10__基础算法复习及C++实现
- [ ] 文献__2019.10.30__Latex模板整理基础内容可能不需要整理因为只要有一份参考文档可以随时查阅就行了但是需要整理自己能够使用的latex论文模板

View File

@@ -1,10 +1,27 @@
# 参数估计
# 参数的点估计
## 参数及其估计
## 1 参数及其估计
假设存在$p(x,\theta)$总体分布簇。
假设存在$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$的频率估计
形式计算:可以计算均值方差,包含未知数。统计量:基于样本能够计算均值、方差。二者可以建立方程。
@@ -17,8 +34,8 @@ n次重复独立实验每次实验中有k个可能的结果$v_1,v_2,\dotsm,v_
### 频率估计
### 矩估计
## 3 矩估计
### 通过概率分布函数或者联合概率。
联立方程组解未知数。
## 极大似然估计
## 4 极大似然估计

View File

@@ -0,0 +1,8 @@
# 估计量的评优准则
## 1 均方误差准则
## 2 无偏估计
## 3 一致最小方差无偏估计

View File

@@ -0,0 +1,5 @@
# 其他估计方法
> 这节课没怎么听,需要问一下别人数学课讲了啥。
##

View File

@@ -1,27 +0,0 @@
# 群体智能算法
## 1 群体智能
### 概念
swarm intelligence
### 特点
## 2 基本群体智能算法
### 粒子群优化算法PSO
### 人工蜂群算法ABC
### 蚁群优化算法ACO
### 布谷鸟算法CS
### 萤火虫优化算法GSO
### 灰狼算法GWO
### 蝙蝠算法
## 3 群体智能应用方案
## 4 群体智能优化方案
> 还有各种诡异的名字的算法,留待以后补充。需要对这些基本的算法进行掌握。然后了解前沿的算法应用。

View File

@@ -0,0 +1,133 @@
# 计算机网络概述
## 1 五层模型
> 每一层都有自己的数据单位或者说数据结构。每一个传输单位都采用了消息头+数据的组合方式用来传输数据。底层对上层的数据内容进行分割与封装,形成底层数据单位,以达到不同的目的。
### 应用层(application layer)
* 专门针对某些应用提供服务
* 数据单位报文Message
### 传输层(transport layer)
* 传输层负责不同主机的进程间的传输,主机到主机(host-to-host)的传输交由网络层。传输层也称为端到端送
* 数据单位报文段Segment
### 网络层(network layer)
* 从源地址(source)到目的地地址(destination)的过程达到从源主机传输数据到目标主机的目的是点到掉通信point to point)
* 数据单位数据报datagram
### 数据链路层(data-link layer)
* 封装网络层数据包。只完成一个节点到另一个节点的传送(单跳)(hop-by-hop, node-to-node)
* 数据单位帧Frame
### 物理层(physical layer)
* 通过线路传送比特(bit)流,只完成一个节点到另一个节点的传送(单跳)
* 数据单位比特流bit
## 2 数据单元长度
### 链路层-Frame最大长度
以太网(Ethernet)数据帧的长度必须在46-1500字节之间这个1500字节被称为链路层的MTU(最大传输单元)。上述数据内容长度不包括链路层的首部和尾部的18个字节。所以真正的链路层帧的长度应该是4618150018
### 网络层-Datagram最大长度
对于IP协议来说数据内容的长度包含20个字节的头部信息所以数据内容的长度为1480。
### 传输层-Segment最大长度
IP协议数据内容长度1480字节存放TCP报文段或UDP报文段。最大长度理论上2^16 - IPhead - UDPhead= 65535 - 20 - 8=65507字节但是实际上UDP数据报的数据区最大长度为1480 - 8 = 1472字节UDP的头部信息占用八个字节。TCP 1480-TCPHead(20) = 1460 Bytes(TCP 报文段的头部信息占用20个字节
### 协议封装过程
链路层帧只对网络层数据报进行封装不进行分割。传输层数据内容超过MTU最大传输单元时网络层数据报对传输层报文会进行分片操作。
### UDP和TCP的数据长度
我们在用Socket编程时UDP协议要求包小于64K。TCP没有限定TCP包头中就没有“长度”字段而完全依靠IP层去处理分帧。这就是为什么TCP常常被称作一种“流协议”的原因开发者在使用TCP服务的时候不必去关心数据包的大小只需讲SOCKET看作一条数据流的入口往里面放数据就是了TCP协议本身会进行拥塞/流量控制。
## 3 因特网
### 组成
因特网通常指的是全球性的公共互联网。从组成上来说由:端系统,通信链路和交换机组成。
* 端系统:接入因特网并通过因特网与其他设备通信的设备被称为端系统。它是一次因特网信息交换的发起者或者接收者。
* 通信链路:通信链路相当于道路,用于传输信息。在通信链路上传输的信息称为分组。
* 交换机:交换机用于辅助信息交换,选择信息交换所使用的通信链路,交换机分为二层交换机即常说的交换机和三层交换机即路由器。
> 端系统通过ISP因特网服务提供商接入网络每个是由ISP由多个交换机和多段通信链路组成的网络。ISP是分层级的用户接入的是底层ISP底层ISP的服务由高层ISP提供通过分层可以降低网络管理的难度和复杂度。
## 4 网络协议
### 网络协议
定义了在两个或多个通信实体之间交换信息的格式、次序,以及在信息发送、接受以及发生其它事件时采取的动作。网络协议使得网络中各种不同的参与者可以相互通信。
网络协议通常被分为不同的层次。每个协议属于一层,每个层次负责不同的功能,并向上一层提供服务。一个协议层能够利用软件、硬件或者两者结合的方式实现。
协议分层有概念化和结构化的优点,分层提供了一种结构化的方式来讨论系统组件,模块化使得更新组件更为容易。分层的一个潜在缺点是某层可能重复其较低层次的功能。
各层所有的协议综合起来就构成了协议栈。通常的网络分为五个层次非ISO OSI模型
应用层:网络应用程序及其应用层协议存在的地方。
运输层提供了在主机之间传送应用层报文的服务。最重要的两个协议时UDP和TCP
网络层:负责将数据报从一台主机移动到另一台主机。
链路层:也称为数据链路层或者网络接口层。链路层沿着路径将数据报传送给下一个节点。链路层传输的单元称为帧。
物理层:负责将帧的每一个比特从一个节点移动到下一个节点。
由于网络中有很多不同的参与者,参与者的物理位置是不确定的,信息可能会通过存在恶意用户的网络,通信链路可能坏掉,因而无论对于哪个层次的协议来说,都涉及到如下问题:
如何标识一个参与者,即如何起名字,名字的格式,每个层次都定义了自己的“地址(名字)”格式,最终这些信息都会进入报文中
参与者如何获取自己的标识,即谁给起名字,可能是协议获取,可能是管理员分配,可能是软件自己选择,可能是统一的机构分配并固化到硬件
如何将数据送到目的地,通常是通过下一层提供的服务
如何确保数据的正确性,即收到的数据就是发出去的时候的样子,一般通过校验和来实现
是否要保证数据的安全性,如果要,如何保证,通常通过各种加密协议
## 5 网络构成
### 网络边缘
端系统位于网络边缘也称为主机,它们运行网络应用程序。网络应用程序又分为客户端和服务端,客户端是服务的获取者,服务端是服务的提供者。
端系统通过边缘路由器接入网络,接入方式主要有有线接入和无线接入。接入的物理媒介有双绞线,同轴电缆,光缆,无线电信道等等。
### 网络核心
网络核心是指互联了因特网端系统的交换机和链路的网状的网络。
* 电路交换
电路交换中当两台主机要通信时该网络在两台主机之间建立一条专用的端到端的连接。电路交换一般通过多路复用来提高链路的使用效率多路复用技术包括时分复用TDM频分复用FDM码分多址CDMA。电路交换网络需要信令软件来协调端到端路径上的交换机的操作。
* 分组交换
在分组交换网络中,应用程序的数据被分割成报文进行收发。在源和目的之间,这些分组通过通信链路和分组交换机传送。多数分组交换机在输入端采用存储转发机制工作,存储转发指的是在交换机能够开始向输出链路传输该分组之前,必须接收到整个分组。因此,存储转发式分组交换机沿着该分组的路径在每条链路的输入端引入了存储转发时延。
每个分组交换机由多条链路与之相连。对于每条相连的链路,该分组交换机有一个输出缓存,它用于缓存交换机准备发往这条链路的分组。如果分组需要往某个链路发送,但该链路正在发送其它分组,该分组就要在输出缓存排队等待,因此分组交换又引入了排队时延。同时由于缓存大小是有限的,因而如果需要进行缓存一个新的分组时,缓存已满,就会导致该分组被丢失。
分组交换存在时延并且该时延是不可预测的,因而它不适用于实时服务。
由于分组交换不存在专用电路,因而它需要做额外的动作保证分组可以到达目的地。因特网的做法是:每个通过网络传输的分组在其首部包含了其目的地址。地址采用了层次结构。当分组到达网络中的一台交换机时,该交换机检查分组的目的地址的一部分,并向相邻的交换机转发该分组。每个交换机都具有一个转发表,用于将目的地址映射到输出链路。当分组到达一个交换机时,交换机检查其目的地址,并用这个目的地址搜索转发表,以找到合适的输出链路。典型的转发表就是三层交换机即路由器中的路由表。
## 6 网络性能
### 时延
分组交换中存在各种时延,时延中最重要的包括:处理时延,排队时延,传输时延和传播时延。
* 处理时延:检查分组首部和决定该分组如何处理所需时延以及对报文进行各种检查所需的时间之和。
* 排队时延:分组在队列中等待传输所需的时间
* 传输时延:分组长度/链路速率接口速率比如10M以太网就是10Mbps。对于超过10Mbps速率的信道而言该值很小影响也很小。
* 传播时延:链路长度/链路传播速度(比特在链路中的物理传输速度)。对于局域网该值往往非常小,但是对于卫星传输可能很大。
在这几种时延中,传输时延、传播时延取决于物理介质,处理时延需要做的动作基本是固定的,因而和处理器的速率和软件设计相关,而排队时延则和系统运行的整体运行相关,是最复杂的时延。
### 丢包
让a表示分组到达的平均速率R是传输速率即比特从队列中推出的速率同时假设每个分组都由L比特组成则L*a/R称为流量强度。它在估量排队时延的影响程度方面起着重要作用。如果流量强度大于1则比特到达的平均速率超过比特从队列中传输出去的速率在这种情况下队列会趋向于无限大排队时延也会趋向于无穷大。因而设计系统时必须保证流量强度不能大于1。
如果流量强度小于等于1
如果分组周期性的到达,则每个分组到达时队列都是空的,因而就不会有排队时延。
如果分组以突发形式到达则有可能有很大的平均排队时延。并且随着流量强度接近于1平均排队时延迅速增加。
在实际设备中,由于设备缓存的有限性,因而如果到达的分组无法被存储就会被丢弃,丢弃的分组会随着流量强度的增加而增加。
### 吞吐量
吞吐量是单位时间内主机收发的报文的速率。当没有干扰时,吞吐量近似于沿着源到目的的路径上的最小传输速率。
## 7 网络攻击
网络攻击是网络的最大威胁,常见的攻击手段有:
* 病毒入侵:通过病毒进入主机从而进行攻击
* 拒绝服务攻击:核心思想使得合法用户无法使用服务
* 嗅探攻击:获得信息的拷贝,在对信息进行分析
* 伪装攻击:伪装成受信任的人从而获取信息
* 中间人攻击:插入到两个通信实体之间的通信链路中进行攻击。

View File

View File

View File

@@ -0,0 +1,103 @@
# 网络成-基本原理
## 1 基本功能
网络层建立在链路层之上它的最主要的功能是使得网络中的各个主机之间可以互相通信。在因特网中IP层是TCP/IP协议族中最为核心的协议也是最复杂的层次之一。网络层的功能是要将分组从一个主机移动到另一个主机从而使得主机之间可以互相通信。为此需要网络层提供两种功能
### 存储转发
路由器(三层交换机)将进入其某个输入链路的分组转发到其某个输出链路。它是将分组从一个输入链路移动到一个输出链路,是一个路由器的本地动作。
### 路由选择
在分组从一个主机流向另一个主机的过程中,网络层必须决定分组所走过的路径。计算这个路径信息的算法就是路由算法。它是一个网络范围的动作,决定分组从其源到目的应该走的路径
### 连接建立
在有些计算机网络中连接建立也是网络层的重要功能。比如ATM它要求从源到目的地沿着所选择的路径彼此握手以便在源和目的之间建立起状态。
## 2 服务特点
* 确保服务:确保能最终到达目的地
* 时延上界:不仅确保交付,而且确保在时上界内交付
* 有序分组交付:确保分组按照它们被发送的顺序到达目的地
* 确保最小带宽:只要发送主机以低于特定比特率的速录传输,分组就不会丢失
* 确保最大时延抖动:发送方发送两个连续分组的时间间隔和接收方接收它们的时间间隔之间的差值在一定范围内
* 安全性服务:使用仅仅发送方和接收方所知晓的密钥通信。但是因特网的网络层提供的是无连接的不可靠的服务,尽力而为的服务,其含义是:
* 不可靠IP层不保证IP数据报能成功到达目的地。如果需要保证可靠传输则需要使用其它协议比如TCP。
* 无连接IP不维护任何关于后续数据报状态的信息每个数据报的处理是相互独立的。因此两个IP之间的多个报文可能乱序到达可能走不同的路径。
## 3 网络类型
### 虚电路
### 数据报网络
在因特网中,每当一个主机要发送一个分组时, 它就为该分组加上目的主机的地址,然后将该分组发送出去。
当分组在网络中向目的地传输时,它会经过一系列路由器。每个路由器都使用该分组的目的地址来转发给分组。每台路由器都由一个将目的地址映射到链路接口的转发表,每当分组到达时,路由器就利用分组的目的地址在转发表中查找一个合适的输出链路接口,然后路由器将分组从该输出链路接口发送出去。
在因特网中,路由器的转发表可以由选路算法或者管理员更新。由于转发表的修改可能发生在任意时刻,因而两个主机之间的分组在不同的时刻走的可能是不同的网络路径,并可能无序到达。
最长前缀匹配规则
网络前缀:是网络地址的前边某些连续比特。比如对于地址 11101111 11011110 1000000 00000001其对应的8比特前缀为11101111 16比特前缀为11101111 11011110
在该规则下,路由器的转发表中记录的是网络前缀和输出链路接口之间的对应关系。当查转发表时,仍然利用目的地址来进行匹配,但是可能会有很多歌匹配,这个时候取匹配到的比特数目最多的表象作为命中表项,并根据它来转发分组。
## 4 路由器构成(硬件)
路由器在网络层是一个极其重要的设备,每台路由器都由一张转发表。路由器检查到达分组首部中的一个字段的值,然后利用该值在路由器的转发表中进行查询,以决定该如何转发该分组。查询的结果是分组将被转发的路由器的链路接口。
网络层的最主要的功能是将分组从一台主机移动到另一台主机。该功能主要是由路由器完成的。典型的路由器结构如下:
### 输入端口
它接入输入的物理链路,和链路远端的数据链路层交互,并完成查找和转发功能,以使得输入分组能够进入到合适输出链路接口。对于控制分组,它则会进入选路处理器。
输入端口的线路端接功能与数据链路处理实现了与通向路由器的各个输入链路相关的物理层和数据链路层。输入端口的查找/转发功能对路由器的转发功能是非常重要的。在很多路由器中,就是在这里来确定一个到达的分组经交换结构转发给哪个输出端口。输出端口的选择是取决于转发表中的信息,虽然转发表是由选路处理器计算的,但是通常每个输入端口都会有一份转发表的影子拷贝,并且会被及时更新。正因为输入端口拥有转发表的本地拷贝因而就可以在每个输入接口做出转发决策,而无需调用中央选路处理器,这种模式可以避免在路由器的某个节点产生转发处理瓶颈。
在输入端口处理能力受限的路由器中,输入端口会将分组转发给中央绚丽处理器,然后由它执行转发表查找并将分组转发到恰当的输出端口。
在有了转发表后,转发决策就很简单,就是查找转发表,但是由于主干路由器的转发表规模很大, 而且我们期望输入端口的处理速度能够达到线速或者说我们期望查表的速度越快越好,因而就需要对转发表的组织和查询进行优化,常见的方式有:
以树形结构存储转发表树的每一级对应目的地址中的一个比特如果地址比特位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%,在某些假设前提下,输入队列就将无限增大,从而导致丢包。

View File

@@ -0,0 +1,214 @@
IP(internet protocol)协议是TCP/IP协议族的核心协议是因特网的网络层。当前的版本号是4也称为IPv4下一代IP协议的版本号为6即IPv6。正如描述的网络层功能一样IP层为因特网提供了选路和转发的功能。接入因特网的主机之间可以通过IP层而互相通信在IP层IP地址用于标识接入网络的接口进而标识一台主机。当信息在TCP/IP协议栈中传递时每层都会添加其自己的控制信息即协议头IP地址被添加在IP头中。IP头提供了IP协议以及数据报的信息。
一、IPv4数据报格式
当接入网络的两台设备通过IP层互相通讯时交互的信息会被封装成网络层分组网络层分组又被称为数据报。IPv4的数据报格式如下
其各个字段的含义如下:
版本号协议版本号IPv4为4IPv6则为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。片偏移字段指的是该片偏移原始数据报开始处的位置。另外当数据报被分片后每个片的总长度值要改为该片的长度值。
标志字段中有一个比特称作“不分片”位。如果将这一比特置1IP将不对数据报进行分片在这种情况下如果路由器判断需要分片就把数据报丢弃并发送一个ICMP差错报文“需要进行分片但设置了不分片比特”给数据报的源主机。
当IP数据报被分片后每一片都成为一个分组具有自己的IP首部并在选择路由时与其他分组独立。这样当数据报的这些片到达目的端时有可能会失序但是在IP首部中有足够的信息让接收端能正确组装这些数据报片。
但是IP分片存在一个严重的缺陷即使只丢失一片数据也要重传整个数据报。
在IPv6中分片功能被限制在源主机进行这是因为分片增加了网络核心即路由器的工作量使得它不得不为所有报文进行分片处理的判断网络核心应该更专注于它选路和转发的功能而不是被额外的处理所打断。
二、IPv4地址
在因特网中无论是主机还是路由器都通过接口接入网络。接口是主机或路由器接入网络的装置一般情况下一个主机由一个接口而路由器有多个接口。为了使得接口能够工作在网络层每个接口都需要有IP地址。因此IP实际上是和接口相关联的而不是与主机或路由器相连的。
1.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 1262^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
其地址布局如下图:
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地址“255255255255”是当前子网的广播地址
IP地址中凡是以“llll0”开头的E类IP地址都保留用于将来和实验使用。
IP地址中不能以十进制“127”作为开头该类地址中数字127001到127255255255用于回路测试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地址的应用程序就不能正常工作。
NAT的实现方式有三种即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。
静态转换是指将内部网络的私有IP地址转换为公有IP地址IP地址对是一对一的是一成不变的某个私有IP地址只转换为某个公有IP地址。借助于静态转换可以实现外部网络对内部网络中某些特定设备如服务器的访问。
动态转换是指将内部网络的私有IP地址转换为公用IP地址时IP地址是不确定的是随机的所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说只要指定哪些内部地址可以进行转换以及用哪些合法地址作为外部地址时就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
端口多路复用Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换即端口地址转换PATPort 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 ProtocolInternet控制报文协议。它是TCP/IP协议族的一个子协议用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据但是对于用户数据的传递起着重要的作用。
ICMP属于网络层协议它提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误纠正错误的任务由发送方完成。
ICMP报文如下
ICMP报文可以分为两大类ICMP查询报文和ICMP差错报文。
对于ICMP差错报文ICMP报文总是会包含引起该ICMP报文首次产生的IP数据报的首部和前8字节的内容而且以下情形不会产生ICMP差错报文
ICMP差错报文。
的地址是广播地址或多播地址的IP数据报。
作为链路层广播的数据报。
不是IP分片的第一片。
源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。
ICMP查询报文被用来查询网络相关的一些信息比如回显应答和请求ping路由器请求和通告时间戳等。
四、IPv6
现在广泛使用的IP技术是IPv4它存在一些问题
地址空间的局限性: I P地址空间的危机由来已久并正是升级的主要动力。
性能尽管I P表现得不错一些源自2 0年甚至更早以前的设计还能够进一步改进。
安全性安全性一直被认为是由网络层以上的层负责但它现在已经成为IP的下一个版本可以发挥作用的地方。
自动配置对于I P v 4节点的配置一直比较复杂而网络管理员与用户则更喜欢“即插即用”将计算机插在网络上然后就可以开始使用。I P主机移动性的增强也要求当主机在不同网络间移动和使用不同的网络接入点时能提供更好的配置支持。
这些问题是IP升级的动力下一代的IP技术室IP版本6即IPv6。
相对于IPv4IPv6的变化主要包括
扩展地址。地址扩展到了128比特地址空间增大了2的96次方倍。
简化头格式。字段只有8个加快报文转发提高了吞吐量。
增强对于扩展和选项的支持。可以支持更多的服务,也简化了报文转发的处理。
流标记。路由器需要对流进行跟踪并保持一定的信息,这些信息在流中的每个包中都是不变的。这种方法使路由器可以对流中的包进行高效处理。
身份验证和保密。身份认证和隐私权是IPV6的关键特性。
1.IPv6头部
IPv6头部如下图所示
版本。长度为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
这个地址中用于选路的前缀长度为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单播地址格式如下
IPv6单播地址包括下面几种类型
可集聚全球地址。
未指定地址或全0地址。
回返地址。
嵌有IPv4地址的IPv6地址。
基于供应商和基于地理位置的供应商地址。
OSI网络服务访问点(NSAP)地址。
网络互联包交换(IPX)地址。
2.多播
多播用于标识一组节点它的工作过程是当设备预订多播地址时它声明要成为多播的一个成员。于是任何本地路由器将以该节点的名义预订多播地址。同一网络上的其他设备要发送信息到该多播地址时IP多播包将被封装到链路层多播数据传输单元中。并发送给设备。
IPv6多播地址格式如下图
多播地址只能用作目的地址没有数据报把多播地址用作源地址。地址格式中的第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位用于标识多播组。根据多播地址是临时的还是熟知的以及地址的范围同一个多播标识符可以表示不同的组。永久多播地址用指定的赋予特殊含义的组标识符组中的成员既依赖于组标识符又依赖于范围。
多播范围取值及其意义如图:
3.泛播
多播地址在某种意义上可以由多个节点共享。多播地址成员的所有节点均期待着接收发给该地址的所有包。泛播地址与多播地址类似,同样是多个节点共享一个泛播地址,不同的是,只有一个节点期待接收给泛播地址的数据报。
泛播对提供某些类型的服务特别有用,尤其是对于客户机和服务器之间不需要有特定关系的一些服务,例如域名服务器和时间服务器。名字服务器就是个名字服务器,不论远近都应该工作得一样好。同样,一个近的时间服务器,从准确性来说,更为可取。因此当一个主机为了获取信息,发出请求到泛播地址,响应的应该是与该泛播地址相关联的最近的服务器。
1.泛播地址的分配及其格式
泛播地址被分配在正常的IPv6单播地址空间以外。因为泛播地址在形式上与单播地址无法区分开一个泛播地址的每个成员必须显式地加以配置以便识别泛播地址。
2.泛播选路
一个泛播地址必定带有一个选路项:该选路项包括一些指针,指向共享该泛播地址的所有节点的网络接口。这个信息将被用于路由器的选路。
3.其它
类似于IPv4IPv6也使用了ICMP和DHCP这两个协议都有对应于IPv6的版本。详细的信息可参考相关协议。

View File

@@ -0,0 +1,89 @@
# 网络层-选路算法
网络中的主机通常都直接与一台路由器相连接,该路由器即为该主机的默认路由器,它是该主机的第一跳路由器。每当主机发送一个分组时,它都首先将分组发送给起默认路由器,在接收端,目的主机的默认路由器把来自于网络上其它主机的分组转发给目的主机,因而网络中从源主机到目的主机的选路就是从源主机的默认路由器(也可以成为源路由器)到目的主机的默认路由器(也可以成为目的路由器)之间的选路问题。
选路算法的目的很简单:给定一组路由器以及连接路由器的链路,选路算法要找到一条从源路由器到目的路由器之间的“好"路径。通常好路径指的是最低费用的路径。由于网络中的路由器组成的拓扑是典型的图结构,因而可以用图来研究选路问题。
在网络图中,节点表示路由器,边表示路由器之间的链路。给边赋予一个表示费用的值(费用可以为链路速度,金钱,线路长度等等),然后选路算法的目的就变为在图中找到给定的两点之间的具有最低费用的路径。
1.选路算法的分类
根据选路算法是全局的还是局部的,选路算法可以分为:
全局选路算法用完整的全局性的网络信息来计算从源到目的的最低费用路径。这种算法通常称为链路状态算法即LS算法因为该算法必须知道网络中每条链路的费用。
分布式选路算法:以迭代的、分布式的方式计算出最低费用路径。没有节点拥有关于所有网络链路费用的完整信息,而每个节点仅有与其直接相连链路的费用信息即可开始工作。然后通过迭代计算过程并与相邻节点交换信息,一个节点逐渐计算出到达目的节点或者一组目的节点的最低费用路径。
还可以根据算法是静态的还是动态的来分类:
静态选路算法:随着时间的推移,路由的变化非常缓慢,同时是在人的干预下进行调整。
动态选路算法:能够在网络流量负载或者拓扑发生变化时改变选路路径。动态选路算法可以周期性的运行或者在拓扑或链路费用发生变化时直接运行。
还可以根据算法是负载敏感的还是负载迟钝的进行划分:
负载敏感算法:链路费用会动态的变化以反映底层链路的当前拥塞水平。当前的因特网选路算法都是负载迟钝的。
2.链路状态选路算法
链路状态算法需要网络拓扑和所有链路费用信息作为输入。实践中这可以通过让所有节点都向网络中的而所有其它路由器广播链路状态分组来完成。每个链路状态分组包含了它所连接的链路的特征和费用。广播的结果是所有节点都具有了该网络的同一个完整的视图。于是每个节点都可以运行LS算法从而计算出相同的最低费用路径集合。
根据图论的知识可以使用Dijkstra算法来计算最短路径它计算从某个节点到网络中所有其它节点的最低费用路径它是一个迭代算法在k次迭代后就可以得到从源节点触发到k个节点的最短路径。Prim算法也可以用于计算图中两个节点之间的最短路径根据图论的知识它适用于具有稀疏边的图。算法的复杂度为O(n2)。
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.距离向量选路算法
距离向量算法DVDistance-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算法的节点在检测到其到邻居的链路费用发生变化时就会更新器距离向量并且如果最低费用路径发生了变化它就向邻居通知其新的距离向量。当链路费用降低时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)变化后它显然是一个错误的值。更重要的是在这个时刻会出现选路环路为了到达xy通过z选路而z又选择通过y选路这样的选路结果是分组无法到达目的地。
y计算出来了一个新的到x的最低费用因而它在t1时刻将新的距离向量通告给z
z收到y的新的距离向量后更新其距离向量它计算出来的新的Dz(x)=7
该过程一直循环直到计算出来一个正确的值Dy(x)=40Dz(x)=41
从上述过程可以看到使用DV算法时坏消息传递的比较慢。而且上述过程只是一个链路的费用变高了如果有多个链路的费用变高则会遇到所谓的计数到无穷的问题。
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算法可以预期它根本就不会收敛。
管理自治:某些组织可能倾向于按自己的意愿管理自己的网络,对外隐藏自己的内部网络面貌。
解决这两个问题采用的方法是将路由器组织到自制系统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的管理组织可以运行它选择的任何内部选路协议。

View File

@@ -0,0 +1,92 @@
一、RIP
在因特网中AS即自制系统内部使用的两个选路协议是RIP路由信息协议Routing information Protocol和OSPFOpen Shortcut Path First
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没有强制的链路权值设置策略它只提供了为给定链路权值确定最低费用路径的机制。
在OSPF中路由器向自治系统内部的所有其它路由器广播选路信息。每当一条链路状态变化时路由器就会广播链路状态信息。即使链路状态没有变化OSPF也要周期性地广播链路状态至少每隔30分钟
OSPF通告包括在OSPF报文中OSPF报文直接运行在IP之上它的协议号是89。
OSPF的优点
安全OSPF对路由器之间的OSPF报文进行了保护。
多路径OSPF允许到达某个目的地有多条费用相同的路径。这可以通过为不同的IP服务类型创建不同的路由来实现。
支持单播和多播MOSPF是对OSPF的扩展它提供了多播选路。
支持在单个选路域内的层次结构OSPF具有按层次结构构造一个自制系统的能力。
一个OSPF自制系统可以配置成多个区域每个区域都运行自己的OSPF算法一个区域内的每台路由器都向该区域内的所有其它路由器广播其链路状态。在一个区域内一台或多台区域边界路由器负责为发送到该区域以外的分组选路。
在OSPF层次结构中一个区域被配置成主干区域它包含了AS内所有区域的区域边界路由器以及一些不在任何其它区域内的路由器该区域的目的是为AS内其它区域之间的流量选路。
三、BGP
BGP是因特网中使用的自制系统间的选路协议它极其复杂。
四、广播和多播选路
广播选路指的是网络层提供的从一个源节点到网络中所有其它节点的分组选路服务。
多播选路指的是网络层提供的从一个源节点到网络中一组节点的分组选路服务。
1.广播选路
最直接的实现广播选路的方法是由发送节点向所有目的地发送分组的拷贝,这种方法看起来很简单,但是它有一些缺点使得它实用:
效率低下一个分组变成了N个分组极大的浪费了带宽
无法知道所有潜在目的地的地址,除非设计新的协议用于该目的,但是这无疑加大了其难度
链路状态协议使用了广播来更新链路状态信息,在这种情况下,广播的目的是产生和更新单播路由,因而如果再反过来用单播来实现广播就变得不明智了
因而必须采用其它方式来实现广播选路。
1.无控制泛洪
实现广播最显而易见的方式是使用泛洪,即所有节点都向除了它接收分组的那个邻居之外的所有邻居转发分组。只要网络是连通的,分组必然可以到达所有节点,但是根据最简单的图论知识也可以知道,分组将在整个网络内不受限制的被复制,直到它们的生存时间到期。这将形成广播风暴,导致网络变得不可用。
2.受控泛洪
避免广播风暴的关键在于:每个节点可以选择泛洪分组的时机。有两种方案可以解决广播风暴的问题:
序号控制泛洪:源节点将其地址以及广播序号放入广播分组,再向网络泛洪分组。每个节点维护它收到的、复制的和转发的每个广播分组的序号列表,每当它收到一个广播分组时,都检查该表,如果已经存在就不泛洪,否则泛洪,并将新的信息更新到该表中。
反向路径转发RPF当一台路由器接收到具有给定源地址的广播分组时仅当该分组到达的链路正好是位于它自己到其源的最短单播路径上时它才泛洪分组。否则它丢弃分组。
3.生成树广播
受控泛洪解决了广播风暴的问题,但是网络中还是会存在冗余的广播分组。生成树方案可以解决该问题。
生成树:包含网络中的所有节点的,并使用网络中的链路所连接起来的连通图。
最小生成树:每段链路的费用之和在所有生成树中最小的生成树。
生成树广播指的是首先先对网络节点狗仔一棵生成树,当一个节点要发送一个广播分组时,它向所有属于该生成树的特定链路发送分组。该方案的复杂性在于生成树的生成和维护。
实际中OSPF使用了序号控制方法。
2.多播选路
多播用于将分组交付给网络节点的一个子集。
多播通信中有两个问题一是怎样标识多播分组的接收方怎么为多播分组的接收方编址。解决方案是使用简介地址编址即用一个标识来标识一组接收方寻址到该组的分组会被交付给与该分组相关的多播接收方。IPv4使用D类地址用于该目的IPv6也有自己的多播地址格式。与一个多播地址关联的接收方组称为多播组。
1.IGMP
在有了多播地址后如果一个主机想要接收多播分组就必须在多播地址和它自己之间建立关联关系这是通过IGMP协议来实现的主机通过该协议来通知主机的默认路由器“我要加入到某个多播组或者退出某个多播组”路由器根据该信息来决定是否转发多播分组到主机。
2.多播选路
多播选路的目的是发现一颗链路树,该树连接了所有属于该多播组的主机相连的路由器。之后多播分组就可以沿着该树从发送方路由到所有属于该多播组的主机。选路树的构建有两种方法:
使用一颗组共享树进行多播选路:该方法基于一棵构建的树,该树包括了所有具有该多播组相连主机的路由器。该多播组的分组基于该树转发
基于一棵基于源的树进行多播 选路该方法为多播组中的每个源构建一颗多播选路数。实际中采用了RPF算法来构建该树同时使用剪枝算法来修正该树。剪枝算法是指如果一台路由器接收到了娿一个多播分组而它无加入到该分组的主机就向其上游发送一个剪枝报文收到该剪枝报文的路由器将不会向该路由器转发该多播组的分组如果一台路由器的每个下游路由器都向它发送了剪枝报文它就向其上游发送一个剪枝报文。
因特网中使用的多播选路算法有DVMRPDistance Vector Multicast Routing Protocol和PIMProtocol-Independent Multicast
五、MAC地址到IP地址的映射
网络层用于在因特网中标识主机并为主机之间提供选路和转发功能但是物理上一个接口能否接收报文则取决于它的链路层地址不考虑混杂模式混杂模式下接口网卡会接收所有报文。对于广播和组播IP地址和链路层地址之间的关系是有固定算法的所以很容易由IP地址得到链路层地址但是对于单播就必须有一种方法来将IP地址和链路层地址关联起来在IPv4中这是通过地址解析协议ARP来实现的。ARP为IP地址和对应的硬件地址之间提供了动态映射。
1.多播地址的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的报文格式为
以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全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的简单工作过程
当一台主机需要和另一台主机通信时它会首先查找路由表来获得下一跳的信息如果下一跳信息中不包含MAC地址它就需要解析下一跳的MAC地址这时它就发送一个ARP请求到下一跳而下一跳收到该请求后就会发送一个ARP应答报文来告诉请求者它的MAC地址。在获得这个MAC地址之后主机就可以继续自己的通信过程了。
ARP请求报文是一个广播报文目的MAC地址为全F而源MAC地址为自己的MAC地址。负载中的信息包含了发送者的IP地址和MAC地址以及目的IP地址目的MAC地址为全0一个例子如图
ARP响应报文是一个单播报文只会被发送给请求者。一个例子如图
4.ARP代理
如果ARP请求是从一个网络的主机发往另一个网络上的主机那么连接这两个网络的路由器就可以回答该请求这个过程称作委托ARP或ARP代理(ProxyARP)。这样可以欺骗发起ARP请求的发送端使它误以为路由器就是目的主机而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理把分组从其他主机转发给它。
5.免费ARP
一个ARP特性称作免费ARP(gratuitousARP)。它是指主机发送ARP查找自己的IP地址。通常它发生在系统引导期间进行接口配置的时候。
免费ARP可以有两个方面的作用
一个主机可以通过它来确定另一个主机是否设置了相同的IP地址。
如果发送免费ARP的主机正好改变了硬件地址很可能是主机关机了并换了一块接口卡然后重新启动那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。一个比较著名的ARP协议事实[Plummer1982]是如果主机收到某个IP地址的ARP请求而且它已经在接收者的高速缓存中那么就要用ARP请求中的发送端硬件地址如以太网地址对高速缓存中相应的内容进行更新。主机接收到任何ARP请求都要完成这个操作ARP请求是在网上广播的因此每次发送ARP请求时网络上的所有主机都要这样做
5.IPv6的地址解析
IPv6不适用ARP协议而是使用ICMPv6协议中的ND(neighbor discover)来完成对应的解析过程。

View File

View File

View File

@@ -0,0 +1,180 @@
# 实验入门
## 1 实验说明
## 2 设备简介
### 集线器hub
* 物理层
* 将多条以太网双绞线或光纤集合连接在同一段物理介质下的设备。某个端口接收到比特信号,简单的将比特信号复制转发到其他端口。多个端口同时输入信号时会发生冲突。
### 交换机switch
* 链路层
* 是一种用于电信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路把传输的信息送到符合要求的相应路由上。采用背板总线交互结构每个端口有一个独立的共享介质每个冲突域只有一个端口。链路层是根据mac地址进行数据转发。
* 交换方式主要包括:端口交换、帧交换、信元交换。
* 具体结构如下:
![asdf](\image/交换机结构.png)
### 路由器router
* 网络层
* 根据IP地址进行路由转发到对应的网络。工作在广域网连接不通的网络。数据转发基于路由表实现。
* 路由器的主要功能有两个:存储转发与路由选择。
* 路由选择主要包括两种方法:静态路由与动态路由。
* 具体结构如下:
![ads](\image/路由器结构.png)
### 说明
* 集线器本身不能区分广播域和冲突域,对收到的任何目的地之的消息都进行转发。
* 二层交换机能够区分冲突域,每个端口是一个独立的冲突域,端口之间不会起冲突,会根据不同目的地址进行转发。但是不区分广播域,收到的广播消息会转发给所有同网段的主机。
* 一个交换机下设置同网段的主机会处于同一个局域网下,设置不同网段的主机可以处于不同的局域网下。
* 路由器和主机都具有适配器每个适配器具有ip地址与Mac地址。但是交换机没有网络适配器所有的接口不具有ip地址与Mac地址其唯一的作用是维护一个Mac地址和交换机接口映射表。
* ARP协议是用来解析MAC地址的协议。ARP协议在网络适配器当中执行而不是交换机中。ARP维护的IP-MAC地址映射表存在主机的内存中ARP表的每一个动态项都有生存周期一段时间后自动清除。
* DNS与ARP协议类似DNS能够解析因特网中任意地方的主机名解析为IP地址。ARP协议只能讲局域网中的IP地址解析为MAC地址。
* 简单来说链路层的工作模式如果是目的ip地址在局域网内则直接arp拿到mac地址发送帧。如果目的ip地址在局域网外直接arp拿到网关mac地址路由器适配器地址发送帧。
* 链路层,只关心目标适配器,不关心路由。只进行一跳。
> 一会可以查看一下ping不通的原因以及为什么路由表中没有另外一个地址真奇怪
## 3 软件说明
> 使用华三通H3C的交换机和路由器。
### 路由器和交换机的配置方式
* console口配置
* Telnet配置
* AUX口远程配置
* 哑终端配置
* FTP方式传送配置文件
### 控制级别
* 参观级
* 监控级
* 配置级
* 管理级
## 4 H3C命令行
> 基于视图的命令行。
### 视图切换命令
```
system-view //进入系统视图
interface Ethernet1/0/1 //进入以太网接口视图
quit //退出当前视图
```
### 用户视图
```
display * //显示各种配置视图
display current-configguration
display version
display interface Ethernet1/0/1
display clock
? //查看该视图下的命令
debuging //调试命令
reset //重置或清除相关配置
reset saved-configuration
reset arp
reset ospf process
reboot //重启
```
### 系统视图
```
sysname R1 //重命名当前视图
```
### 路由器以太网端口视图
```
# ip协议相关命令
ip address ip-address mask[sub]
undo ip address [ip-address mask][sub]
# MTU
mtu 100
undo mtu
# speed
speed [100|10|negotiation] //100M,10M,自动协商
# display
display interfaces ethernet number
```
### 交换机以太网端口视图
```
shutdown
undo shutdown
duplex full //设置全双工状态
undo duplex //回复以太网全双工状态
spreed [10|100|auto]
mdi [across|auto|normal] //设置接口网线类型
flow-control //流量控制
undo flow-control //解除流量控制
port link-type [acces|hybrid|trunk] //设置接口链路类型
undo port link-type
display interface Ethernet1/0/1
```
### VLAN视图
### VLAN接口视图
### RIP视图
### OSPF视图
### ACL视图
## 5补充ip
### 子网掩码
将IP地址分为网络地址与主机地址。通过子网掩码就可以判断两个IP在不在一个局域网内部。子网掩码可以看出有多少位是网络号有多少位是主机号。
* 网络地址
* 主机地址
* 广播地址网络位与主机位都为1是广播地址。
* 一个交换机下设置同网段的主机会处于同一个局域网下,设置不同网段的主机可以处于不同的局域网下。
### 网关
网间连接器、协议转换器。实现局域网与广域网的互联。
# 链路层实验

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB