首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

网络工程师:IP地址易容术

接下来要优化的,依然和IP有关!

IP:“为什么受伤的还是我!!”

别担心,不给你好好整整容,你不知道自己有多美!

IP协议使用IP地址来标识网络中的节点,分为IPv4和IPv6。虽然一直在推行IPv6,但目前主流还是IPv4。

IPv4使用32位二进制,分为A、B、C类(D类和E类有特殊用途,不用于标识网络中的节点),共计大约37亿多个可用单播地址。听上去很多,但是Internet发展太快了,早在2011年,IANA就宣布IPv4地址耗尽。

等等,既然2011年IPv4地址就没了,那怎么直到现在,大家都还在高高兴兴地用着IPv4地址呢?

这要归功于NAT(Network Address Translation,网络地址转换)。

其实,在IPv4地址中,有一些特殊的地址范围:

A类地址中,10.0.0.0~10.255.255.255;

B类地址中,172.16.0.0~172.31.255.255;

C类地址中,192.168.0.0~192.168.255.255。

这些地址,我们称之为“私有地址”。

什么是私有地址?就是说,这些地址不会在Internet公网上出现,任何人都可以随便使用,不用花钱!

随便使用?那不会冲突吗?

并不会,因为这些地址只限于你所在的局域网内部使用,如家庭、企业、学校等,公网上并没有这些地址。就好像你在一个局域网用10.1.1.1,我在另一个局域网也使用10.1.1.1,只要保证各自局域网内不冲突就行。

可是,如果我们两人要通信呢?地址不是冲突了吗?

不不,私有地址只在局域网内部使用,如果要访问外网,需要NAT给你发的数据包“整个容”!

一般情况下,局域网接入公网的出口设备上都会配置NAT功能。家庭中常见的“无线路由器”,其实本质上不过是一台“无线NAT”而已!

如果NAT设备发现有私有数据包要去公网,会给它整个容:把里面IP封装中的私有地址换成公网地址,做好记录,再发出去;数据包回来时,再把地址换回来,发回你的电脑。

企业、学校的公网地址可以花钱向运营商购买固定地址,便于注册域名,向外提供网络服务;家庭上网一般由运营商动态分配。

图中电脑的IP地址是私有地址192.168.1.10,出口NAT设备接入Internet的公网地址是12.34.56.78,假设公网上有一台地址为98.76.54.32的www服务器,内网电脑通过浏览器访问它。

电脑产生http报文,向下交给传输层TCP协议。TCP封装时,源端口在49152~65535间随机选择一个,如60128,目的端口为80。

TCP封装后,交给网络层IP协议,IP封装源地址为内网电脑的私网地址192.168.1.10,目的地址为公网服务器的地址98.76.54.32,协议号为6。

链路层的封装和前面文章所述一样,这里我们省略。这个报文发到NAT设备后,NAT设备将源地址修改为12.34.56.78,做好记录“内网地址192.168.1.10映射到外网地址12.34.56.78”,然后将报文发到公网。

公网根据报文中的目的地址98.76.54.32,将报文准确送达服务器。

服务器返回的信息,数据是这样封装的:

源和目的端口号、IP地址互换位置,公网会根据目的地址12.34.56.78,把报文送达NAT设备。NAT根据记录“内网地址192.168.1.10映射到外网地址12.34.56.78”,把目的地址12.34.56.78换回192.168.1.10,然后根据内网地址192.168.1.10把报文送达电脑。

但这样的转换方式并不妥当,因为一个内网地址需要对应转换为一个外网地址,内网电脑数量多就会消耗大量外网地址,并没有起到节省地址的作用。

因此,我们所使用的NAT,叫做NAPT(Network Address Port Translation,网络地址端口转换)。

NAT只转换IP封装中的IP地址,而NAPT则把传输层的端口号和IP地址一起转换,可以实现一个公网地址的复用。

假设内网有两台电脑,地址分别为192.168.1.10和192.168.1.20,NAT设备地址和服务器地址和上例相同。假设两台电脑同时访问外网服务器,电脑A发出的报文封装是:

电脑B发出的报文封装是:

两个数据报文到达NAT设备后,NAT设备做个记录:

然后,NAT把电脑A的报文修改为:

而电脑B的报文也被NAT修改为:

可以看到,NAT把两台内网电脑发出去的报文转换后,仅传输层的源端口号不同,IP的封装完全相同。这样一来,就可以实现同一个公网地址被不同内网电脑重复使用,只需通过端口号区别开就可以。外网返回的数据报文回到NAT设备后,NAT根据之前记录的信息再转换回内网地址和内网端口号,即可把报文送达不同的内网电脑。

思考:对于没有传输层的报文,如ICMP,无法进行端口号转换,NAT会怎么处理呢?

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200501A0EXFB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券