找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

892

积分

0

好友

118

主题
发表于 5 天前 | 查看: 16| 回复: 0

许多人在学习网络协议时会有这样的疑问:当电脑访问网站时,发出的请求包已携带本机MAC地址,服务器回复时难道不能直接使用这个地址吗?为什么还需要ARP协议进行IP地址到MAC地址的转换?

在实际的网络通信环境中,除非设备直接连接到目标服务器的网卡,或处于同一交换机、同一VLAN内,否则服务器回复报文中的目标MAC地址不会是您电脑的MAC地址,而是其网关的MAC地址。因此,你通常无法直接获取或感知到远程服务器的MAC地址。

要给服务器发送报文,必须完整构建以下四个元素,缺一不可:

  • 目标MAC地址:?
  • 源MAC地址:本机网卡MAC地址(已知)
  • 目标IP地址:通过DNS解析获得(待定)
  • 源IP地址:本机网卡绑定的IP地址(已知)

其中,目标MAC地址目标IP地址是未知的,需要借助网络协议逐步完成。

首先,需要借助DNS协议将域名(例如 zhihu.com)解析为IP地址。假设DNS服务器的IP地址与您电脑的网关地址相同,那么在发送DNS请求报文时,同样需要上述四元素。此时,目标MAC地址(即网关MAC地址)依然未知。

这时,就需要ARP协议出场,来解析网关IP地址对应的MAC地址。如果解析成功,网关的MAC地址会被缓存到本机的ARP表中(默认超时时间通常为20分钟)。至此,发送DNS请求的所有条件才得以满足:

  • 目标MAC地址:网关MAC地址(通过ARP获得,已知)
  • 源MAC地址:本机网卡MAC地址(已知)
  • 目标IP地址:DNS服务器IP地址(已知)
  • 源IP地址:本机IP地址(已知)

DNS请求得以发出。假设收到回复,得知目标服务器(如知乎)的IP地址为 111.111.111.111

接下来,准备向该服务器发送业务报文,再次需要四元素:

  • 目标MAC地址:?
  • 源MAC地址:本机网卡MAC地址(已知)
  • 目标IP地址111.111.111.111(通过DNS解析,已知)
  • 源IP地址:本机IP地址(已知)

目标MAC地址再次成为未知项。操作系统IP层会查询路由表,当目标IP地址匹配到默认路由(例如 0.0.0.0/0 经由网关发出),便会查询ARP缓存。如果缓存未过期,便可直接获得网关的MAC地址。于是:

  • 目标MAC地址:网关MAC地址(从ARP缓存获得,已知)
  • 源MAC地址:本机网卡MAC地址(已知)
  • 目标IP地址111.111.111.111(已知)
  • 源IP地址:本机IP地址(已知)

报文终于可以发出。

当这个报文到达您的网关设备,网关网卡检查到目标MAC地址与自己一致,便会接收该报文,并剥离二层的以太网头部,得到纯IP报文。然后,网关根据自身的路由表,决定从通往互联网的接口转发此IP报文。

这时,一个新的二层封装过程开始:

  • 目标MAC地址:路由下一跳设备的MAC地址(?)
  • 源MAC地址:网关出接口的MAC地址(已知)

网关会查询自身的ARP缓存以获取下一跳的MAC地址,若无缓存则发起ARP查询。获得后,封装上全新的以太网头部,再将报文发出。这个崭新的二层头部,其源MAC地址和目标MAC地址均已更新,与最初您电脑的MAC地址没有任何关系。

上述“查询路由 -> 封装二层头部”的迭代过程,会在到达最终服务器的整条路径上重复多次,次数等于路径上的网络跳数(Hop)。

最终,当报文抵达知乎服务器时,服务器看到的源MAC地址是其自身网关的MAC地址,而绝非您个人电脑的MAC地址。

因此,ARP协议在TCP/IP协议栈中绝非多此一举。它动态地维护着IP地址与MAC地址的映射关系,是局域网内乃至跨网络寻址和数据帧交付的基石,确保了网络通信能够层层接力,准确无误地到达目的地。




上一篇:MCP协议传输技术详解:从HTTP+SSE到Streamable HTTP的架构演进
下一篇:AGI时代独立开发者破局指南:收入模式、市场挑战与社区支持
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-17 16:09 , Processed in 0.139313 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表