赞
踩
目录
NAT是解决当前IP地址不足的主要手段,是路由器的一个重要功能。核心思路就是在传递报文的时候,每到达下一跳设备,就更换一次IP地址。NAT一般集成在防火墙、路由器等硬件设备上。
局域网中的主机访问公网IP时,路上的路由器会将源IP地址 替换为 WAN口IP,这样的话,不同局域网的主机可以有相同的网络号和主机号。(其实也有可能替换端口号,我们暂时不考虑端口号的变化)
主机A发送的报文,源IP地址填的肯定是 192.168.0.3,传递给路由器A以后,源IP地址会被替换为WAN口IP(10.1.1.4);主机B发送的报文,源IP地址肯定也是 192.168.0.3,传递给路由器B以后,源IP地址同样会被替换为 WAN口IP(10.1.1.5)
此时,站在局域网之外的角度,路由器A传递报文的源IP地址是10.1.1.4 ,路由器B传递报文的源IP地址是10.1.1.5,因此不同局域网的主机可以有完全一样的IP地址,大大提升了IP地址的利用率。
以下面这个图为例
第一步,主机A封装自己的报文,源IP是192.168.1.113,目标IP是39.156.66.10,随后转发给路由器X。
第二步,路由器X收到报文,源IP替换为 WAN口IP(10.1.1.2),目标IP是39.156.66.10。现在相当于IP地址为 10.1.1.2的局域网要发送一个报文,随后转发给路由器Y。
第三步,路由器Y也是做同样的操作,源IP替换为 WAN口IP(39.156.66.25),目标IP是39.156.66.10,此时报文终于来到了服务器所处的网段。
第四步,路由器Y将报文传递给百度服务器,百度服务器收到请求,然后构建响应。
==》这个过程中变化的只有源IP,目标IP是不变的!
这其实还是基于上述的NAT技术,路由器在替换IP地址的时候,并不是简单的替换,会建立起源IP和替换以后的IP的映射关系。以上述第一步为例。
路由器X收到报文以后,源IP地址是 192.168.1.113,随后会替换成路由器X 的WAN口IP(10.1.1.2),此时路由器X会建立起 192.168.1.113 与 10.1.1.2的映射关系。
假设路由器X的 映射关系(转换表)大致如下,左半部分的IP肯定都属于同一个局域网,同一个局域网里的IP是具有唯一性的,这样就保证了从右边到左边的转换不会出现歧义。在TCP的情况下, 建立连接时, 就会生成这个表项; 在断开连接后, 就 会删除这个表项
替换之前 | 替换之后 |
源IP:192.168.1.113:1025 目的IP:39.156.66.10:80 | 源IP:10.1.1.2: 1025 目的IP:39.156.66.10: 80 |
仍然以下面这个图为例,报文到达百度服务器的时候,源IP地址变成了 39.156.66.25,目的IP是39.156.66.10。假设现在百度服务器要返回一个响应给我们的主机。
早在路由器Y替换IP的时候,路由器Y就保存了 从局域网到广域网的映射关系,假设映射关系如下:
替换之前 | 替换之后 |
源IP:10.1.1.2 目的IP:39.156.66.10 | 源IP:39.156.66.25 目的IP:39.156.66.10 |
... ... | ... ... |
百度服务器将响应报文发送给路由器Y,路由器Y收到的报文:源IP地址是39.156.66.10,目的IP是39.156.66.25。响应报文和前面请求报文对应,现在的源IP —— 请求报文的目的IP、现在的目的IP —— 请求报文的源IP
查询映射表的右半部分,发现报文的源IP与映射表的目的IP是一致的,报文的目的IP与映射表的源IP是一致的,说明来的时候走的就是这条路,此时就会将目的IP替换为 10.1.1.2。
后面查询路由器X的转换表也是这种方式。
我们有的时候会在自己的电脑上安装虚拟机,其中有NAT模式和桥接模式。NAT模式就是把主系统当作一个大路由器,每次虚拟机发送请求都要经过主系统,同时主系统需要帮你维护转换表。
现在就可以理解 一些公网IP为什么无法访问我们的主机?我们的局域网IP并不是全球唯一的,如果我们没有访问过那些IP,也就没有转换表,他们在传递报文的时候,无法根据转换表替换报文的目的IP。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。