网络层主要的任务是实现网络互连,进而实现数据包在各网络之间的传输。一个消息报文,是如何在网络层通过源ip发送至目标ip的。为了搞清楚网络层的ip协议,我们需要先了解以下问题:
1、网络层向运输层提供怎样的服务(可靠传输还是不可靠传输)
2、网络寻址问题
3、路由选择问题
网络层提供的服务
面向连接的虚电路服务
虚电路服务需要在网络层建立连接,在网络层级别就保证通信的可靠性,确保分组不丢失不重复。在双方通信前,需要建立虚电路的逻辑连接,双方沿着已经建立的虚电路发送分组,每次传递消息,只需要指明虚电路的编号,通信结束后,需要释放之前建立的虚电路。

很多广域分组交换网都使用面向连接的虚电路服务。例如,曾经的X.25和逐渐过时的帧中继FR、异步传输模式ATM等。
无连接的数据报服务
在该模式下,不需要建立网络层的连接,也不保证可靠通信(分组可能丢失,乱序),所有的数据分组可以通过不同的路径达到目标主机。

由于网络层不保证连接和可靠性,所有的这些都需要由上层来保证。
因特网采用了这种设计思想,也就是将复杂的网络处理功能置于因特网的边缘(用户主机和其内部的传输层),而将相对简单的尽最大努力的分组交付功能置于因特网核心。
网络寻址
在五层体系下,ip是网络层最基本的协议。ip就相当于互联网中的一个门牌号,它具有唯一性,有了ip地址,我们就能区别于接入互联网的所有主机。进行端到端之间的通信。
IPv4地址就是给因特网(Internet), 上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符。
IPv4地址的编址方法经历了如下三个历史阶段:


分类编址

ipv4网络被分成五类,由网络号和主机号组成。当一个公司需要申请接入网络,会根据公司内需要接入网络的主机数量,选择申请A类地址或者B、C类地址。
主机号位数对应的组合数,为网络中可分配的主机数量(排除全0和全1)。
随着公司的发展壮大,出现了好多子公司。公司想再申请一个网络号,需要等待很久,还需要额外的费用。但是公司原来的主机号24位,还能容纳很多新接入的主机。是不是能从主机号借出几位来,切分出多个网络呢?
划分子网
当一个网络号需要从主机号借出几位,来进行网络号的再划分。于是子网掩码的概念就出现了。


比如C类网络子网掩码默认255.255.255.0,我们需要从主机号划出一位做子网号,那么子网掩码就是255.255.255.128,能划分出两个子网。每个子网可分配的主机就少了,变成了126。

无分类编址
由于划分子网仍然会产生地址的浪费,于是英特网工程组采用了更先进的无分类路由选择CIDR(Classless Inter-Domain Routing),废弃了ABC类分类和子网掩码,让网络号的划分变得更加灵活。

路由选择
有了ip地址,相当于网络中,每台接入的主机有了门牌号。但是邮递员在每家每户间派发信件,有这么多个叉路该选择哪条道路呢?

这里有一个路由表的概念,每个路由器,都会维护一张路由表,数据经过路由器,路由器会解封装数据报,读取目标ip,并且比对路由表,需要从哪个端口进行转发。

那么路由表又是怎么来的呢?
静态路由配置
路由表可以通过网络管理员静态配置,该方案只适用于小规模网络。改方案不能快速的响应新的网络结构以及关系的变化,并且配置错误还有可能导致环路的问题。
动态路由配置
整个因特网被划分为许多较小的自治系统AS(Autonomous System)

我们需要着重关心的,就是自治系统内部的路由表,是如何自动生成的。
RIP
路由信息协议**RIP(Routing Information Protocol)**是内部网关协议IGP中最先得到广泛使用的协议。
RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。
路由器到直连网络的距离定义为1。 路由器到非直连网络的距离定义为所经过的路由器数加1。 允许一条路径最多只能包含15个路由器。“距离”等于1 6时相当于不可达。
因此,RIP只适用于小型互联网。
RIP的基本工作过程
①路由器刚开始工作时,只知道自己到直连网络的距离为1.
②每个路由器仅和相邻路由器周期性地交换并更新路由信
③若干次交换和更新后,每个路由器都知道到达本AS内各网络的最短距离和下一跳地址,称为收敛。

RIP认为最好的路由就是跳数最少的路由,不会考虑到网络的带宽和时延。
OSPF
开放最短路径优先OSPF(Open Shortest Path First),是为克服RIP的缺点在1989年开发出来的。
OSPF是基于链路状态的,而不像RIP那样是基于距离向量的。 OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路。 OSPF不限制网络规模,更新效率高,收敛速度快。
链路状态是指本路由器都和哪些路由器相邻,以及相应链路的“代价”(cost)。"代价"用来表示费用、距离、时延、带宽,等等。这些都由网络管理人员来决定。
基本工作原理:
使用OSPF的每个路由器都会产生链路状态通告LSA(Link State Advertisement)。LSA中包含以下内容:
直连网络的链路状态信息 邻居路由器的链路状态信息 LSA被封装在链路状态更新分组LSU中,采用洪泛法发送。

使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA,形成带权有向图,采用基于Dijkstra的SPF算法算出最短路径。

数据报
ip数据报的头部组成如下:

其中黄色部分用于分片,为什么要分片?由于链路层以太网规定了最大的传输单元MTU1500字节,ip数据超出的部分需要进行分片。
生存时间:防止数据报在网络中迷路,或者形成环路。每经过一跳路由器TTL减一,为0就丢弃该数据报。
校验和:网络层ip协议不提供可靠传输,校验和只是用于首部数据的校验,防止首部传输出错的情况下。由于首部生存时间会一直变,每个路由器都得重新生成新的校验和,很耗时。IPV6中不再计算首部校验和。
网际控制报文协议ICMP
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议**ICMP(Internet Control Message Protocol)**。主机或路由器使用ICMP来发送差错报告报文和询问报文。ICMP报文被封装在IP数据报中发送。
ICMP差错报告报文:
终点不可达 源点抑制 时间超过 参数问题 改变路由(重定向)
ICMP询问报文:
回送请求和回答 时间戳请求和回答
来看看ICMP报文的应用
PING

用来测试主机或路由器间的连通性 应用层直接使用网际层的ICMP (没有通过运输层的TCP或UDP) 使用ICMP回送请求和回答报文
TRACERT
用来测试IP数据报从源主机到达目的主机要经过哪些路由器 使用了ICMP回送请求和回答报文以及差错报告报文
原理是,通过不断的发送TTL从1开始一直增加到2,3,4一直到请求到目标主机为止。这样路径上每一跳的路由器都会返回TTL耗尽的差错报告报文。这样就能知道联通路径上的所有路由器了。





