网络层概述
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。
要实现网络层任务,需要解决以下主要问题:
-
网络层向运输层提供怎样的服务(“可靠传输”还是“不可靠传输”)
-
网络层寻址问题
-
路由选择问题
因特网(Internet)是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈。
由于TCP/IP协议栈的网络层使用网际协议IP,它是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常称为网际层。
综上所述,我们通过学习TCP/IP协议栈的网际层来学习网络层的理论知识和实践技术。
网际控制报文协议ICMP
为了更有效地转发lP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)。
主机或路由器使用ICMP来发送差错报告报文和询问报文。
ICMP报文被封装在IP数据报中发送。
ICMP差错报告报文共有以下五种:
-
终点不可达
-
源点抑制
-
时间超过
-
参数问题
-
改变路由(重定向)
1.终点不可达
当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。
具体可再根据ICMP的代码字段细分为目的网络不可达目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种错误。
2.源点抑制
当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
3.时间超过
当路由器收到一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段的值减1。 若结果不为0,则将该IP数据报转发出去;若结果为O,除丢弃该IP数据报外,还要向源点发送时间超过报文。 另外,当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文。
4.参数问题
当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码就丢弃该数据报,并向源点发送参数问题报文。
5.改变路由(重定向)
路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
以下情况不应发送ICMP差错报告报文:
-
对ICMP差错报告报文不再发送ICMP差错报告报文
-
对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
-
对具有多播地址的数报都不发送ICMP差错报告报文
-
对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
常用的ICMP询问报文有以下两种:
-
回送请求和回答 ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达及了解其有关状态。
-
时间戳请求和回答 ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。这种询问报文用来进行时钟同步和测量时间。
ICMP应用举例
1.分组网间探测PING(Packet InterNet Groper)
-
用来测试主机或路由器间的连通性
-
应用层直接使用网际层的ICMP(没有通过运输层的TCP或UDP)
-
使用ICMP回送请求和回答报文
就是ping
2.跟踪路由traceroute
-
用来测试IP数据报从源主机到达目的主机要经过哪些路由器
-
Windows版本 tracert命令 应用层直接使用网际层ICMP 使用了ICMP回送请求和回答报文以及差错报告报文
-
Unix版本 traceroute命令 在运输层使用UDP协议 仅使用ICMP差错报告报文
跟踪路由traceroute原理
主机依次发送TTL=1、2、3、4…的回送请求报文(1个1个发,当接收到ICMP差错报告后再发下一个)
经过路由依次丢弃IP数据报并给源主机发送ICMP差错报告(时间超过)
当到达目的主机时,目的主机向源主机发送ICMP回送请求的回答报文,源主机就知道到达终点,停止发送回送请求报文。