1.集线器,又名HUB。一般只起增强信号的作用,并不对流经的数据进行处理。数据转发采用广播方式,只适合少量终端设备的情况。
2.交换机。它会对转发数据的数据链路层(OSI第二层)进行处理。
2.路由器。它会对转发数据的网络层(OSI第三层)进行处理。
以上都是一些原始定义,实际情况中,由于都是网络数据交换设备,跨界的情况随着硬件的升级,而屡见不鲜。比如现在的集线器,多数也有简单的数据处理能力;而现在的交换机,有的也有第三层处理能力(比如三层交换机)。
以我的经历为例,2003年左右,大学宿舍的兄弟们就使用集线器,进行联网游戏。
2007年,换用交换机,和合租的同事,一起上网。
2010年,换用无线路由器,手机也可以wifi上网了。
XMPP(Extensible Messaging Presence Protocol)和SIP(Session Initiation Protocol)都是应用层的数据交换协议。作为它们前辈的HTTP虽然取得很大成功,但也存在如下问题:
1.内容形式主要限定为html,对于传输非界面数据的应用来说,效率不高,也不专业。
2.HTTP基于Client发送请求,Server响应的模式。对于VOIP这样的应用来说,Server主动发送数据的能力显然更关键。
XMPP和SIP的特点如下表所示:
XMPP | SIP | |
---|---|---|
核心协议的目的 | 服务于结构化的数据交换 | 服务于连接的建立 |
核心外扩展 | 添加Jingle协议支持面向连接的业务 | 添加SIMPLE协议支持即时通信业务 |
应用支持和扩展性 | 优 | 一般 |
数据格式 | XML,易解析 | 文本,不易解析。 |
通道方式 | 控制和数据通道是一体的,Clent只与Server建立连接,而Client与client之间是没有连接的。Client之间传送的通道是:Client1-->Server1-->Server2-->Client2。这种方式看起来扩展性差,Server压力很大,但是能够实现很好的业务功能,比如留言、广播、群聊、状态更新、Blog、微博、数据共享等等。 | 连接建立通道与数据传送通道是各自独立的,连接建立在Client与Server之间,而数据传送通道是在Client-->Client之间直接进行的。这个对视频、语音和文件传送业务很合适,但是不适合其他形式的应用。 |
底层协议 | TCP and TLS only | UDP, TCP and TLS |
连接方式 | 单向连接,只有Client可以向Server发起连接请求,Server不会向Client发起连接。这样便于NAT和firewall的穿越。 | 双向对称,客户端和服务器都可以主动发起连接请求并响应,这种对称连接的方式在穿越NAT和firewall的时候,带来很大的复杂性,无法保证穿越NAT。 |
前景 | 开源实现众多,应用广泛。且被Google、MS、Facebook等巨头支持,前景乐观。 | 核心外业务没有起色。核心业务也遭到Jingle协议的挑战。 |
2009年经济危机时代,我曾经去一家start up面试,当时它们的业务就是SIP开发。可惜才从那里出来,就接到了某外企的offer,所以也就没有下文了。
参考:
http://my.oschina.net/linuxhunter/blog/35370
基于loudmouth的XMPP客户端DEMO
http://xmpp.org/xmpp-software/
这个网页列出了XMPP的各种客户端、服务器以及库的实现。在我们的项目中,服务端使用Openfire,嵌入式客户端使用gloox。
http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html
Openfire的聊天记录插件开发。
Openfire的官网是:
http://www.igniterealtime.org/projects/openfire/
从官网可下载源代码包和可执行文件包,这里选用deb格式的安装包。安装之后的文件主要在:
1./etc/openfire。配置文件目录
2./usr/share/openfire。可执行文件及jar库的目录。
可以使用以下命令:
/etc/init.d/openfire {start|stop|restart|status|condrestart|reload}
web设置可访问以下网址:
http://127.0.0.1:9090
Spark和Openfire都是Ignite Realtime的产品。Spark是一个Java写的XMPP客户端。注意,这个Spark和Hadoop生态圈的Spark不是同一个软件。
我一开始直接下载二进制包,但无法运行,原因不详。
于是改用源代码编译的方式。源代码地址:
https://github.com/igniterealtime/Spark
编译方法:
cd build
ant
可执行程序:arget/build/bin/startup.sh
登陆时的“服务器”一栏,要填写服务器名称,填IP地址是不行的。
osip是SIP协议的一个开源实现。其官网为:
http://savannah.gnu.org/projects/osip
eXosip在osip上封装了一层,简化了在多媒体会话方面SIP协议的使用。其官网为:
http://savannah.nongnu.org/projects/exosip/
最近,由于捣鼓VNC剪贴板没有结果,我不得不寻找它的替代方案,这时IRC进入了我的视线。
IRC虽然没有XMPP那么强的功能,但毕竟是20年前的东西了,各种资料和支持都比较完善,使用配置也没有后者那么复杂,是个不错的东西。
这里推荐两款:
1.ircd-hybrid
http://ircd-hybrid.org/
2.unrealircd
https://www.unrealircd.org/
安装教程:
http://soft.dog/2016/03/25/unrealircd-basic/
开始使用的是hexchat。官网:
https://hexchat.github.io
Windows版本做的不错,但Linux版本老是运行不起来。。。
最后一气之下,想到了emacs,而后者也不负所望。
M-x erc
常用IRC命令参见:
https://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands
注意细节如下:
1.join命令中输入的channel名如果不存在,则会创建channel。相当于该命令既是加入命令,也是创建命令。
Network Time Protocol,是用来让计算机之间实现时间同步的协议。
网上可用的NTP Server列表,可参见:
http://www.pool.ntp.org/en/
ntpdate cn.pool.ntp.org
NTP的Client有很多,这里使用ntpclient软件。它的官网:
http://doolittle.icarus.com/ntpclient/
调试的时候,可以使用如下命令设置时间:
sudo date -s 10:00:00
修改之后,可用date
命令查看系统当前时间,确认修改的效果。
ntpd是NTP的另一个实现,既可以当Server,也可以当Client,已经被集成进busybox。
https://mp.weixin.qq.com/s/OEbhKBBbo-eo4NWmLYmGDg
有关部分北京市民“穿越”的科学解读
https://mp.weixin.qq.com/s/wX-BXGDAZGm8FYc6-FbUhg
用NTS保证NTP的安全
服务器端 | 客户端 |
---|---|
1.创建socket | 1.创建socket |
2.bind | 2.listen |
4.accept | |
等待客户端连接 | 3.connect |
5.读数据(recv) | 4.写数据(send) |
6.写数据(send) | 5.读数据(recv) |
7.关闭socket(closesocket) | 6.关闭socket(closesocket) |
服务器端 | 客户端 |
---|---|
1.创建socket | 1.创建socket |
2.bind | 2.bind |
3.recvfrom | |
等待连接 | 3.sendto |
4.sendto | 4.recvfrom |
5.关闭socket(closesocket) | 5.关闭socket(closesocket) |
在linux当中,socket包括两类:使用网络的socket,称为Berkeley socket;不使用网络的socket,称为Unix domain socket。两者API结构很像,所以容易被混淆,但是其实不是一个东西。
Unix domain socket是为单机上跨进程通信,也就是IPC设计的。通信数据直接通过kernel在进程间交换,与网卡毫无关联。
本机Socket通信不走网卡,不走物理设备,但是走虚拟设备,loopback device环回。
https://www.zhihu.com/question/43590414
Linux中本机和本机Socket通信会走网卡吗?
WPS分为PBC(BUTTON)和PIN两种方式
按WPS按钮实现WPS安全连接。
在AP中,在WPS设置中,设置为启用。
按一下客户端(无线网卡)上的WPS按键,搜索WPS网络。
按一下AP上的WPS按键,WPS开始链接协商,片刻后WPS安全连接成功建立。
1.PIN(Internal Registra, 相对于AP而言):通过在路由器中输入客户端PIN码来实现WPS安全连接。
在WPS设置中,把状态设置为启用。
打开客户端WPS设置软件,选择在路由器中输入PIN的方式连接,同时软件上还会显示客户端当前的PIN码。
打开路由器界面,在WPS模式里选择PIN模式,然后输入客户端的PIN码, 点添加新设备,一会儿后,WPS安全连接成功建立。
2.PIN(External Registra, 相对于AP而言):通过输入AP的PIN码实现WPS安全连接。
在AP中,在WPS设置中,设置为启用。
记住AP的PIN码,然后打开客户端(无线网卡)WPS设置软件,选择以AP的PIN码来进行连接。
输入完PIN码后,点下一步,一会儿后,WPS安全连接成功建立。
ZeroMQ是个在Socket之上,而在MQ之下的网络通信库。正如名称所言,它实际上并不是一个完整的MQ,而仅仅只有MQ的一些子功能罢了。
http://zeromq.org
参考:
https://blog.csdn.net/w174504744/article/details/73187697
ZeroMQ
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。
http://blog.csdn.net/jiuqiyuliang/article/details/46701559
深入浅出JMS(一)–JMS基本概念
您的打赏,是对我的鼓励