网络层主要实现网络互联,让数据包在各网络之间传输。
主要解决的问题:
- 向运输层提供可靠或不可靠传输服务
- 网络层寻址问题
- 路由选择问题
因特网使用TCP/IP协议栈,其中网络层使用网际协议IP,因此因特网中网络层也通常称为网际层。
网络层提供的两种服务
面向连接的虚电路服务:可靠通信通过网络来保证,通信时建立网络层连接虚电路VC,双方沿着虚电路发送分组。目的主机的地址只在建立连接时使用,之后通过分组首部所携带的虚电路编号,使用可靠通信的网络传输协议进行通信。通信结束后释放虚电路。
无连接的数据报服务:可靠通信由用户主机保证,不建立网络连接,每个分组可走不同的路径,每个分组首部都需携带目的主机完整地址,分组可能发生误码、丢失、重复、失序等问题。因特网使用这种将复杂的网络处理功能置于因特网的边缘(用户主机和运输层),而将尽最大努力的分组交互功能置于因特网中心的思想。
IPv4地址
IPv4地址,即因特网上的每一个主机或路由器的每一个接口分配到的一个全世界范围内唯一的32bit的标识符。
IP地址由因特网名字和数字分配机构ICANN分配。2011年2月3日,IPv4地址已被宣布分配完毕。我国也已逐步停止向新用户和应用分配IPv4地址,全面开展商用部署IPv6。
编址方法:分类编址(1981)→划分子网(1985)→无分类编址(1993)
表示方法:点分十进制表示法,即8个bit为1组转为十进制表示,中间用·分隔。
分离编址的IPv4地址
地址类型 | 网络号位数:主机号位数 | 前n位格式 | 前8位范围 | 可指派的网络数量 | 每个网络中可分配的IP地址数量 |
A类 | 8:24 | 0 | 0-127 | 126(27-2) | 16777214(224-2) |
B类 | 16:16 | 10 | 128-191 | 16384(214) | 65534(216-2) |
C类 | 24:8 | 110 | 192-223 | 2097152(221) | 254(28-2) |
D类 | 多播地址 | 1110 | |||
E类 | 保留为今后使用 | 1111 |
只有A、B、C类地址可分配给网络上主机的各接口。主机号为全0的地址为网络地址,全1的地址为广播地址,不可分配。
对于A类网络,00000000保留,不指派;01111111为本地环回测试地址,不指派。
划分子网的IPv4地址
子网掩码:将主机号位置中部分位数用于子网号,则子网掩码用连续1表示网络号+子网号所用位数,用连续0表示主机号所用位数。将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址。A类地址默认为255.0.0.0,B类为255.255.0.0,C类为255.255.255.0;
每个子网都有其独立的网络地址和广播地址,每取n位作为子网号,便可划分出2n个子网,每个子网会多出两个不可指派的IP地址。
无分类编址的IPv4地址
无分类域间路由选择CIDR:使用斜线记法,在IPv4地址后加上斜线/,写上网络前缀所占的比特数,将网络前缀都相同的连续IP地址组成一个CIDR地址块。
我们可通过地址块中任何一个地址,知道该地址块中的最小、最大地址,地址数量,其中某类网络的数量以及地址掩码(也可继续称子网掩码)。
例:148.12.35.7/20:128.14.0010|0011.00000111,其中前20位为网络前缀,后12位为主机号,最小地址为128.14.0010|0000.00000000→128.14.32.0,最大地址为128.14.0010|1111.11111111→128.14.47.255,地址数量为232-20个,聚合C类网232-20-8个,子网掩码11111111.11111111.11110000.00000000→255.255.240.0。
路由聚合(构造超网):路由表接收到多个IP地址时,将这些地址的最长前缀存储成新的地址块。网络前缀越长、地址块越小、路由越具体。
最长前缀匹配:路由器查表时有多条路由可选时,选择网络前缀最长的那条。
IPv4地址的应用规划
定长的子网掩码FLXM:使用同一个子网掩码划分子网,易导致浪费。
变长的子网掩码VLXM:使用不同的子网掩码划分子网,尽可能减少浪费。每个子块的起点位置不能随意选取,而需要是块大小整数倍的地址。一般先给网络地址需求大的地址块分配子网。
网络地址需求=主机地址+路由器地址+广播地址(1个)+网络地址(1个)。
IP数据报的发送和转发过程
主机发送IP数据报:
1、将目标地址与自己的子网掩码做与运算,获得目标地址网络,判断是直接交付还是间接交付。
2、若间接交付,则传输给主机的默认网关(与其相连的路由器地址),由默认网关将其转发。
路由器转发IP数据报:
1、检查IP数据报首部是否出错,若出错则丢弃并通知原主机。
2、根据IP数据报目的地址在路由表中查找匹配的条目,若找到匹配条目,则转发给条目中的下一跳。否则丢弃并通知原主机。
静态路由配置:
默认路由:0.0.0.0/0,子网掩码0.0.0.0,静态;特定主机路由:特定主机IP地址/32,子网掩码255.255.255.255,静态。
路由环路问题:由于配置错误、聚合了不存在的网络、网络故障等原因导致路由环路,因此IP数据报中设有生存时间TTL字段,每次转发-1,若结果不等于0则转发,否则被丢弃。
黑洞路由:路由表中为聚合网络中不存在的网络配置的静态路由,下一跳为null0。
路由选择协议
静态路由选择:人工配置、简单、开销小、只在小规模网络中使用。
动态路由选择:通过路由选择协议、在大规模网络中使用。因特网所采用的路由选择协议具有自适应、分布式、分层次三个特点。
常见的路由选择协议:
路由器的基本结构:
路由信息协议RIP
自治系统AS内每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录,称为距离向量,到直连网络为1,到非直连为经过的路由器数+1,最多15,16即为不可达。若有多条路由距离相等,可以进行等价负载均衡。
路由器仅和相邻路由器周期性交换自己的路由表,若干次交换和更新后,每个路由器都知道到达本AS内各网络的最短路径和下一跳地址,称为收敛。
交换时先将距离+1发送、再按以下规则更新条目:
- 发现新的网络、添加
- 到达目的网络、相同下一跳、为最新消息、更新
- 到达目的网络、不同下一跳、新路由优势、更新
- 到达目的网络、不同下一跳、新路由劣势、不更新
- 到达目的网络、不同下一跳、新路由均势、等价负载均衡
存在路由环路或距离无穷计数问题,采取限制最大路径、触发更新(发生变化立即更新)、水平分割(记录收到端口,不让同一信息反方向传送)等方式解决。
开放最短路径优先OSPF
边界网关协议BGP
IP数据报的首部格式
版本:占4比特,表示IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4,即IPv4。
首部长度:占4比特,表示IP数据报首部的长度。该字段的取值以4字节为单位。最小十进制取值为5,表示IP数据报首部只有20字节固定部分;最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分。
可选字段:长度从1个字节到40个字节不等,用来支持排错、测量及安全等措施。可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度可变,增加了每一个路由器处理IP数据报的开销。实际上可选字段很少被使用。
填充字段:确保首部长度为4字节的整数倍,使用全0进行填充。
区分服务:占8比特,用来获得更好的服务,利用该字段的不同数值可提供不同等级的服务质量。只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。
总长度:占16比特,表示IP数据报的总长度(首部+数据载荷)。最大取值为十进制的65535,以字节为单位。
标识:占16比特,属于同一个数据报的各分片数据报应该具有相同的标识。IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将此值赋给标识字段。
标志:占3比特,各比特含义如下:DF位:1表示不允许分片,0表示允许分片;MF位:1表示”后面还有分片” ;,0表示”这是最后一个分片” ;保留位:必须为0。
片偏移:占13比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。片偏移以8个字节为单位。
生存时间TTL:占8比特,表示IP数据报的生存时间。最初以秒为单位,最大生存周期为255秒;路由器转发IP数据报时,将IP数据报首部中的该字段的值减去IP数据报在本路由器上所耗费的时间,若不为0就转发,否则就丢弃。现在以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。
协议:占8比特,指明IPv4数据报的数据部分是何种协议数据单元。常用的一些协议和相应的协议字段值如下。
协议名称 | ICMP | IGMP | TCP | UDP | IPv6 | OSPF |
协议字段值 | 1 | 2 | 6 | 17 | 41 | 89 |
首部检验和:占16比特,用来检测首部在传输过程中是否出现差错,称为因特网检验和。由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部校验和,从而更快转发IP数据报。
源IP地址和目的IP地址:各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址。
网际报文控制协议ICMP
虚拟专用网VPN与网络地址转化NAT
虚拟专用网VPN:利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。由于IPv4地址的紧缺,一个机构能够申请到的IPv4地址数量往往远小于本机构所拥有的主机数量。因此虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要申请的、在因特网上使用的公有地址。可使用的私有地址如下:
- 10.0.0.0~10.255.255.255(10/8)
- 172.16.0.0~172.31.255.255(172.16/12)
- 192.168.0.0~192.168.255.255(192.168/16)
同一机构内不同部门的内部网络所构成的虚拟专用网VPN又称为内联网VPN。VPN要保证传输数据的安全性,会将原始的内部数据报进行加密,然后再将其封装成为在因特网上发送到的外部数据报。有时一个机构的VPN需要有某些外部机构参加进来。这样的VPN就称为外联网VPN。在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,即可访问专用网络中的资源。这种VPN称为远程接入VPN。
网络地址转换NAT:使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。
由于绝大多数的网络应用都是使用运输层协议TCP或UDP来传送数据,因此可以利用运输层的端口号和IP地址一起进行转换。这样,用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信,这种将端口号和IP地址一起进行转换的技术叫作网络地址与端口号转换NAPT。
对于一些P2P网络应用,需要外网主机主动与内网主机进行通信,在通过NAT时会遇到问题,需要网络应用自己使用一些特殊的NAT穿越技术来解决问题。NAT对外网屏蔽了内网主机的网络地址,这也能够为内网地址提供保护。