以下内容为参考课件和《计算机网络》(第7版,谢希仁编著)的个人整理,若有错误欢迎指出
第四章 网络层
数据链路层完成了帧的转发(一跳hop),网络层需要实现包的转发(由路由完成),而且可能Multi-hop。网络层负责任意两端间的传输,但是先不管出错,而是追求best effect。
一、网络层提供的两种服务
网络层应该为传输层提供什么样的服务一直有争议,下面两种是当时的观点,目前主要是第二种
1、面向连接的服务——虚电路
双方在数据传输之前先由网络建立连接(逻辑连接)
2、无连接服务——数据报
发送数据不需要建立连接,每一个分组(packet)在网络中独立传送
数据报并不管出错(由传输层处理),只提供检测。这使得路由可以硬软件都相对简单
二、网络协议IP
1、IP(Internet Protocol)简介
与 IP 协议配套使用的还有四个协议:
-
地址解析协议ARP(Address Resolutio Protocol)
-
逆地址解析协议RARP(Reverse Address Resolution Protocol)
配套ARP使用的,目前已被淘汰
-
网际控制报文协议ICMP (Internet Control Message Protocol)
-
网际组管理协议IGMP(Internet Group Management Protocol)
在上图中的上下关系是因为IP要使用ARP,而ICMP、IGMP要使用IP
2、分类的IP地址
(1)IP地址定义
是分配给主机或路由器的标识符,目前使用的IPv4为32位IP地址,由ICANN分配。
(2)编址方法的三个发展阶段
- 分类的IP地址
- 子网划分
- 构成超网
(3)分类的IP地址
IP地址=网络号+主机号,不同类别是网络号、主机号长度不同
-
A、B、C类地址的网络号字段分别是1-3字节,最前面的类别位分别是1-3位。
-
表示方法:点分十进制,即每8位用十进制表示
-
全0表示本网络,全1表示广播
3、IP地址与硬件地址
IP地址是网络层及其上层使用的,是逻辑地址;物理地址是数据链路层及物理层使用
4、ARP与RARP协议
解决的是IP地址和物理地址相互转换
(1)ARP:IP转物理
-
高速缓存(ARP cache)
存有本地局域网上各主机和路由器的IP与硬件地址的映射表
-
具体流程
-
先查缓存,若无进行下一步
-
发送广播帧(含本机地址+待求解的IP),寻求IP地址对应的物理地址;对应主机收到后发送应答(非广播帧)
这可以解释为什么会有广播风暴
-
-
注意:ARP解决的是同一局域网内的
因为若目的主机不在同一局域网,需要路由转发,因此不需要知道目的主机的物理地址,只需要知道路由器的物理地址
(2)RARP:物理转IP
5、IP数据报格式
分为头部和数据两部分。下面主要讲解头部 header
(1)头部的总体结构
20字节的固定字段+0到多个可选字段
下面的图表示各字段,因为总长度较大,故一般表示为每32bit一行,从上往下排开
(2)各字段介绍
-
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( 2 16 2^{16} 216)字节
因为数据较多的包要分片传输(数据链路层帧长度限制),因此需要有以下相关的四个字段。实际应用中一般会限制包长度尽量减少分片。
-
Identification:2字节,标识,,表示这些片是一个包的
-
DF:1bit,DF=0表示允许分片
-
MF:1bit,MF=1表示后面还有分片,0表示这是最后一个分片
-
Fragment offset:13bit,片偏移,以8字节为单位
-
Time to Live(TTL):1字节,生存时间,指IP包在网络中可通过的路由器个数的最大值
- 相当于一个倒计时,每经过一个路由器(one hop)就-1,至0就丢弃并向源主机发送告警包
- 防止有包在网络中由于错误而无休止游荡
- 最大值为255,由源主机设置
-
Protocol:8bit,协议字段,表示上层协议类型(如TCP、UTP)
-
Header checksum:2字节,包头校验和
- 对IP包头每16位求反(校验和这段置为全0),循环相加(进位加在末尾),和再求反
- 检验时同样操作,结果为0就保留
- 因为TTL一直在变,所以实际上校验和每一跳都要变
-
Source address:4字节,源IP地址
-
Destination address:4字节,目的IP地址
-
选项字段:以4字节为单位,最长40字节,实际网路中很少使用
三、划分子网和构造超网
1、划分子网
(1)分类IP地址的缺点
每一类的主机数很多,都放一个网效率太差;(随着规模变大)如果每个物理网络分配一个网络号会使路由表变得很大
(2)解决方法
形成三级IP地址,增加子网字段(就是主机号分出一部分表示子网字段)比如:
2、子网掩码
方便算出子网划分信息(就是包括子网在内的网络号),会使用子网掩码。
子网掩码就是表示主机号的全0,其他全1,然后与目的地址按位与就能算出所属的网络号。
3、使用子网掩码的分组转发过程
-
路由器路由表项包含目的网络地址、子网掩码、下一跳地址
路由表如何建立:见 五、路由算法及协议
-
路由器的流程:
- 收到的分组首部提取目的IP地址D
- 与该路由器直接相连网络的子网掩码按位与,若与相应的网络地址匹配,则交付该网络,否则进行下一步
- 若路由表有目的地址为D的特定主机路由,则将分组传送给指明的下一跳路由器,否则执行下一步
- D与路由表的子网掩码按位与,看是否与相应的网络地址匹配,则交付给指明的下一跳路由器,否则进行下一步
- 发送给默认路由器(目的网络、掩码为全0),若失败则报告转发分组出错
主机发包时会先根据自身判断目的地址是否在本地网络(目的地址 & 子网掩码 == 主机地址 & 子网掩码),若不是才发给网关。
若是,则进行子网内直接交付:
查看ARP缓存看是否有对应的MAC地址,若有就将IP数据包封装成帧,发送;否则先在子网内广播发送ARP请求。
4、无分类编址CIDR
-
使用各种长度的网络前缀来代替分类地址中的网络号和子网号。网络前缀相同的连续的IP地址组成CIDR地址块。
-
IP:网络前缀+主机号
-
斜杠记法:IP地址后加一个斜杠,后面是网络前缀所占的位数,如128.14.35.7/20
-
子网掩码:/x就是前面是x个1
-
意义:路由聚合
- 原本路由表中的项可能很庞大
- 一个CIDR地址块可以表示多个地址(对应原来的多个子网),因此在路由表项中一个项可以表示若干个传统分类地址的路由,从而减少了很多表项
- 路由聚合也称为构成超网
-
网络前缀匹配(路由表查询)时遵循最长匹配原则
前缀越长地址块越小,就越具体
四、网际控制报文协议ICMP
前面主要讲传递IP数据包,但是也需要控制信息
1、简介
ICMP 即Internet Control Message Protocol,主要用于报告出错和测试等控制信息。此类报文的类型protocol字段为1。
2、9种ICMP报文
- 差错报告
- Destination unreachable:终点不可达
- Source quench:源点抑制,拥塞时让源主机放慢发送速度
- Time exceeded:超时,即路由器收到TTL字段为0的报文时向源主机发送
- Parameter problem:参数问题,即头部有非法字段
- Redirect:重定向,向主机发送此报告知路由改变,主机下次发送数据报给另外的路由器
- 询问报文
- Echo request/reply:回声探测,测试网络连通性
- Timestamp request/reply:请求时间,可用于时间同步
3、常用ICMP协议
-
ping
- 测试两个主机间的连通性
- 采用Echo request/reply报文
-
traceroute/tracert
- 测试到另一台主机所经过的路由信息
- 采用超时报告报文:逐个发送UDP报文,TTL分别设置为1,2,3.……直到到达目的主机。路径上的路由器会返回超时报文,从而得知路由器IP
五、路由算法及协议
路由协议就是用来生成路由信息(生成路由表)的,但不是转发分组的。路由算法时路由协议的基础和核心
1、分类
-
静态路由
- 人为设定不再改变
-
动态路由
-
自适应网络变化
-
两类典型算法:距离向量路由算法、链路状态路由算法
-
在自治系统背景下,Internet路由协议可以分为内部网关协议(自治系统内部)和外部网关协议(自治系统之间)两类。
2、距离向量路由
距离向量路由也称为Bellman-Ford路由算法和Ford-Fulkerson算法,最初用于ARPANET,被RIP协议采用
(1)基本思想
- 每个路由器维护一张表,记录到每个目的地已知的最佳距离和路线(下一跳)
- 周期性向相邻路由器发送距离表,同时也接受邻居节点发送来的距离表
- 更新自己的路由表:若邻居x距离i为 x i x_i xi,自己到x的距离为m,更新到i的距离为 m i n ( x i + m , 原 始 值 ) min(x_i+m, 原始值) min(xi+m,原始值)。
(2)缺陷
对好消息反应迅速,对坏消息反应迟钝(考虑shutdown,但是因为之前有的是可达的,会误发很多信息,造成的无穷计算,直至都超过阈值被认为不可达)
3、RIP(Routing Information Protocol)协议
-
基于距离向量路由协议
-
简单,适用于小规模网络
-
距离定义:路由器的跳数,直接连接为0,最长允许15,意味着超过15的表示无穷大
-
要点
仅和相邻路由交换全部信息,按固定时间间隔交换
-
RIP报文格式
-
收到相邻路由器X的RIP报文后的处理
- 修改RIP报文中的所有项目:下一跳都改为X,距离+1。因为报文原意为X到目标网络N的距离为d,那么本路由到目标网络的距离为d+1,是经过X去的。
- 对修改后的报文的每一个项目:
- 若路由表没有目标网络N,则加上
- 若已有,则查看原路由中到N的表项:
- 若(原路由的)下一跳字段是X,则用收到的项目替换原路由表中的项目(获取最新状态)
- 若不是(就是都是到达网络N,但下一跳路由不是X),则若收到的项目距离更短,就更新
- 若3分钟还没收到相邻路由的更新路由表,则标记为不可达(防止无穷计算)
-
优点:简单、开销小
-
缺点:网络出现故障,要较长时间才能把信息送到所有路由器(距离向量路由固有缺点);支持网络规模有限,最大为15;交换的是全部信息,开销大
4、链路状态路由
(1)基本思想
- 发现邻居并学习其网络地址(发送HELLO包)
- 测量到各邻居节点的延迟或开销
- 构造分组,包含所有刚知道的信息,并把分组发送给其他所有路由器
- 计算到每一个其他路由的最短路径
(2)每个路由器都建立一个链路状态数据库——全网的拓扑结构图,一句dijkstra算法计算最佳路径
5、OSPF(Open Shortest Path First)协议
(1)属于链路状态路由协议
(2)优点
-
收敛速度快
链路状态发生变化时,以洪泛(flooding)方式(向除输入链路外的所有链路发送)告知所有网络节点。因此只需要在变化时更新路由表
-
适用于较大规模的网络
(3)为扩大规模,OSPF将一个自治系统再划分为若干个区域,将洪泛局限在一个区域,而一个区域内的路由器也仅知道本区域的完整网络拓扑
(4)OSPF分组结构
(不用UDP,直接用IP数据报)
5种类型的分组:
- 问候分组(Hello):发现和维持邻站的可达性
- 数据库描述(Database Description)分组:给出自己数据库的所有链路状态的摘要信息
- 链路状态请求(Link State Request)分组:请求部分链路状态的详细信息
- 链路更新状态(Link State Update)分组:洪泛,仅有一个路由器链路状态发生变化时使用
- 链路状态确认(Link State Acknowledgment)分组:对链路更新分组的确认
后四种都是用于数据库同步的
为了减少发送所有信息的代价,一般是让数据库用数据库描述分组与相邻路由交换信息,请求分组去获取缺少的链路状态信息。
前面说的时自治系统内的(即内部网关路由协议)
6、外部网关路由协议BGP(Border Gateway Protocol)
(1)规模大,而且不同的路由选择需考虑不同的策略(比如有的考虑距离,有的涉及保密),因此难以找到最佳路由,BGP只是找到一条可达且就好的无环路由
(2)BGP发言人(speaker)
- 每个AS(自治系统)选择至少一个路由器作为 speaker,两个speaker通过共享网络连接
- speaker一般是边界路由器,也可以不是
- speaker之间先建立TCP连接,交换BGP报文,建立BGP会话,进而交换路由信息
(3)路径向量路由选择协议
- BGP采用的时路径向量路由选择协议,与上文提到的两种都不同
- 路径向量是网络的可达性信息,即到达某个网络需要经过哪些AS
- speaker交换可达性信息后,根据所采取的策略选择到达各AS较好的路由
(4)BGP-4的四种报文
-
OPEN报文:用来与相邻的另一个BGP发言人建立关系
-
UPDATE报文:用来发送某一路由的信息,以及列出要撤消的多条路由
-
KEEPALIVE报文:用来确认打开报文和周期性地证实邻站关系
-
NOTIFICATION报文:用来发送检测到的差错
流程:
-
BGP发言人通过OPEN报文与另一发言人建立会话,对方如同意则回应KEEPALIVE报文
-
双方周期性交换KEEPALIVE报文,以确认会话未中断
-
路由信息变化时,发送UPDATE报文
(5)协议特点
-
交换路由信息的结点数量级与自治系统个数相当,大大少于这些自治系统中的网络数
-
每个自治系统中BGP发言人(或边界路由器)的数目很少,使得自治系统间的路由选择不致过分复杂
-
BGP支持CIDR,因此BGP路由表包括目的网络前缀、下一跳路由器,以及到达该目的网络要经过的各个自治系统序列
-
在BGP刚运行时,邻站交换完整的BGP路由表,以后只需要在发生变化时更新变动部分,有利于节省网络带宽和减少处理开销
7、路由器
(1)定义
具有多个输入/输出端口的专用计算机,其任务是转发分组。
(2)组成
-
路由选择部分:按照路由选择协议,构建路由表
-
分组转发部分:
-
输入输出端口
why需要排队:输入输出端口速率不匹配缓冲区溢出会丢包,而网络层不处理这个(传输层处理)
-
交换结构:根据转发表进行快速转发(需要更改TTL),转发表从路由表得到
(3)设计关键之一:高速转发- 影响因素:输入输出端口的处理性能、交换机构的性能
-
-
线速(line speed):分组的处理速率能够达到线路上分组的传输速率,即线速=传输速率/分组长度
-
衡量路由器性能的指标:pps(packet per second)
8、网络的控制平面与数据平面
(1)控制平面:生成路由表和转发表
(2)数据平面:进行分组的快速转发
传统网络中路由器集成了两者,缺少灵活性
(3)软件定义网络(SDN)
-
控制平面(控制器)与数据平面(路由器)分离
-
如果转发表中找不到匹配表项,就询问控制器,控制器接收各路由器的请求、计算转发表项(策略可编程)返回给路由器
-
优点:可以灵活快速控制路由/转发策略,适用于路由策略频繁的网络(如云数据中心)
六、IP组播
1、基本概念
-
组播,又称多播,实现一点对多点的数据传输
如果使用单播,那么1对n就要传输n条数据流,但这n条数据流是一样的。因此组播就是希望只需传1条数据流
2、组播地址
-
D类IP地址:224.0.0.0—239.255.255.255
-
组播数据报:IP包包头目的地址为D类地址,协议类型为2(IGMP协议)
-
组播地址就是特定组播的标识符,主机通过加入组播组来接收组播数据
3、两类组播
-
局域网中的硬件组播
将MAC地址中的特定地址段作为组播地址,并于IP组播地址形成对应关系
-
Internet中的组播
- 组播路由器
- 主机通过IGMP协议与组播路由器通信,加入/退出某个组播组
- 组播路由器之间通过组播路由协议实现组播数据报的传输
七、地址转换NAT
1、专用地址(保留地址)
只用于机构的内部,Internet中的路由器不转发目的地址为专用地址的包。根据RFC1918规定,有下列专用地址:
- 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)
优点:减少IP地址空间的占用;提高安全性
2、地址转换NAT
-
当内部网络使用专用地址时,与Internet的通信需要通过NAT(Network Address Translation)
-
发向外网需要换成全球IP地址,并且要记录什么时候内网的哪台主机向外网发送了信息
-
接收外网数据报时,根据TCP/UDP端口号转回内网地址
-
减少全球IP占用;安全(外网不知道具体内网地址)
3、虚拟专用网VPN
多个企业/机构的内部网络之间互连的实现方法
涉及隧道、加密等技术