前言
为了准备面试,也是看了许多计算机网络的文章,但是有个问题困扰了我很久,那就是如何解决ip地址不够用的问题!如果说一个局域网只有一个公网ip,那么出去的时候还好说,就用那个公网ip出去就好了,但是服务器返回消息的时候怎么办呢?返回的是目的主机的ip是公网的ip,那怎么知道要给哪台局域网的电脑?
答案其实很简单,就是NAT协议(网络地址转换协议)
NAT协议
发送
当一个局域网的主机发送一个http请求的时候,会进行如下操作:
- 在tcp数据报报头里面会加上主机发送的端口地址。
- 然后在ip层会加上主机在局域网的ip地址。
当传输到DHCP服务器的时候,会将报文里面的内容进行替换:
- 将tcp报头的端口更改为另外一个(没有被使用的)
- 将ip报头的ip地址更改为公网ip
所以从服务器看来,这个数据就是这个机器发送的,而不会察觉到局域网的存在。
然后维护一张NAT转化表:
即局域网ip:端口号 与 公网ip:端口号 的映射表
服务器响应
服务器肯定是回复公网ip+端口号,所以通过查询NAT转化表,就可以定位到局域网的主机ip和端口号,也就实现了局域网多个主机访问外网的效果。
即那个进程发送的数据,服务器响应的时候还是会响应给哪个进程(即ip地址和端口号和发送的时候是一样的)。
体会
所以NAT就是通过一个具有公网ip的机器,将局域网机器发送的报文的ip地址和端口号进行更改,达到欺骗服务器的效果。
参考文章:点我查看