问题起源
在做一道题的时候,涉及到了由内网到外网再到内网时的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,结点内部转发不需要。
经过查阅发现,结点内部的转发是由路由器的转发表来进行的,这个部分不太了解,待以后深化补充,欢迎博友讨论。