从发送主机向接收主机传送数据段(segment )
发送主机:将数据段封装到数据报(datagram )中
接收主机:向传输层交付数据段(segment )
每个主机和路由器都运行网络层协议
路由器检验所有穿越它的IP数据报的头部域
转发:将分组从路由器的输入端口转移到合适的输出端口
路由:确定分组从源到目的经过的路径
路由算法(协议)确定通过网络的端到端路径
转发表确定在本路由器如何转发分组
某些网络的重要功能
ATM,帧中继,X.25
数据分组传输之前两端主机需要首先建立虚拟/逻辑连接
网络设备(如路由器)参与连接的建立
网络层连接与传输层连接的对比
无连接服务(connection-less service):
连接服务(connection service):
数据报(datagram)网络与虚电路(virtual-circuit)网络是典型两类分组交换网络
数据报网络提供网络层无连接服务
虚电路网络提供网络层连接服务
类似于传输层的无连接服务(UDP)和面向连接
服务(TCP ),但是网络层服务:
虚电路: 一条从源主机到目的地的主机,类似于电路的路径(逻辑连接)
通信过程:
每条虚电路包括:
1. 从源主机到目的主机的一条路径
2. 虚电路号( VCID) , 沿路每段链路一个编号
3. 沿路每个网络层设备(如路由器), 利用转发表记录
经过的每条虚电路
沿某条虚电路传输的分组,携带对应虚电路的VCID,而不是目的地址
同一条VC ,在每段链路上的VCID通常不同
路由器转发分组时依据转发表改写/替换虚电路号
转发表
输入接口 | 输入VC | 输出接口 | 输出VC |
---|---|---|---|
1 | 12 | 3 | 22 |
2 | 63 | 1 | 18 |
3 | 7 | 2 | 17 |
1 | 97 | 3 | 87 |
VC路径上每个路由器都需要维护VC连接的状态
VC进入路由器后,路由器将VC头替换,然后转发出去
网络层无连接
* 每个分组携带目的地址
* 路由器根据分组的目的地址转发分组
* 基于路由协议/算法构建转发表
* 检索转发表
* 每个分组独立选路
路由器转发表
目的地址 | 输出链路 |
---|---|
地址范围1 | 3 |
地址范围2 | 2 |
地址范围3 | 2 |
地址范围4 | 1 |
最长前缀匹配优先:
在检索转发表时,优先选择与分组目的地址匹配前缀最长的入口(entry).
主机、路由器网络层主要功能:
首部 | 描述 |
---|---|
版本号(4bit) | 描述IP协议的版本号,目前主要有V4和V6两个版本 |
首部长度(4bit) | 以四字节为单位例如: 5 -> IP首部长度为20(5 * 4)字节,不这么计算的话,长度描述根本不够 |
服务类型(8bit) | 指示期望获得哪种类型的服务 1 .只有在网络提供区分服务(DiffServ)时使用 2.一般情况下不使用,通常IP分组的该字段(第2字节)的值为00H |
总长度(16bit) | IP分组的总字节数(首部 + 数据) 1. 最大IP分组的总长度: 65535B 2.最小的IP分组首部: 20B 3. IP分组可以封装的最大数据:65535 - 20 = 65515B |
生存时间TTL(8bit) | IP分组在网络中可以通过的路由器数(或跳步数) 1.路由器转发一次分组, TTL减1 2.如果TTL=0,路由器则丢弃该IP分组 |
协议(8bit) | 指示IP分组封装的是哪个协议的数据包,实现复用/分解 |
首部校验和(16位) | 实现对IP分组首部的差错检测 1.计算校验和时,该字段置全0 2.采用反码算数运算求和,和的反码作为首部校验和字段 3.逐跳计算、逐跳校验 |
源IP地址、目的IP地址字段(各占32bit) | 分别标识发送分组的源主机/路由器(网络接口)和接收分组的目的主机/路由器(网络接口)的IP地址 |
选项字段(长度可变,范围在1~40B之间) | 携带安全、源选路径、时间戳和路由记录等内容(实际上很少被使用) |
填充(长度可变,范围在0~3B之间) | 目的是补齐整个首部,符合32位对齐,即保证首部长度是4字节的倍数 |
标识字段(16bit) | 标识一个IP分组,IP协议利用一个计数器,每产生IP分组计数器加1,作为该IP分组的标识 |
标志位(3bit) | 1. DF (Don’t Fragment) 2. MF (More Fragment) DF =1:禁止分片; DF =0:允许分片 MF =1:非最后一片; MF =0:最后一片(或未分片) |
片偏移(13bit) | 一个IP分组分片封装原IP分组数据的相对偏移量 片偏移字段以8字节为单位 |
网络链路存在MTU (最大传输单元)—链路层数据帧可封装数据的上限不同链路的MTU不同
大IP分组向较小MTU链路转发时, 可以被“分片” (fragmented)
IP首部的相关字段用于标识分片以及确定分片的相对顺序
假设原IP分组总长度为L,待转发链路的MTU为M
若L>M,且DF=0,则可以/需要分片
分片时每个分片的标识复制原IP分组的标识
通常分片时,除最后一个分片,其他分片均分为MTU允许的最大分片
一个最大分片可封装的数据应该是8的倍数, 因此, 一个
最大分片可封装的数据为:
接口(interface): 主机/路由器与物理链路的连接
IP地址: 32比特(IPv4)编号标识主机、路由器的接口
IP地址与每个接口关联
IP地址:
IP子网
“有类”编码
如图:
特殊IP地址
私有IP地址
IP地址:
如何确定是否划分了子网?利用多少位划分子网?
形如IP地址:
取值:
将IP分组的目的IP地址与子网掩码按位与运算,提取子网地址
无类域间路由(CIDR: Classless InterDomain Routing)
子网201.2.3.64, 255.255.255.192→201.2.3.64/26
无类域间路由(CIDR: Classless InterDomain Routing)
当一个子网无法聚合所有的子网时,需要零碎出去的”子网片”利用最长前缀匹配原则向路由器通告,以便正确收发消息.
路由算法通过设置转发表来得到应用
其中
N = 路由器集合
E = 链路集合
费用(Costs):每段链路的费用可以总是1,或者是宽带的倒数、拥塞程度等.
静态路由VS动态路由?
静态路由:
动态路由:
全局信息VS分散信息?
全局信息:
分散信息:
Dijkstra算法:
数据结构有实现,这里直接上代码:
#include
#include
#define max 11000000000
int a[1000][1000];
int d[1000];//d表示某特定边距离
int p[1000];//p表示永久边距离
int i,j,k;
int m;//m代表边数
int n;//n代表点数
int main()
{
scanf("%d%d",&n,&m);
int min1;
int x,y,z;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
a[x][y]=z;
a[y][x]=z;
}
for(i=1;i<=n;i++)
d[i]=max1;
d[1]=0;
for(i=1;i<=n;i++)
{
min1=max1;
for(j=1;j<=n;j++)
if(!p[j]&&d[j]for(j=1;j<=n;j++)
if(a[k][j]!=0&&!p[j]&&d[j]>d[k]+a[k][j])
d[j]=d[k]+a[k][j];
}
for(i=1;iprintf("%d->",p[i]);
printf("%d\n",p[n]);
return0;
}
复杂性分析和优化见数据结构
链路状态路由算法的震荡:
Bellman-Ford方程(动态规划)
令:
dx(y):=从x到y最短路径的费用(距离)
则:dx(y) = min {c(x,v) + dv(y) }
Dx(y) = 从结点x到结点y的最小费用估计
异步迭代:
见示意图
解决方案
毒性逆转(poisoned reverse):
毒性逆转并不能从根本上彻底解决无穷计数问题,在某些更复杂的网络情况下,毒性逆转就无能为力了
定义最大度量
定义一个最大的有效费用值,如15跳步,16跳步表示无穷.
具体过程见示意图
网络规模: 考虑6亿目的结点的网络
管理自治:
聚合路由器为一个区域:自治系统AS(autonomous systems)
同一AS内的路由器运行相同的路由协议(算法)
网关路由器(gatewayrouter):
转发表由AS内部路由算法和AS间路由算法共同配置
自治系统间(inter-AS)路由任务
假设AS1内某路由器收到一个目的地址在AS1之外的数据报:
假设AS1通过AS间路由协议学习到:子网x通过AS3和AS2均可到达
热土豆路由: 将分组发送给最近的网关路由器.
AS内部路由协议也称为内部网络协议IGP(interiorgatewayprotocols)
RIP
早于1982年随BSD-UNIX操作系统发布
RIP示例
注意这里路由器之间交换的通告和一般的距离向量路由算法不同,增加了下一跳信息,如果看到某个路由器看到下一跳就是自己,那么就相当于起到了毒性逆转的作用.
RIP链路的失效和恢复信息
如果180秒没有收到通告→邻居/链路失效
RIP路由表的处理:RIP路由表是利用一个称作route-d(deamon)的应用层进程实现的
通告报文周期性通过UDP数据报发送
RIP协议适用于小规模AS,以为最大跳步15.
采用链路状态路由算法
OSPF优点
安全(security): 所有OSPF报文可以被认证(预防恶意入侵)
OSPF分层示例:
路由器种类 | 描述 |
---|---|
区边界路由器(Area Border Routers) | “汇总”到达所在区网络的距离,通告给其他区边界路由器(每个小区和蓝色区相交的那个路由器) |
主干路由器(Backbone Routers) | 在主干区内运行OSPF路由算法.(图中蓝色区域的普通路由器) |
AS边界路由器(AS boundary routers) | 连接其他AS.(最上面那个路由器) |
边界网关协议BGP (Border GatewayProtocol):事实上的标准域间路由协议
BGP为每个AS提供了一种手段:
* eBGP: 从邻居AS获取子网可达性信息.
* iBGP: 向所有AS内部路由器传播子网可达性信息.
* 基于可达性信息与策略,确定到达其他网络的 “好”
路径.
* 容许子网向Internet其余部分通告它的存在:“ 我在这儿! ”
BGP会话(session): 两个BGP路由器 (“ Peers” )交换BGP报文:
BGP报文:
* OPEN: 与peer建立TCP连接,并认证发送方
* UPDATE: 通告新路径 (或撤销原路径)
* KEEPALIVE: 在无UPDATE时,保活连接;也用于对OPEN请求的确认
* NOTIFICATION: 报告先前报文的差错;也被用于关闭连接
当AS3通告一个前缀给AS1时:
* AS3承诺可以将数据报转发给该子网
* AS3在通告中会聚合网络前缀
BGP分发路径信息:
如示意图:
在3a与1c之间, AS3利用eBGP会话向AS1发送前缀可达性信息.
通告的前缀信息包括BGP属性
两个重要属性:
BGP路由选择
网关路由器收到路由通告后,利用其输入策略(import policy)决策接受/拒绝该路由e.g., 从不将流量路由到AS x
路由选择策略示例:
A向B通告一条路径: AW
B向X通告路径: BAW
B是否应该向C通告路径BAW呢?
为什么采取不同的AS内与AS间路由协议
策略(policy):
规模(scale):
性能(performance):