V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cheneydog
V2EX  ›  问与答

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

  •  
  •   cheneydog · 2022-06-05 22:13:38 +08:00 · 1631 次点击
    这是一个创建于 932 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假如访问一个网站,发送的请求 TCP/IP 包中的目标地址 MAC 是怎么来的?
    13 条回复    2022-06-07 19:19:55 +08:00
    Buges
        1
    Buges  
       2022-06-05 22:20:19 +08:00 via Android
    当你发送一个 IP 包,系统会查找当前路由表,寻找匹配路由项。如果目的地址在同一个网络(链路下),则通过 ARP ( ipv4 )或 NDP ( ipv6 )查询对应的 mac 地址并封二层包发送。
    如果目的地址非链路本地地址,则找到路由条目中匹配的网关地址( next hop ),然后将该包发给网关。
    cheneydog
        2
    cheneydog  
    OP
       2022-06-05 22:26:43 +08:00
    @Buges 同一个子网下明白。不同网络下的,当前包将发送给网关。此时发送给网关的这个包是怎么写的?
    1. 填写目标 IP 和 MAC ,MAC 哪里来?
    2. 填写目标 IP 和网关 MAC ?
    xarthur
        3
    xarthur  
       2022-06-05 22:36:38 +08:00 via iPhone
    @cheneydog 你把两层协议混在一起了。IP 协议是网络层协议,IP 协议的包里没有 MAC 地址。
    MAC 地址是链路层的东西。
    xarthur
        4
    xarthur  
       2022-06-05 22:37:52 +08:00 via iPhone
    至于你问 MAC 地址哪里来的,网卡制造的时候自带的。
    Buges
        6
    Buges  
       2022-06-05 22:41:37 +08:00 via Android
    @cheneydog 自然和同一子网下一样,向网关发送自然是用网关的 IP 地址对应的 mac 封二层包发送。
    cheneydog
        7
    cheneydog  
    OP
       2022-06-05 22:42:59 +08:00
    @xarthur 这么说好像清楚一点了。
    那就是发给网关的包,链路层目标就是网关的 MAC ,网络层的 IP 里面是服务器 IP 。对吧。
    xarthur
        8
    xarthur  
       2022-06-05 22:44:13 +08:00 via iPhone
    DOLLOR
        9
    DOLLOR  
       2022-06-05 22:49:39 +08:00
    设备接入本地网的时候,会跟本地网所有设备沟通,获得本地网所有设备的 IP 和 MAC 的对应关系,形成 ARP 表。
    当设备想要跟外网通信时,首先拿到网关 IP ,再从 ARP 表查到网关的 MAC ,然后发送给网关。
    dier
        10
    dier  
       2022-06-05 23:17:16 +08:00 via iPhone
    数据包在传输的过程中,如果是跨网络,数据帧帧头的 MAC 地址会一直改变,每次都会是这个数据包下一跳接口的 MAC 地址。每个网点内的 MAC 地址都是由 ARP 广播广播出来、每个接口记录到自己的 ARP 表,下一跳的 MAC 地址就是从 ARP 表里找到的
    dier
        11
    dier  
       2022-06-05 23:18:09 +08:00 via iPhone
    网点=网段
    cpstar
        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 ,出来了。
    litguy
        13
    litguy  
       2022-06-07 19:19:55 +08:00
    可以看看老美的 《计算机网络》,你的问题都有
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3028 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:36 · PVG 21:36 · LAX 05:36 · JFK 08:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.