• 【问题思考总结】NAT的公有地址怎么转换为私有地址?【MAC地址和IP地址的转换】


    问题起源

    在做一道题的时候,涉及到了由内网到外网再到内网时的IP地址转换。在外网的时候,答案说的是不能够用私有IP地址作为源IP地址,然后疑问产生了:如果不能用私有IP地址作为目的地址,他又怎么能够找到那个主机呢?

    Q1:这个包怎么访问到主机?

    在经过查阅后发现,用NAT能够进行IP地址的转换,就是将私有的IP地址转换为公有的IP地址,也可以将公有的IP地址转换为私有地址。私有转公有容易理解,因为大家的出口似乎往往只有一个。然而,因为在这个内网里面有多个主机,多对一的映射好搞,一对多的映射怎么搞?也就是公有ip转私有ip如何转换呢?

    Q2:NAT如何将公有地址转换为私有地址?

    经过查阅发现,NAT的表项结构是这样的:
    在这里插入图片描述
    这里的WAN端对应的是广域网(公共网络),LAN端对应的是局域网(私有网络)。这个NAT对应的每个表项实际上是一个二元组

    在进行公有IP转私有IP的时候,将会将这个主机的IP地址以及端口号进行映射。同样的,在公有地址到私有地址的时候也会进行二元映射。因此,这个二元组指定的主机(LAN端)和路由器的外部端口(WAN端)自然就是一对一的映射了

    之前的问题在于将NAT的转换表想象成了一元转换,因此导致了错误。

    延伸思考

    MAC地址在传递的时候如何转换?

    在这里插入图片描述
    在这里我们可以比较清晰的看到,每经过一个端口,实际上MAC地址都是变的。

    因此,IP地址只有在公私网转换的时候变换,而MAC地址则是在公网进行传递的时候也要变换。

    小例题:ARP的次数讨论

    在这里插入图片描述
    我最开始误选了D,因为我的想法是在转发的过程当中,只要MAC地址发生变化,就要进行ARP,实际上正确答案是B,也就是只有结点间转发的时候需要ARP,结点内部转发不需要。

    经过查阅发现,结点内部的转发是由路由器的转发表来进行的,这个部分不太了解,待以后深化补充,欢迎博友讨论。

  • 相关阅读:
    C++ day2
    Linux 学习总结(93)—— Linux 管道符使用总结
    动态链接库的使用记录
    Spring源码系列:初探底层,手写Spring
    施工安全隐患排查系统—工地隐患闭环管理
    【实用工具】Centos 安装ARL灯塔
    产品代码都给你看了,可别再说不会DDD(六):聚合根与资源库
    一个Python的轻量级搜索工具--Whose
    MySQL安装_win10(超详细)
    弘辽科技:拼多多推广被限制有什么办法解除吗?有何原因?
  • 原文地址:https://blog.csdn.net/weixin_45415929/article/details/128119830