零、 Network Layer Design Issues
在本章的讨论中,ISP提供的路由器组和用户自己配备的路由器共同参与构成整个网络层。路由器会存储它收到的packet,直到它发送完好并且校验和无误,之后再发送给下一个节点,如此反复直到到达目的地。
网络层向上为传输层提供接口,也即提供服务。
从ARPANET和IP协议起,无连接服务占领了互联网的主流
在网络层,无连接服务中,数据包packet被包装成了数据报(datagrams)。而面向连接服务则被称为建立了VC(virtual circuit,虚拟电路)。
他们的比较
一、 IP 协议
是无连接协议
单位是包/分组(packet)。
IPv4数据报包头的格式
上图是IPv4中包的header的结构图,其中的字段含义见下表
字段 | 长度(bit) | 含义 |
---|---|---|
version | 4 | v4或v6,可以实现IP版本变迁 |
IHL | 4 | 指示整个头部的长度,单位是32bit的字(可以从图中看出,最小的长度是5,显然最大值为15*32bit=60Byte) |
Differentiated services | 8 | (少数随时间推移改变含义的字段)目前高六位表示服务类型,地两位表示拥塞通知信息(congestion notification information) |
Total Length | 16 | 指示整个数据包(头部+data)的长度 |
Identification | 16 | 指DatagramID,是这个包所属datagram唯一的身份 |
DF,MF | 分别是1bit | 分别代表Dont Fragment(不要分段),More Fragment(要分段)(分段指将传输层的message分为数据报)。前者表示数据包会整个发送,要么接受,要么错误。MF在分段包除最后一个包都置位,显然分段包的最后一段这两个字段是00 |
Fragmen tOffset | 13 | 是FragmentID,message分成数据报时,不同段的偏移,其单位是8B(这也是比id少3位的原因) |
Time to live(TTL) | 8 | 是用于计算包生命周期的counter。在遇到每个hop时就会减1,到0的时候就会丢弃 |
protocol | 8 | 决定这个数据报用于传输层的协议类型,可以是TCP(值为6),UDP(值为17)等 |
header checksum | 16 | 给头部的校验和(方法是以2byte为单位不进位加和后取反码),应当注意到,因为至少有一个字段(ttl)在每个hop会变动,所以在每个节点,checksum都要重新计算(但可以用一些方法来加速计算过程) |
src/dest address | 均为32 | 指示这个包的源IP地址和目标IP地址 |
Option | 字长(32bit) | 做扩展用 |
IP地址
最基本的编址方法将IP地址分为网络号和主机号,下图是在这种编址方法下的地址分类:
可以看到,每种类别都是由前导字段决定的
A-C类是常用的单播地址,是最常用的,可以看到,network段越短,意味着网略越大,网络内的字主机越多。D类地址用于多播,E类地址保留后用。
网络号和主机号的一小部分是不能自由使用的,它们带有特殊用途:
(注意到最后一行只适用于A类网络)
IP地址与硬件地址的区别与联系
物理地址是数据链路层和物理层使用的地址,而IP是网络及以上层使用的逻辑地址,一下是3个层级封装数据的状况:
可以看到MAC地址和IP地址的使用范围。
在上图中,主机H1的数据经过2个路由器转发达到H2,其中的MAC地址方向应该有HA1->HA3,HA4->HA5,HA6->HA2,而IP的源地址和目的地址只有IP1->IP2,路由器只会根据destIP进行路由选择。
地址解析协议ARP[和逆地址解析协议RARP ]
ARP通过主机或路由器的IP地址找到其相应的物理地址,RARP通过物理地址找到主机或路由器的IP地址。但是目前DHCP协议包含了RARP的功能,所以后者不再被使用。而ARP仍然十分重要。
ARP解决IP地址对应硬件地址变化的改变是在主机中设置高速缓存(ARP cache),存储本局域网上各个主机和路由器的Map{K:IP地址,V:硬件地址}的映射表,它会经常动态更新。
而如果要更新或增删映射表,就需要以下过程
ARP运行的方式
- ARP进程在本局域网广播发送一个ARP请求分组,如下图(a),它声明自己的ip和mac地址,并执目标ip地址寻找目标mac地址
- 本局域网所有主机都会收到此ARP请求分组,而目标主机B在请求中看到了自己的IP地址,就向A发送ARP相应分组,并写入自己的硬件地址,这一相应分组是普通的单播。注意到,为了减少通信量,主机B也会将A的mac地址写在其本身的映射表中
- A主机收到ARP相应分组后,就更新其映射表。
ARP高速缓存有着较小的生存时间(10-20min),这是为了防止目标主机更换网络硬件,但源主机却没有更新ARP缓存表的情况的时常发生。
ARP使用的四种经典情况:
要明晰:使用IP地址而非硬件地址在网络上通信的原因:
全世界各种复杂的网络设备可能使用不同类型的硬件地址,使用硬件地址需要复杂的地址转换,但统一的ip地址可以解决这样的麻烦。另外,MAC地址是存在重复的可能的
IP层转发分组的流程
如图,四个A类网络通过3个router互联。如果直接根据IP地址互联的话,每个路由器的路由表就要存储四个网络中每台主机的IP地址,这是一个很大的数字;然而可以存储目标IP所在的网络,这样路由表只需要存储所在网络网络地址(即IP地址的前半段),转发的逻辑如上表,如果需要转发给其他路由器,就通过拓扑结构和一系列的算法计算得到。而如果需要转发给连接到路由器本身的网络,就可以直接交付给对应的接口。之后,在LAN内部使用ARP即可。
这样,一个大的LAN就可以在网络拓扑中被简化为一个节点。
路由表和路由方式
在路由表中,最重要的路由信息是以下键值对:
{K(目的网络地址):V(下一次跳转地址)}
大多数情况下,允许对特定的目的主机指明一个路由,这种路由叫做特定主机路由。它可为网络测试提供方便。
另外,路由器还可以采用默认路由(default route) 的方法减少路由表的时空间复杂度,这事实上对对外网络链接很少的路由器很有用。除了一些特殊的路径,可以把大量目标不同但出路单一的目标地址归于使用默认路由。默认路由实际在路由表中被标为0.0.0.0。
广播地址与子网掩码
先确定主机地址,主机地址部分对应的子网掩码全1的才是广播地址,否则是单一地址。而主机部分全0也不能使用(这是个表示网络本身的主机含义,不能分配给任何计算机)。
自己的话:主机地址部分中对应子网掩码为1的部分是子网网络号,剩下的才是真正的主机地址
主机地址中往往全1和全0都要去掉?
区分题目中的地址和可用地址(这里就要减去2个)
是相对原始的IP地址状态
掩码一开始的目的是扩展子网,后来是表示多看的位数? 掩码都是主机/router自己配的
子网掩码的快速表示方法
128.208.0.0/18:IP地址+斜杠+子网掩码的长度。
VLSM:可变长子网掩码
二、路由器和路由表
路由表一行有三个值:destination(目标地址),subnet mask(子网掩码)和next hop。
当匹配到了dest+mask之后,应该跳向对应的next hop
如果匹配不上,就发给默认路由,如果没有默认路由,则这个转发就不可达(unreachable)。
一般路由表只放一段dest
940.33(30/1.72)
动态主机配置协议 DHCP
用于给主机动态地分配IP地址,提供了额即插即用联网的机制,基于UDP
总体步骤:接入网络的客户机广播DHCP发现信息,DHCP服务器接受后广播DHCP提供信息,需要IP地址的客户机广播DHCP请求信息,服务器分配后广播DHCP确认信息,将IP地址分配给客户机。
这一切都是建立在UDP广播,因为此时客户机和服务器互相不知道对方的IP地址9999999
333
因特网网际控制报文协议ICMP
因特网的路由选择协议
因特网采用动态的,分布式、分层次的路由选择协议。
因特网将互联网划分为许多较小的自治系统(autonomous system,AS)。因此路由选择协议可分为AS内部的内部网关协议(IGP)和跨AS的外部网关协议(EGP)。
- IGP:主要是RIP(Routing Information Protocol)和OSPF
- EGP:目前使用的是BGP-4
路由信息协议RIP
1.工作原理
是一种分布式的基于距离向量的路由选择协议,最大优点就是简单
RIP要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录(这是一组距离,被称为距离向量),而距离定义如下:
- 从路由器直接连接的网络距离为1
- 从路由器到非直接连接的网络距离定义为所经过的路由器数量+1(对应第一条,不包括自身),这一距离也称跳数(hop count)。距离大于等于16时将不可达,所以RIP只适用于小型互联网
显然,RIP不能在两个网络之间同时使用多跳路由,它会选择一条具有最少路由器的路由
它的特点是:
-
仅仅和相邻路由器交换信息
-
交换的信息是路由器知道的全部信息,即路由表+距离向量,每个entry有以下信息
-
按固定时间间隔交换路由信息
2.距离向量算法
对每一个相邻路由器发来的RIP报文,进行以下步骤:
- 对地址为X的相邻router发来的RIP报文,先修改其所有entry:“下一跳”字段改为X,“距离”+1,”目的网络不变
- 对修改后的每个entry做以下操作:
if(原路由表无N){
把改entry加到路由表中
}
else{
if(下一跳是X){替换原表项}
else{
if(项中d小于当前的d){更新当前d}
else{什么也不做}
}
}
- 若三分钟还没有收到相邻路由器的更新路由表,则将其标记为不可达路由器(d=16)
- 结束
3. RIP报文格式
4. 特点
好消息传得快,话消息传的慢
OSPF
1. 基本原理
- 邻居表:记录所有建立邻居关系的router,包括相关描述和邻居状态。会定期的相互发送hello报文来维护,若在一定的周期内没有收到领居回应的hello报文,则认为邻居路由器失效,将它从邻居表中删除
- 链路状态数据库表(LSDB):此表里包含了网络拓扑中链路状态的通告。每台路由器在同一个区域内LSDB表一样
- 路由表
路由器间组播
详细内容
指派路由器(DR)和备份指派路由器(BDR)
为了避免路由器之间建立完全相邻关系而引起的大量开销,OSPF要求在区域中选举一个DR。每个路由器都与之建立完全相邻关系。DR负责收集所有的链路状态信息,并发布给其他路由器。选举DR的同时也选举出一个BDR,在DR失效的时候,BDR担负起DR的职责。
区域
OSPF协议引入“分层路由”的概念,将网络分割成一个“主干”连接的一组相互独立的部分,这些相互独立的部分被称为“区域”(Area),“主干”的部分称为“主干区域”,是区域0。
外部网关协议BGP
目前使用的是BGP-4,简称BGP,它是不同AS的路由器之间交换路由信息的协议
AS的庞大数量以及AS之间非常大的差异性决定了AS之间的路由选择协议和AS内的路由选择协议不尽相同。另外,AS之间的路由选择必须考虑有关策略,比如,网络差异使最小跳数不是最优解;某些AS处于商业或者安全原因需要某些路由通过或不通过它;
BGP配置特点
每个AS管理员至少选择一个路由器作为AS的“BGP发言人”。它往往是边界路由器
如果BGP发言人要与其他发言人交换路由信息,就要先建立TCP连接(端口号为179),软和在此链接上交换BGP报文来建立BGP回话,此时两个发言人彼此成为了对方的neighbor或peer。
BGP采用路径向量路由选择协议,与距离向量和链路状态协议有很大差别。
显然,BGO发言人必须运行AS内的协议(OSPF或RIP)。
BGP通信方法
BGP协议交换路由信息的结点数量级是自制系统AS数的量级,AS数要比网络数少很多。所以关键就是寻找好的BGP发言人链路。而一个AS内的发言人往往很少,这使得AS的;路由选择不至于过分复杂。
BGP刚开始时,neighbor交换整个路由表,之后仅仅交换有变化的部分
路由算法
distance vector
所有节点都定期将他们的整个路由选择表传送给所有与之直接相邻的结点,其包括:
- 每条路径的目的地
- 路径的代价(/或距离)
当获得新路由,或选择表中的表项有比自己对应的表项距离短的路由,就更新
link state(OSPF)
要求每个参与算法的结点都具有完全的网络拓扑信息,并执行两项任务:
- 主动测试所有邻接节点的状态
- 定期将链路状态传播给所有其他节点
每当链路状态报文到达,路由节点使用这些状态信息更新自己的网络拓扑和状态“视野图”。状态变化时重新计算最小路径
衡量路径距离的标准有费用、距离、时延、带宽等