目录
1.网络层功能
功能概述。网络层提供的服务是从源主机到目的主机的数据报传输,是主机与主机之间的数据报传输,而我们之前提到过的运输层提供的是进程与进程之间的数据传输。
过程。从网络层来看,源主机的网络层将运输层传递下来的数据封装成数据报,经过若干个路由器发往目的主机,每个路由器都会检查数据报头部并根据其头部信息与转发表将其进行转发,到达目的主机的网络层后,提取出数据交付给运输层。
1.1 核心功能——转发、路由和连接建立
1.转发
转发指的是当数据报到达一个路由器的某个输入端口的时候,路由器需要选择正确的输出端口将其送出。
那么怎么选择正确的输出端口呢?路由器维护着转发表,一个转发表的大概内容如下图所示,当路由器接收到一个头部带有地址0111的数据报时,则会检索转发表,根据转发表得知它的输出链路为2,因此将其输出到2号链路中。注意,此处的地址是广义上的地址,并不一定是目的主机地址,它也有可能是VCID。
2.路由
那么路由器怎么获取转发表呢?每个路由器上都运行着路由协议或者说是路由算法,路由算法确定通过网络的端到端路径。因此路由就是确定分组从源到目的的路径。
3.连接建立
在某些网络中(不是所有网络),数据分组传输前两端主机首先需要建立逻辑连接,这个连接与传输层的连接不同,它是所有途中的网络设备(如路由器)都参与的连接,而传输层的连接对中间的网络设备而言是透明的。连接建立之后,分组就可以根据这个逻辑连接进行传输。
2.网络服务模型
由于网络层提供的服务是源主机到目的主机的数据通道,那么这个通道的种类就会随着网络的种类变化而有所差异。网络服务模型描述的就是不同种类的“通道”。对于因特网而言,网络层提供的服务是“尽力服务”,而对于ATM而言,则有所不同。
网络服务模型大致可以分为以下两类:连接服务和无连接服务。连接服务指的是分组在进行传输之前,首先为这些分组确定从源到目的主机经过的路径(建立连接),然后再沿着该路径传输分组,传输结束后则拆除该连接,其代表为虚电路网络。无连接服务指的是不事先为系列分组确定传输路径,而是每个分组到达某个中间网络节点时,根据中间网络节点的转发表局部确定路径,从多个局部确定路径最终达到目的主机,因此不同分组的传输路径可能是不一致的,其代表为数据报网络。虚电路网络与数据报网络的共同点是都是网络层提供的服务,它们的完成不止和两端的主机有关,而且和中间的网络节点息息相关,而且都是分组交换,不同点是在进行分组传输前是否建立连接。
2.1 虚电路网络
什么是虚电路?虚电路类似于电路交换中的电路,电路交换中的电路是建立起一条物理连接,但是虚电路的电路是建立起一条逻辑连接,它采用的是分组交换计数,而不是电路交换,分组交换的每个分组传输利用链路的全部带宽,源到目的路径经过的网络层设备共同完成虚电路的功能。
虚电路的功能描述。虚电路需要在分组传输之前进行呼叫连接,其整个通信过程如“呼叫建立-->数据传输-->呼叫拆除”。在建立连接时,为每个虚电路分配一个标识VCID(其实是为虚电路的每个链路都分配不同的VCID),每个分组头部携带的是VCID,而不是目的主机地址。为了维护某条虚电路,路径上的每个路由器都要参与维护每条经过它的虚电路连接状态。
虚电路的具体实现。每条虚电路包括源到目的主机的一条路径,沿路的每段链路都有一个编号VCID,沿路的每个路由器利用转发表记录经过的每条虚电路。如下图所示,建立了一条红线路径的虚电路,其中每个链路分配有不同的VCID(12、22、32),为什么不能是一条链路分配同一个VCID呢?因为不同链路的带宽不同,其所能建立的虚电路个数不同。假设有一个分组沿着该虚电路传输,它开始头部携带的VC号是12,然后从接口1到达路由器R1,R1就去检索它的转发表,将其头部的VC号修改为22,并从输出端口3将其送出去。
虚电路信令协议。虚电路信令协议用于虚电路的建立、维护和拆除。
2.2 数据报网络
1.数据报网络特点。
数据报网络是无连接的,每个分组携带的地址是目的主机的IP地址(而不是VCID),路由器会根据分组的目的地址检索转发表进行转发分组,由于是无连接的,所以每个分组独立选路。
2.路由器的转发表
对于数据报网络而言,由于每个分组携带的地址是IP地址,路由器的转发表里存储的则是(IP地址,输出链路),试想,如果每一个路由器存储的都是一个具体的IP地址,那么需要存储2^32次方个表项,这是不合理的,因此绝大多数路由器存储的是地址范围,如下图所示。
最长前缀匹配优先原则。在检索转发表时,优先选择与分组目的地址匹配前缀最长的入口。
3. IP数据报
①版本号:大小占4位,指的是IP协议的版本号,如IPv4就是0100,IPv6就是0110。
②首部长度:大小占4位,指的是IP分组的首部长度,但是是以四字节为单位的,假设首部长度为0001,那么说明首部长度实际长4字节。最小的IP分组首部为20B,即图中固定部分。
③服务类型:大小占8位,指示期望获得哪种类型的服务,一般情况不用。
④总长度:大小占16位,以单字节为单位,指的是IP分组的总长度(数据+首部),最大的总长度为((2^16)-1)=65535B,最大数据为65535-20=65515B。
⑤生存时间TTL:大小占8位,IP分组在网络中可以通过的路由器数(或跳步数),路由器转发一次分组则TTL减1,如果TTL=0,则路由器丢弃该分组,当路由器丢弃该分组时会向源主机发送一个ICMP报文。
⑥协议:大小占8位,指示IP分组封装的是哪个协议的数据报,为6则表示封装的是TCP段,为17则表示封装的是UDP数据报。
⑦首部检验和:大小占16位,实现对IP分组首部的差错检测。
一文读懂网络报问中的检验和(checksum)—— 原理+举例+代码_Liu Zhian的博客-CSDN博客_检验和
⑧选项字段:大小可变,范围在1~40B之间,携带安全、源选路径、时间戳等内容,实际很少被使用,填充部分则是使其对齐32位,保证首部长度是4字节的倍数。
⑨标识:大小占16位,标识用来标识一个IP分组,IP协议利用一个计数器,每产生一个IP分组计数器加一,作为该IP分组的标识。其实一个标识无法唯一地标识一个IP分组,因为不同的源主机向同一目的主机发送分组时,可能有相同的标识号,实际上,路由器或目的主机是通过源IP地址、目的IP地址、标识、协议号等唯一地标识一个IP分组的。
⑩片偏移:大小占13位,一个IP分组分片封装原IP分组数据的相对偏移量,片偏移字段以8字节为单位。
⑩①标志位:大小占3位,分别是保留位、DF、MF位,DF=1禁止分片,DF=0允许分片,MF=1非最后一片,MF=0最后一片或未分片。
4.IP数据报分片
最大传输单元(MTU)。最大传输单元就是链路层数据帧可封装数据(不包括数据帧的首部)的上限,不同链路层的MTU大小不同。MTU针对的是整个IP分组,MSS针对的是整个应用层报文分组。
IP分片。由于不同链路层的MTU大小可能不同,假设在A段链路传输了大小为a的数据,当该数据到达B段链路时,假设B段链路MTU<a,为了传输这个数据,因此需要将其分片。所以说,大IP分组向较小MTU链路转发时,可以被分片,被分片后的每个小分组也需要重新构造首部,那为什么说是可以被分片呢?因为IP首部有相关字段用于标识分片以及确定分片的顺序——总长度、标识、标志位和片偏移,标志位的DF决定路由器是否可以将其分片,如果该链路MTU小于该IP分组且不能分片时,路由器就会将该分组丢弃并向源主机发送ICMP报文,当多个分片到达目的主机后才进行重组。为什么不在路由器重组而在目的主机重组呢?原因有二,第一是如果在路由器重组,那么要是接下来还遇到较小MTU的链路,又需要重新分片,浪费资源,第二是由于是无连接传输,不同分片可能到达的路由器不一样,路由器无法将其重组。如果主机未收集到一个IP分组的所有分片的话,那么它就无法将其重组,只能把收集到的分片全部丢弃并向源主机发送ICMP报文。
分片过程。假设原分组总长度为L个字节,待转发链路的MTU=M个字节,若L>M且DF=0,则可以分片,分片时每个分片的标识复制原IP分组的标识,通常分片时,除了最后一个分片,其它的分片均为MTU允许的最大分片。一个最大分片可封装的数据应该是8的倍数,因此,一个最大分片可封装的数据(不包括头部)为:
4.IP编址
每一个IP分组都有一个从哪儿来到哪儿去的问题,“哪儿”需要IP来唯一标记。接口是主机/路由器与物理链路的连接,每一个实现网络层功能的接口都需要有一个IP地址,路由器通常有多个接口,主机通常只有一到两个接口(人们常说的每台主机只有一个IP地址其实是不准确的),每个接口与唯一的IP地址相关联。
IP地址是一个32bits的0、1串,采取点分十进制,换句话说,就是将32bits分成4组,每组8位,每组将二进制转化成十进制表示,如1111,1110,0001,0010可以写成255.254.1.2。每个IP地址还可以视为网络号+主机号,网络号的作用一般用于标识某一个集中区域,如下图所示。IP子网指的是IP地址具有相同网络号的设备接口集合,它们是不跨越路由器及第三层网络以上的设备且可以彼此物理联通的接口。如下图有6个子网。
5.有类IP地址
注意D和E类地址不区分网络号和主机号,D类地址用于多播地址,多播地址是一个48位的标示符,命名了一组应该在这个网络中应用接收到一个分组的站点。多播使用一种虚拟组地址的概念进行工作, 数据包的目的地址不是一个而是一组, 形成多播组地址,因此D类地址只能作为目的地址,不能作为源地址。E类地址是保留地址。
6.特殊IP地址
7.私有地址
只用于内部网络,在公共互联网上这部分地址是无效的,即网络核心路由器认为这些地址是无效的、非法的。由于它是私有地址,因此世界上很多部分都使用这部分地址,因此它可以被重用,正是如此公共路由器也并不知道把分组送到哪里去。
8.子网划分
由于子网还是太大了,因此还需要划分成再小的子网,则IP地址可以视为网络号+子网号+主机号,其中的子网号是原网络主机号的部分比特。
此时存在一个问题,如何确定划分了子网和如何知道利用多少位划分了子网。此时就出现了子网掩码,子网掩码也是32bits的串,它的值为网络号位和子网号位全取1,主机号位全取0。举个例子,B类网的地址范围是128.0.0.0~191.255.255.255,B类网前16位为网络号,若将B类划分成八个子网,由于8=2^3,因此用到3bits,所以此时的子网掩码是255.255.224.0,这个224怎么来的呢?224(10)=1110 0000(二)。子网掩码为什么要这么取值呢?我们首先要明确一点,子网掩码的出现是为了告诉我们是否划分了子网以及如何划分子网,它是通过子网掩码和IP地址进行按位与得知这两点的。由于子网掩码取值的特殊性,按位与的含义在此就是保留IP地址的网络号和子网号,主机号全置为0。当我们知道子网掩码,我们就可以知道一个子网的大小,比如子网掩码是255.255.224.0,那么由于其后面有5个0,因此我们就知道这一个子网可以有2^5个IP地址,当我们知道子网地址+子网掩码,我们就可以知道被划分后的子网所在的位置及其大小。
在一个子网内,主机号全为0和全为1不可用,主机号全0是子网网络地址,全1是子网广播地址,主机号为1是默认网关地址,一般也不用来分配IP。例如子网135.145.1.0/24,则可以用来分配的IP地址范围是135.145.1.2~135.145.1.254,因为135.145.1.0是子网网络地址,135.145.1.255是子网广播地址,135.145.1.1是默认网关地址。
8.无类域间路由(CIDR)
无类域间路由消除了传统的A、B、C类地址界限,这样就没有特定长度的网络号了,CIDR将网络号和子网号融合一起,用x代表其二者前缀长度和,无类地址格式为a.b.c.d/x。 注意,最开始我们使用子网掩码,子网掩码提供给我们的信息是我们可以根据子网掩码后缀0的个数来判断子网的大小,根据子网掩码1的个数n来保持IP地址的前n位不变,后全为0来获得子网地址。此处我们用一个x来完成子网掩码的功能,根据x,我们既可以知道后缀0的个数,又可以知道前缀1的个数。
9.路由聚合
将几个小的子网聚合成一个较大的子网,提高路由效率。
10.DHCP协议
默认网关指的是在这个子网内的数据报要离开这个子网的时候,应该将数据报送到哪一个接口(默认网关)进行转发。默认网关是子网与外网连接的设备,通常是一个路由器。当一台计算机发送信息时,根据发送信息的目标地址,通过子网掩码来判定目标主机是否在本地子网中,如果目标主机在本地子网中,则直接发送即可。如果目标不在本地子网中则将该信息送到缺省网关/路由器,由路由器将其转发到其他网络中,进一步寻找目标主机。
一台计算机的接口如何获取IP地址?第一种方法是静态设置,即通过如下图进行设置。 第二种方法是动态获取,有一个动态主机配置协议(DHCP)。通过这样一个协议,主机就可以动态地从服务器获取(租赁)IP地址、子网掩码、默认网关地址、DNS服务器名称与IP地址。它允许地址重用,即尽管我用过这个IP地址,但是当我不用的时候,我可以把这个IP地址还回去,然后这个IP地址还可以被重新分配给其它用户。
假设在我们的网络中配置了一个DHCP服务器,当我们网络中来了一个新用户,他期望通过动态方式获取IP地址相关信息的时候,这时候他就可以通过他主机的DHCP客户端,基于DHCP协议,与DHCP服务器之间进行报文交换,完成地址的申请和分配。其过程如下:
①主机广播“DHCP discover”(发现报文),因为主机不知道谁是这个DHCP服务器,也不知道DHCP服务器的地址,因此需要广播,即一个蒙着眼睛的人大声地在一群蒙着眼睛的人中问谁能为我分配一个坐标?
②DHCP服务器也是通过广播利用“DHCP offer”(提供报文)进行响应,因为服务器只是听到了有人想要坐标,且那个人还没有坐标,因此只能大喊说我是某某某坐标的DHCP服务器,我可以给你分配坐标abc。
③然后主机就向其发起请求报文。也就是那个人说,某某某坐标的DHCP服务器,我想要你的分配的坐标abc?(尽管人群中可能有多个DHCP服务器,但此时这个人都具体点出了他想要为他分配坐标的服务器,那么其它的服务器就别来自讨没趣了)。
④最后某某某坐标的DHCP服务器就给他发确认报文。
3.网络地址转换(NAT)
IPv4除去D、E两类地址以及一些特殊地址和私有地址,能用的公共地址已经分配殆尽了,所以现在有一部分主机是采用私有地址,但是私有地址怎么能与公共互联网连接,这时就通过一个NAT技术实现。 如图中右边是A类的私有地址,’如果只是这些主机之间进行通信,那么利用原来的源地址和目的地址即可,但是如果这些主机要进行与公共互联网通信时,必须要进行地址转换。这个路由器必须能够实现地址转换功能,而且必须至少拥有一个公共IP地址。利用端口号来区分不同主机。
3.1 NAT的好处
①只用一个公共IP地址可以连接多个网络设备;
②本地网络设备的IP地址变更无需通告外界网络;
③变更ISP时,无需修改内部网络设备的IP地址,只需修改NAT即可;
④内部网络设备对外界网络不可见,更安全。
3.2 实现NAT
①替换
利用(NAT IP地址,新端口号)替换每个外出IP数据报的(源IP地址,源端口号)。
②记录
将每对 (NAT IP地址,新端口号)和(源IP地址,源端口号)的替换信息存储到NAT转换表中。
③替换
利用NAT转换表,利用(源IP地址,源端口号)来替换每个进入内网IP数据报的(NAT IP地址,新端口号)。
3.3 NAT争议
3.4 NAT穿透问题
静态配置NAT即人工手动配置NAT的转发表。
方案2即通过UPnP协议,让服务器自动获取到NAT的公共IP地址,然后服务器就可以自己去设置NAT转换表,达到同样的目的。
4.互联网控制报文协议(ICMP)
4.1 功能与报文类型![](https://img-blog.csdnimg.cn/e6faa48f1806407b82767e86b36c930f.png)
![](https://img-blog.csdnimg.cn/13442dceadf349bd901fe3244a722ef7.png)
并不是所有情况都要发ICMP报文,有以下几种情况:
4.2 ICMP报文格式
ICMP差错报告报文也是要封装到IP数据报中去的,ICMP差错报告报文类似于TCP/UDP的报文段,但它是网络层的,ICMP报告报文前八个字节是其头部,然后它的数据部分放的是出了差错的IP数据报的首部部分以及数据部分的前8字节(对于UDP来说,这前8字节就是UDP的整个头部,对于TCP来说,这前8字节只是部分头部,但是这其中都包含了源和目的端口号),最后将这个ICMP报告报文封装成IP数据报即可发送。
4.3 ICMP的应用举例:Traceroute
Traceroute的作用是探测源到目的主机经过了哪些路由器。
5.IPv6
5.1 数据报格式
【不允许中间分片,只能在源主机分片,目的主机组装】
①版本:IP协议的版本号;
②优先级:数据报的优先级;
③流标签:标识特定源主机到特定目的主机的流的数据报;
④载荷长度:包含扩展首部和数据部分;
⑤下一个首部:指向下一个扩展首部,每一个扩展首部也有“下一个首部”字段,同样指向下一个扩展首部,最后一个扩展首部指向上一层协议的首部(如UDP首部);
⑥跳步限制:相当于TTL。
5.2 与IPv4的区别
①校验和:彻底被移除,以减少每跳时间(但是怎么进行差错检验呢?)
②选项:将IPv4的选项从基本首部中移除出去,用扩展首部代替。
③ICMPv6:新版ICMP,增加了报文类型(分组太大类型),增加了多播组管理功能。
5.3 IPv6地址表示形式
①一般形式:1080:0:FF:0:8:800:200C:417A
将128位按每组16位划分(IPv4是每组8位),然后组之间用冒号隔开,组内用十六进制表示(IPv4是十进制)。
②压缩形式:FF01:0:0:0:0:0:0:43可以压缩中间的0,用两个冒号——>FF01::43。
③IPv4嵌入形式:前80位全用0,接下来16位全用1,其余32位按照IPv4来。如
0:0:0:0:0:FFFF:13.1.68.3,或者::FFFF:13.1.68.3
④地址前缀:2002:43c:476b::/48(注:IPv6不再使用掩码)
⑤URL:为了避免与端口号混淆,加了个中括号 http://[FF01:0:0:0:0:0:0:43]:8000
5.4 IPv6基本地址类型
5.5 IPv4向IPv6的过渡
6.例题
7.路由算法
7.1 路由算法分类
7.2 链路状态路由算法——迪杰斯特拉算法
7.3 距离向量路由算法
无穷计数问题:
当一个结点y检测到本地链路费用发送变化(变化不一定是别的路由器DV更新引起,也可能是外界因素引起),如果这个本地链路费用由大变小,那就是好消息,好消息传播得快,y结点的邻居都会很快收到y通告的这个消息,然后重新计算路由,但是如果这个本地链路费用是由小变大,那就是坏消息,坏消息传播得慢,y结点的邻居很慢才收到这个信息,并产生无穷计数问题。 如图,假设y与x的链路费用在t0时刻从4变到了60,由于坏消息传播慢,z还不知道这个变化,还以为y与x之间的链路费用是4,y重新计算路由,看到z到x还是5,因此y会觉得先到z再到x会近,因此y到x更新为6,然后z更新到7,一直如图所示,但实际上它们到x都经过了费用链路为60的那条链路,由于多次因为“假象”而经过这条费用高的链路,这就是无穷计数问题。产生这个问题的本质就是因为当z依赖y到达x时,y又反过来依赖z,二者相互依赖,导致了都以为对方到达x是花费很小的。
8.层次路由
小规模网络容易抽象成图来进行计算,但是将大规模的网络抽象成一个图计算过于理想化,不具有可行性,因为路由表几乎无法存储这么多的节点信息,而且路由计算过程的信息交换量过大,会淹没链路,而且大规模网络中的不小部分的子网期望自己能够管理网内的路由,选择自己想要的路由方法。为了解决这个问题,因此提出了层次路由。注:因特网采用的是层次路由。
通过将某一个区域的路由器聚合起来,为这个区域分配一个唯一的标识,称这个区域为自治系统(AS),同一个AS内的路由器运行相同的路由协议,不同的自治系统内的路由器可以运行不同的AS内部路由协议。 这样路由就被分成了两层,第一层是聚合路由器为一层,第二层是每个自治系统内部。
假设有一个路由器在自治系统A内,它要与同在A内的路由器通信,由于允许的相同的路由协议,通信很容易做到,如果这个路由器想与系统A外的路由器通信应该怎么做呢?此时提出了网关路由器,网关路由器是一个位于AS边缘的路由器,它通过链路连接其它AS的网关路由器,这个路由器通过网关路由器就可以与其它AS的路由器进行通信了。
9.AS内部路由协议
AS内部路由协议也成为内部网络协议IGP。最常见的IGP有路由信息协议RIP,开放最短路径优先协议OSPF,内部网关路由协议IGRP。
9.1 RIP
RIP协议的路由算法是距离向量路由算法,其描述大概如下,根据其描述,由于跳步数和通告子网数量的限制,因此RIP协议只适用于小规模网络:
- 距离度量:跳步数(max=15 hops) ,每条链路一个跳步,max=15缓解了无穷计数问题
- 每隔30s,邻居之间交换一次DV,称为通告,如果一个路由器180s都没收到某一个邻居的通告,那么这个路由器就会认为这个邻居失效,接着重新计算转发表
- 每次通告:最多25个目的子网(IP形式)
例子如下: 图中可见D的路由表,知道原先D到子网z的跳步数是7,下一跳是B,然后A此时发了通告给D,D就重新计算路由,得到了更小的到z的距离,即通过A再到z,因此就进行修改路由表。
RIP路由表其实是利用一个称作route-d的应用层进程进行管理的,通告报文周期性地通告UDP数据报发送。
9.2 OSPF协议
OSPF采用的是链路状态路由算法,每个路由器都需要构造链路状态分组进行广播,所有的路由器收集全了链路状态分组后,每个路由器构造完整的自治系统的网络拓扑图了,接着就利用迪杰斯特拉算法计算路由。OSPF通告中每个入口对应一个邻居,这个通告在整个AS内泛洪,OSPF报文直接封装在IP数据报中(并没有利用应用层和传输层)。
OSPF的优点:
- 安全:所有OSPF报文可以被认证,预防它人恶意伪造报文,导致错误计算路由。
- 允许同时使用多条相同费用的路径,RIP只能从多条中选一条记录下来。
- 对于每条链路,可以针对不同的TOS(TCP中的服务类型)设置不同的费用度量(如卫星链路可以针对“尽力服务”设置“低”费用,针对“实时服务”设置“高”费用。
- 集成单播路由和多播路由
- OSPF支持大规模的AS分层,但注意,是在AS内进一步分层,OSPF是AS内部路由协议。
分层的OSPF:
- 两级分层:AS内被分为局部区和主干区,对于每个路由器来说,它链路状态通告只限于区内,且每个路由器只掌握所在区的详细拓扑,不知道其他区的拓扑,但可以知道去其他区的某个网络的最短路径(知道到其他区的最短路径≠>知道其他区的拓扑,但知道其他区的拓扑=>知道去其他区的最短路径)。
- 区边界路由器:区边界路由器既处于局部区、又处于主干区,它既知道它所处的局部区的拓扑,又知道它所处的主干区的拓扑,但它不知道其它局部区的拓扑,由于它知道它所处的局部区的拓扑,因此可以计算出它到达它所处的局部区的任意节点的最短路径,因此它会将这个信息通告给其它的区边界路由器,因此每个区边界路由器都知道任意一个区边界路由器到达其对应的局部区的任意节点的最短路径。因此任意一个局部区的节点就可以通过它所在区的区边界路由器知道到达其他区的网络节点的最短路径。
- 主干路由器:位于主干区的路由器,允许主干区的OSPF协议。
- AS边界路由器:连接与其它AS的路由器,可有多个。
10.AS间路由协议——BGP协议
BGP(边界网关协议)是全世界通用的标准域间路由协议。
10.1 BGP提供的功能
- eBGP:在不同AS之间传播子网可达性信息(所谓子网可达性信息,就是假设AS1可以到达子网1、2、3...,那么它就会向AS2发起通告,告诉它我可以到达子网1、2、3...,AS2就可以考虑要不要通告AS1去子网1、2、3...)。
- iBGP:某个AS从别的AS获得子网可达性信息后,就告诉AS内的所有子网,你们可以到达信息里的那些子网。
10.2 BGP报文
BGP通过BGP报文通告去往不同目的前缀的路径,子网就是通过IP前缀来进行定义的,去往不同目的的前缀就是去往不同的子网,这个路径就是到达这个子网需要经过的AS。
BGP报文交换是基于半永久的TCP连接的,所谓半永久,就是连接上了并不会轻易断掉。
BGP的报文种类有以下几种:
- OPEN:与peer建立TCP连接,并认证发送方
- UPDATE:通告新路径(或撤销原路径)
- KEEPALIVE:在没有UPDATE时,保持连接;也用于对OPEN请求的确认
- NOTIFICATION:报告先前报文的差错;也用于关闭连接
10.3 BGP通告
当AS3通过eBGP会话通告一个前缀a(即子网a地址)给AS1时,就是告诉AS1,你把数据报给我,我可以帮你把数据报送到子网a处,此外,如果AS3可以到达多个子网,那么AS3会尝试在通告中聚合网络前缀。如图中,AS3的3a可以通过eBGP向AS1的1c发送前缀可达性信息,1c则可以利用iBGP向AS1内的所有路由器分发新的前缀可达性信息。同在AS1中的1b可以(也可能不)进一步通过1b到2a的eBGP会话,向AS2通告新的可达性信息。当路由器获得新的前缀可达性时,就可以在其转发表中增加关于该前缀的路由项(但是也不一定要添加,尽管AS3告诉我前缀可达性信息,AS1可以根据其需要进行添加)。
通告的前缀信息包括BGP属性,前缀+属性=“路由”。BGP的通告报文有两个重要属性,第一个是AS-PATH,AS-PATH就是到达这个子网所经过的AS,比如AS3知道到达子网a经过AS67 AS17,那么它通告AS1时,那它的AS-PATH就是AS3 AS67 AS17,第二个属性是NEXT-HOP(下一跳),就是收到通告的那一个AS想要到达通告里提供的子网时进入的第一个接口,也就是AS1收到AS3发送的通告报文时,假设1c进入3a的接口是11.11.1.1,那么NEXT-HOP就是11.11.1.1,为什么要有这个NEXT-HOP呢,因为从当前的AS到下一跳AS可能存在多条链路。
10.4 BGP路由选择
网关路由器接收到路由通告后,它可以根据其输入策略(也可以说根据它的需要)决策接受或者拒绝这个路由,比如你提供给我一个我从来不会路由到的子网地址,那我就不接受,不把他放在我的路由表里。
路由器可能获知到达同一目的AS的多条路由,它可以基于以下准则进行选择其中一条:
- 本地偏好值(可能是企业层面,甚至政治层面)
- 最短AS-PATH(注意,经过路由器最少的并不一定是最短的,要看以什么作为距离度量)
- 最近NEXT-HOP路由器:热土豆路由,如果AS-PATH一样长,那就选下一跳最近的
- 附加准则
举个例子: 假设A会将w路由给B,那么给B的通告中AS-PATH就是Aw,如果B要路由给x,那么给x的通告中AS-PATH就是wAB,如果B和C是两个没有利益相关的企业,那B会不会向C通告路径wAB呢?一般是不会,因为告诉你会浪费我流量,而且我还没得到好处,而且B一般也不会接受C的通告,我没钱挣干嘛要替你转发路由?
10.5 AS内和AS间路由比较
①策略层面
AS内路由:单一管理,一个AS内的路由策略一致。
AS间路由:期望能够管理控制流量如何被路由,谁路由经过其网络。
②性能层面
AS内路由:侧重性能。
AS间路由:策略主导