网络层——ICMP协议

举例来讲,一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否通畅;但是IP协议并不提供可靠传输,所以IP协议并不会通知传输层是否丢包及丢包的原因。所以才有了ICMP协议的存在。

ICMP协议即Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机与路由器间传递控制消息。这里的控制消息指的是:网络是否通畅、主机是否可达、路由是否可用等网络本身的消息。

1.ICMP功能

(1)确认IP包是否成功到达目的地址

(2)通知在发送过程中IP包被丢弃的原因

(3)它是基于IP协议工作的,但并不是传输层的功能,所以把它归结为网络层协议

(4)ICMP只能搭配IPv4使用,若是IPv6,则需要用ICMPv6

2.ICMP报文格式

ICMP大概分为两类报文:

(1)通知出错原因

(2)用于诊断查询

ICMP常用类型如下表:

3. ping命令

(1)ping + IP地址,可以连接同局域网下的主机

(2)ping + 域名,比如ping+www.baidu.com,就可以与百度连接,得到百度的一个应答报文。这里与ping+IP地址类似,因为一个域名可以通过DNS解析为IP地址

(3)ping命令不仅可以检验网络的验证性,同时也会统计响应时间和TTL(生存周期)

(4)对端收到之后,会返回一个ICMP回送应答(Echo Reply)

要注意的是:telnet是23端口,ssh是22端口,ping不关心端口号。因为ping命令基于ICMP协议,是网络层的内容,而端口号则是传输层的内容

4.traceroute命令

该命令也是基于ICMP协议实现的,它可以打印出可执行程序主机到目的主机之间经过的所有路由器。见下图(这里只截取了一部分图)