网络层简介
网络层主要涉及到虚拟专用网络,IP地址与MAC地址的关系,IP地址的分类,划分子网,构造超网,路由选择协议的工作原理等内容 。
网络层提供的服务
网络层向上只提供简单灵活的,无连接的,尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接,每一个分组(IP数据报)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺,也就是说,网络层所传输的分组可能出错,丢失,重复和失序,当然也不保证分组交付的时限。
虚拟电路服务与数据报服务的对比:

网际协议IP
与IP协议配套使用的有三个协议:
- 地址解析协议ARP
- 网际控制报文协议ICMP
- 网际组管理协议

虚拟互联网络
将网络互联起来要使用一些中间设备:
- 物理层使用的中间设备叫转发器
- 数据链路层使用的中间设备叫网桥或桥接器
- IP层使用的中间设备叫路由器,路由器就是一台专用计算机,用来在互联网中进行分组转发和路由选择
- 在IP层以上使用的中间设备叫网关。用网关连接两个不兼容的系统需要在高层协议进行转换
TCP/IP为使得不同网络架构的网络能够互联,在IP层采用了标准化的IP协议,使用IP协议互联后的网络可以看作是一个虚拟互联网络,也即逻辑互联网络。
分类的IP地址
IP地址与硬件地址
地址解析协议ARP
IP数据报的格式
一个IP数据报由首部和数据两部分组成。IP数据报的格式如下:

IP 数据报首部的固定部分中的个字段
- 版本: 4 bit, IP协议的版本,通信双方使用的IP协议的版本必须一致。
- 首部长度: 4 bit,首部字段所表示的数的单位是32位字(4字节)。因此首部字段的最小值是5, 5x4=20字节(IP数据报首部固定长度),最大值是15, 15x4=60字节,即IP数据报首部最长为60字节。
- 区分服务: 8 bit, 用来获得更好的服务,该字段一致未被使用过。
- 总长度: 16 bit,首部和数据的总长度,单位为字节。因此数据报的最大长度为2^16 -1 =65535字节。如IP数据报的总长度超过数据链路层的MTU,则需要对IP数据报进行分片处理。IP协议规定因特网中所有的主机和路由器必须能够支持长度不超过576字节的数据报。576=512+60+4, 512是假定的上层传下来的数据的长度(512是合理的长度),60表示IP数据报首部的最大长度,4表示4字节的裕量。
- 标识: 16 bit, IP 软件在存储器中维持的一个计数器,每产生一个数据报,计数器就加1,并赋值给此字段。但这个标识并不是序号,因为IP是无连接服务,数据报不存在按序号接收问题。当数据报由于长度超过MAC 的MTU而必须分片时,这个标识字段的值就会被复制到所有的数据报片的标识字段中,相同标识字段的值使得分片后的数据报最后能正确的重装为原来的数据报。
- 标志: 3 bit,但目前只有两位有意义。MF(More Fragment )位,MF=1表示后面还有分片,MF=0表示后面无分片。 DF(Don’t Fragment) 位,DF=1表示不能分片,DF=0 表示允许分片。
- 位偏移: 13 bit, 片偏移指出:较长的分组在分片后,某片在原来分组中的相对位置。片偏移以8个字节位偏移单位。如下图数据报分片例子。
- 生存时间: 8 bit, 生存时间(TTL, Time to Live), 表明数据报在网络中的寿命,由发出数据报的源点设置这个字段,TTL的功能即为“跳数限制”,路由器在转发数据报之前就把TTL的值减1,若TTL的值减小到0,则丢弃这个数据报,不在转发。显然,数据报在网络中经过的路由器的最大值是255。若把TTL的值设为1,则表示次数据报只能在本局域网中传输。
- 协议: 8 bit, 协议字段指出数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交到哪个处理过程。常用的协议字段的值如下图。
- 首部校验和: 16bit, 只校验数据报的首部,不包括数据部分,不校验数据部分可以减少加计算的工作量。IP数据报首部校验和的计算过程如下。
- 源地址: 32bit, 源主机的IP地址
- 目的地址: 32bit, 目的主机的IP地址




IP 数据报首部的可变字段
IP数据报首部的可变部分是一个可选字段。可选字段用来支持排错,测量及安全等措施,内容丰富。
IP转发分组的流程

路由器的每个端口都对应有一个IP地址,并连接着一个网络,该网络有固定的网络地址。
IP分组装发流程:
(1)从数据报的首部提取目的主机的IP地址D, 得到目的网络地址N
(2) 若N就是与此路由器直接相连的某个网络地址,则进行直接交付,直接报数据报交付给目的主机(这里包括把目的主机地址D转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧),否则就间接交付,执行(3)
(3)若路由表中有目的地址D的特定路由,则把数据报传给路由表中所指明的下一跳路由器,否则执行(4)
(4)若路由表中有达到网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器,否则执行(5)
(5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器,否则执行(6)
(6)报告转发分组出错
注:路由器在转发分组时,IP数据报中的源IP地址和目的IP地址始终保持不变,而是在路由表中查询到下一跳IP地址后,利用ARP协议将这个IP地址转换成硬件地址并填入到MAC帧的相应字段。
路由表一开始是如何建立的,又是如何更新的?
划分子网和构造超网
划分子网
使用子网时的分组转发
无分类编址CIDR(构造超网)
网际控制报文协议ICMP
为了更有效的转发数据报和提高交付成功的机会。在网络层使用了ICMP协议,ICMP协议允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP报文的数据格式如下:

ICMP报文的种类
ICMP 报文分为差错报告报文和询问报文, 下表示常见的几种报文类型:

ICMP 差错报文共有5种:
- 终点不可达: 当路由器或主机不能交付数据报就向源点发送终点不可达报文
- 源点抑制: 当路由器或主机由于拥塞而丢弃数据时,就向源点发送源点抑制报文,使源点知道应该把数据报的发送速率放慢。
- 时间超过: 当路由器收到收到生存时间为0 的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片全部丢弃,并向源点发送时间超过报文。
- 参数问题: 当路由器或主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
- 改变路由(重定向): 路由器把改变路由报文发送给主机,让主机知道下次应该将数据报文发送给另外的路由器。
ICMP 差错报告报文 :
ICMP差错报告报文中的数据字段都具有相同的格式(如下图所示), 把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段,在加上相应的ICMP差错报告报文的前8个字节就构成了ICMP差错报告报文。提取收到的数据报的数据字段的前8个字节是为了得到传输层 的端口号(对于TCP和UDP), 以及传输层报文的序号(对于TCP), 这些信息对源点通知高层协议有重要作用。

ICMP 询问报文:
- 回送请求和回答: ICMP回送请求和回答报文是由主机或路由器向一个特定的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。
- 时间戳请求回答: ICMP时间戳请求报文是请求某个主机或路由器回答当前的日期和时间。32位字段,表示从1900年1月1日起到当前时刻一共有多少秒。
ICMP应用举例
分组网间探测 ping(Packet InterNet Groper),用来测试两个主机之间的连通性。
tracert 用来跟踪分组从源点到终点的路径。