ARP
如何根据网络层的 IP 地址得到数据链路层的 MAC 地址,这是 ARP 协议需要解决的问题。
无论网络层的 IP 路由怎么搞,数据始终是通过数据链路层进行传送的,每台主机都需要知道邻接机器的 MAC 地址。
ARP 是网络层的协议,分组封装在以太网帧中。ARP 协议是借助局域网广播来工作的。
ARP 的原理
每台主机都维护一个 IP-MAC
的缓存,叫做 ARP 表。
- 如果主机需要向本地网络的其他主机发送信息,就根据目的主机的 IP 查询ARP 表,得到 MAC 地址后封装成数据链路层帧。
- 如果不能在 ARP 表中查到目的主机 IP 和 MAC 的对应关系,就向局域网发送 ARP 广播;目的主机收到广播后,向当前主机发起单播的 ARP 响应。
如果主机需要向其他网络的主机发送信息,会将数据链路层帧发送给路由器。
从 IP 地址到 MAC 地址的转换是自动进行的,用户只需要知道目的 IP 地址即可。
路由器也需要通过 ARP 协议来获得邻接路由器的 MAC 地址。
ICMP
ICMP 用于让主机和路由器报告差错和异常情况
ICMP 是网络层的协议,ICMP 报文封装于 IP 数据报中
报文类型:
ICMP 报文种类 | ICMP 报文的类型 | 作用 |
---|---|---|
差错报告报文 | 终点不可达 | 路由器无法交付数据时 |
源点抑制 | 因拥塞而丢弃报文时;让源主机降低发送速率 | |
时间超过 | TTL 减小到 0 | |
参数问题 | IP 首部字段有问题 | |
改变路由 | 有更好的路由 | |
询问报文 | (Echo) 回送请求 或 回送回答 | |
(Timestamp) 时间戳请求 或 时间戳回答 |
不发送 ICMP 差错控制报文的情形(只是差错控制报告报文,不是询问报文):
- ICMP 报文自身出错了
- IP 数据报分片时,只针对第一个分片发送 ICMP 差错报告报文
- 组播时
- 特殊地址(127.0.0.1)
ICMP 的应用:PING
PING 工作在应用层,但是它直接使用网络层的 ICMP 协议,使用了 ICMP 询问报文的“Echo 回送请求和回答报文”
ICMP 的应用:Traceroute
Traceroute 可以用于跟踪分组经过的路由。
使用了 ICMP 差错报告报文的时间超过报文。(发送多个数据报,分别设置 TTL 为 1,2,3 等)
以及终点不可达的差错报告报文(使用的是 UDP 的非法端口,目标主机收到后,会返回终点不可达的报文。)
DHCP
DHCP 是应用层的协议,基于 UDP
该协议是用于为新加入的主机分配 IP 地址的。由于该协议工作在应用层,新加入的主机 IP 未知,所以通信全程使用广播方式。
新加入的主机为客户端,网络中存在至少一个 DHCP 服务器,协议的工作过程如下:
DHCP 发现报文的 IP 分组源 IP 为: 0.0.0.0
,目的 IP 为: 255.255.255.255
注:IPv6 即插即用,不需要 DHCP