网络层主要讨论的是多个异构的网络通过路由器互联成互联网的各种问题,主要包括IP协议、IP地址与物理地址关系、路由选择协议及NAT等内容。

网络层不提供服务质量的承诺

网络层向传输层提供服务,在发送分组时不需要先建立联接,每一个分组(IP数据报)独立分组,但是网络层不提供服务质量的承诺,也就是说传送的分组数据可能会出错、丢失和失序等问题,而可靠交付的任务则交给了传输层在端系统中完成。在传统的电信网络通信中,由于端系统构造简单,必须由网络负责信号交付的可靠性,因此采用面向连接的通信方式,在通信前必须建立一条专用的通信链路(虚电路)保证双方通信所需的一切资源。然而在计算机通信中这样的方式并不可行,一方面如果任意两个端系统都需要建立专用链接会使得路由器构造复杂、网络造价过于昂贵;另外计算机通信的终端都具备很强的计算能力,可在端系统中进行复杂的差错处理工作。

IP网际协议

虚拟互联网络

TCP/IP协议在网络层采用了标准化的协议(IP协议),但是相互连接的网络可以是异构的,即不同的网络内部可以采用不同数据链路协议和物理设备,换句话说所有想接入互联网的网络都需要遵守IP协议。

IP地址的编址方法

  • 分类的IP地址
    最早也是最基本的编址方法,也就是平常所说的A、B、C、D(多播地址)、E(保留使用)的IP地址分法,每种地址都由固定长度的网络号和主机号组成。这样的分类不够灵活造成大量的IP地址浪费,随着CIDR(无分类编制方法)的出现和广泛应用,这种分类方法已经成为历史

  • 子网的划分
    第一种编制方法将IP固定为网络号+主机号两级,这样IP地址空间的利用率很低。如果利用子网掩码将主机号借用几位作为子网号,主机位剩余位数作为子网的主机位,这样就可以使两级地址变为三级地址,即

    IP地址 ::= {<网络号>,<子网号>,<主机号>}

可以看出与第一种分类最大的区别就是子网掩码的长度是灵活的。因特网规定所有的网络都必须有子网掩码,如果一个网络如果不划分子网则会使用默认的子网掩码[A类(255.0.0.0)、B类(255.255.0.0)和C类(255.255.255.0)]。值得注意的是划分子网增加了灵活性,但减少了能够连接在网络上的主机总数(减少的不多,显然利大于弊)。

  • 无分类编址CIDR(无类别域间路由)
    由于IP地址愈发紧缺及主干网路由表的项目数急剧增长,需要一种利用率更高的编制方法,于是就有了CIDR编址,CIDR可以根据用户的需要分配适当大小的CIDR块。其结构如下所示

    IP地址 ::= {<网络前缀>,<主机号>}

网络前缀相同的连续的IP地址组成一个“CIDR地址块”,知道地址块中的任何一个地址就可以知道这个地址块的IP段及主机数。例如已知128.14.35.7/20是某CIDR地址块中的一个地址,则将其转换为二进制:10000000 00001110 00100011 00000111,加粗的前20为是网络前缀,将剩余的12位全置0和置1即可得到改地址块的最小地址和最大地址,很显然改地址块有212个。

IP地址与硬件地址

IP地址放在IP数据报的首部,硬件地址放在MAC帧的首部。在网络层及网络层以上使用的是IP地址,而在数据链路层及以下则使用硬件地址。当IP数据报被放入MAC帧时就变成了MAC帧的数据部分,因此在数据链路层看不到数据报的IP地址。另外需要注意:
1,在IP层抽象的互联网上只能看到IP数据报,不过中间经过多少次转发,数据报中的源地址和目的地址始终不变,中间经过的那些路由器的IP并不会出现在数据报的首部。
2,源IP地址只在TCP三次握手的过程中使用,传输过程中路由器只根据目的IP地址的网络号进行路由选择。
3,在局域网的链路层只能看见MAC帧,并且在路由转发的过程中MAC帧的源MAC地址和目的MAC地址是不断发生变化的。
4,IP层抽象的互联网配屏蔽了不同硬件地址体系的构成的局域网的异构性,从而使得我们在网络层上讨论问题时,能够使用统一的、抽象的IP地址研究主机与主机或路由器之间的通信。

IP到MAC地址的映射是通过ARP协议实现的,每一个主机都设有一个ARP高速缓存,里面存放的是本局域网上各主机及路由器的IP地址到硬件地址的映射,并动态的更新维护映射关系。

网际控制报文协议(ICMP)

ICMP协议是提高IP数据报成功交付的一种措施,它允许主机或路由器报告差错和异常信息,ICMP报文是装载IP数据报中作为其中的数据部分,仍然属于IP层的协议。ICMP的一个重要应用即是我们经常使用的PING(Packet InterNet Groper)工具,用来测试两个主机之间的连通性。PING使用了ICMP回送请求与回送回答报文。另外tracert命令也是利用一连串不同生存时间值的ICMP请求实现。

路由表结构及转发分组流程

路由器转发分组最主要的就是根据目的IP地址的网络号找到下一跳路由或主机的IP地址,因此一个简单的路由表结构示意如下所示,由于需要知道目的IP的网络地址,因此路由表中子网掩码也是不可或缺的。

(目的网络地址,下一跳地址)

具体的分组转发流程如下:
1,根据数据报首部提取目的IP地址及子网掩码计算得到目的网络地址N
2,若N与此路由在同一网络则直接交付,否则执行3
3,若路由表中有目的地址D的特定主机路由,则转发至表中指明的下一跳路由器。否则执行4
4,如果路由表有到达N的路由记录则转发,否则执行5
5,若路由表有一个默认路由则转发,否则执行6
6,转发失败,报告错误

VPN&NAT未完待续。。。