# 面试题丨网络层

# 1. IP 协议报文的组成成分

# 2. ICMP

ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。

# 3. Ping 原理

PING 使用了 ICMP 的回显请求报文与回显应答报文。

PING 是应用层直接使用网络层 ICMP 的例子, 它没有通过运输层的 TCPUDP

PING 发送一个 ICMP(Internet Control Messages Protocol);回声请求消息给目的地并报告是否收到所希望的 ICMP echo (ICMP回声应答)。

利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。

# ping 详细过程
		现在我们用主机 A ping局域网内的主机 B,A 会先看看自己有没有 B 的 MAC 地址,如果没有就向外发送一个 ARP 广播包。

    交换机收到这个 ARP 广播包后,会检索自己有没有保存 B 的 MAC 地址,如果有则直接返回给主机 A,如果没有则向所有端口发送 ARP 广播。

    局域网内的其它主机收到这个 ARP 广播包,会去看看是不是在找自己,如果不是,就丢弃掉这个包。B 会立即响应自己的 MAC 地址是多少,按同样的 ARP 报文格式返回给 A,并且自己也学习到了 A 的 MAC 地址。

    有了 B 的 MAC 地址后,A 就可以将其封装到 ICMP 报文中,然后向主机 B 发送该报文,报文格式如:[IP首部,ICMP报文]

    B 收到 A 发送的 ICMP 回显请求后,再按照同样的格式返回一个值给 A,这样就完成了局域网内的 ping 过程。

    需要注意的是,完成这个过程后主机 A 就学习到了 B 的 MAC 地址,在接下来的一段时间内再次 ping,就不需要发送 ARP 广播包了。

    如果 A ping 的是另一网段的主机 C,那么发送的 ARP 广播包会到路由器,路由器会把原来的 MAC 头部换成自己的 MAC 地址,然后查找自己已经学习到的路由表,找到相应的出口转发出去。

    主机 C 学到了路由器一个端口的 MAC 地址,该端口转发给另一端口,而另一个端口学到了 A 的地址,这样就不需要再次做 ARP 解析了,直接将 ICMP 回显的请求回复过去。

# 4. Traceroute 原理

image-20200409111324454

它利用 IP 数据报中的 TTL 字段和 ICMP 时间超时差错报告报文实现对从源点到终点的路径的跟踪。

img

# traceroute 详细过程
	客户端发送一个TTL为1的ICMP请求回显数据包,在第一跳的时候超时并返回一个ICMP超时数据包,得到第一跳的地址。
	客户端发送一个TTL为2的ICMP请求回显数据包,得到第二跳的地址。
	客户端发送一个TTL为3的ICMP请求回显数据包,到达目标主机,目标主机返回一个ICMP回显应答,traceroute结束。
上次更新: 8/28/2022, 11:43:26 PM