NAT(Network Address Translation)浅析
in Network with 1 comment

NAT(Network Address Translation)浅析

in Network with 1 comment

NAT(Network Address Translation)

今天面试被问到这个问题,隐约记起来最先在设置虚拟机网络模式的时候见到过这个,三个选项分别是桥接NATHostOnly。光有印象,真的要答的时候却无从入手,因此事后还是记录一下。

简介

IPv4由32bits的字来表示网络地址,把保留字段都算上的话也不过$2^{32}$大约4.29亿个。然而现在世界上有70多亿个人且每个人可能都有若干个设备,因此地址数不够用。
NAT实现了局域网和外网的通信。局域网中某台电脑向外网发包都会经过路由器,那路由器拿到物理层包之后开始解包,物理层剥掉之后变数据链路层,数据链路层剥掉之后变成网络层,网络层里面的SourceDST都写的很清楚。那么考虑如下场景,假设某个包A从主机被扔到了路由器,路由器解开之后得到了网络层,一看源地址192.168.0.2:7456,然后果断把这个地址和自己的IP+某个端口12.13.14.15:23333建立一个映射,存到表里。然后用这个用12.13.14.15:23333替换192.168.0.2:7456,接着把它封起来,扔到外网。外网就觉得这个包是从这个路由器发出来的,然后返回的包就直接发到12.13.14.15:23333
那我们的路由器老哥拿到这个返回包之后,找到网络层12.13.14.15:23333,一查表,把对应的192.168.0.2:7456放上去,再若无其事扔回局域网内。我们的主机正常收到了这个包。

过程图示

Source:192.168.0.2:7456 Dst:20.20.20.20:80
                 |
                 |(ROUTER)
                 v   
Source:12.13.14.15:23333 Dst:20.20.20.20:80
                 |
                 |(Server Reply)
                 v  
Source:20.20.20.20:80 Dst:12.13.14.15:23333
                 |
                 |(ROUTER)
                 v  
Source:20.20.20.20:80 Dst:192.168.0.2:7456

自己的一些拍脑袋的理解

发包的主机真的不知道自己的包被改了,路由器做了这个改的工作。当然也可以不是路由器,还可以是另一个主机。比如我们在我们自己电脑上跑若干个虚拟机,那样这里面就有一个虚拟的局域网,我们的物理机是这个网关,虚拟机发的包都通过NAT转换成物理机的IP和端口和外界以物理机的名义进行通信,数据发回来的时候物理机再根据映射表发回给虚拟机。
这玩意算是局域网知识里面的一个挺重要的点的,计网都讲了,回答不出来的话可真的很丢人了。溜溜。

Responses
  1. Kamagra Impacto Pharmacy Rx World buy viagra Discount Online Clobetasol Clobetasol Propionate Need Website

    Reply