计算机网络-网络层
计算机网络理论,网络层。
两种服务
面向连接的服务,虚电路(virtual circuit):
- 通信双方在开始数据传输前,先由网络建立连接,之后的数据均通过该连接进行,由网络保证数据传输的可靠性。
无连接的服务,数据报(datagram):
- 网络在发送数据时不需要先建立连接,每一个分组在网络中独立传送
- 网络层不保证服务质量,分组可能出错、丢失、重复和失序,也不保证分组传送的时限
TCP/IP采用数据报服务。
IP协议(Internet Protocol)
与IP协议配套使用的四个协议:
- ARP(Address Resolution Protocol),地址解析协议
- RARP(Reverse Address Resolution Protocol),逆地址解析协议
- ICMP(Internet Control Message Protocol),网际控制报文协议
- IGMP(Internet Group Management Protocol),网际组管理协议
IP地址
分配给主机或路由器的标识符,目前使用的IPv4为32位IP地址。IP地址的分配由ICANN (Internet Corporation for Assigned Names and Numbers)负责。
分类的IP地址
IP地址被分为A, B, C, D, E五类,每一类地址都包含网络号(net-id)和主机号(host-id)两个字段:
\[IP 地址 = \{<网络号>, <主机号>\}\]全0、全1的IP地址有特殊含义
- 全0表示本网络或本主机
- 全1表示广播地址
127.x.x.x为环回地址,用于主机自测。
IP地址与物理地址
IP地址
- 网络层及以上各层使用的地址,是一种逻辑地址
- 存放在IP包头部
物理地址
- 数据链路层及物理层使用的地址
- 存放在数据链路层的帧中
网络层及以上使用IP地址,数据链路层及以下使用物理地址。
IP数据报格式
一个IP包由头部和数据两部分组成。
- Version字段:4bit,IP 协议的版本,目前的IP 协议版本号为4 (即IPv4)
- IHL:4bit,IP包头长度,最小5,最大15,单位为word(32bit)。因此IP包头最长60 字节
- Type of service:1字节,服务类型,目前很多路由器忽略该字段
- Total Length:2字节,IP包总长度(含头部和数据),单位为字节。因此IP包的最大长度为65535 字节
- Identification:2字节,标识,是一个计数器,用来产生IP包的标识
- 超过数据链路层MTU(Maximum Transmission Unit)的IP包要分片传输
- 分片的多个包具有相同的标示,便于接收端重组
- DF:1bit,Don’t Fragment,当 DF=0 时允许分片
- MF:1bit,More Fragment,MF=1 表示后面“还有分片”;MF=0表示最后一个分片
- Fragment offset:13bit,片偏移,较长的包在分片后,某片在原分组中的相对位置,以8字节为单位
- Time to live(TTL):1字节,生存时间,IP包在网络中可通过的路由器个数的最大值
- 实际实现中,IP包每经过一个路由器TTL减1,为0则丢弃,并向源主机发送一个告警包
- 最大值为255,由源主机设定初始值,Windows操作系统一般为128,UNIX操作系统一般为255,Linux一般为64
- Protocol:8bit,协议字段,该包中数据部分的协议类型,即上层协议类型,该字段决定了该包将交由哪里
- Header checksum:2字节,包头校验和(注意:只针对包头)
- Source address:4字节,源IP地址
- Destination address:4字节,目的IP地址
- Options:以4字节为单位,最长40字节。实际网络中很少使用
校验和算法:对IP包头,每16位求反,循环相加(进位加在末尾),和再求反
子网划分
对目的IP地址和子网掩码执行“按位与”操作,即得到子网地址。
使用子网掩码的分组转发
项包含三项基本信息:目的网络地址、子网掩码、下一跳地址。
将目的IP地址与路由表中子网掩码“与”,并判断是否与目的网络匹配。
无分类编址CIDR
网络前缀都相同的连续的IP地址组成“CIDR地址块”。
路由聚合(route aggregation),CIDR带来的好处:
- 一个CIDR地址块可以表示很多地址,这种地址的聚合称为路由聚合
- 路由聚合的好处:路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由,可以减少路由表中表项个数,并减少路由器间交换的路由信息量
- 路由聚合也称为构成超网(supernetting)
- 称为超网是由于CIDR地址块大多包含多个C类地址
关于地址掩码
- CIDR不使用子网,但仍使用“地址掩码”这一名词
CIDR记法的其他形式
- 10.0.0.0/10可简写为10/10,即省略点分十进制中低位连续的0
最长前缀匹配(longest-prefix matching)原则:
- 从匹配结果中选择具有最长网络前缀的路由
- 网络前缀越长,其地址块就越小,因而路由就越具体(more specific)
- 最长前缀匹配又称为最长匹配或最佳匹配
ARP协议与RARP协议
IP -> ARP -> MAC
MAC -> RARP -> IP
ARP协议:
- 主机设有一个ARP高速缓存(ARP cache),存放本地局域网IP地址与MAC地址的映射表
- 当主机要发送数据时,首先在ARP高速缓存中查找目的IP地址对应的MAC地址;如果没有找到,则发送ARP请求广播包,请求目的主机的MAC地址
- 如果目的主机不在本局域网内,IP包需经路由器转发
ICMP协议
主要用于报告出错和测试等控制信息。
ICMP 报文有9种,可分为差错报告报文和询问报文两类:
- 差错报告报文
- Destination unreachable:终点不可达,路由器或主机无法传输报文时向源主机发送此报文
- Time exceeded:超时,当报文的TTL字段为0时,路由器丢弃报文,并向源主机发送此报文
- Parameter problem:参数问题,路由器或主机收到的报文中头部有非法字段时,丢弃数据包,并向源主机发送此报文
- Source quench:源点抑制,路由器或主机由于拥塞丢弃报文时,向源主机发送此报文,使其放慢发送速度
- Redirect:重定向,路由器向主机发送此报文告知路由改变,主机下次发送数据报给另外的路由器
- 询问报文
- Echo request / reply:回声探测,用于测试网络连通性
- Timestamp request / reply:请求时间,可用于时间同步
ping:采用ICMP echo request / reply报文:
- 向目的主机发送ICMP echo request报文,对方收到后会回应ICMP echo reply,根据能否收到应答后判断两台主机之间是否连通
tracert:采用ICMP Time exceeded报文:
- 逐个发出UDP报文,其IP包头中的TTL字段分别设为1, 2, 3, …,直到到达目的主机
- 报文路由路径上的路由器会返回ICMP超时报文,从该报文即可得知路由器IP地址
路由算法及协议
在网络中,路由器依据路由信息(路由表)转发分组,路由信息是路由协议生成的,路由算法是路由协议的基础和核心。
- 静态路由
- 动态路由
- 距离矢量(distance vector)路由算法
- 链路状态(link state)路由算法
自治系统(AS):在单一的技术管理下的一组路由器
- 内部网关协议(IGP):在同一个AS内部使用的路由协议
- RIP
- OSPF
- 外部网关协议(EGP):在不同AS之间使用的路由协议
- BGP
距离向量路由的基本思想:
- 每个路由器维护一张表,表中给出了到每个目的地的已知最佳距离和线路,并通过与相邻路由器交换距离信息来更新表
- 路由器周期性地向所有相邻路由器发送它的距离表,同时它也接收每个邻居结点发来的距离表
RIP协议
RIP(Routing Information Protocol)是一种基于距离向量的路由选择协议,采用距离作为路由选择的标准。
- 距离:路由器跳数。最长距离为15跳,16跳表示不可达。
- 特点:简单、适用于小型网络
RIP的三个要点:
- 仅和相邻路由器交换信息
- 交换的信息是当前本路由器所知道的全部信息,即自己的路由表
- 按固定的时间间隔交换路由信息(典型值:每隔30秒)
RIP使用UDP协议,端口520。
OSPF协议
每个路由器完成5步工作:
- 发现它的邻居结点,并学习其网络地址
- 测量到各邻居结点的延迟或开销
- 构造一个分组,其中包含所有它刚刚知道的信息
- 将这个分组发送给其他所有路由器
- 计算出到每一个其他路由器的最短路径
OSPF使用IP协议,端口号为89。
原理
- 各路由器之间动态交换链路状态信息,每个路由器都建立一个链路状态数据库
- “链路状态”即本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)
- 链路状态数据库实际上是全网的拓扑结构图,它在全网范围内是一致的(即链路状态数据库的同步)
- 各路由器根据网络拓扑使用Dijkstra算法计算从本路由器到其他结点的最佳路径,构成路由表
优点
- 收敛速度快:当链路状态发生变化时,结点会以洪泛(flooding)方式告知所有网络中其他所有结点
- 适用于较大规模的网络:仅在链路状态发生变化时发送洪泛信息,不会产生很大通信量
自治系统
- 为了管理大规模的网络,OSPF 将一个自治系统再划分为若干个区域(area)
- 每一个区域都有一个32 位的区域标识符(用点分十进制表示)
- 划分区域的好处:利用洪泛法交换链路状态信息的范围局限于一个区域而不是整个的自治系统,减少了整个网络上的通信量
- 一个区域内的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑
- 层次结构的区域划分,上层的区域称为主干区域(backbone area),主干区域的作用是用来连通其他在下层的区域
- 主干区域的标识符规定为0.0.0.0。
OSPF报文
- Hello报文:用于邻居发现和保持邻居关系
- DD(Database Description)报文:用于同步链路状态数据库
- LSR(Link State Request)报文:用于请求链路状态信息
- LSU(Link State Update)报文:用于发送链路状态信息
- LSAck(Link State Acknowledgement)报文:用于确认LSU报文
BGP协议
BGP(Border Gateway Protocol)是一种自治系统间的路由协议,用于在不同自治系统之间交换路由信息。
BGP难以找到最佳路由,只能寻找一条能够到达目的网络且比较 好的路由。
发言人(speaker):
BGP发言人(speaker)
- 每个AS要选择至少一个路由器作为“BGP speaker”
- 两个BGP发言人通过一个共享网络连接在一起
- BGP发言人一般是AS的边界路由器,但也可以不是
- BGP发言人与其他自治系统中的BGP发言人交换路由信息
- 路由信息的交换通过TCP协议进行,两个发言人在TCP连接上交换BGP报文以建立BGP会话(session),利用BGP 会话交换路由信息
- BGP发言人除了运行BGP协议外,还要运行AS的内部网关路由协议
路由生成
信息交换与路由生成:
- BGP所交换的网络可达性的信息就是要到达某个网络所要经过的一系列AS,称为路径向量(path vector)
- BGP发言人互相交换了网络可达性的信息后,就根据所采用的策略从其中找出到达各AS的较好路由
BGP报文:
- Open报文:建立BGP连接
- Update报文:交换路由信息
- Keepalive报文:保持连接
- Notification报文:通知错误
过程
- BGP发言人通过OPEN报文与另一发言人建立会话,对方如同意则回应KEEPALIVE报文
- 双方周期性交换KEEPALIVE报文,以确认会话未中断
- 路由信息变化时,发送UPDATE报文
路由器
具有多个输入/输出端口的专用计算机,其任务是转发分组。
- 路由选择:按照路由选择协议,构建路由表
- 分组转发:根据路由表,将分组从输入端口转发到输出端口
控制平面与数据平面
控制平面:
- 生成路由器和转发表
数据平面:
- 进行分组的快速转发
IP组播
组播(multicast)又称为多播,用于实现一点对多点的数据传输。对于一些网络应用,采用组播可大大减少网络流量。
使用D类地址,范围为224.0.0.0~239.255.255.255。
使用D类地址作为组播地址。组播可以分为两种:
- 在局域网中的硬件组播
- 将MAC地址中特定地址段作为组播地址,并与IP地址对应
- 在Internet中的组播
- 主机通过IGMP协议与组播路由器通信,加入/退出某个组播组。
网络地址转换NAT
RFC1918中定义了一系列专用地址(private address):
- 10.0.0.0 ~ 10.255.255.255 (CIDR记法: 10/8)
- 172.16.0.0 ~ 172.31.255.255 (CIDR记法: 172.16/12)
- 192.168.0.0 ~ 192.168.255.255 (CIDR记法: 192.168/16)
这些地址只能用于机构的内部,Internet中的路由器不转发目的地址为专用地址的包。
当内部网络使用专用地址时,需要进行地址转换,将内部地址转换为外部地址,这就是网络地址转换NAT(Network Address Translation)。
NAT路由器内部使用TCP/UDP端口号实现外网数据包向内网地址的转换。
虚拟专用网VPN
VPN(Virtual Private Network)是一种通过公用网络建立专用网络的技术。包括隧道(tunnel)、加密和身份验证等技术。
基于Internet建立VPN的两种情形:
- 内部网络通过Internet互连
- 远程用户访问内部网(remote access VPN)
典型的VPN实现技术:
- 基于IPSec:ESP隧道模式,工作在网络层,适用于多种应用
- 基于SSL:Web浏览器内置SSL支持,客户端无须安装或配置软件
IPv6协议
决IP地址耗尽问题的措施:
- 采用无类别编址CIDR,使IP地址的分配更加合理
- 采用网络地址转换NAT方法以节省全球IP地址
- 采用具有更大地址空间的新版本的IP协议IPv6
IPv6地址
IPv6地址长度为128位,采用8个16位的字段表示,每个字段用4个十六进制数表示,字段之间用冒号分隔。
IPv6地址的类型:
- 单播地址:用于一对一通信
- 组播/多播地址:用于一对多通信
- 任播地址:IPv6增加的类型,目的站为一组计算机,但只交付最近的一个
冒号十六进制记法:
- 零压缩(zero compression),即一连串连续的零可以为一对冒号所取代(一个地址只能用一次)
- 例:
FF05:0:0:0:0:0:0:B3
可以写成FF05::B3
- 例:
- 冒号十六进制记法可结合点分十进制的后缀
- 例:
0:0:0:0:0:0:128.10.2.1
- 再使用零压缩即可得
::128.10.2.1
- 例:
- CIDR的斜线表示法仍然可用
- 例:60位前缀的
12AB00000000CD3
可记为12AB:0000:0000:CD30:0000:0000:0000:0000/60
- 或
12AB::CD30:0:0:0:0/60
- 或
12AB:0:0:CD30::/60
- 例:60位前缀的
IPv6首部
- 首部长度固定40字节,称为基本首部(base header)
- 取消了不必要的功能,首部字段数减少到8个
- 取消了首部的校验和字段,加快了路由器处理数据报的速度
- 在基本首部的后面允许有零个或多个扩展首部
- 所有的扩展首部和数据合起来叫做数据报的有效载荷(payload)
IPv6首部字段:
- 版本(version):4 位,协议版本,对IPv6该字段为6
- 流量类别(traffic class):8位,用于区分IPv6数据报的类别或优先级
- 流标号(flow label):20位,“流”是从特定源点到特定终点的一系列数据报,“流”所经过路径上的路由器都保证指定的服务质量,所有属于同一个流的数据报具有相同的流标号
- 有效载荷长度(payload length):16 位,表示数据报除基本首部以外的长度(字节数),最大值为64KB
- 下一个首部(next header):8位,相当于IPv4的协议字段或可选字段
- 跳数限制(hop limit):8 位,数据报发出时设定跳数限制,路由器在转发数据报时将该字段值减1,当其为零时,将此数据报丢弃
- 源地址:128位,数据报的发送方的IP地址
- 目的地址:128位,数据报的接收方的IP地址
扩展首部
原IPv4首部中的选项功能都放在IPv6扩展首部中。数据报途中经过的路由器不处理扩展首部(除逐跳选项扩展首部以外),扩展首部由源和目的站的主机处理,路由器的处理效率大大提高。
从IPv4到IPv6
目前实现IPv4/IPv6互操作的技术主要有两种:
- 双协议栈(dual stack):主机(或路由器)装有两个协议栈,一个IPv4和一个IPv6,根据需要使用不同的协议栈进行通信。
- 隧道技术(tunneling):将IPv6数据报重新封装后通过IPv4网络传输,即IPv6数据报作为IPv4数据报的数据部分。重新封装为IPv4数据报后,IPv4包头中协议类型字段为41。