目录
- 1.问题: (在同一个LAN局域网内)如何在已知目的接口的IP地址前提下确定其MAC地址?
- 2.问题:现在假设主机A要向目的主机B发送一个数据报,怎么发送呢?
- 2.1在一个局域网内时
- 2.1.1情况一:
- 2.1.2情况二:
- 2.2从一个LAN路由到另一个LAN时
1.问题: (在同一个LAN局域网内)如何在已知目的接口的IP地址前提下确定其MAC地址?
答:
ARP表: LAN中的每个IP结点(主机、路由器)维护一个表
存储某些LAN结点的IP/MAC地址映射关系:
< IP地址; MAC地址; TTL>
TTL (Time To Live):
经过这个时间以后该映射关系会被遗弃(典型值为20min)
2.问题:现在假设主机A要向目的主机B发送一个数据报,怎么发送呢?
2.1在一个局域网内时
答:
发送主机 需要获得给定(已知)IP地址的目的主机的MAC地址。
2.1.1情况一:
如果发送方的ARP表具有该目的节点的表项,则任务很容易完成,直接对应表项查找MAC地址即可。
2.1.2情况二:
但如果ARP表中当前没有该目的节点的表项,又怎么办呢?
🚩具体流程如下:(对应《自顶向下》第七版P306)
- A想要给同一局域网内的B发送数据报
B的MAC地址不在A的ARP 表中. - A广播ARP查询分组(广播帧),其中包含B的IP地址
目的MAC地址 = FF-FF-FF-FF-FF-FF
LAN中所有结点都会接收ARP查询,每个都检查它的IP地址是否与ARP分组中的目的IP地址相匹配 - B接收ARP查询分组,发现IP地址匹配成功,向A应答B的MAC 地址
利用单播帧(标准帧)向A发送应答 - A更新ARP表,在其ARP表中缓存B的IP-MAC地址对,直至超时
超时后,再次刷新
注:ARP是“即插即用”协议:
结点自主创建ARP表,无需系统管理员干预
上面是一台主机向相同子网上的另一台主机发送一个数据报时ARP的操作过程。但是当子网中的某主机要向子网外(另一个子网)的另一台主机发送一个数据报时,是怎么一个流程?
2.2从一个LAN路由到另一个LAN时
通信过程: A通过路由器R向B发送数据报
关注寻址:IP地址(数据报中)和MAC地址(帧中)
a. 假设A知道B的IP地址(怎么知道的?)
b. 假设A知道第一跳路由器R (左)接口IP地址 (怎么知道的?)
c. 假设A知道第一跳路由器R (左)接口MAC地址 (怎么知道的?)
a.使用DNS查询,根据主机名查询IP地址,然后封装到IP数据报中。
b.默认网关,就是子网外联的路由器的向内IP地址
c.ARP协议,上面讲过的一个局域网内的查询,根据上一个IP地址,查询路由器的MAC地址。
🚩具体流程如下:(对应《自顶向下》第七版P307)
- A构造IP数据报,其中源IP地址是A的IP地址,目的IP地址是B的IP地址
- A构造链路层帧,其中源MAC地址是A的MAC地址,目的MAC地址是R(左)接口的MAC地址,封装A到B的IP数据报。
- 帧从A发送至R
- R接收帧,提取IP数据报,传递给上层IP协议
- R转发IP数据报(源和目的IP地址不变!)
- R创建链路层帧,其中源MAC地址是R(右)接口的MAC地址,目的MAC地址是B的MAC地址,封装A到B的IP数据报。