您的位置:首页 > 代理IP资讯
发布时间:2020-02-28 16:31:31
如何修改电脑ip、一种动态切换TCP连接IP地址的实现方法

  TCP是一种可靠的面向连接的传送服务。它在传送数据时是分段进行的,主机交换数据必须建立一个会话。它用比特流通信,即数据被作为无结构的字节流。通过每个TCP传输的字段指定顺序号,以获得可靠性。TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。在协同IP的操作中TCP负责:握手过程、报文管理、流量控制、错误检测和处理(控制),可以根据一定的编号顺序对非正常顺序的报文给予重新排列顺序。


  1、请求变更选项


  使用TCP自定义选项K ni d值为20,长度为4,Reverse字段可以根据实现不同而定,可不填写,也可以填写为当前的时间戳,用于选项重复发送的纠正。次选项由变更发起端发送,发送后启动定时器,连续发送5次对端无响应表示对端不支持IP动态变更。被动端收到此选项后如果支持,回复变更确认选项,此选项针对每次请求回复。


  2、变更确认选项


  使用TCP自定义选项K ni d值为21,长度为4,Reverse字段根据收到的请求变更选项进行处理,如果收到的请求变更选项为空,则回复也为空;如果收到的选项次字段为时间戳,则将此时间戳作为变更确认选项进行回复。每收到一个变更请求选项均单独回复变更确认选项。


  3、变更数据选项


  使用TCP自定义选项K ni d值为22,长度为70字节(IP地址结构—兼容IPV 6、端口号、保留字段综合)。当发起端收到了变更确认选项后会将即将变更的IP地址与端口号作为选项值发送给对端,选项连续发送5次,对端无响应表示对端处理异常,直接返回选项设置失败。


  4、变更数据确认选项


  使用TCP自定义选项K ni d值为23,长度为4,针对变更数据选项进行确认,当被动端收到变更数据选项后用此选项进行回复。每收到一个变更数据选项均单独回复变更数据确认选项,同时更新本地连接信息。


  三、IP地址动态变更流程


  1、上层应用根据需求动态配置变更功能


  上层应用(路由协议、主机服务等)根据用户配置数据,动态将需要变更的IP地址和端口号通过设置选项的形式下发给协议栈,协议栈将用户数据存入SOCKET控制块用,准备用于与远端进行地址变更操作,并调用TCP接口进行选项的下发。


  2、发起端在发送的数据中增加到对端的选项


  TCP通过选项接口收到变更请求,开始对收到选项后的报文进行封装,首先区分地址类型,区分V4/V6地址类型,针对不同的协议族打标签,发起端在发送第一个请求报文后,随TCP重传定期器一起启动重传,默认重传5次以保证报文在网络中丢弃的情况下能正常恢复,当5次重传没有收到需要的回应时,关闭定时器并取消地址变更流程。此时发起端需要对用户设置的选项进行校验,校验的原理是,用新生成的四元组信息(Local IP2、Local Port2、Remote IP、Remote Port)在本地的TCP H ASH表中查询,如果查询到冲突则直接给上层应用返回选项设置失败。当选项设置成功后,生成新的元组信息存入本地的TCP H ASH表中,这样后续就可以同时处理两个IP地址的报文,保证通信正常。


  3、被动端收到请求后,查看本端是否支持动态变更


  当主机收到变更选项后,调用SOCKET选项获取接口或者访问TCP控制块,判断本端是否支持地址动态变更,如果支持则准备回复ACK,如果不支持那么仍然处理TCP报文,仅将TCP选项丢弃,保持正常的数据交互不出现问题。


  4、被动端根据自己的支持情况回复确认消息


  如果支持,被动端在后续发送的TCP报文中增加选项的确认,每收到一个变更选项则在报文中回复一个选项,选项长度与发起端的长度一致,直接将V aul e字段复制带回,用于选项的校验。5、发起端在后续发送的数据中增加“变更数据”


  当发起端收到了变更确认选项后,进入数据变更状态,此状态下同样随TCP重传定时器一起启动一个5次的重传,开始发送变更数据选项,变更数据同样根据V4/V6进行区分,在开始发送IP地址变更时,TCP报文中的IP地址仍然使用原始的,不进行变更。5次发送了变更数据后如果收不到对方的确认,则表示对端设备处理失败,直接返回,继续处理TCP报文丢弃TCP选项。


  6、被动端接受对发起端进行相应确认


  被动端收到变更数据选项后,暂时将数据缓存而不进行处理,等待发起端的二次确认。在此期间被动端对发起端的数据进行确认,采用数据确认选项进行回复。此时被动端向发起端回复的TCP数据仍然使用原始的IP地址与端口号。与此同时,被动端也对发送过来的IP地址和端口号进行校验,校验的原理为,用新生成的四元组信息(Remote IP2、Remote Port2、Local IP、Local Port)在本地的TCP H ASH表中查询,看是否有相同的元组信息,如果冲突,则回复变更数据失败,否则回复成功,并创建一个新的H ASH表项,此表项生成后本地TCP即可以同时处理两个地址发送过来的数据。


  7、二次确认


  二次确认主要用于保证通信双方可以都收到对端的数据,正确处理变更数据,当发起端收到数据确认选项后,此后发送的报文均修改为新的IP地址和端口号,并将本地原有的老的IP地址和端口号的元组信息的TCP表项从本地TCP H ASH表中删除。标志本地变更完毕。


  8、被动端变更完毕


  被动端当用新的元组信息收到第一个正确的报文(TCP处理正确)后主动删除本地老的IP地址和端口号的TCP表项。


  至此整个变更过程完成,TCP会话的两侧都从原有的通讯地址转换到新配置的通讯地址进行通讯,同时TCP原有连接的所有信息都得以保留包括TCP序列号、TCP选项、连接当前的定时器状态、RTT值计算等。而对于用户层面,可以保留业务正常运行,不感知底层发生数据交互的变更。


  五、应用前景


  IP地址的变更在小型设备上入个人PC、部分移动终端等应用场景较少,因为其使能DH CP功能后,基本上不会变更,再即将发生变更时会主动续约,增加IP地址的使用。


  但是在运营商IP服务中心,每一台路由器设备、主机服务器的IP一般是不会变更的,在网络规划时就已经确定某一个网络主机配置固定的IP地址,但是由于后期网络规划的更新,以及业务的变迁会产生IP地址变更的场景,此时往往需要重新配置网络主机,对于路由器设备会造成网络中路由的震荡,尤其在国际关口局,路由的大量震荡会造成全网路由震荡。因此需要一种技术能够支撑上层应用在不断开连接的情况下动态的变更主机的IP。


  六、技术发展规划


  目前的实现方案只适用于异步通信的协议栈实现,选项的设置,通知均以事件的形式互相通知,暂时还不适用于同步调用的协议栈。但是协议栈今后的发展是趋向于异步分布式交互,后续将得到广泛地应用。本文档所研究的仅仅实现了对TCP会话更改IP地址的一种形式,在转换过程中会增加系统的开销,如果在多链路情况下如运营商的国际关口局、主机服务器,切换会导致系统的繁忙。


  因此,本方案后续可以继续优化其系统性能的影响,由于是基于异步交互实现,可以进一步移植到同步协议栈,供简单的移动终端等使用。


上一篇 下一篇