网络层提供的服务
面向连接的虚电路服务:
- 在网络层建立虚电路(VC,Virtual Circuit)连接并编号,以保证可靠性。虚电路指明了传输的固定路径
- 每次传递消息,只需指明虚电路的编号(分组首部),无需目标主机地址
- 通信结束后,释放建立的虚电路
已过时,曾用于ATM等
无连接的数据报服务:
- 不建立网络层连接,不保证可靠性(误码丢失重复失序,由上层保证可靠性)
- 数据传输路径不固定
用于因特网
网络地址
IPv4/IPv6地址是Internet上每一台主机(或路由器)的每一个接口被分配的全球唯一标识符
IPv4:32位,每8位为一组。编址方法历经分类编址->划分子网->无分类编址三个阶段。地址在2011年已分配完毕
分类编址
IPv4由网络号和主机号组成,分为五类,其中前三类可指派给主机
网络号:只有在一个网络号下的计算机之间才能“直接”互通,不同网络号的计算机要通过网关(Gateway)才能互通
主机号:主机号可组合的数量为可分配的主机数量
红色数字为地址头部的位的数值
主机号全0是网络地址,表示所在网段
主机号全1是广播地址,表示发送广播分组的目的地址(不能分配给网络接口)
专用(内网)地址见本页末尾
因此可分配给接口的主机号数量为2^(主机号位数)-2
主机的网络号不能全为0或1
划分子网
目的:从主机号借用一部分比特作为子网号
子网掩码与IP地址进行逻辑与运算,结果表示网络地址,即子网掩码中连续的比特1表示网络号和子网号,剩余连续的0表示主机号
子网掩码连续的比特1长度不小于网络号比特位长度,相等时为默认子网掩码
e.g.
某接口IP为218.75.230.70,子网掩码为255.255.255.192
则接口为C类网络地址,向主机号借用了左边两位作为子网号,所属网络地址为218.75.230.64,每个子网可分配给接口的主机号数量为2^(主机号位数-子网位数)-2即2^(8-2)-2=62
无分类编址
无分类域间路由选择(CIDR,Classless Inter-Domain Routing)
采用斜线记法(CIDR记法),即在IP后加上斜线与数字,表明网络号所占IP的比特数量
e.g. 192.168.32.0/19,则前19位为网络号
路由聚合(构造超网)
即找到各IP的共同最长前缀
网络前缀越长,地址块(主机号)越小,路由越具体
因此,路由器查表转发分组时,通过最长前缀匹配选择路由
IP的应用规划
定长的子网掩码(FLSM,Fixed Length Subnet Mask):使用统一子网掩码(地址块/xx相同)划分子网。每个子网所分配的IP地址数量相同,造成地址浪费
变长的子网掩码(VLSM,Variable Length Subnet Mask):使用不同的子网掩码(地址块/xx不同)划分子网。原则上分配时每个子块(子网)的大小为2的幂(需要12个地址时分配16个地址,需要25个地址时分配32个),一般先给大(/xx较小)的子块分配
IP数据报的发送与转发
网关(Gateway):用于划分网段,隔离网域
主机发送IP数据报
判断目的IP是否与自己在同一网络(将IP同子网掩码进行逻辑与,判断网络号是否一致):
①若在同一网络,则属于直接交付,直接发送即可
②若不在同一网络,则属于间接交付。将数据报发送至默认网关(路由器),由其帮忙转发
路由转发IP数据报
首先,检查IP数据报首部是否出错:
①若出错,则丢弃数据报并通知源主机
②若不出错,则转发
随后,根据解封装后数据报中的目标IP查路由表:
①若查到,则转发给表中指示的下一跳
②若未查到,则丢弃数据报并通知源主机
路由选择
静态路由选择:即人工配置路由表,适用于小规模网络,可能导致路由环路
动态路由选择:路由器自动获取路由信息,协议有用于内部网关(ISP内部)的RIP、OSPF等,和用于外部网关的BGP(边界网关协议)
RIP
路由信息协议(RIP,Routing Information Protocol)是一种IGP内部网关协议IGP
RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离(不考虑带宽和时延)
路由器到直连网络的距离定义为1
路由器到非直连网络的距离定义为所经过的路由器数加1(路由间的距离为2)
允许一条路径最多只能包含15个路由器,“距离”不小于16时相当于不可达,因此只适用于小型互联网
工作过程:
①路由器刚开始工作时,只知道自己到直连网络的距离为1.
②每个路由器仅和相邻路由器周期性地交换并更新路由信息(路由表。RIP封装在UDP中,UDP封装在IP中)
③若干次交换和更新后,每个路由器都知道到达本AS自治系统(ISP内部)内各网络的最短距离和下一跳地址,称为收敛
工作原理:
选择跳数最少的路径进行路由,不考虑网络的带宽和时延
当有多条路径跳数相等时,可进行等价负载均衡,即将通信量均衡的分布在等价路由上
OSPF
开放最短路径优先(OSPF,Open Shortest Path First),是为克服RIP的缺点在1989年开发出来的
OSPF基于链路状态,而不像RIP基于距离向量
OSPF采用SPF算法(Dijkstra)计算路由,从算法上保证了不会产生路由环路
OSPF不限制网络规模,更新效率高,收敛速度快
链路状态指本路由器都和哪些路由器相邻,以及相应链路的“代价(cost)”
代价用于表示费用、距离、时延、带宽等,由网络管理人员决定
基本工作原理:
①每个路由器生成链路状态通告LSA(Link State Advertisement),LSA中包含以下内容:
a.直连网络的链路状态信息
b.邻居路由器的链路状态信息
②LSA被封装在链路状态更新分组LSU中(IP直接封装),采用洪泛法发送
③每个路由器通过链路状态数据库LSDB存储LSA,最终各路由器的LSDB将一致
④路由器根据LSDB进行SPF最短路径优先计算,构建路由表
数据报
IP数据报头部结构:
8位为1个字节,一行32位4个字节
版本:IP协议版本。通信双方版本需一致,通常为4(IPv4)
首部长度:IP数据报首部长度
区分服务:很少使用。表示不同等级的服务质量
总长度:IP数据报总长度
标识:同一数据报的分片具有同一标识。每产生一个数据报,计数器+1并赋值
标志:占3位——DF位(Don't Fragment)为1表示不允许分片;MF位(More Fragment)为1表示后面还有分片;保留位为0
片偏移:分片数据报的数据部分偏移其原数据报多少位,以8字节为单位(因此必须为整数)
生存时间TTL:实际为剩余跳数,避免陷入环或迷路。跳数减为0后丢弃数据报
协议:指明使用的协议数据单元(ICMP、TCP、UDP、IPv6、OSPF)
首部检验和:检验首部差错。数据报每经过一个路由器,都要重新计算首部检验和,因为首部可能发生变化。IPv6不再计算首部检验和,效率更高
可选字段:很少使用。支持排错、测量、安全等
填充:当可选字段被使用时,填充比特0以确保首部长度为4字节的整数倍
IP分组经过路由器转发时修改的字段:
①生存时间-1,首部检验和将重新计算
②若分组长度大于MTU,则分片:总长度、标志、片偏移将发生变化
分片:
图中黄色部分用于分片
当IP数据报总长度超过MTU(1500字节)时需要分片,分片后每个分片都有各自的首部
ICMP
网际控制报文协议(ICMP,Internet Control Message Protocol),封装在IP中
主机或路由器使用ICMP发送差错报告报文和询问报文
用于发送控制消息,提升网络工作效率,也便于网络管理者诊断问题
差错报告报文有:
终点不可达——路由器或主机无法交付数据报
源点抑制——路由器或主机产生拥塞,通知源点降低发送速率
时间超过——TTL耗尽或接收超时
参数问题——误码
改变路由(重定向)——有更好路由路径
以下情况不发送差错报告报文:
差错报告报文本身
除第一个分片外的其它分片
多播地址与特殊地址(127.0.0.0、0.0.0.0等)
询问报文有:
回送请求和回答——测试可达与查询状态
时间戳请求和回答——时钟同步与测量时间
ping
ping命令用于测试主机或路由器间的连通性
应用层直接使用网络层ICMP(IP封装)
使用询问报文的回送请求和回答报文
tracert
tracert命令(Linux中为traceroute)用于测试数据报经过的路由器
Windows中应用层直接使用网络层ICMP(IP封装),Linux中在传输层使用UDP
使用差错报告报文和询问报文的回送请求和回答报文
原理:发送不同TTL的数据报
VPN与NAT
虚拟专用网(vpn,Virtual Private Network):利用公用因特网作为本机构专用网的通信载体
网络地址转换(nat,Network Address Translation):路由器将大量内部地址转换为少量外部地址与外网通信,并形成nat转换表且修改源IP为外部地址
- 当收到数据报时,再通过nat转换表找到对应的内网IP
- 因此外网不能直接访问内网主机,起到一定保护作用
napt(Network Address and Port Translation):在nat基础上外加端口号实现网络地址转换,可实现内网地址只转换为一个外网地址(端口号不同)
专用(私有、内网)地址:
10.0.0.0-10.255.255.255
172.16.0.0-172.31.255.255
192.168.0.0-192.168.255.255