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连接不断,需要同时满足两个条件:
1、主机IP不变;
2、主机在互联网上的锚点(Anchor Point)也不变。
只要满足了以上两个条件,无论移动客户端移动到哪里,无论是使用WiFi还是4G,都可保持一个TCP连接不断。
那么,什么是锚点?
锚点就是这台移动客户端呈现在互联网上的“公网IP+端口号”的组合,服务器其实一直以为是在和锚点在通信,只要锚点不变,服务器端不会Reset连接。
主机IP不变:主机IP不变,只有发生了改变,才会Reset当前连接。
如何实现呢?
主机漫游时一般会保留自己当前的IP,但其实主机已经移动到另外的锚点了,至少公网IP肯定与原有的不一样了。
解决方案:
在新锚点与老锚点之间建立一个隧道,将漫游的主机流量全部隧道传输到老的锚点,老锚点再将隧道里的流量提取出来,使用老锚点的关键信息(公网IP+端口号)替换掉主机的私有IP+端口号,最后将流量发到互联网上,并最终到达服务器。服务器一检查四元组,和以前一摸一样。