IP地址转换

我们知道公共IPv4地址总数为2^32约为40亿个,由于网络的高速发展导致公共IPv4的地址匮乏,所以90年代就出现了网络地址转换机制 (La translation d'adresses)。

1.NAT pure

假设在公司内部网络或者LAN网使用私有地址(adresse privee, A类 B类或者C类地址), 那么怎么使内部机器访问外网呢?

初始方案是把每台机器的私有地址转化为公司分配到的公有地址池里。

已知公司租用的公共IPv4地址池为80.1.1.64/29,在R1上有个地址转换表,在此表中每一台机器的adresse privee被转换为adresse publique以用来访问外网。这种机制叫做NAT 1:1(NAT pure) , 可是这样做还是没有节约公共地址。

2.PAT

那么PAT(端口转换 或NAT overload) 就派上用场了,路由器使用TCP/UDP端口来寻找发送请求的主机。

NAT pure (NAT 1:1) 是 @ip pub : @ip pri= 1:1,

PAT (NAT overload) 是 @ip pub : @ip pri = 1:n

一般NAT pure机制用于服务器,而PAT用于用户机。

1)Port TCP/UDP

如图所示,当A发送请求给外网的105.6.3.1时, 105.6.3.1将要响应A, 那么R1将会利用响应包里传输层头部端口来确认最初发送请求的主机。接下来介绍一下TCP的一些特殊端口号,前1023个TCP端口已被用来指定一些协议, 比如常见的HTTP->80, HTTPS->443, Telnet->23, FTP->21, FTP-Data ->20, DNS->53, POP->110, SSL->22等。

所以未定义的其他主机的TCP端口号必须超过1023

此图为TCP和UDP头部结构:

2)在PAT下探讨帧

3)PAT转换表

假设有一个为10.0.0.0/24的内网。现在A 要发送数据包到外网的server,A的数据包的TCP头部里source装的是A的内网地址和A的内端口号,R1接收该数据包,填写一条A机器的记录在PAT地址转换表里,并把数据包中的TCP头部里source的内端口号改为外端口号,并转发到外网,最后数据包到达server。

根据PAT机制,R1为A选择了端口号1030和端口号1030,内外端口号数可以相同也可以不同,因为R1选择端口号是随机性的,但是必定会大于1023。所以当前地址转换表为:

现在,B向外网的server发送数据包。

B的内端口号与A的一样,这是R1随机选择的一种巧合,但是B的外端口号与A的不一样,这是因为R1必须要使每个外端口号成为唯一,这样当外网发送数据包到内网机器时才能通过外端口号来辨别机器

所以当前地址转换表为:

接下来是外网的server响应刚才的A、B数据包:

server发送数据包给A, 数据包的TCP头部里destination装的是A的内网地址和A的外端口号,然后R1根据自身的PAT地址转换表,知道了A的外端口号1030对应的是A的内端口号1030,然后R1把数据包的TCP头部里destination的外端口号改为内端口号,并转发此数据包给A。

根据PAT机制,所用到的相关协议为TCP或UDP (除了ping包用的是ICMP)。

Last updated

Was this helpful?