当知道目标的IP但是不知道目标的Mac地址的时候就需要借助ARP寻址获取目标的Mac地址,传输层借助四元组(源IP+源端口:目标IP+目标端口)匹配,网络层借助IP匹配,数据链路层则根据Mac地址匹配,数据传输脱离不了数据链路层所以传输时Mac地址是必须要给出的。
ARP寻址过程分为ARP请求和ARP应答两个环节
接下来简述ARP寻址两种情况
在同一子网内
-
查看有没有对应的缓存,下面是我的虚拟机中的arp缓存
-
以广播形式发送UDP询问所有人,我的IP是yyy我的Mac地址是zzz,IP是xxx的兄弟你的Mac地址是什么
-
IP是xxx的兄弟接收到后,以单播的形式答复即可
注意询问环节中,封装的以太网帧中的目标Mac地址使用的是广播的Mac地址(FF:FF:FF:FF:FF:FF)
不在同一个子网下(ARP代理)
- 设备对比自己和对方的网络号发现不同,发送单播给网关进行ARP请求
- 网关返回自己的Mac地址进行ARP响应
- 主机完成数据帧的封装然后发送给网关
- 网关接收到数据帧后找下一跳,慢慢跳知道找到目标或者TTL归零(未找到)
网关的作用之一就是屏蔽局域网消息避免严重的网络风暴,这里查找下一个节点方式一般针对IP选择前缀匹配最长的那一个
RARP寻址(被DHCP替代了)
网络中接进来一个新的设备它有自己的Mac地址但是还没有分配IP的时候会进行RARP寻址获取获取自己的Mac地址
寻址过程
- 设备发送广播,告诉大家我的Mac地址是xxx,我的IP是多少
- RARP服务器收到后会检查自己的RARP表,找到对应的IP时单播返回,没找到的话不处理
- 如果设备收到回应的话就知道自己的IP了
ARP欺骗:
地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。
路由表:记录网络设备知道的有关目标网络地址(或目标主机地址)以及如何到达这些地址的信息,下面是我的虚拟机中的路由表。
Destination:目标IP
Gateway:到达目标下一跳的网关地址
Genmask:子网掩码
Flags:描述路由器特性
- U:条目可用
- G:条目是网关
- H:条目是主机路由(一个计算机中两个网卡通信)
- S:这条是手动添加的
- C:直接连接
路由表中数据来源
- 手动添加
- 借助ICMP重新向消息更新
- 借助动态路由协议如:RIP,OSPF,BGP等这些,原理的话大概就是建立邻接关系然后更新通知或是定期沟通等。
最后提出一个问题,既然知道IP就能访问到,那么为什么不直接发送数据而是问它的Mac地址然后再借助Mac地址匹配呢?