TCP/IP 包中的目标地址 MAC 是怎么来的?

2022-06-05 22:13:38 +08:00
 cheneydog
假如访问一个网站,发送的请求 TCP/IP 包中的目标地址 MAC 是怎么来的?
1636 次点击
所在节点    问与答
13 条回复
Buges
2022-06-05 22:20:19 +08:00
当你发送一个 IP 包,系统会查找当前路由表,寻找匹配路由项。如果目的地址在同一个网络(链路下),则通过 ARP ( ipv4 )或 NDP ( ipv6 )查询对应的 mac 地址并封二层包发送。
如果目的地址非链路本地地址,则找到路由条目中匹配的网关地址( next hop ),然后将该包发给网关。
cheneydog
2022-06-05 22:26:43 +08:00
@Buges 同一个子网下明白。不同网络下的,当前包将发送给网关。此时发送给网关的这个包是怎么写的?
1. 填写目标 IP 和 MAC ,MAC 哪里来?
2. 填写目标 IP 和网关 MAC ?
xarthur
2022-06-05 22:36:38 +08:00
@cheneydog 你把两层协议混在一起了。IP 协议是网络层协议,IP 协议的包里没有 MAC 地址。
MAC 地址是链路层的东西。
xarthur
2022-06-05 22:37:52 +08:00
至于你问 MAC 地址哪里来的,网卡制造的时候自带的。
psx2019
2022-06-05 22:40:11 +08:00
Buges
2022-06-05 22:41:37 +08:00
@cheneydog 自然和同一子网下一样,向网关发送自然是用网关的 IP 地址对应的 mac 封二层包发送。
cheneydog
2022-06-05 22:42:59 +08:00
@xarthur 这么说好像清楚一点了。
那就是发给网关的包,链路层目标就是网关的 MAC ,网络层的 IP 里面是服务器 IP 。对吧。
xarthur
2022-06-05 22:44:13 +08:00
DOLLOR
2022-06-05 22:49:39 +08:00
设备接入本地网的时候,会跟本地网所有设备沟通,获得本地网所有设备的 IP 和 MAC 的对应关系,形成 ARP 表。
当设备想要跟外网通信时,首先拿到网关 IP ,再从 ARP 表查到网关的 MAC ,然后发送给网关。
dier
2022-06-05 23:17:16 +08:00
数据包在传输的过程中,如果是跨网络,数据帧帧头的 MAC 地址会一直改变,每次都会是这个数据包下一跳接口的 MAC 地址。每个网点内的 MAC 地址都是由 ARP 广播广播出来、每个接口记录到自己的 ARP 表,下一跳的 MAC 地址就是从 ARP 表里找到的
dier
2022-06-05 23:18:09 +08:00
网点=网段
cpstar
2022-06-05 23:41:41 +08:00
A->X->Y->B
A 往 B 发,根据路由表,知道应该发给 A ,于是本地持有或者广播谁™知道 X 认识 X ,然后 X 蹦出来爷 MAC 在此,然后东西给了 X
X 拿到东西一看,这 B 是谁,不认识,但是按照路由表好像应该给 Y ,于是又喊了一遍 Y ,Y 给了 MAC ,东西给了 Y
Y 一看,再看看路由表,哦,B 好像在这嘎达,喊了一句 B 给我出来,B 报告了 MAC ,出来了。
litguy
2022-06-07 19:19:55 +08:00
可以看看老美的 《计算机网络》,你的问题都有

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/857428

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX