IM的登录步骤
-
1、用户A输入自己的用户名和密码登录即时通讯服务器,服务器要据用户名、密码等信息来验证用户身份,成功则马上登录IM主界面。同时记录用户A的IP地址、IM客户端软件的版本号及使用的TCP/UDP端口号。这时用户A在IM系统中的状态为在线(Online Presence),现在的IM一般不做在离线的标识。
-
2、登录之后服务器会向用户A发送好友列表(Buddy List),同时广播用户A在线的消息给其在IM上的好友(如需要)。发送好友信息或用户A的信息都将包括在线状态、IP地址、 IM客户端使用的TCP端口(Port)号等,(对于QQ来说,好友PC机上的IM会收到此信息后提示信息)。
对等通信方式
在一个IMk ,如果用户A想与他的在线好友用户B聊天,客户端自动从服务器得到用户B的IP地址、TCP端口号等信息,用户A直接向用户B的PC机发出聊天信息,用户B的IM客户端收到消息后,再直接回复到用户A的PC机,这样双方的即时文字消息就不通过 IM服务器中转,而是通过网络进行点对点的直接通讯,这称为对等通讯方式(Peer To Peer) 。
服务器中转
在商用IM中,如果用户A与用户B的p2p通讯由于防火墙、网络速度等原因难以建立或者速度很慢, IM服务器提供消息中转服务,即用户A和用户B的即时消息全部先发送到IM服务器,再由服务器转发给对方。
IM中TCP协议的采用
早期的IM系统,在**IM客户端**和**IM服务器**之间通讯采用UDP协议,UDP协议是不可靠的传输协议;而在 IM客户端之间的直接通讯中,采用具备可靠传输能力的TCP协议。
随着用户需求和技术环境的发展,**目前主流的即时通讯系统倾向于在即时通讯客户端之间、即时通讯客户端和即时通讯服务器之间都采用TCP协议 **。
方案一
S——C1
|
|
C2
说明: C1每次想和C2通信,先向S递一个申请,然后S同意,把信息转交C2, 以后每次通信都这样
结论:该方案对服务器的性能要求比较高,要求服务器可以同时处理很高的连接数,因为所有信息都要通过服务器进行传递,同时,它可以对所传递的信息进行控制。
方案二
S——C1
| /
| /
C2
说明:C1第一次想和C2通信,向S递一个申请,S同意,告诉C1/C2,然后 C1和 C2之间建立了一条连接,可以直接通信,无需经过S。
结论:该方案仅仅是用户登陆或下线时与服务器进行连接,平时进行通信时,是用户之间直接进行点对点的连接,这种实现更合理一 些。
STUN —— 解决私网NAT穿透问题
全称:Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)
STUN,是为了实现透明的穿透NAT,而定义的一套协 议。他使本地的内网的机器,具有取得,能够得知他的NAT网关的IP,NAT类型的能力。
'the protocol described here, Simple Traversal of UDP Through NAT (STUN), allows entities behind a NAT to first discover the presence of a NAT and the type of NAT, and then to learn the addresses bindings allocated by the NAT. STUN requires no changes to NATs, and works with an arbitrary(任意) number of NATs in tandem between the application entity and the public Internet.‘
NAT特性
NAT分为4种(加上防火墙的话,还多出几种情况)
1、完全透明NAT(Full Cone NAT):
“进内部网的数据包的SPORT,SPORT不受限制"
从相同内部主机(IN IPX) +端口(IN PORTX)发送的数据被映射为相同的IP(OUT IP X)和端口(OUT PORT X) 发送到外网;接收端的服务器(Y)的内部主机IP与端口也是直连到MAPING的IP(OUT IP X)和端口(OUT PORT X )上,数据将会被转发到内部主机上. (IN IPX), (IN PORTX).
2.受限NAT(Restricted Cone)
也就是说进内部网的数据包的,SPORT不受限制,SIP受限制,只能为NAT MAP数据的IP。
双方进行通信息,从相同内部主机(IN IPX) +端口(IN PORTX)发送的数据被映射为相同的IP(OUT IP X)和端口(OUT PORT X) 发送到外网。和发送端的NAT不同的是,接收端只有当为X时,外部机器的的请求就被转发到主机IN IPX) +端口((IN PORTX)。
3,端口受限NAT(Port Restricted Cone:)
区别于受限NAT,只有当外部主动请求的的源IP和端口,等于内部网发送的请求的目的IP和端口。
4.对称NAT(Symmetric)
如果发送的包的目的IP AND PORT,那么MAPPING IP AND PORT,将相同。内部网同一台机器,同一个端口 如果目的地址不同,那么MAPPING的端口也不同。
MAPPING端口获取:需要用户主动连的服务器,才可知道他的MAPPING后端口。
总结
前面3重NAT,MAPING PORT 和 IP,是根据发送包的的内部网的IP和端口决定的。如果数据的内网IP和端口相同,那么MAPPING后的端口和地址是固定。这个功能为我们的穿越提供了很好条件。
第4种NAT,打洞后的MAPPING 地址和端口将变地不可靠,很难穿越。
注意:通信双方都必须有MAPPING的公网地址。
STUN 的简单操作过程
发送请求,分为两种
- 1、Binding Requests, sent over UDP:
用来发现是否NAT,用来发现NAT的公网地址,和MAPPING后的端口 - 2、Binding Response
服务器产生Binding Response,并把得到的MAPPINGIP 和端口,返回到客户端, 客户端比较MAPPING地址是否 和本机地址相同,如果是说明是本机也是公网,否则判断NAT的类型(判断方法:client uses additional STUN Binding Requests) - 3、Binding Error
- 4、Shared Secret Requests, sent over TLS [2] over TCP.
这个请求要求服务器返回一临时用户名和密码,用来下一步的Binding Requests/ Response,用来验证信息的完整性 - 5、Shared Secret Response,
- 6、Shared Secret Error Response。
STUN 信息结构
- STUN 由以后数据结构构成:STUN头+STUN有效载荷
- STUN头结构如下: 存储的值都是以网络顺序存放
- 字段类型
- STUN message type Short int 消息类型
- Length Short int 有效载荷长度,不包含头长度
- transaction ID octet[16] 连接的ID值,检查Request,和Response
参考:https://blog.csdn.net/sanfengshou/article/details/5664195
网友评论