妙不可言
概念
互联网采用的设计思路是这样的:网络层要设计得尽量简单,向其上层只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。这里的“数据报”(datagram)是互联网的设计者最初使用的名词,其实数据报(或IP数据报)就是我们经常使用的“分组”。
网络在发送分组时不需要先建立连接。每一个分组(也就是IP数据报)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺。如果主机(即端系统)进程之间需要进行可靠的通信,那么就由主机中的运输层负责(包括差错处理、流量控制等)。采用这种设计思路的好处是:网络造价大大降低,运行方式灵活,能够适应多种应用。互联网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。


网络层的两个层面
- 第一类是
转发源主机和目的主机之间所传送的数据,把源主机所发送的分组,像接力赛跑那样从一个路由器转发到下一个路由器,最后把分组传送到目的主机。 - 第二类则是
传送路由信息,是根据路由选择协议所使用的路由算法,彼此不断地交换路由信息分组,目的是为了在路由器中创建路由表,并由此导出为转发分组而用的转发表。这一类信息的传送是为第一类数据的传送服务的。
也就是把网络层抽象地划分为数据层面(或转发层面)和控制层面。

路由选择和分组转发
软件定义网络SDN(Software Defined Network),正在对这两个层面的结构进行了重大的改变

在传统的互联网中,每一个路由器中,既有转发表又有路由选择软件,也就是说,每个路由器中,既有数据层面也有控制层面。但在SDN结构中,所有的路由器都变简单了。路由器中的路由选择软件都不存在了,因此路由器之间不再相互交换路由信息。在网络的控制层面有一个在逻辑上集中的远程控制器(但在物理上可以由不同地点的多个服务器组成)。远程控制器掌握各主机和整个网络的状态,能够为每一个分组计算出最佳的路由,然后在每一个路由器中生成其正确的转发表。路由器的工作很单纯,即收到分组,查找转发表,转发分组。
网际协议IP
网际协议IP(Intemet Protocol)是TCP/IP体系中两个最主要的协议之一[STEV94][COME06][FORO10],也是最重要的互联网标准协议之一[RFC 791,STD5]。网际协议IP又称为Kahn-Cerf协议,因为这个重要协议正是Robert Kahn和Vint Cerf二人共同研发的。这两位学者在2004年获得图灵奖.
与协议IP配套使用的还有三个协议:
- 地址解析协议ARP(Address Resolution Protocol)
- 网际控制报文协议ICMP(Internet Control Message Protocol)
- 网际组管理协议IGMP(Internet Group Management Protocol)

ARP画在最下面,因为IP经 网络层 IP (网际层) 常要使用这个协议。ICMP和IGMP画在这一层的上部,因为它们要使用协议IP。
虚拟互连网络
从一般的概念来讲,将网络互相连接起来要使用一些中间设备。根据中间设备所在的层次,可以有以下四种不同的中间设备
- 物理层使用的中间设备叫作转发器(repeater)。
- 数据链路层使用的中间设备叫作网桥或桥接器(bridge),以及交换机(switch)。
- 网络层使用的中间设备叫作路由器(router)。
- 在网络层以上使用的中间设备叫作网关(gateway)。用网关连接两个不兼容的系统需要在高层进行协议的转换。
当中间设备是转发器或网桥时,这仅仅是把一个网络扩大了,而从网络层的角度看,这仍然是一个网络,一般并不称之为网络互连。网关由于比较复杂,目前使用得较少。因此现在我们讨论网络互连时,都是指用路由器进行网络互连和路由选择。路由器其实就是一台专用计算机,用来在互联网中进行路由选择.
由于参加互连的计算机网络都使用相同的网际协议IP(Internet Protocol),因此可以把互连以后的计算机网络看成为如图所示的一个虚拟互连网络(internet)。所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用协议IP就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。这种使用协议IP的虚拟互连网络可简称为IP网(IP网是虚拟的,但平常不必每次都强调“虚拟”二字)。使用IP网的好处是;当IP网上的主机进行通信时,就好像在一个单个网络上通信一样,它们看不见互连的各网络的具体异构细节(如具体的编址方案、路由选择协议,等等)。如果在这种覆盖全球的IP网的上层使用TCP协议,那么就是现在的互联网(Internet)。


IP地址
IP地址及其表示方法
整个的互联网就是一个单一的、抽象的网络。IP地址就是给连接到互联网上的每一台主机(或路由器)的每一个接口,分配一个在全世界范围内是唯一的32位的标识符。IP地址的结构使我们可以在互联网上很方便地进行寻址。IP地址现在由互联网名字和数字分配机构ICANN(Internet Corporation for Assigned Names and Numbers)进行分配。


符号“:=”表示“定义为”, IP地址指明了连接到某个网络上的一个主机(或路由器)。

分类的IP地址

==135==

CIDR
无分类域间路由选择CIDR(Classless Inter-Domain Routing,CIDR的读音是"sider")[RFC 4632],其要点有以下三个。
- 网络前缀


CIDR使用“斜线记法”(slash notation),或称为CIDR记法,即在IP地址后面加上斜线"/",斜线后面是网络前缀所占的位数。
CIDR把网络前缀都相同的所有连续的IP地址组成一个“CIDR地址块”。一个CIDR地址块包含的IP地址数目,取决于网络前缀的位数。
- 地址掩码
地址掩码(常简称为掩码)由一连串1和接着的一连串0组成,而1的个数就是网络前缀的长度。地址掩码又称为子网掩码。在CIDR记法中,斜线后面的数字就是地址掩码中1的个数。
对于早期使用的分类IP地址,其地址掩码是固定的,常常不用专门指出。例如:
A类网络,地址掩码为255.0.0.0或255.0.0.0/8。
B类网络,地址掩码为255.255.0.0或255.255.0.0/16。
C类网络,地址掩码为255.255.255.0或255.255.255.0/24。
把二进制的IP地址和地址掩码进行按位AND运算,即可得出网络地址。


==139==
一个大的CIDR地址块中往往包含很多小地址块,所以在路由器的转发表中就利用较大的一个CIDR地址块来代替许多较小的地址块。这种方法称为路由聚合(route aggregation),它使得转发表中只用一个项目就可以表示原来传统分类地址的很多个(例如上千个)路由项目,因而大大压缩了转发表所占的空间,减少了查找转发表所需的时间。

==141==


地址解析协议ARP
在实际应用中,我们经常会遇到这样的问题:已经知道了一个机器(主机或路由器)的IP地址,需要找出其相应的MAC地址。地址解析协议ARP[RFC 826,STD37]就是用来解决这样的问题的。

每一台主机都设有一个ARP高速缓存(ARP cache),里面存有本局域网上的各主机和路由器的IP地址到MAC地址的映射表

==146==
ARP用于解决同一个局域网上的主机或路由器的IP地址和MAC地址的映射问题。
IP数据报的格式

一个IP数据报由首部和数据两部分组成。首部的前一部分长度是固定的,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。
==147==

(8)生存时间 占8位,生存时间字段常用的英文缩写是TTL(Time To Live),表明这是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在互联网中兜圈.


?

这个路由聚合也是神奇,为了减少项目数.聚合成的前缀虽然再在转发表上, 但聚合是不完全的, 并不代表全部该前缀网络.
因此,在采用CIDR编址时,如果一个分组在转发表中可以找到多个匹配的前缀,那么就应当选择前缀最长的一个作为匹配的前缀。这个原则称为最长前缀匹配(longest prefix match)。网络前缀越长,其地址块就越小,因而路由就越具体(more specific)。
实际的转发表有时还可能增加两种特殊的路由,就是主机路由和默认路由。
主机路由(host route)又叫作特定主机路由,这是对特定目的主机的IP地址专门指明的一个路由。采用特定主机路由可使网络管理人员更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。在对网络的连接或转发表进行排错时,指明到某一台主机的特殊路由就十分有用。假定这个特定主机的点分十进制IP地址是a.b.c.d,那么在转发表中对应于主机路由的网络前缀就是a.b.c.d/32。我们知道,/32表示的子网掩码是32个1。实际的网络不可能使用32位的前缀,因为没有主机号的IP地址是没有实际意义的。但这个特殊的前缀却可以用在转发表中。不难看出,32个1的子网掩码和IP地址a.b.c.d按位进行AND运算后,得出的结果必定是a.b.c.d,也就是说,找到了匹配。这时就把收到的分组转发到转发表所指出的下一跳。主机路由在转发表中都放在最前面。
还有一种特殊路由是默认路由(default route)。这就是不管分组的最终目的网络在哪里,都由指定的路由器R来处理。这在网络只有很少的对外连接时非常有用。在实际的转发表中,用一个特殊前缀0.0.0.0/0来表示默认路由。这个前缀的掩码是全0(/0表示网络前缀是0位,因此掩码是32个0)。用全0的掩码和任何目的地址进行按位AND运算,结果一定是全0,即必然是和转发表中的0.0.0.0/0相匹配的。这时就按照转发表的指示,把分组送交下一跳路由器R来处理(即间接交付)。
使用二叉线索查找转发表
为了进行更加有效的查找,通常是把无分类编址的转发表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie)",它是一种特殊结构的树。IP地址中从左到右的比特值决定了从根节点逐层向下层延伸的路径,而二叉线索中的各个路径就代表转发表中存放的各个地址。

为了提高二叉线索的查找速度,广泛使用了各种压缩技术。例如,在图4-27中的最后两个地址,其最前面的4位都是1011。因此,只要一个地址的前4位是1011,就可以跳过前面4位(即压缩了4个层次)而直接从第5位开始比较。就是减少层数, 不一定是二叉树, 还可以更多分支.
网际控制报文协议ICMP
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Intermet Control Message Protocol)[RFC 792,STD5]。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP是互联网的标准协议。但ICMP不是高层协议(看起来好像是高层协议,因为ICMP报文装在IP数据报中,作为其中的数据部分),而是IP层的协议。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。

ICMP报文的种类
ICMP报文有两种,即ICMP差错报告报文和ICMP询问报文。

ICMP报文的代码字段用于进一步区分某种类型中的几种不同情况。检验和字段用来检验整个ICMP报文。我们应当还记得,IP数据报首部的检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP报文不产生差错
==158==

ICMP的应用举例
ICMP的一个重要应用就是分组网间探测PING(Packet InterNet Groper),用来测试两台主机之间的连通性。PING使用了ICMP回送请求与回送回答报文。PING是应用层直接使用网络层ICMP的一个例子。它没有通过运输层的TCP或UDP。
另一个非常有用的应用是traceroute(这是UNIX操作系统中的命令),用来跟踪一个分组从源点到终点的路径。在Windows操作系统中这个命令是tracert。
IPv6
协议IP是互联网的核心协议。现在使用的协议IP(即IPv4)是在20世纪70年代末期设计的。互联网经过几十年的飞速发展,在2011年2月3日,IANA开始停止向地区互联网注册机构RIR分配IPv4地址,因为IPv4地址已经全部耗尽了。不久,各地区互联网地址分配机构也相继宣布地址耗尽。我国在2014年至2015年也逐步停止了向新用户和应用分配IPv4地址,同时全面开始商用部署IPv6。
==161==
IPv6的基本首部
IPv6仍支持无连接的传送,但将协议数据单元PDU称为分组(packet),而不是IPv4的数据报(datagram)


IPv6的地址
一个IPv6数据报的目的地址可以是以下三种基本类型地址
(1)单播(unicast) 单播就是传统的点对点通信。
(2)多播(multicast) 多播是一点对多点的通信,数据报发送到一组计算机中的每一个。IPv6没有采用广播的术语,而是将广播看作多播的一个特例。
(3)任播(anycast) 这是IPv6增加的一种类型。任播的终点是一组计算机,但数据报只交付其中的一个,通常是按照路由算法得出的距离最近的一个。
IPv6把实现IPv6的主机和路由器均称为节点。由于一个节点可能会使用多条链路与其他的一些节点相连,因此一个节点可能有多个与链路相连的接口。这样,IPv6给节点的每一个接口(请注意,不是给某个节点)指派一个IPv6地址。一个具有多个接口的节点可以有多个单播地址,而其中任何一个地址都可当作到达该节点的目的地址。不过有时为了方便,若不会引起误解,也常说某个节点的IPv6地址,而把某个接口省略掉。
为了使地址再稍简洁些,IPv6使用冒号十六进制记法(colon hexadecimal notation,简写为colon hex),它把每个16位的值用十六进制值表示,各值之间用冒号分隔。

在十六进制记法中,允许把数字前面的0省略。上面就把0000中的前三个0省略了。冒号十六进制记法还包含两个技术使它尤其有用。首先,冒号十六进制记法可以允许零压缩(zero compression),即一连串连续的零可以为一对冒号所取代



从IPv4向IPv6过渡
向IPv6过渡只能采用逐步演进的办法,同时,还必须使新安装的IPv6系统能够向后兼容。 这就是说,IPv6系统必须能够接收和转发IPv4分组,并且能够为IPv4分组选择路由。
双协议栈
双协议栈(dual stack)是指在完全过渡到IPv6之前,使一部分主机(或路由器)同时装有IPv4和IPv6这两种协议栈。因此双协议栈主机(或路由器)既能够和IPv6的系统通信,又能够和IPv4的系统通信。双协议栈的主机(或路由器)记为IPv6/IPv4,表明它同时具有IPv6地址和IPv4地址.

用域名系统DNS来查询。若DNS返回的是IPv4地址,则双协议栈的源主机就使用IPv4地址。
隧道技术
向IPv6过渡的另一种方法是隧道技术(tunneling)。
这种方法的要点就是在IPv6数据报要进入IPv4网络时,把IPv6数据报封装成为IPv4数据报。现在整个的IPv6数据报变成了IPv4数据报的数据部分。当IPv4数据报离开IPv4网络中的隧道时,再把数据部分(即原来的IPv6数据报)交给主机的IPv6协议栈。

要使双协议栈的主机知道IPv4数据报里面封装的数据是一个IPv6数据报,就必须把IPv4首部的协议字段的值设置为41(41表示数据报的数据部分是IPv6数据报)。
ICMPv6
此IPv6也需要使用ICMP来反馈一些差错信息。新的版本称为ICMPv6,它比ICMPv4要复杂得多。地址解析协议ARP和网际组管理协议IGMP的功能都已被合并到ICMPv6中


互联网的路由选择协议
倘若从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,则只有两大类,即静态路由选择策略与动态路由选择策略。静态路由选择也叫作非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。对于很简单的小网络,完全可以采用静态路由选择,用人工配置每一条路由。动态路由选择也叫作自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。因此,动态路由选择适用于较复杂的大网络。
互联网采用的路由选择协议主要是自适应的(即动态的)、分布式路由选择协议。
可以把整个互联网划分为许多较小的自治系统(autonomous system),一般都记为AS。自治系统AS是在单一技术管理下的许多网络、IP地址以及路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。每一个AS对其他AS表现出的是一个单一的和一致的路由选择策略[RFC4271]。这样,互联网就把路由选择协议划分为两大类,
内部网关协议IGP(Interior Gateway Protocol)具体的协议有多种,如RIP和OSPF等。外部网关协议EGP(External Gateway Protocol)目前使用的协议是BGP-4。
自治系统之间的路由选择也叫作域间路由选择(interdomain routing),而在自治系统内部的路由选择叫作域内路由选择(intradomain routing)

内部网关协议RIP
RIP(Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议[RFC 1058],它的中文译名是路由信息协议。RIP是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,其最大优点就是简单。
RIP协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录(因此,这是一组距离,即“距离向量”)。
协议RIP的“距离”也称为“跳数”(hop count),并且每经过一个网络,跳数就加1。RIP认为好的路由就是它通过的网络数目少,即“距离短”。RIP允许一条路径最多只能包含15个网络。因此“距离”等于16时即相当于不可达。可见RIP只适用于小型互联网。
RIP不能在两个网络之间同时使用多条路由。RIP选择一条具有最少网络数的路由(即最短路由),哪怕还存在另一条高速(低时延)但网络数较多的路由。
RIP协议和OSPF协议都是分布式路由选择协议。它们的共同特点就是每一个路由器都要不断地和其他一些路由器交换路由信息。
==171==
路由表更新的原则是找出到每个目的网络的最短距离。这种更新算法又称为距离向量算法。
书上写了一大堆, 其实整体要说明的道理很简单. 路由器不断和相邻节点通过发RIP报文的形式交换路由表. 每个路由表中都有目的网络地址, 从当前节点的跳数, 下一跳节点. 相邻节点发来一个RIP报文此节点就获得了一条相邻节点的路由表信息, 但要改写成本结点的路由表信息, 并判断是否当前最优, 是就加入, 也是一种贪婪算法.
一个RIP报文最多可包括25个路由。如超过,必须再用一个RIP报文来传送。

?
内部网关协议OSPF
这个协议的名字是开放最短路径优先OSPF(Open Shortest Path First)。它是为克服RIP的缺点在1989年开发出来的。OSPF的原理很简单,但实现起来却较复杂。“开放”表明OSPF协议不是受某一家厂商控制,而是公开发表的。“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。现在使用的协议OSPF是第二个版本OSPFv2.
OSPF最主要的特征就是使用链路状态协议(link state protocol),而不是像RIP那样的距离向量协议。
协议OSPF的特点是:
(1)向本自治系统中所有路由器发送信息。这里使用的方法是洪泛法(flooding),这就是路由器通过所有输出端口向所有相邻的路由器发送信息。
(2)发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。所谓“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。OSPF将这个“度量”用来表示费用、距离、时延、带宽,等等。这些都由网络管理人员来决定,因此较为灵活。有时为了方便就称这个度量为“代价”。
(3)当链路状态发生变化或每隔一段时间(如30分钟),路由器向所有路由器用洪泛法发送链路状态信息。
由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库(link-state database),这个数据库实际上就是全网的拓扑结构图。这个拓扑结构图在全网范围内是一致的(这称为链路状态数据库的同步)。
OSPF的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF的更新过程收敛得快是其重要优点
为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫作区域(area)

OSPF使用层次结构的区域划分。在上层的区域叫作主干区域(backbonearea)。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。从其他区域来的信息都由区域边界路由器(area border router)进行概括。而显然,每一个区域至少应当有一个区域边界路由器。在主干区域内的路由器叫作主干路由器(backbone router),一个主干路由器可以同时是区域边界路由器,在主干区域内还要有一个路由器专门和本自治系统外的其他自治系统交换路由信息。这样的路由器叫作自治系统边界路由器
==177==
OSPF允许管理员给每条路由指派不同的代价。
如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫作多路径间的负载均衡(load balancing)
OSPF的五种分组类型
(1)类型1,问候(Hello)分组,用来发现和维持邻站的可达性。
(2)类型2,数据库描述(Database Description)分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
(3)类型3,链路状态请求(Link State Request)分组,向对方请求发送某些链路状态项目的详细信息。
(4)类型4,链路状态更新(Link State Update)分组,用洪泛法对全网更新链路状态。这种分组是最复杂的,也是OSPF协议最核心的部分。路由器使用这种分组将其链路状态通知给邻站。链路状态更新分组共有五种不同的链路状态[RFC 2328],这里从略。
(5)类型5,链路状态确认(Link State Acknowledgment)分组,对链路更新分组的确认。OSPF分组是作为IP数据报的数据部分来传送的(如图4-43所示)。OSPF不用UDP而是直接用IP数据报传送(其IP数据报首部的协议字段值为89)。OSPF构成的数据报很短。这样做可减少路由信息的通信量。数据报很短的另一好处是可以不必将长的数据报分片传送。分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。

两个同步的路由器叫作“完全邻接的”(fully adjacent)路由器。不是完全邻接的路由器表明它们虽然在物理上是相邻的,但其链路状态数据库并没有达到一致。

外部网关协议BGP
在外部网关协议(或边界网关协议)BGP中,现在使用的是第4个版本BGP-4(常简写为BGP)。路由选择协议RIP和OSPF,都只能在一个自治系统AS内部工作。因此,若没有协议BGP,那么分布在全世界数以万计的AS都将是一个个没有联系的孤岛。
互联网的规模太大,使得自治系统AS之间路由选择非常困难。对于自治系统AS之间的路由选择,要用“代价”作为度量来寻找最佳路由也是很不现实的。比较合理的做法是在自治系统之间交换“可达性”信息.
自治系统AS之间的路由选择必须考虑有关策略。边界网关协议BGP只能是力求选择出一条能够到达目的网络前缀且比
较好的路由(不能兜圈子),而并非要计算出一条最佳路由。这里所说的BGP路由,是指经过哪些自治系统AS可以到达目的网络前缀。当然,这选择出的比较好的路由,也有时不严格地称为最佳路由。BGP采用了路径向量(path vector)路由选择协议,它与距离向量协议(如RIP)和链路状态协议(如OSPF)都有很大的区别。
BGP路由
在一个自治系统AS中有两种不同功能的路由器,即边界路由器(或边界网关)和内部路由器。一个AS至少要有一个边界路由器和相邻AS的边界路由器直接相连。

协议BGP规定,在一个AS内部所有的iBGP必须是全连通的。即使两个路由器之间没有物理连接,但它们之间仍然有iBGP连接.

根据RFC 4271,cBGP是在不同AS的两个对等端之间的BGP连接,而iBGP是同一AS的两个对等端之间的BGP连接。在这两种不同连接上传送的BGP报文,都遵循同样的协议BGP,使用同样的报文格式和具有同样的属性类型。

BGP路由的一般格式:

==182==
三种不同的自治系统AS
可以把AS划分为三大类,即末梢AS(stub AS)、穿越AS(transit AS)和对等AS (peering AS)。

BGP的路由选择
本地偏好LOCAL-PREF(LOCAL PREFerence)值最高的路由要首先选择。

- 如果从几条BGP路由中找不出本地偏好值最高的路由,则执行下一条。
选择具有AS跳数最少的路由。

- 使用
热土豆路由选择算法
这里是直译, 有点搞笑 Hot Potato , 外国的游戏名, 中文感觉叫烫手山芋路由选择更通俗.

- 选择路由器BGP标识符的数值最小的路由
当以上几种方法都无法找出最好的BGP路由时,就可使用BGP标识符来选择路由。在BGP进行交互的报文中,其首部有一4字节的字段,叫作BGP标识符,记为BGP ID。这个字段被赋予一个无符号整数作为运行BGP的路由器的唯一标识符。具有多个接口的路由器有多个IP地址。BGPID就使用该路由器的IP地址中数值最大的一个。
BGP的四种报文
在RFC 4271中规定了BGP-4的四种报文:
(1)OPEN(打开)报文,用来与BGP连接对等端建立关系。
(2)UPDATE(更新)报文,用来通告某一路由的信息,以及列出要撤销的路由。
(3)KEEPALIVE(保活)报文,用来周期性地证实与对等端的连通性。
(4)NOTIFICATION(通知)报文,用来发送检测到的差错。
==185==

路由器的构成
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。从路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。下一跳
路由器也按照这种方法处理分组,直到该分组到达终点为止。路由器的转发分组正是网络层的主要工作。

整个的路由器结构可划分为两大部分:路由选择部分和分组转发部分。
路由选择部分也叫作控制部分,或控制层面,其核心构件是路由选择处理机。路由选择处理机的任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。
分组转发部分是是数据层面,它由三部分组成:交换结构、一组输入端口和一组输出端口
交换结构(switching fabric)又称为交换组织,它的作用就是根据转发表(forwarding table)对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去。交换结构本身就是一种网络,但这种网络完全包含在路由器之中,因此交换结构可看成是“在路由器中的网络"。
==187==
若接收到的分组是路由器之间交换路由信息的分组(如RIP或OSPF分组等),则把这种分组送交路由器的路由选择部分中的路由选择处理机。若接收到的是数据分组,则按照分组首部中的目的地址查找转发表,根据得出的结果,分组就经过交换结构到达合适的输出端口。一个路由器的输入端口和输出端口就做在路由器的线路接口卡上。

IP多播的基本概念
1988年Steve Deering首次在其博士学位论文中提出IP多播的概念。1992年3月IETF在互联网范围首次试验IETF会议声音的多播,当时有20个网点可同时听到会议的声音。IP多播是需要在互联网上增加更多的智能才能提供的一种服务。现在IP多播(multicast,以前曾译为组播)已成为互联网的一个热门课题。这是由于有许多的应用需要由一个源点发送到许多个终点,即一对多的通信。例如,实时信息的交付(如新闻、股市行情等)、软件更新、交互式会议等。随着互联网的用户数目的急剧增加,以及多媒体通信的开展,有更多的业务需要多播来支持。

在互联网范围的多播要靠路由器来实现,这些路由器必须增加一些能够识别多播数据报的软件。能够运行多播协议的路由器称为多播路由器(multicast router)。多播路由器当然也可以转发普通的单播IP数据报。
其实多播组的标识符就是IP地址中的D类地址。D类IP地址的前四位是1110,因此D类地址范围是224.0.0.0到239.255.255.255。我们就用每一个D类地址标志一个多播组。这样,D类地址共可标志2^28个多播组,也就是说,在同一时间可以允许有超过2.6亿的多播组在互联网上运行。多播数据报也是"尽最大努力交付",不保证一定能够交付多播组内的所有成员。因此,多播数据报和一般的IP数据报的区别就是它使用D类IP地址作为目的地址,并且首部中的协议字段值是2,表明使用网际组管理协议IGMP。
显然,多播地址只能用于目的地址,而不能用于源地址。此外,对多播数据报不产生ICMP差错报文。因此,若在PING命令后面键入多播地址,将永远不会收到响应。
IP多播可以分为两种。一种是只在本局域网上进行硬件多播,另一种则是在互联网的范围进行多播。
在局域网上进行硬件多播

==191==
网际组管理协议IGMP和多播路由选择协议
网际组管理协议IGMP(Internet Group Management Protocol)

IGMP并非在互联网范围内对所有多播组成员进行管理的协议。IGMP不知道IP多播组包含的成员数,也不知道这些成员都分布在哪些网络上。IGMP协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。
仅有IGMP协议是不能完成多播任务的。连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议。

多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化)。
多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,而是还要考虑这个多播数据报从什么地方来和要到什么地方去。
多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络。
网际组管理协议IGMP
和网际控制报文协议ICMP相似,IGMP使用IP数据报传递其报文(即IGMP报文加上IP首部构成IP数据报),但它也向IP提供服务。因此,我们不把IGMP看成是一个单独的协议,而是属于整个网际协议IP的一个组成部分.
==193==
多播路由选择协议
虽然在TCP/IP中IP多播协议已成为建议标准,但多播路由选择协议(用来在多播路由器之间传播路由信息)则尚未标准化。
在多播过程中一个多播组中的成员是动态变化的。例如在收听网上某个广播节目时,随时会有主机加入或离开这个多播组。多播路由选择实际上就是要找出以源主机为根节点的多播转发树。在多播转发树上,每一个多播路由器向树的叶节点方向转发收到的多播数据报,但在多播转发树上的路由器不会收到重复的多播数据报(即多播数据报不应在互联网中兜圈子)。不难看出,对不同的多播组对应于不同的多播转发树。同一个多播组,对不同的源点也会有不同的多播转发树。
==194==

隧道技术(tunneling)

基于核心的发现技术
这种方法对于多播组的大小在较大范围内变化时都适合。这种方法是对每一个多播组G指定一个核心(core)路由器,给出它的IP单播地址。
目前还没有在整个互联网范围使用的多播路由选择协议。下面是一些建议使用的多播路由选择协议。
- 距离向量多播路由选择协议DVMRP (Distance Vector Multicast Routing Protocol)
- 基于核心的转发树CBT(Core Based Tree)[RFC 2189,2201]
- 开放最短通路优先的多播扩展MOSPF(Multicast extensions to OSPF)[RFC 1585]
- 协议无关多播-稀疏方式PIM-SM(Protocol Independent Multicast-Sparse Mode)[RFC7761,STD83]
- 协议无关多播-密集方式PIM-DM (Protocol Independent Multicast-Dense Mode)[RFC3973]
虚拟专用网VPN 和 网络地址转换NAT
虚拟专用网VPN
仅在机构内部使用的计算机就可以由本机构自行分配其IP地址。这就是说,让这些计算机使用仅在本机构有效的IP地址(这种地址称为本地地址),而不需要向互联网的管理机构申请全球唯一的IP地址(这种地址称为全球地址)。
RFC 1918指明了一些专用地址(private address)。这些地址只能用于一个机构的内部通信,而不能用于和互联网上的主机通信。换言之,专用地址只能用作本地地址而不能用作全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。2013年4月,RFC 6890全面地给出了所有特殊用途的IPv4和IPv6地址,但三个IPv4专用地址块的指派并无变化,即:
- 10.0.0.0/8,即从10.0.0.0到10.255.255.255。
- 172.16.0.0/12,即从172.16.0.0到172.31.255.255。
- 192.168.0.0/16,即从192.168.0.0到192.168.255.255。
上面的三个地址块分别相当于原来的一个A类网络、16个连续的B类网络和256个连续的C类网络。A类地址本来早已用完了,而上面的地址10.0.0.0本来是分配给ARPANET的。由于ARPANET已经关闭停止运行了,因此这个地址就用作专用地址。
采用这样的专用IP地址的互连网络称为专用互联网或本地互联网,或更简单些,就叫作专用网。显然,全世界可能有很多的专用互连网络具有相同的IP地址,但这并不会引起麻烦,因为这些专用地址仅在本机构内部使用。专用IP地址也叫作可重用地(reusable address)。
有时一个很大的机构的许多部门分布的范围很广(例如,在世界各地),这些部门经常要互相交换信息。这可以有两种方法。(1)租用电信公司的通信线路为本机构专用。这种方法虽然简单方便,但线路的租金太高,一般难于承受。(2)利用公用的互联网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网VPN(Virtual Private Network)。
这里之所以称为“专用网”是因为这种网络是为本机构的主机用于机构内部的通信,而不是用于和网络外非本机构的主机通信。如果专用网不同网点之间的通信必须经过公用的互联网,但又有保密的要求,那么所有通过互联网传送的数据都必须加密。
而VPN只是在效果上和真正的专用网一样。一个机构要构建自己的VPN就必须为它的每一个场所购买专门的硬件和软件,并进行配置,使每一个场所的VPN系统都知道其他场所的地址。

==198==
由场所A和B的内部网络所构成的虚拟专用网VPN又称为内联网(intranet或intranet VPN,即内联网VPN),表示场所A和B都属于同一个机构。
有时一个机构的VPN需要有某些外部机构(通常就是合作伙伴)参加进来。这样的VPN就称为外联网(extranet或extranet VPN,即外联网VPN)。
还有一种类型的VPN,就是远程接入VPN(remote access VPN)。我们知道,有的公司可能并没有分布在不同场所的部门,但却有很多流动员工在外地工作。公司需要和他们保持联系,有时还可能一起开电话会议或视频会议。远程接入VPN可以满足这种需求。在外地工作的员工通过拨号接入互联网,而驻留在员工个人电脑中的VPN软件可以在员工的个人电脑和公司的主机之间建立VPN隧道,因而外地员工与公司通信的内容也是保密的,员工们感到好像就是使用公司内部的本地网络。
网络地址转换
网络地址转换NAT(Network Address Translation)方法是在1994年提出的。这种方法需要在专用网连接到互联网的路由器上安装NAT软件.装有NAT软件的路由器叫作NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和互联网连接。

为了更加有效地利用NAT路由器上的全球IP地址,现在常用的NAT转换表把运输层的端口号也利用上。这样,就可以使多个拥有本地地址的主机,共用NAT路由器上的一个全球IP地址,因而可以同时和互联网上的不同主机进行通信[COME06]。
使用端口号的NAT也叫作网络地址与端口号转换NAPT (Network Address and Port Translation),而不使用端口号的NAT就叫作传统的NAT(traditional NAT)。

多协议标签交换MPLS
IETF于1997年成立了MPLS工作组,为的是开发出一种新的协议。这种新的协议就是多协议标签交换MPLS(MultiProtocol Label Switching)。“多协议”表示在MPLS的上层可以采用多种协议。IETF还综合了许多公司的类似技术,如思科公司的标签交换(Tag Switching),以及Ipsilon公司的IP交换(IP Switching)等。2001年1月MPLS终于成为互联网的建议标准[RFC 3031,3032]。
MPLS利用面向连接技术,使每个分组携带一个叫作标签(label)"的小整数(这叫作打上标签)。当分组到达交换机(即标签交换路由器)时,交换机读取分组的标签,并用标签值来检索分组转发表。这样就比查找路由表来转发分组要快得多。
人们经常把MPLS与异步传递方式ATM(Asynchronous Transfer Mode)联系起来,这仅仅是因为它们都采用了面向连接的工作方式

==202==
MPLS是面向连接的,因为在标签交换路径LSP上的第一个LSR就根据IP数据报的初始标签确定了整个的标签交换路径,就像一条虚连接一样。
分组每经过一个LSR,LSR就要做两件事:一是转发,二是更换新的标签,即把入标签更换成为出标签。这就叫作标签对换(label swapping)"

由入口LSR确定进入MPLS域以后的转发路径”称为显式路由选择(explicit routing),它和互联网中通常使用的“每一个路由器逐跳进行路由选择”有着很大的区别。
转发等价类FEC
MPLS有个很重要的概念就是转发等价类FEC(Forwarding Equivalence Class)。所谓“转发等价类”就是路由器按照同样方式对待的IP数据报的集合。

种均衡网络负载的做法也称为流量工程TE(Traffic Engineering)"或通信量工程。
MPLS首部的位置与格式
而IPv4数据报首部也没有多余的位置存放MPLS标签。这就需要使用一种封装技术:在把IP数据报封装成以太网帧之前,先要插入一个MPLS首部。从层次的角度看,MPLS首部就处在第二层和第三层之间(如图4-68所示)。在把加上MPLS首部的IP数据报封装成以太网帧时,以以太网的类型字段在单播的情况下设置为8847_16(下标16表示这是十六进制的数字),而在多播的情况下为8848_16这样,接收方可以用帧的类型来判决这个帧是携带了MPLS标签还是一个常规的IP数据报


==205==
软件定义网络SDN简介
SDN的概念最初由斯坦福大学N.McKeown于2009年首先提出。当时还只是在学术界进行探讨的一种新的网络体系结构。但随后几年发展很快,不少企业相继采用。
在SDN中,数据层面中的交换机是由控制层面进行控制的,这种控制是通过协议OpenFlow来实现的。协议OpenFlow是一个得到高度认可的标准.
可以把协议OpenFlow看成是在SDN体系结构中控制层面和数据层面之间的通信接口,它使得控制层面的控制器可以对数据层面中的物理设备或虚拟设备,进行直接访问和操纵。这种控制在逻辑上是集中式的,是基于流的控制。

==206==
实从OpenFlow交换机的角度来看,一个流就是穿过网络的一种分组序列,而在此序列中的分组都共享分组首部某些字段的值。

SDN真的万能.


DN体系结构的四个关键特征:
- 基于流的转发
- 数据层面与控制层面分离
- 位于数据层面交换机之外的网络控制功能。SDN中的控制层面是用软件实现的,而且软件是处在不同的机器上,并且可能还远离这些网络交换机
- 可编程的网络。通过在控制层面的一些网络控制应用程序,使整个网络成为可编程的。
参考
- 计算机网络(第八版)