引用

https://blog.csdn.net/lizhi200404520/article/details/6699427
https://www.jianshu.com/p/1a8af1cfea18
https://wizardforcel.gitbooks.io/network-basic/content/18.html
https://3x.58voip.com/what-is-pat/

NAT(网络地址转换)外网IP转为内网IP

NAT的目的是使外网IP与内网IP进行通信,NAT屏蔽了内部网络,为局域网内的机器提供了安全保障。从某种程度上说,让少数公有IP地址被使用私有地址的大量主机所共享并不是NAT实现的,而是PAT实现的,NAT技术用法大致分三种
1.静态NAT
静态NAT就是一对一映射,内部有多少私有地址需要和外部通信,就要配置多少外网IP地址与其对应,并不节省外网IP
2.动态NAT
动态NAT是在路由器上配置一个外网IP地址池,当内部有计算机需要和外部通信时,就从地址池里动态的取出一个外网IP,并将他们的对应关系绑定到NAT表中,通信结束后,这个外网IP才被释放,可供其他内部IP地址转换使用。
3.NAPT/PAT(端口地址转换,也叫端口地址复用)

  • 这是最常用的NAT技术,也是IPv4能够维持到今天的最重要的原因之一,它提供了一种多对一的方式,对多个内网IP地址,边界路由可以给他们分配一个外网IP,利用这个外网IP的不同端口和外部进行通信。
  • 如图所示,私有网主机192.168.1.2要访问公共网中的Http服务器166.111.80.200。首先,要建立TCP连接,假设分配的TCP Port是1010,发送了1个IP包(Des=166.111.80.200:80,Src=192.168.1.2:1010),当IP包经过NAT网关时,NAT会将IP包的源IP转换为NAT的公共IP,同时将源Port转换为NAT动态分配的1个Port。然后,转发到公共网,此时IP包(Des=166.111.80.200:80,Src=202.204.65.2:2010)已经不含任何私有网IP和Port的信息。由于IP包的源IP和Port已经被转换成NAT的公共IP和Port,响应的IP包(Des=202.204.65.2:,Src=2010166.111.80.200:80)将被发送到NAT。这时NAT会将IP包的目的IP转换成私有网主机的IP,同时将目的Port转换为私有网主机的Port,然后将IP包(Des=192.168.1.2:1010,Src=166.111.80.200:80)转发到私网。对于通信双方而言,这种IP地址和Port的转换是完全透明的。
    image.png

在了解了NAT协议后,我们产生了一些问题

  1. 路由器是怎么找到我是哪一台主机的?
  2. 在NAT中,如果两个私网主机(LAN端)使用了相同的端口号,返回信息到达路由器(WAN端)时要怎么处理?
  3. 使用了NAT后,其他电脑怎么主动访问我呢?

ARP(地址解析协议)IP到MAC

在网络通信中,主机和主机通信的数据包需要依据OSI模型从上到下进行数据封装,当数据封装完整后,再向外发出。所以在局域网的通信中,不仅需要源目IP地址的封装,也需要源目MAC的封装。
ARP协议通过发送广播,来获取目标IP地址的MAC地址
ARP请求首先有"自我介绍",然后才是询问,在发送时便包含了自身的ip地址和MAC地址。

ARP请求

image.png

ARP响应

image.png

ARP获取MAC流程

image.png

  1. PC1发送请求广播
  2. PC3和PC4收到之后,发现不是问自己,便丢弃。
  3. 而PC2收到之后,根据请求包里面的信息(有自己的IP地址),判断是给自己的,所以不会做丢弃动作,而是通过单播(这里不使用广播,因为已经知道MAC)返回ARP回应包

这里还需要提到的是,ARP采用了缓存表,每台主机中都有一张ARP表,它记录着主机的IP地址和MAC地址的对应关系。
如果主机A想发送数据给主机B,主机A首先会检查自己的ARP缓存表,查看是否有主机B的IP地址和MAC地址的对应关系,如果有,则直接使用。如果没有才会通过广播获取

交换机表与路由表与其他相关协议

局域网的通信还与交换机和路由有关,这里暂时留空。
DHCP(动态主机配置协议)大多用以分配局域网ip
DDNS(动态域名服务)因为一般家庭获取的公网ip(电信,联调可以申请,移动听说比较麻烦,基本只能frp,开源的NPS用着不错)是动态的,所以需要通过DDNS将ip映射到域名上。

PAT 端口地址转换

端口地址转换(PAT)创建一个表,用于映射使用时的地址和端口号。
支持端口转换的NAT又可以分为两类:源地址转换和目的地址转换。前一种情形下发起连接的计算机的IP地址将会被重写,使得内网主机发出的数据包能够到达外网主机。后一种情况下被连接计算机的IP地址将被重写,使得外网主机发出的数据包能够到达内网主机。实际上,以上两种方式通常会一起被使用以支持双向通信。

  • 当本地网络上的计算机将数据包发送到公共网络时,PAT设备可以更改其标头数据。实际源地址将替换为端口地址转换设备的IP地址。 PAT设备为源计算机与公共网络的连接分配新的端口号。然后,标头中的实际源端口号将替换为新分配的源端口号。通过这种方式,传出数据包被修改为看起来好像它直接来自PAT设备。
  • 对于传出数据包,端口地址转换表保留源地址,源端口和分配端口的副本。只需通过执行表查找,就可以为具有该源地址和端口的每个数据包使用相同的端口号。当公共网络响应时,它将在分配的端口号上将数据包发送到PAT设备的IP地址。然后,PAT设备将使用查找表中的实际专用地址替换该目标地址。它还将使用表中的实际端口号替换数据包标头中的端口号。

PAT转换表由IP地址+端口号为key,当WAN到LAN设备处理来自LAN侧的多个网络主机的相同端口请求时,PAT分配不同的外网端口即可。

NAT穿透 内网穿透 frp反向代理

当我们使用了NAPT/PAT之后,我们就会面临一个很尴尬的局面,我们可以轻松的通过端口转换来访问外网,但当外网想要主动的访问内部网络时,就不是那么容易了。

windows下一些相关命令

ipconfig 查看ip信息
arp -a 查看所有ip到mac的映射缓存记录