1
Buges 2022-06-05 22:20:19 +08:00 via Android
当你发送一个 IP 包,系统会查找当前路由表,寻找匹配路由项。如果目的地址在同一个网络(链路下),则通过 ARP ( ipv4 )或 NDP ( ipv6 )查询对应的 mac 地址并封二层包发送。
如果目的地址非链路本地地址,则找到路由条目中匹配的网关地址( next hop ),然后将该包发给网关。 |
2
cheneydog OP |
3
xarthur 2022-06-05 22:36:38 +08:00 via iPhone
@cheneydog 你把两层协议混在一起了。IP 协议是网络层协议,IP 协议的包里没有 MAC 地址。
MAC 地址是链路层的东西。 |
4
xarthur 2022-06-05 22:37:52 +08:00 via iPhone
至于你问 MAC 地址哪里来的,网卡制造的时候自带的。
|
5
psx2019 2022-06-05 22:40:11 +08:00
|
6
Buges 2022-06-05 22:41:37 +08:00 via Android
@cheneydog 自然和同一子网下一样,向网关发送自然是用网关的 IP 地址对应的 mac 封二层包发送。
|
7
cheneydog OP @xarthur 这么说好像清楚一点了。
那就是发给网关的包,链路层目标就是网关的 MAC ,网络层的 IP 里面是服务器 IP 。对吧。 |
9
DOLLOR 2022-06-05 22:49:39 +08:00
设备接入本地网的时候,会跟本地网所有设备沟通,获得本地网所有设备的 IP 和 MAC 的对应关系,形成 ARP 表。
当设备想要跟外网通信时,首先拿到网关 IP ,再从 ARP 表查到网关的 MAC ,然后发送给网关。 |
10
dier 2022-06-05 23:17:16 +08:00 via iPhone
数据包在传输的过程中,如果是跨网络,数据帧帧头的 MAC 地址会一直改变,每次都会是这个数据包下一跳接口的 MAC 地址。每个网点内的 MAC 地址都是由 ARP 广播广播出来、每个接口记录到自己的 ARP 表,下一跳的 MAC 地址就是从 ARP 表里找到的
|
11
dier 2022-06-05 23:18:09 +08:00 via iPhone
网点=网段
|
12
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 ,出来了。 |
13
litguy 2022-06-07 19:19:55 +08:00
可以看看老美的 《计算机网络》,你的问题都有
|