4. 网络层
文章目录
4.1 网络层提供的服务
4.11 网络层概述
- 主要任务:实现网络互连,进而实现数据包在各网络之间的传输
-
需解决的问题
-
网络层向传输层提供的什么样的服务?
-
可靠:ATM,帧中继和X.25(面向连接的虚电路服务)
-
不可靠:TCP,IP(无连接的数据包服务)
-
-
网络层寻址问题
-
路由选择问题
- 目的地址,路由器,路由表
-
-
应用层 应用协议(HTTP,FTP,SMTP等) 运输层 TCP,UDP 网际层 IP,ICMP,IGMP,ARP 网络接口层 各种网络接口
4.12 网络层提供的服务
- 面向连接的虚电路服务
- 核心:可靠通信由网络保证
- 必须建立——虚电路VC
- 分组首部只需要携带一条虚电路编号
- 通信结束,释放之前建立的电路
- 无连接的数据报服务
- 核心:可靠通信由用户主机保证
- 不需要建立网络层连接
- 不同分组可走不同的路径
- 分组首部必须携带目的主机的完整地址
- 可能存在误码,丢失,重复和失序
- 服务质量不保证
- 便宜
4. 2 网际协议IP
4.21 MAC地址
- MAC地址是以太网的MAC子层所使用的地址(数据链路层)
- ARP作用:通过IP地址获取到设备的MAC地址
-
MAC地址
- 每个主机发送的帧中必须携带标识发送主机和接收主机地址——MAC地址
- 一般固化在网卡的EEPROM中——硬件地址
- 也被称为物理地址——不属于物理层
- MAC地址是对网络上各接口的唯一标识,而不是各设备的唯一标识
-
MAC地址格式(EUI—48)
-
组织唯一标识符OUI 网络接口标识符 第一字节 | 第二字节 | 第三字节 第四字节 | 第五字节 | 第六字节 b0:0——单播地址;1——多播地址
b1:0——全球管理;1——本地管理
标准表示法:XX-XX-XX-XX-XX-XX eg: 00-0C-CF-93-8C-92
其他表示法:XX:XX:XX:XX:XX:XX Apple,Android,Linux
XXXX.XXXX.XXXX
-
-
MAC地址发送顺序
- 字节发送顺序:第一字节——>第六字节
- 字节内发送顺序:b0——>b7
- 判断是否为单多播:该位16进制不能整除2即为多播地址
4.22 IP地址
- IP地址是TCP/IP体系结构网际层所使用的地址
- IP地址是因特网上的主机和路由器所使用的的地址
- 网络编号、主机编号
- MAC地址不具有区分不同网络的功能
- 转发过程中的变化情况
- 源IP地址和目的IP地址保持不变
- 源MAC地址和目的MAC地址逐个链路(或逐个网络)改变
4.23 ARP协议
- IP地址——>MAC地址
- 原理
4.24 IPv4数据报的首部格式
-
固定部分+可变部分
-
首部长度:以4字节为单位,最小十进制取值为5 —— 20字节固定部分;
最大十进制取值为15 —— 40字节可变部分
-
可选字段:1-40字节,用来排错,测量,安全等措施
-
填充字段:确保首部长度为4的整数倍,用0填充
-
区分服务:占8比特,用于获得更好的服务
-
总长度:占16比特,表示IP数据报总长度(首部+数据载荷)MAX=65535,以字节为单位
- eg:总长度=(0000001111111100)₂ = 1020字节;首部长度=(0101)₂=20字节;数据载荷长度=1020-20=1000字节
-
标识:占16比特,统一数据报各分片应有相同的标识
-
标志:占3比特
- DF位:1——不允许分片;0——允许分片
- MF位:1——后面有分片;0——最后分片
-
片偏移:占13比特,数据载荷偏移原数据报位置多少单位,8字节为单位(分片后的序号/8)
-
生存周期TTL:防止IP数据报在网络中永久兜圈;直到TTL值减少到0时被路由器丢弃
-
协议:占8比特,指明IP数据报数据部分是何种协议数据单元
-
首部检验和:占16比特,用来检测首部在传输过程中是否出现差错
-
源IP地址,目的IP地址
-
4.3 划分子网和构造子网
4.31 IPv4地址概述
- 给因特网上的每一台主机的每一个接口分配一个在全世界范围内唯一的32比特的标识符
- IPv4的表示方法
- IPv4采用点分十进制表示法
- 4个8比特转换为4个十进制——>10.240.15.170
- 十进制转为二进制——>除2取余法
4.32 分类编址的IPv4地址
-
五类地址(网络号+主机号)
- A类地址:8+24(0)
- B类地址:16+16(10)
- C类地址:24+8(110)
- D类地址:多播地址(1110)
- E类地址:保留地址(1111)
-
A类地址
-
最小网络号0.保留不指派
-
第一个可指派网络号为1,网络地址为1.0.0.0
-
最小的本地环回测试地址 127.0.0.1
-
最大的本地环回测试地址 127.255.255.254
-
可指派的网络数量为2^8-2=126(减2是因为去掉0和127)
-
可分配的IP地址数量是2^24-2(主机号为0的网络地址和全为1的广播地址
-
-
注意
- 0.0.0.0是特殊的IPv4地址,只能作为源地址使用,表示在本网络上的主机
- 127.0.0.0既可以作为源地址,又可以作为目的地址,用于本地软件环回测试
4.33 划分子网
- IP地址划分原因
- IP空间利用率很低
- 给每个物理网络分配一个网络号会使路由表变得太大
- 两级IP地址不够灵活
- 划分思路
- 对其所属的物理网络划分为若干个子网
- 对外仍表现为一个网络
- 划分子网即IP地址的主机号部分再进行划分,而不改变IP地址原来的网络号
- 子网掩码
- 解决的问题:已知IP数据报到达145.13.0.0,如何到达145.13.3.10?
- 好处:只要把子网掩码和IP地址进行逐位 ”与“ 运算,即可得到网络地址
- 没有子网还要用子网掩码?
- 便于查找路由表
- 如果不划分子网,该网络的子网掩码就使用默认的子网掩码
- 结论:划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数、
- 例题
- P139 例4-2,例4-3
4.34 使用子网时分组的转发
4.35 构造超网(CIDR)
- 网络前缀
- 问题:B类地址要用完了,IPv4地址空间耗尽
- 解决:使用变长子网掩码可进一步提高IP地址资源利用率
- CIDR特点
- CIDR消除了传统A类,B类,C类地址以及划分子网的概念 IP地址={<网络前缀>,<主机号>}
- CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”
- 斜线记法:斜线后面的数字就是地址掩码中“1”的个数
- 构成超网
- 由于一个CIDR地址块中有很多地址,所以在路由表中利用CIDR地址块查找目的网络
- 这种地址的聚合也称为路由聚合
- 有利于减少路由器之间的路由选择信息的交换,从而提高互联网性能
- 最长前缀匹配
- 问题:每个项目由网络前缀+下一跳地址,查找路由表时可能得到不止一个匹配结果
- 解决:应当从匹配结果中选择具有最长网络前缀的路由,前缀越长,地址块越小,路由越具体
- 使用二叉检索查找路由表
- 目的:为了更加有效的查找,通常是把无分类编址的路由表存放在一种层次的数据结构中,然后自上而下的按层次进行查找
- 为提高查找速度,广泛使用各种压缩技术
4.4 网际控制报文协议ICMP
-
网际控制报文ICMP
- 主机或路由器用ICMP发送差错报告报文和询问报文
- ICMP报文被封装在IP数据报发送
-
五种差错报告报文
- 终点不可达
- 源点抑制:出现拥塞,丢弃数据报
- 时间超过:TTL=0
- 参数问题:首部误码
- 改变路由:路由器告诉主机更优解
-
不发送ICMP差错报告报文
- 对ICMP不再发送ICMP报文
- 对一个分片的后续报片不发送ICMP
- 对具有多播地址数据报不发送ICMP
- 对特殊地址(127.0.0.0或0.0.0.0)的数据报不发送ICMP
-
ICMP询问报文
- 回送请求和回答:测试目的站是否可达
- 时间戳请求和回答:进行时钟同步和测量时间
-
ICMP应用举例
-
分组网间探测PING
- 测试主机或路由器的连通性
-
跟踪路由traceroute
- tracert
- IP数据报从源主机到目的主机经过哪些路由器
- tracert跟踪原理:TTL每次加1,每个路由器向主机发送ICMP差错报告(时间超过);最后H2发送ICMP会送请求回答报文
-
-
问题:IPv6没有ICMP而IPv4有ICMP?
4.5 因特网路由选择协议
4.51 路由选择协议概述
-
静态路由选择、动态路由选择
- 静态
- 人工配置
- 不能及时适应网络状态的变化
- 小规模网络使用
- 动态
- 自动获取路由信息
- 能较好的适应网络状态变化
- 大规模网络使用
- 静态
-
路由选择协议主要特点
- 自适应
- 动态路由选择,能较好适应网络变化
- 分布式
- 路由器之间交换路由信息
- 分层次
- 将整个因特网划分为许多小的自治系统AS
- 自适应
4.52 RIP协议
-
什么是RIP协议
-
RIP是一种分布式的距离向量的路由选择协议,是因特网协议标准,最大优点是简单
-
要求每个路由维护从它自己到其他网络最佳距离纪录
-
距离
- 即源端口到目的端口所经历的路由器个数,经过一个跳数+1
- 从路由器直接连接的网络距离为1
- RIP一条路由最多包含15个路由器,16表示网络不可达(只适用于小互联网)
-
目的网络 距离 下一跳路由器 Net2 1 直接交付 Net1 2 R1 Net4 15 R3
-
-
交换信息内容
-
问题
- 和哪些路由器交换信息?
- 在什么时候交换信息?
- 交换什么信息?
-
解答
- 仅和相邻路由器交换信息
- 路由器交换的信息是自己的路由表
- 每30秒交换一次路由信息,根据信息更新路由表
- 若干次更新后,路由器知道该系统的地址和最短距离
-
-
距离向量算法
- 修改相邻路由器发来RIP报文的所有表项
- 对相邻地址发来的RIP报文,把下一跳地址修改为相邻的地址,并把所有的距离+1
- 对修改后的每一个项目:
- 如果没有Net3,则把该项目填入R1
- 如果有Net3,则看下一跳地址
- 若下一跳是x, 则用收到的项目替换源路由表中的项目;
- 若下一跳不是× , 原来距离比从× 走的距离远则更新, 否则不作处理。
- 若180s还没收到相邻路由器的更新路由表,则为不可达路由器,把距离设置为16
- 返回
- 修改相邻路由器发来RIP报文的所有表项
-
RIP协议的报文格式
- RIP是应用层协议,使用UDP传送数据
- 一个RIP报文最多包括25个路由,超过则多次发送(为什么是25个?)
-
RIP特点
- 当网络出现故障时,需要较长的时间才能将信息传输到路由器(慢协议)
- 比如网1出现故障,R1和R2到网1无限套娃,直到距离到16才发现不可达
- 根据别人的结果更新自己的路由表,如果别人的结果是错的,就会出现问题——>OSPF
4.53 OSPF协议和链路状态算法
-
什么是OSPF协议
- 开放最短路径优先协议
- “ 开放” :标明OSPF 协议不是受某一家厂商控制, 而是公开发表的;
- 最短路径优先:是因为使用了Dijkstra 提出的最短路径算法SPF
- 主要特征
- 使用分布式的链路状态协议。
- 特点
- 和谁交换?
- 使用洪泛法向自治系统内所有路由器发送信息。 最终整个区域内所有路由器都得到了这个信息的一个副本(广播)
- 交换什么?
- 所有路由器的链路状态( 本路由器和哪些路由器相邻, 以及该链路的度量/ 代价一一费用、距离、时延、带宽等)
- 多久交换?
- 只有当链路状态发生变化时, 路由器才向所有路由器洪泛发送此信息。
- 所有路由器都能建立一个链路状态数据库,即全网拓扑图
- 和谁交换?
- 开放最短路径优先协议
-
链路状态路由算法
- HELLO问候分组
- 设置成本度量metric
- DD数据库描述分组
- LSR链路状态请求分组
- LSU链路状态更新分组(链路状态变化)
- LSAck链路状态确认分组(链路状态变化)
- 使用Dijstra得到其他节点的最短路径
-
OSPF的区域
*
-
OSPF其他特点
- 每隔30min,刷新数据库链路状态
- 互联网规模很大时,OSPF协议要比RIP更优
- OSPF不存在坏消息传的慢的问题,它的收敛速度很快
4.54 BGP协议
-
什么是BGP协议?
-
和谁交换?
- 与其他AS的邻站BGP发言人交换信息
-
交换什么?
- 交换的网络可达性信息,即要到达某个网络所要经过的一系列AS
-
多久交换?
- 发生变化时更新有变化的部分
-
-
交换信息的过程
- BGP所交换的网络可达性的信息就是要到达某个网络所要经过的一系列AS。当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各AS的较好路由。
-
BGP协议的报文格式
- 先建立TCP连接,即通过TCP传送,在此连接交换BGP以建立BGP会话,利用BGP会话交换路由信息
- BGP是应用层协议,借助TCP传送
-
BGP的协议特点
- BGP支持CIDR,因此BGP的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
- 在BGP刚刚运行时,BGP 的邻站是交换整个的BGP路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销都有好处。
-
BGP的四种报文
- OPEN (打开)报文:用来与相邻的另一个BGP发言人建立关系,并认证发送方。
- UPDATE (更新)报文:通告新路径或撤销原路径。
- KEEPALIVE (保活)报文:在无UPDATE时,周期性证实邻站的连通性;也作为OPEN的确认。(你还在吗)
- 4.NOTIFICATION (通知)报文:报告先前报文的差错;也被用于关闭连接。
- 三种路由协议的比较
4.6 IPv6
4.61 为什么有IPv6?
- 32位IPv4地址空间已分配殆尽——>CIDR,NAT治标不治本
- IPv6从根本上解决地址耗尽问题
- 好处:改进首部格式——>快速处理,转发数据包
- 好处:支持QoS——>解决网络延迟和堵塞问题
4.62 IPv6数据报格式
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HygJhDUL-1637637390967)(C:\Users\杨小秋\AppData\Roaming\Typora\typora-user-images\image-20211101153355730.png)]
- 有效载荷不固定
- 流标签:所有属于同一个流的数据报都具有相同的流标签
- 下一个首部:标识下一个扩展首部或上层的协议首部
- 源地址,目的地址:128位
4.63 IPv4和1IPv6的区别
- IPv6将地址从32位(4B)扩大到128位(16B),更大的处理空间
- IPv6将IPv4的校验和字段彻底移除,以减少每跳处理时间
- IPv6将IPv4的可选字段移出首部,变成扩展首部,路由器不对扩展首部进行检查,大大提高路由器处理效率
- IPv6支持即插即用(自动配置),不需要DHCP协议
- IPv6首部长度必须是8B的整数倍,IPv4首部是4B的整数倍
- IPv6只能在主机处分片,IPv4可以在主机和路由器处分片
4.64 IPv6地址表示形式
- 一般形式:冒号十六进制记法(4*8)
- 特殊形式:去零;零压缩(连续的0可以被一对冒号取代,双冒号仅出现一次)
4.65 IPv6基本地址类型
- 单播:一对一通信,可做源地址+目的地址
- 多播:一对多通信,可做目的地址
- 任播:一对多中的一个通信,可做目的地址
4.66 IPv6向IPv4过渡的策略
- 双栈协议:同一主机或路由器包含这两个协议
- 隧道技术:IPv6传输过程中遇到IPv4的路由器,其数据包就被IPv4封装,然后传输到最后一个IPv4路由器解封装
4.7 IP组播
4.71 IP组播地址
- IP组播地址让原设备能够将分组发送给一组设备,属于多播组的设备将被分配一个组播IP地址(一群共同需求主机的相同表示)
- 范围:224.0.0.0~239.255.255.255(D类地址),一个D类地址表示一个组播组,只能用作分组的目的地址,源地址为单播地址(主播与观众)
- 组播数据报——>尽最大努力交付,不可靠,应用于UDP,速度快
- 不产生ICMP差错报文
- 有些D类地址被指派为永久组地址,部分D类地址用于组播
- 流程:因特网范围内组播+硬件组播
4.72 硬件组播
-
同单播地址一样,组播IP地址也需要相应的组播MAC地址在本地网络中实际送帧。组播MAC地址以十六进制值01-00-5E打头,余下的6个十六进制位是根据IP组播组地址的最后23位转换得到的。
-
TCP/IP协议使用的以太网多播地址的范围是:
从01-00-5E-00-00-00到01-00-5E-7F-FF-FF
-
收到多播数据报的主机,还要在IP层利用软件进行过滤,把不是本主机要接收的数据报丢弃(一个MAC地址——>多个IP地址 )
4.73 IGMP协议和组播路由选择协议
- 网际组管理协议IGMP
- IGMP协议让路由器知道本局域网上是否有主机(的进程),参加或退出某个组播组
- ICMP和IGMP都使用IP数据报传递报文
- IGMP工作的两个阶段
- 某主机要加入组播组时,该主机向组播组的组播地址发送一个IGMP报文,声明自己要称为该组的成员。
本地组播路由器收到IGMP报文后,要利用组播路由选择协议把这组成员关系发给因特网上的其他组播路由器。 - 本地组播路由器周期性探询本地局域网上的主机,以便知道这些主机是否还是组播组的成员。
只要有一个主机对某个组响应,那么组播路由器就认为这个组是活跃的;如果经过几次探询后没有一个主机响应,组播路由器就认为本网络上的没有此组播组的主机,因此就不再把这组的成员关系发给其他的组播路由器。
- 某主机要加入组播组时,该主机向组播组的组播地址发送一个IGMP报文,声明自己要称为该组的成员。
- 组播路由器知道的成员关系只是所连接的局域网中有无组播组成员
- 组播路由选择协议
- 组播路由选择协议目的是找出以源主机为根节点的组播转发树
- 构造树可以避免路由器之间兜圈子
- 常用三种算法
- 基于链路状态的路由选择
- 基于距离-向量的路由选择
- 协议无关的组播
4.8 虚拟专用网VPN与网络地址转换NAT
4.81 虚拟专用网VPN(Virtual Private Network)
-
由于 IP 地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数。
-
考虑到互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网。
-
假定在一个机构内部的计算机通信也是采用 TCP/IP 协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本机构自行分配其 IP 地址。
-
私有地址
私有地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信
私有地址只能用作本地地址而不能用作全球地址
因特网中所有路由器对目的地址是私有地址的IP数据报一律不进行转发
-
本地地址与全球地址
- 本地地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
- 全球地址——全球唯一的 IP 地址,必须向互联网的管理机构申请。
- 问题:在内部使用的本地地址就有可能和互联网中某个 IP 地址重合,这样就会出现地址的二义性问题。
-
IP隧道技术
-
两个专用网内的主机间发送的数据报是通过了公用的因特网,但在效果上就好像是在本机构的专用网上传送一样
数据报在因特网中可能要经过多个网络和路由器,但从逻辑上看,R1和R2之间好像是一条直通的点对点链路
-
4.82 网络地址转换NAT(Network Address Translation)
-
背景:
- 使用私有地址的主机,如何才能与因特网上使用全球IP地址的主机进行通信?
- 这需要在专用网络连接到因特网的路由器上安装NAT软件
-
过程
-
专有NAT软件的路由器叫做NAT路由器它至少有一个有效的外部全球IP地址
这样,所有使用私有地址的主机在和外界通信时,都要在NAT路由器上将其私有地址转换为全球IP地址
-
-
存在的问题
- 如果NAT路由器具有N个全球IP地址,那么至多只能有N个内网主机能够同时和因特网上的主机通信?
- 解决方法:可以利用运输层的端口号和IP地址一起进行转换,这样一个全球IP地址可以使用多个本地地址的主机同时和因特网主机进行通信——>NAPT
4.9 MPLS
4.91 MPLS工作原理
-
为了实现交换,可以利用面向连接的概念,使每个分组携带一个叫做标记 (label) 的小整数。当分组到达交换机(即标记交换路由器)时,交换机读取分组的标记,并用标记值来检索分组转发表。 这样就比查找路由表来转发分组要快得多。
-
特点
- 支持面向连接的服务质量
- 支持流量工程,平衡网络负载
- 有效地支持虚拟专用网 VPN
-
IP 分组的转发
- 在传统的 IP 网络中,分组每到达一个路由器后,都必须提取出其目的地址,按目的地址查找路由表,并按照“最长前缀匹配”的原则找到下一跳的 IP 地址(请注意,前缀的长度是不确定的)
- 当网络很大时,查找含有大量项目的路由表要花费很多的时间
- 在出现突发性的通信量时,往往还会使缓存溢出,这就会引起分组丢失、传输时延增大和服务质量下降
4.92 MPLS 首部的位置与格式
- MPLS 并不要求下层的网络都使用面向连接的技术。
- 下层的网络并不提供打标记的手段,而 IPv4 数据报首部也没有多余的位置存放 MPLS 标记。
- 这就需要使用一种封装技术:在把 IP 数据报封装成以太网帧之前,先要插入一个 MPLS 首部。
- 从层次的角度看,MPLS 首部就处在第二层和第三层之间。
- 首部共包括以下四个字段:标记值,试验, 栈S,生存时间TTL