摘要:通俗地说,锚点就是这台移动客户端呈现在互联网上的“公网IP + 端口号”的组合,服务器其实一直以为是在和锚点在通信,只要锚点不变,服务器端不会Reset连接。无线客户端在移动的过程中,从一个AP解绑,然后绑定到另一个AP,可能会造成原有的IP无法继续使用,必须接收新AP分配的全新IP,这样也会造成TCP连接的Reset。

问题描述

网络通信时一般需要获取对方设备的IP地址,但IP地址在连接过程中发生变化怎么办?

在下不是计算机科班出生,最近学习JAVA的socket编程时突然想到这个问题,以前本科学的课中提到ip地址是DHCP协议动态分配的。所以不解这个问题。求知乎大佬指教。

这个问题很有技术含量,具有代表性,值得好好地讨论。

IP地址的改变,无非就是手动配置改变、自动配置改变。通信好好的,没有哪个用户会手动修改自己的IP。但是,如果用户非要修改IP,那也没有什么,在修改成功之前,操作系统会将当前的连接Reset掉,然后再修改IP,修改完成再重新连接。

自动配置

这里的自动配置是指通过DHCP动态获得的IP,IP地址是租来的,一般租期为8个小时,在租期届满之前,一直可以使用。为了保持通信的畅通,一般客户端在租期还剩余一半的时候,就开始和DHCP服务器进行租期延长对话,正常情况下都是续租成功的。只要续租成功,IP地址都是可以正常使用的。

当然,如果DHCP服务器在续租的时候,将该IP保留了不再续租,那么用户续租将不会成功,客户端会继续使用原有的IP继续通信。然后在IP租约到期之前再次续租,如果依然无法成功,将放弃原有IP,接收DHCP服务器全新IP的分配。既然IP地址发生了变动,TCP连接肯定要Reset,然后建立全新的TCP连接。

无线客户端

无线客户端在移动的过程中,从一个AP解绑,然后绑定到另一个AP,可能会造成原有的IP无法继续使用,必须接收新AP分配的全新IP,这样也会造成TCP连接的Reset。

即使老的AP与新的AP分配的IP网段完全一致,分给客户端的IP地址完全一样,客户端的IP地址虽然没有变化,但是由于绑定的AP变了,专业的属于叫“锚点位置变了”,与互联网的通信由于NAT的条目不存在,造成通信的Reset。

通过以上的介绍,会发现如果要保持一个TCP连接不断,需要同时满足两个条件:

主机IP不变

主机在互联网上的锚点(Anchor Point)也要不变

只要满足了以上两个条件,无论移动客户端移动到哪里,无论是使用WiFi,还是使用移动4G网络,此结论统统成立!

什么是锚点?

通俗地说,锚点就是这台移动客户端呈现在互联网上的“公网IP + 端口号”的组合,服务器其实一直以为是在和锚点在通信,只要锚点不变,服务器端不会Reset连接。

主机IP不变

主机IP不变,主机不会吃饱了撑的,去Reset当前的连接。只有发生了改变,则会Reset当前连接。

如何实现呢?

主机IP不变还是很好实现的,主机漫游时一般会保留自己当前的IP,就让你保留好了。无线网络说既然您喜欢,那您就接着用。但是,非常不幸的是,主机已经移动到另外的锚点了,至少公网IP肯定与原有的不一样了。

解决方案

在新锚点与老锚点之间建立一个隧道,将漫游的主机流量全部隧道传输到老的锚点,老锚点再将隧道里的流量提取出来,使用老锚点的关键信息(公网IP + 端口号)替换掉主机的私有IP + 端口号,最后将流量发到互联网上,并最终到达服务器。服务器一检查四元组,和以前一摸一样。

埃文科技——IP定位技术领域专家,最全面、最精准的网络空间地图服务提供商。

公司成立于2012年,专注于网络空间、地理空间和社会空间的相互映射,绘制三位一体的网络空间地图,对网络空间资源的静态属性和动态变化情况进行探测。拥有27项软件著作权及13项发明专利。​​​​

相关文章