计网 网络层

2022.1.6

虚电路网络

虚电路是一条从源主机传输到目的主机的链接,在路径上的所有路由器都负责维护该电路的连接
虚电路需要先建立后使用
虚电路中每个分组都携带者虚电路标识(VCID),而不是目的主机的地址
由于虚电路整个路径中的链路能包含的链路数不一样,因此VCID在同一条路径上并不是唯一的,采用分段管理的方式,因此需要利用虚电路转发表来保证分组需要转发的目的
在这里插入图片描述
在虚电路中采用信令协议建立协议,在虚电路的建立过程中,通过该协议选择一条合适的路径发送到目的主机,目的主机同意建立连接后沿着该路径返回到源主机中,同时告知路径上所有的路由器该连接的建立方式

数据报网络

数据报网络不同于虚电路网络,该网络是面向无连接的,因此每一个分组都需要包含目的地址,路由器需要根据分组的目的地址转发分组,由于在路由器上的分组算法更新(转发表更新),从同一个源到达同一个目的地址的数据报可能通过不同的路径转发
由于IP地址的数量极其庞大,因此在转发表中存储的是根据IP地址的范围转发到的下一个链路

最长前缀匹配优先

同一个目的IP地址可能包含有多个匹配成功的地址范围,因此在转发时选择的转发时通过最长前缀匹配来考量的,当所有的均不符合时,采用默认接口转发
在这里插入图片描述
数据报网络(Internet)和VC网络(ATM)对比:
Internet网络是计算机之间的数据交换,对于实时性和可靠性没有很高的要求,而ATM网络核心业务是实时通话,有较高的可靠性要求
Internet网络之间的链路类型众多很难去统一服务
Internet网络上的端系统更加智能,可以自适应、差错恢复、性能控制等,而ATM网络上的电话机、传真机并不是这样
因此,Internet网络更多的简化网络,复杂“边缘”(端系统),ATM网络恰恰相反

IP协议

IP数据报结构

在这里插入图片描述

  1. 版本号
    4bit,路由器根据版本号决定如何解析后面的ip分组
  2. 首部长度
    4bit,以四个字节为单位
  3. TOS
    8bit,指示分组期望获得什么样的服务,一般情况不使用(取0)
  4. 总长度
    16bit,以字节为单位,包括首部和数据
    最大为2^16 = 65535B
  5. 标识、标志、片偏移
    和ip分片有关,后续介绍
  6. TTL
    ip分组在网络中可以通过的路由器数量(没经过一个减少1)
    TTL等于0时丢弃(发送ICMP报文)
  7. 协议
    指示封装的是哪个协议的数据包(TCP/UDP)
  8. 首部校验和
    同UDP
  9. 源/目的IP地址
  10. 选项
    少用,不存在选项的ip长度为20字节(典型的数据报)

IP数据报分片

链路层中可封装数据的上限称为MTU(Maximum Transmission Unit),在不同的链路中MTU可能不同,由上一个链路转发到下一个链路会不一样,因此需要对IP数据报进行分片以保证数据报能正常传输
数据分片在中途的路由器中不进行组装,目的主机对其进行组装
在IP数据报中采用标识、标志、片偏移来表示分片

  1. 标识
    分片的id
  2. 标志
    共3位
    后两位为DF(dont fragment):用来表示是否允许分片、MF(more fragment):用来表示后续是否还有更多的分片
  3. 片偏移
    相对于原IP分组中数据的偏移量

IP编址

在IP协议,对所有的接口(主机与物理链路之间的边界)进行编址
通常主机只有1,2个接口,路由器有多个,因此对于一些只有一个接口的主机,一般直接称为该主机的IP地址
ipv4是32bits的,由于不会随意分配IP地址,因此需要采取一个分配方法

IP子网(Subnets)

在这里插入图片描述
不跨越路由器可以彼此物理联通的接口被称为子网
在这里插入图片描述
通过该图便以理解(共六个)

有类ip地址

在这里插入图片描述

特殊IP地址

在这里插入图片描述
环回测试:从本机发出,经过网络层后回到本机

私有网络

在公共互联网中会被认为是非法的,由于是私有地址,因此其实在任何的公司内网中都存在
在这里插入图片描述

子网划分

子网掩码

NetID + SubID + HostID
子网掩码中Net、Sub位全部取1,Host位取0
在这里插入图片描述
子网掩码通过和IP地址进行与运算可以得到目的IP地址所在的子网地址,进而可以通过路由器进行转发

CIDR

无类域间路由(CIDR:Classless InterDomain Routing)
消除A类B类C类地址界限
无类域间路由格式:a.b.c.d/x,其中x表示前缀长度
可以利用CIDR表示子网
例如子网201.2.3.64,掩码255.255.255.192
可以通过201.2.3.64/26来表示

路由聚合

在这里插入图片描述
在这里插入图片描述
将以上三个转发的目的网络可以聚合成为一个,减少转发表占用的空间

DHCP

IP地址的获取可以通过静态配置,即设定好IP地址,同时也要设定好默认网关,即离开该子网时的去到的IP地址
另外IP地址通常的配置采取动态配置,采用DHCP(Dynamic Host Configuration Protocol)动态主机配置协议
动态配置的方式从服务器动态获取IP地址、子网掩码、默认网关、DNS服务器名称与IP地址

DHCP流程

  1. 主机广播DHCP发现报文
    当主机接入子网中时,向服务器发送发现报文,该报文采用广播形式,因为主机接入时并不知道服务器的IP地址
  2. DHCP服务器提供
    服务器利用提供报文offer message向客户做出响应,该报文中包含可以提供的IP地址、子网掩码以及IP地址租用期(即IP地址有效的时间量)
  3. 主机请求IP地址
    主机从可以获得的DHCP服务器中选取一个,并向选中的这个服务器提供DHCP请求报文request message
  4. DHCP服务器分配IP地址
    服务器使用DHCP ACK报文对请求报文进行响应
    在这里插入图片描述

在上图DHCP的过程中,均采用广播的形式,这是因为当存在多个服务器时,客户机指定获取了某个服务器提供的服务后,告知其他服务器,让他们能够放弃为该客户机提供的IP地址等信息,不再占用网络空间
DHCP实际上是在应用层实现的

  1. DHCP报文封装到UDP数据报
  2. ip广播
  3. 链路层广播

网络地址转换NAT

Network Address Translation
由于ip网络的地址非常多,因此直接采用ipv4地址远远不够,在之前介绍过私有IP地址,但当外部网络想要与这些私有IP地址进行通信时,无法直接采用这些私有ip进行通信,因此这些IP地址接入NAT路由器
在外界看来,NAT路由器就类似于一个单个设备,内部所有的私有地址的IP地址就是NAT路由器的IP地址;而在内部,这些不同的设备之间通信通过自己的私有IP地址进行通信

除此以外,在NAT内部IP地址变化时不需要告知外部(方便DHCP);变更ISP时也不需要更改内部IP地址;内部IP地址对于外部来说是不可见的,这样也会更加安全

NAT实现

内部的私有地址向外发送时,将源IP地址替换为NAT路由器的统一IP地址和不同的端口号
NAT转换表记录了源IP地址和源端口号对应的新IP地址(即路由器提供的统一地址)和新端口号

NAT主要争议

  1. 路由器理论上应该只处理第三层的数据,但NAT将IP数据报取出进行修改
  2. NAT违背了端到端通信原则,应用开发者需要考虑这一协议,例如P2P应用
  3. 地址匮乏应该采用ipv6

NAT穿越

NAT穿越用以解决外部客户机无法到达内部的问题

  1. 静态配置NAT转换表
    让每次发送到固定端口的信息必然转换到指定的内部IP地址和端口
  2. 利用UPnP
    Universal Plug and Play即插即用
    内部客户机自动学习到公共IP地址,并且能够在NAT转换表中动态地增删端口的映射,最终达到的效果与第一种方法类似
  3. 中继(如Skype)
    内部客户机与中继服务器先建立通信,外部客户机也与中继建立通信,进而使得两者之间能够进行通信
    在这里插入图片描述

ICMP

互联网控制报文协议

  1. 差错控制报文
    目的不可达
    源抑制
    超时/超期
    参数问题
    重定向(路由器认为不应该是由自己转发,将报文重新发回至源主机)
  2. 网络探寻报文
    回声(Echo)请求与应答报文(Reply)
    在这里插入图片描述

ICMP报文格式

在这里插入图片描述
在这里插入图片描述

Traceroute

Traceroute通过向目的主机发送一系列UDP报文,目的端口为目的主机中不可能使用的端口号(用于保证最终该报文会停下并返回ICMP),并设置UDP数据报的TTL从1开始逐渐递增,在路由器接受到该报文时,由于TTL为0,因此会向源主机发送ICMP报文,该ICMP报文携带了目前的路由器名称和IP地址
ICMP到达源主机时,记录下RTT
在这里插入图片描述
最终在达到目的主机后会返回ICMP报文“目的端口不可达”type=3, code=3

IPv6

主要变化

IPv6的动机来自于IPv4地址空间可能耗尽,IPv6引入的最重要的变化在于:

  1. 扩大的地址容量
    IP地址长度从32比特增加到128比特,IPv6地址在单播和多播地址以外加入了一种任播地址,即可以将数据报传输给一组主机中的任意一个,例如用于向一组包含给定文档的镜像站点中的最近一个发送HTTP GET报文
  2. 简化高效的40字节首部
  3. 流标签
    用于给特殊流的分组加上标签,是发送方要求进行特殊处理的流,如非默认服务质量或需要实时服务的流(音视频传输)

相对IPv4的改变

  1. 分片
    IPv6中不允许中间路由器上进行分片与重新组装,因此去除了分片;分片的操作只允许在源主机上进行,在目的主机上进行分片
  2. ICMPv6
    由于分片不允许路由器自行分片,因此可能存在链路不允许传输的情况,因此增加了一个ICMP数据报发送“分组太大”信息给源主机,使其重新发送
  3. 首部校验和
    彻底移除,由于在运输层(TCP、UDP)和链路层(以太网)中进行了校验,因此设计者认为不必要在IP协议中再设定,路由器中的校验仍被认为过于耗时
  4. 选项
    移除,定义多个选项首部,通过下一个首部字段表示,移除后首部均为40字节大小

表示形式

在这里插入图片描述

IPv4向IPv6过渡

由于不可能在某个时刻所有路由器都同时被更新,因此目前采用了建隧道的方式,假设两个节点之间要通过IPv6进行传输,他们之间的路由器通过IPv4进行传输,将这些路由器称为隧道,在隧道的发送端将IPv6报文封装成IPv4数据报,这样隧道中所有路由器都以为这是一个正常的IPv4数据报,将其正常传输,直到最后另一端接收到后拆除,得到IPv6。最终在这两个节点看来就是IPv6直接传输

路由算法

在这里插入图片描述
路由算法可以抽象为图,最终要转换成的算法就是在节点之间通信如何可以得到最小费用

路由算法分类

静态路由:

  • 人工配置
  • 路由更新慢
  • 优先级高

动态路由(通常的路由算法就说的是动态路由)

  • 路由更新快(定期进行更新,及时响应网络中的变化

全局信息:

  • 所有路由器均掌握网络中所有拓扑和链路费用信息
  • 典型算法有链路状态(LS)路由算法

分散信息

  • 路由器只掌握邻居节点的链路费用信息
  • 邻居节点之间交换信息并计算
  • 典型算法:距离向量(DV)路由算法

链路状态路由算法

当一个路由器掌握了链路上所有链路费用信息之后,根据全局算法来计算需要的路由路径
利用Dijkstra算法,可以计算出从一个结点到达其他所有结点的最短路径
在这里插入图片描述
这玩意是真常用啊
算法可能存在的问题,震荡现象(oscillations)
在这里插入图片描述
如图所示,当所有结点掌握全局信息之后,B、C要向A发送信息时会采取D的这条路径,这样一来就会导致C->D的路径上更加拥挤,进而费用变大,此时路由重新计算发现C->B->A更加合适,一段时间后又同样开始拥挤
这样的情况导致出现的可能是当B需要发送向A时,报文可能先通过计算到达了C,此时路由算法重新计算发现通过C->B更加合适,于是回到B;接着又重新计算发现应该回到C,导致进入一个循环

  1. 解决方法一
    强制链路开销不依赖于拥塞程度(不可行)
  2. 解决方法二
    确保链路中结点不同时更新

距离向量路由算法

Distance Vector(DV)
根据Bellman-Ford方程计算
dx(y) = min {c{x, v} + dv(y)}
其中c表示x到邻居结点v的费用,dv(y)表示v到y的最小路径
距离向量算法需要多次迭代完成,因此常用Dx(y)表示x到y的估计
同时还要维护邻居节点的Dv(y),并向邻居结点发送自己的估计
因此每个结点不定时发送自己的估计并接受到邻居的估计,对自己的Dx(y)进行更新,在一定的时间后该值会收敛于dx(y)

距离向量路由算法是异步迭代的
引发迭代的因素

  • 局部链路费用变化(与某一个邻居的cost发生变化)
  • 来自邻居的DV变化

分布式:
只有当DV变化时才告知自己的邻居

完整流程:
在这里插入图片描述

无穷计数问题

由于在发生变化后才会更新自己的DV,因此,当发生好消息(即链路费用降低)时,传播会更加迅速
然而当链路费用上升时则会存在问题
例如:
在这里插入图片描述
在上图中,由于dxy原来的值是根据dxz + dyz得到的,因此在x-y大幅上升后,x计算自己的dxy得到了6,再传递给到z更新,会很明显发现x和z的距离向量并没有快速完成自己应该的更新,这是因为他们互相依赖于对方的值,
当y期望到达x时,通过附近的d值,可以发现通过z会根据更低的消耗达到,但到达z后发现通过y又可以更快,因此就形成了路由选择环路

毒性逆转

为了解决上述的问题,可以通过一种叫毒性逆转的方法来实现,如果z需要通过邻居结点y到达x,则他会告知自己到达x的距离为无穷大
在这里插入图片描述
然而毒性逆转技术并不能完全解决无穷计数问题,在复杂的网络中无法彻底消除问题

最大度量

在复杂的网络中,毒性逆转技术并不能完全解决无穷计数问题,因此加入了最大度量,定义一个最大度量值,如15跳,则16跳表示无穷
在这里插入图片描述
当在某一个时刻,R1到192.168.1.0/24子网之间突然变大/不可达,那么互相的更新途径如上所示,然而由于设定了最大度量,因此在达到无穷大之后就不再互相更新

LS vs DV

记N为节点(路由器)的集合,E为边(链路)的集合

  1. 报文复杂性
    LS算法中每个结点都要知道所有节点的情况和链路信息,因此需要发送O(|N| * |E|)个报文,另一方面,在更新时,LS算法中一个链路改变需要告知所有节点;而在DV算法中,更新时传递的并不一定是所有节点
  2. 收敛速度
    DV算法收敛慢,并且可能遇到无穷计数的问题
  3. 健壮性
    LS算法下,一台路由器出现的问题会及时通知链路中所有的路由器,基本不会出现问题;而DV算法中,可能需要很长时间才知道链路中另一个节点出现了问题

层次路由

将路由抽象为图的方法在小规模的网络中可能是可用的,但在大规模的网络中有如下的问题:

  1. 通信方面
    路由表规模过大,无法存储
    链路中存在大量需要交换的信息,会淹没本身可用的链路状态

  2. 管理方面
    在管理方面,每一个网络的管理员都希望能管理自己的网络,Internet = network of networks

因此需要采取层次路由,把路由器聚合为一个区域:自治系统AS(autonomous systems)
自治系统内部采取上述的普通路由算法,不同AS可以通过不同的路由算法(LS/DV)
自治系统之间采用一个网关路由器连接,这个路由器位于AS边缘,他们互相连接各自的AS

AS间通信

当路由器需要向所在的自治系统之外传送报文时,需要知道应该传递到哪个网关路由器,因此自治系统内部需要知道知道目的网络是否可以通过哪个AS系统到达,并且需要把这个信息告知给自己内部的路由器,这些都是自治系统间的路由器需要完成的任务
假设AS1目前已知通过AS2和AS3均可以到达目的地址,那么该如何选择网关路由器?
首先通过学习得到可以选择的网关,并且将这个信息告知给AS1内部所有路由器,然后路由器通过AS内部路由协议找到能够达到任意一个可行网关的最短路径,接着就通过这个路径进行发送,并在转发表中增加这个入口

AS内部协议

RIP

采取距离向量算法
距离度量为跳步数(max=15hops),每条链路一个跳步
每隔30s,邻居之间交换一次dv,称为通告(advertisement)
每次通告最多25个目的子网
在这里插入图片描述
链路失效
如果180秒没有收到通告,那么久认为邻居节点失效
因此需要重新计算距离向量,并且向邻居发起通告,邻居可能再次向邻居的邻居发送通告(可能产生无穷计数)
因此需要采取毒性逆转技术

RIP路由表是利用一个称作route-d(daemon)的应用层进程进行管理实现的,他的通告报文周期性地由UDP数据报进行发送,因此,该协议是在应用层实现的,但是服务于网络层的协议
由于路由器中也需要发送通告,因此从这里可以看出路由器其实也是有应用层的,在路由器的应用层中生成RIP路由表管理

OSPF

Open Shortest Path First开放最短路径优先
采用LS算法,每个路由器都含有整个网络的拓扑
OSTF通告在整个AS中泛洪
报文直接装入IP数据报中

优点

  1. 安全
    OSTF使用认证后的分组(预防入侵)
  2. 允许使用多条相同费用的路径(RIP仅用一条)
  3. 针对不同的TOS设置多个不同的费用
  4. 集成了单播和多播路由
  5. 支持对AS进一步分层
    在这里插入图片描述
    上图中分为主干区和局部区,链路中的通告仅发生在区内部,每个路由器掌握自己区内部的详细拓扑,只知道去往其他区的方向
    边界路由器汇总到达所在区网络的距离,并且通告给其他区的边界路由器
    主干路由器在主干区运行OSTF
    最后包含AS边界路由器

AS间协议

BGP(Broder Gateway Protocol)
边界网关协议
eBGP:从邻居AS获取子网的可达信息
iBGP:AS内部传播子网的可达信息

BGP协议之中通过两个BGP路由器(Peers)进行BGP报文交换

BGP属性

AS-PATH:到达指定子网X通过的AS路径
NEXT-HOP:下一跳地址
在这里插入图片描述

BGP确定最好的路由

在BGP通告中,可能存在多条路径可以到达目的子网,在这样的情况下,如何选择路由?

  1. 本地偏好(网络管理员设置)
  2. 最短AS-PATH(AS-PATH的数量最少)
  3. 最近NEXT-HOP
  4. 附加

BGP选择路由由以上四点顺序选择,当前一条无法区分时再进行下一条选择
在这里插入图片描述

为什么采用不同的AS内与AS间路由策略

  1. 策略
    AS间路由期望能够管理谁路由经过这个网络,即管理谁能通过这个网络,如上图例子;AS内部路由通过单一管理
  2. 规模
    利用层次路由可以处理大规模的网络
  3. 性能
    AS内部路由更注重性能,AS间路由更注重策略(即管理谁能通过)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值