解决了上学时的一个小疑问,学校的局域网怎么访问互联网的,开心[微笑]最简单的上网流程ip地址我们现在常使用的IP地址是IPv4地址,由四组0-255的十进制数字组成,中间以小数点分隔。Internet上的每一台主机或者路由器都至少有一个IP地址。IP地址(IPv4地址,下文IP地址默认指IPv4)的长度是32位,总数为2的32次方,大约43亿个。43亿IP地址假如全球每人分配一个IP就需要75亿。为了快速解决IP地址匮乏的这个问题,NAT技术诞生了。------------------------------------------------------------------ NAT(Network Address Translation),中文名唤作网络地址转换,诞生于IP地址匮乏的时代。 NAT的基本思想是ISP(Internet服务提供商)为每个家庭或者公司分配一个IP地址,这个IP地址用作Internet流量的传输,也就是大家常说的外网IP地址或者公网IP地址。在客户网络的内部,每台计算机有唯一一个IP地址,即内网IP地址,这些地址主要用于路由内部流量。当一个数据包离开客户网络发送至其他ISP时,需要进行地址转换,把唯一的内网IP地址转换成外网的IP地址。 这种地址转化使用IP地址的三个范围,这些地址已被声明私有化,任何内网中的设备可以任意使用这些地址,但是在这三个范围内的IP地址不允许出现在Internet(外网)上,这三个保留的地址范围是: 10.0.0.0~10.255.255.255/8 172.16.0.0~172.31.255.255/12 192.168.0.0~192.168.255.255/16 他们分别可以容纳16777216、1048576、65536台主机。一般家里用无线路由器,就用到了网络地址转换技术,我们连上wifi后分配的IP地址一般是以172或192为开头。学校或者大企业里面的网络可能会用到10开头的地址范围。 NAT将内网外网划分好之后,是如何使内网的设备访问外网的呢? 如下图,当计算机A在内网(假设IP为10.0.0.1)想去访问一个Internet上的网站S(假设IP地址为54.223.189.245)时,A的数据包需要先经过一个NAT盒子(NAT box),这个盒子先将A的IP源地址转换成外网的真实IP地址(假设IP为121.0.0.2),然后将转换后的数据包发送至Internet。 于是问题来了,当网站S收到这个数据包后,会处理请求,并发送响应的数据包,然而这个数据包的目标地址是121.0.0.2(外网IP),数据包如何返回内网中的A呢? 这里要先介绍一下源端口(Source Port)和目标端口(Destination Port)的概念。当一个进程希望与另一个进程建立TCP连接时,它把自己绑定到一个本机尚未被占用的TCP端口上,这个端口称为源端口,该TCP连接中所有入境的数据包都要被发送至这个端口。同时进程还需要提供一个目标端口,指明数据包到达远程主机后送至哪一个端口处理。每一个出境的TCP数据包都包括一个源端口和目标端口。 举例来说,如下图,网站服务器S(IP地址为54.223.189.245)的HTTP服务运行在80端口上,公网上的计算机D(IP地址为121.141.56.23)想去访问网站S,于是把自己绑定到本机的33121端口上,并发送请求的数据包,这个数据包中就包含了计算机D的源端口33121和目标端口80。网站S收到请求后,发送响应的数据包,这个数据包中包含了服务器S的源端口80和目标端口3312。 上面的例子是外网中的一台计算机访问一个网站。在内网中计算机发送的数据包同样存在着源端口和目标端口。NAT盒子做的事情就是对出入境数据包的端口进行修改。 回到最初举的例子,假设内网计算机A(IP地址为10.0.0.1)发送的请求包的源端口是45421,目标端口是80,请求访问网站服务器S(IP地址为54.223.189.245)。 当这个出境数据包经过NAT盒子时,其源地址被修改成公网的真实IP(121.0.0.2),源端口被修改一个索引值(假设为50002),这个索引值指向NAT盒子的地址转化表中的某一项,这一表项保存了计算机A的内网源地址和源端口。最后NAT盒子将重新生成的数据包发送出去。 当网站S响应的入境数据包到达NAT盒子时,数据包经过处理,目的地址由公网IP(121.0.0.2)还原为计算机A的内网IP(10.0.0.1),目标端口由索引值(50002)还原为计算机A的源端口(45421)。还原后数据包可以正常的在内网路由。 这个过程基本如下图所示。 如此一来,NAT解决了数据包在内网公网之间的地址和端口的转换问题,暂时缓解了IP地址的短缺,但是它却有着不少的缺点。 NAT违背了IP的结构模型(每个IP地址唯一标识世界上的一台机器),采用NAT后可能有无数台主机使用10.0.0.1这个IP地址。NAT还打破了Internet的端-端的连接模型。内网中的主机可以通过NAT与一台公网上的服务建立连接,但是反过来却不行,公网上的主机无法与某一内网中的主机建立连接。举个简单的例子来说,你在内网某台计算机上搭建了一个网站,在外网是无法访问的。而且使用NAT后,Internet变得如电路交换网络一样脆弱。NAT盒子为每个经过它的连接维护必要的信息(即映射关系),若NAT盒子崩溃,并且所有映射表被摧毁,所有TCP连接将被摧毁。 目前的IP地址匮乏,归根结底是IPv4设计者的锅,NAT只是权宜之策。既然NAT这么复杂,有人要问了,在IPv6普及后,NAT是否就会被取缔了呢?答案是不会的。因为NAT已被广泛使用,尤其是家庭和小型企业的网络,即使IPv6普及了,NAT在短时间内也很难被取代。
本文出自快速备案,转载时请注明出处及相应链接。