一,Socket
网络模型
OSI(Open System Interconnection开放系统互联模型)为了全家计算机之间可以通讯才发明的这个模型
模型如下(其中每一层都有每一层协议)
1.应用层:解析的东西显示到这上面
2.表示层:对数据的解析
3.会话层:建立连接 其中Socket是来到会话层的
4.传输层:定义传输层协议TCP UDP
5.网络层:路由寻址 路由器,寻找IP的
6.数据链路层:对mac地址的解封装 交换机 现在有些交换机也有路由寻址的功能了
7.物理层:制定物理适配的标准,进行数据的传输,用比特流传输
TCP/IP参考模型
现在我们真正实现全球互联的是TCP/IP参考模型,模型如下,就是把OSI\参考模型合并了一些,简化了一些
1.应用层
2.传输层
3.网际层
4.主机到网络层
发送消息的简单过程:就是一个Hello信息先送从应用层出发,最后到物理层每经过一层的时候,每一层都加一个标示,最后网线通过电流的方式发送到另外一个电脑,另外一个电脑接收到电流的时候,从物理层到应用层,再每一层把标示去掉,最后解析成Hello显示到界面上来
详细过程:比如QQ和服务器进行信息交互
1.首先通过IP+端口通过三次握手建立长连接(TCP)
2.建立连接之后会在QQ和服务器没人各有输入流和输出流通道.用来传输数据(输入流写数据,输出流读数据)
3.然后输出流发数据输入流接收数据(一旦建立链接就盯着输入流看看有没有数据)
网络通讯要素
1.IP地址(网络设备的唯一标示)
2.端口号(用于标示进程的逻辑地址,不同进程的标示,比如标示是微信还是QQ)
3.传输协议(通讯的规则比如TCP UDP)
TCP(传输控制协议):需要建立连接,通过三次握手完成连接,安全协议,安全送达,数据大小不受限制但是效率低
UDP(用户数据包报协议):将数据源和目的封装在数据包中不需要建立连接,不可靠协议,数据大小限制在64K之内,效率高
HTTP请求是短链接,也是通过TCP连接的,首先HTTP通过IP和端口号进行三次握手建立连接,然后HTTP把数据发给服务器,发给服务器之后服务器返回给客户端数据,然后服务器就立马断开连接,所以我们说HTTP请求书短连接
Socket
Socekt就是为网络服务提供的一种机制.通信的两端都是Socket,网络通信其实就是Socket的通信,数据在两个Socket之间进行IO传输
Socket连接的流程如下:
客户端的Socket()通过connect()和服务器端建立连接,服务器端的listen()监听阻塞直到有客户连接,然后accept()接收连接,建立连接之后客户端的Write()和服务器端的read(),客户端的read()和服务器端的write()就进行数据交互了
二,XMPP简介
首先要知道即时通讯技术(IM-INstant Messaging)
都是遵守XMPP即时通讯协议
设计一款全世界都使用的即时通讯协议,无论使用什么即时通讯软件,只要他遵守这个协议,都可以互联互通
世界上有好多的IM系统,比如QQ,MSN他们最大的区别就是在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议
协议用来说明信息在网上如何传输,如果有了统一的协议,那么应当可以实现IM之间的直接通讯,为了简历即时通讯的统一标准,目前已经出现的IM协议包括...以及基于XML且开放的可扩展通讯和表示(XMPP)协议(常成为Jabber协议)
XMPP的扩展协议Jingle使得其支持语音和视频,目前ios尚不支持
xmpp的官方文档是RFC 3920
XMPP曾经是Google力推的及时通讯协议,代表作是GTalk
XMPP是一个典型的C/S架构,而不像大多数通讯软件一样是使用,P2P客户端到客户端的架构,也就是说在大多数情况下,当两个客户端进行通讯的时候,他们的消息,都是通过服务器传递的.采用这种架构,主要是简化客户端,将大多数工作放在服务器端,但是这样服务器的压力就大了,相反P2P服务器压力就小点
XMPP定义了三个角色:客户端,服务端 网关 通信可以在这三者之间任意两个双向发生
XMPP基本的网络形式是单客户端通过TCP/IP连接到单服务器上,然后在之上传输XML流
XMPP应用传输的是与即时通讯相关的指令,比如QQ是用二进制的形式发送,MSN是使用纯文本指令加空格加参数加换行符的形式发送.而XMPP传输的通讯指令逻辑和他们相仿,只不过协议的形式变成了XML格式的纯文本,这不但使得解析容易了,而且容易阅读,方便了开发和查错
XMPP是用TCP传的XML流
XMPP优点
开放
可扩展
标准(XMPP的技术规格已经被定义在RFC3920及RFC3921)
证实可用,谷歌证实了GTalk
分散
安全
XMPP缺点
数据负载过重XML
没有二进制传输
XMPP是一种类似于HTTP协议的一种数据传输协议,其过程就是如同解包装-包装的过程,只需要理解其接受的类型和返回的类型,便可以利用XMPP进行数据通讯
XMPP官方网站 http://xmpp.org
XMPP的服务器和客户端通讯都必须是通过XMPP实现的(例如基于XMPP的openfire服务器)