外网、内网,app互相通信,消息反向发送

之前在做系统时有一个应用是,app、外网服务端、内网服务端、内网客户端通信互发消息,由于系统的设计,内网服务端和外网服务端被定义成为web服务器,这里的外网服务端

和内网服务端没有严格的定义可以随意的替换成其他的,在我们的应用中外网服务端是一个外网的web应用的服务器,内网服务端是一个联网的内网的服务器(多个),内网客户端是一个不联网的本地程序(一个内网服务端下面有多个),app则是一个联网和外网服务端通信以及通过wifi网络和内网服务端通信的应用程序(这里略去wifi通信),消息通信的流程是,app用户根据当前的经纬度从外网服务端中获取到当前地理位置附近的内网服务端集合(每个内网服务端都在外网中能查到经纬度地址),然后app选取某一个内网服务端,并给外网服务端发一个消息,消息的内容是app用户自己的信息和内网服务端的标识符号,然后外网服务端根据app发送的消息内容中的内网服务端标识符,将app用户的信息发送到指定的内网服务端中去,内网服务端收到信息之后将app用户的信息缓存起来,以便app到达内网服务端所在地点的时候,内网的客户端通过其触发方式开始验证,在验证的时候取出缓存信息来做校验,当然其中涉及到一些其他的细节,会话缓存,心跳失效,内网服务端信息缓存,内网多客户端等等,这里就不详述了。限制条件1是外网服务端并不知道内网客户端的实际地址。

在设计实现的时候想了一些思路,首先外网服务端和内网服务端通信,因为不知道内网的地址但是知道外网服务端的地址,所以采用socket的方式,套用了一个现成的框架mina,

由内网服务端在启动的时候,携带一个自己的标识符(这个标识符在外网服务端的系统中是已经注册的,能找到对应的相关信息,以便和app带过来的标识符号对应),去主动的链接服务端,这里涉及到的一些链接超时失效重连等等不在详述,然后外网服务端收到内网服务端的连接之后把这个链接缓存下来,缓存的信息包括(会话本身,表示符号,连接时间戳,活跃状态,上一次主动心跳时间戳)等等。这样一个简单的会话缓存就保存下来了。然后下一步是外网服务端等待app的访问,从访问中获取app用户自己的信息和内网服务端的标识符,然后从之前保存的socket会话缓存中找到对应的会话,如果能找到则判断活跃状态代表是否网络正常可发送,然后发送,如果没有找到对应的会话则是未注册的服务,不做处理,经过这样的逻辑之后就将消息通过流写出去,然后再返回处理结果,这样就完成了简单的一个流程。

具体的部分实现程序可见之前一篇的博客(http://blog.csdn.net/u013614451/article/details/40711021)

关于其中外网服务端保存内网服务端会话的有效性以及监控所有内网服务端的网络状况,模仿心跳机制实现,

参见博客()

时间: 2024-10-12 15:40:20

外网、内网,app互相通信,消息反向发送的相关文章

linux服务器外网内网(双网络)搭建

一共有2台服务器,分别用a,b表示.a双网卡,即有外网也有内网.b只有内网环境.a,b的内网是通过交换机组建.至于外网怎么搭建我就不说了.关键说一说内网是怎么组建的. 如果你对linux不熟悉,对网卡配置文件不熟悉的话,可能会踩到不少坑.不过你也可能会很顺利的就把这个内网组建起来.下面说说步骤: 1.a,b分别用网线与交换机连起来. 2.a,b的内网ip都设成同一个号段(例如 : a:192.168.1.2  b:192.168.1.3 ) 完成以上步骤然后互ping一下,如果通了就说明你的内网

QQ通信原理及QQ是怎么穿透内网进行通信的?

QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!!! 一.登录 QQ客户端在局域网内,当你打开QQ登录到QQ服务器时,通过外网,你的客户端与QQ服务器建立了一个长连接.你可以用netstat -bn  看到此连接的状态是 establish 此时,在QQ服务器那面看到的连接的IP是你们局域网对外的IP.举个例子: QQ服务器      IP:121.115.

【转】QQ通信原理及QQ是怎么穿透内网进行通信的?

QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!!! 一.登录 QQ客户端在局域网内,当你打开QQ登录到QQ服务器时,通过外网,你的客户端与QQ服务器建立了一个长连接.你可以用netstat -bn  看到此连接的状态是 establish 此时,在QQ服务器那面看到的连接的IP是你们局域网对外的IP.举个例子:       QQ服务器      IP:12

内网IP和外网IP

1.什么是内网内网就是局域网,比如一个公司的局域网,局域网内每台计算机的IP地址是互异的,但不同局域网内的IP是可以相同的.2.什么是外网外网就是互联网,内网的所有计算机都是连接到一个外网IP,通过外网IP对外交换数据.内网的IP地址不同,但共用一个外网IP.两个IP同时存在,一个对内,一个对外.3.NATNAT(Network Address Translation,网络地址转换)是路由器的主要功能,负责内网IP和外网IP之间的转换.属于一种接入广域网(WAN)的技术.NAT解决了IP地址不足

QQ通讯原理及QQ是怎么穿透内网的(转)

QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!!! 一.登录 QQ客户端在局域网内,当你打开QQ登录到QQ服务器时,通过外网,你的客户端与QQ服务器建立了一个长连接.你可以用netstat -bn  看到此连接的状态是 establish 此时,在QQ服务器那面看到的连接的IP是你们局域网对外的IP.举个例子:       QQ服务器      IP:12

内网渗透思路

Sky's自留地 关注互联网安全,关注安全&攻击技术. 搜索关键字搜索 首页申请链接 内网渗透测试思路[转自网络] 作者: sky 孵化于: March 15, 2015 家属: 学习类,技术类 访问: 2,136 次 写在前面渗透测试是门技术,也是一门艺术.这门技术(艺术)一开始也不是每个人都会的,正所谓没有人一出生就会走路,从不懂到入门到深谙,一步步慢慢来,每个人都是这样:但是在这个过程中,思路无疑是最重要的,没有做不到只有想不到,就跟咱们高中解题时有了思路就迎刃而解一样,手里拿着铲子(技巧

内网渗透测试思路-FREEBUF

(在拿到webshell的时候,想办法获取系统信息拿到系统权限) 一.通过常规web渗透,已经拿到webshell.那么接下来作重要的就是探测系统信息,提权,针对windows想办法开启远程桌面连接,针对linux想办法使用反弹shell来本地连接. ① Webshell应该都可以调用系统cmd执行一些简单的命令,那么whoami(查看当前权限),netuser(查看用户/组),systeminfo(查看系统补丁修复情况)等常见命令应该是首先被执行 探测的. I: 不具备系统权限: ①  Ser

网络 解决外网与内网或内网之间的通信,NAT穿透

在网络编码中会发现程序在局域网中是可以适用的,但是在外网与内网之间和内网与内网之间就不可行.问题就在于NAT.首先介绍下NAT. NAT的作用NAT(Network Address Translator),网络地址转换.顾名思义,它是一种把内部私有网络IP地址翻译成公有网络IP地址的技术,如图5-1所示.NAT是在IP地址日益缺乏的情况下产生的,它的主要目的是使地址能够重用[9].  图5-1 NAT模型  IP地址分为五类:A类,B类,C类,D类,E类(这里不考虑保留的IP地址).A.B.C类

内网和外网之间的通信

对于初学者而已,我们学习的网络编程(如TCP,UDP编程),我们通常都是在局域网内进行通信测试,有时候我们或者会想,我们现在写的内网网络数据和外网的网络数据有什么不同,我们内网的数据是如何走出外网的呢? 再者,我们大多人都是使用宽带上网,结果发现,A 和 B 的局域网 IP 都是192.168.31.11,当他们都访问百度浏览网页时,百度服务器回复数据时,如何区分是给 A 还是给 B 呢? 公有 IP 和私有 IP 的区别 首先,我们需要了解一下什么是公有 IP 和私有 IP ? 公有地址(Pu