总述
由于IPV4外网地址有限,所以不可能每个联网设备配备一个外网IP地址,故需要将多个内网设备映射到一个外网IP使用,这就诞生了NAT Router。
简述原理
内网与外网可以当作两个网卡端口,每个端口都有输入与输出,内网网卡端口在网络层解析处理数据的源地址与目标地址,如果目标地址同样为内网地址直接转发,否则转到外网网卡端口处理发送(此时需要修改源地址为外网地址,并添加到映射表,待外网数据返回后查表进行转发到内网)。
Lwip实现Nat Router
ip_input
err_t ip_input(struct pbuf *p, struct netif *inp);
该函数是IP层很重要的函数,链路层将数据上传后,最终都会进入到此函数进行数据处理,路由+传输数据到传输层,所以可以在该函数内进行改造。
IP转发
static void ip_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp);
当有多个网卡时,ip_input接收的当前网卡数据目标地址可能不是当前网卡所能处理的,需要转发到其它网卡进行发送,此处可以用来记录nat列表,供后续查询
总结
对于WiFi模组只要能同时存在AP和STA两种模式,就可以作为WiFi中继器使用,共享4G网络或者连接的路由器网络。