保证网络层能够正常工作的三个机制:
1.IP协议
封装datagram;
端对端hop to hop传输。
2.转发表
通过算法更新路由中的转发表。
3.互联网报文控制协议ICMP(Internet Control Message Protocol)
在终端与路由之间传递网络层信息;
报告出现的问题反馈;
帮助诊断问题。
ICMP详解:
概念:
ICMP协议是在网络层之上的,也就是说严格意义上来说它是属于传输层的。当路由想要报告一个错误并返回给源发送者时,它会将源数据封装进ICMP payload,并传输到网络层,形成datagram之后发送给源发送者。比如当一条以太网帧TTL过期,也就是认为该帧陷入了循环,就会产生ICMP消息。并且ICMP消息是不可靠的,有点类似于UDP。
产生过程:
下面是一个ICMP包产生的过程,最上面一条是出现错误的原始IP报文,它会将原始报文的首部及DATA部的前8byte内容封装到ICMP message中,前面添加TYPE及CODE之后封装到一条新的IP报文中,添加IP首部,源地址为当前路由IP,目标地址为原始报文发送者IP。发送回去。
可能导致ICMP消息产生的原因及对应TYPE、CODE:
ICMP Type | ICMP Code | Description |
0 | 0 | Echo Reply (used by ping) |
3 | 0 | Destination Network Unreachable |
3 | 1 | Destination Host Unreachable |
3 | 3 | Destination Port Unreachable |
8 | 0 | Echo Request (used by ping) |
11 | 0 | TTL Expired (used by traceroute) |
其中ping利用ICMP的机制如下图:
traceroute也是利用里ICMP,我们可以在terminal用traceroute查看一个请求经过的所有的路由,工作机制如下图:host A依次发送TTL=1,2,...的UDP协议消息,这样依次第1,2,...个路由器会返回ICMP消息,这样就知道了各个路由的信息。同时这些消息会包含一个错误的端口号,当到达host B时,host B会返回port UNreachable的ICMP消息,这样就获得host B的信息。