关键词: P2P SIP DHT

  P2P(peer-to-peer)是一种“人人为我、我为人人”的开放与共享的思想, 也是一种基于对等的计算模型和基于对等的应用层重叠网络架构。由于没有中央服务器并且网络是自己管理的这种特殊结构,P2P系统天生就拥有高扩展性、健壮性和高容错性的特点。
  传统的P2P系统大致分为三种:(1)中心化P2P,索引服务放在一个中心服务器上,但是参与者之间的数据交换是对等的,例如Napster;(2)纯P2P,索引服务存储在每一个参与者上,通过发起洪泛式的请求来实现信息查询,效率较低,例如Gnutella;(3)混合式P2P,索引服务放在一些超级节点上,通过向超级节点发起请求来实现信息查询,例如Kazza。
  为了进一步提高效率,越来越多的P2P系统采用分布式散列表(DHT)实现查询,这类系统也称之为结构化P2P系统。结构化P2P系统(如Chord、CAN等)把精力主要集中在优化P2P的查询延迟以及对节点加入、离开的维护,从而代替大量发起请求这种低效率的模式。
  SIP(Session Initiation Protocol)是一个类似于HTTP 和SMTP 的基于文本的信令协议, 在IP分组网络中处理端点之间的多媒体会话呼叫的建立、控制和终结等过程, 主要被用来开发和实现VoIP、语音/视频会议、文本聊天、即时消息、交互游戏等业务的系统和终端,尤其在VoIP 和IM系统中得到了广泛的应用。
  目前有不少研究机构已经尝试将P2P和SIP的优势进行互补和结合。本文提出的这种P2P SIP技术,主要采用基于DHT的P2P方法来实现SIP的注册以及资源定位,这里的DHT采用目前比较流行的CHORD算法。
1 体系结构
1.1 节点功能
  在基于SIP的通信系统中,当呼叫建立之后,两个peer之间的媒体交流是直接进行的,所以从这个角度看似乎是P2P 构架。然而,在呼叫建立之前,用户的注册、定位以及呼叫路由都不能缺少服务器的参与,因此传统的SIP系统采用的是C/S构架。而本文采用P2P SIP技术的系统不需要中心服务器,在这种系统中,peer可以直接连接到其他的peer建立通信提供服务。因此,参与的节点不仅类似于传统的SIP客户端满足用户接打电话,而且将所有的peer作为一个整体来看,它们还起到了传统SIP网络中注册机和代理务器的作用,实现了资源定位、维持现有信息以及呼叫路由等功能。
  如上所述,P2P SIP节点提供很多功能,超过了传统SIP体系结构中的任何单一实体。因此,每个节点必须是整个系统中活动的一员,必须提供一些类似于SIP系统中服务器的功能,至少,用来执行附加的类似于服务器以及维持DHT行为的节点应当分布在网络中。这样,一个节点既扮演服务器又扮演终端,从而提供了一个可扩展和可靠的服务器群架构。然而,在实际情况中并不是所有节点的运算能力和性能都一样。如果采用纯P2P构架,每个节点都要扮演两个角色,则所有的节点终端都需要改进以满足要求,这样势必会造成资源的极大浪费。因此将节点按功能的大小分为普通节点和超级节点。
  选择一些高性能(带宽、CPU、内存)并且可靠(在线时间、公网地址)的节点作为超级节点,这些超级节点在一起共同构成可靠的服务器群构架,通过使用DHT来定位用户。普通节点平时连接在这些超级节点上,通过这些超级节点来实现注册、定位。决定成为超级节点或者普通节点都在本地实现。当一个节点启动时,它首先是普通节点,当普通节点检测到自己有足够的性能和可靠性,它就可以把自己变为超级节点。当存在的超级节点离开或者达到它的能力极限时,一个有高性能和可靠性的节点也可以被迫成为一个超级节点。此外,一些节点知道自己足够强大时,会在启动过程中就变成超级节点,同时,存在的节点也可以影响它的邻居节点成为超级节点。
1.2 网络结构
  P2P SIP系统结构图如图1所示。


 
  网络由节点组成,这些节点在一起共同提供目录索引服务以帮助定位资源,例如用户等。在这里,所有的节点通过采用基于CHORD算法的DHT P2P结构来组织。CHORD是一个环形的拓扑结构,每个结点并不需要知道所有其他结点的信息,在由N个结点组成的网络中,每个结点只需要维护其他LogN个结点的信息,查询的算法时间是O(LogN)。
  每个节点设计了一个Node-ID来决定节点在DHT环中的位置以及资源的范围,Node-ID通过hashing节点的IP地址以及端口号来创建。相应地,每个资源也有一个Resource-ID,通过hashing资源的关键字来获得。Node-ID和Resource-ID应当映射到同一数字空间。
  在CHORD算法中,一个Resource-ID为k的资源将被保存到第一个Node-ID大于或等于k的节点上。因此,当节点进入或离开时,资源就可以保存在不同的节点上。除此之外,节点还维护着一张保存其他节点信息的Finger表,用于快速地定位某一Resource-ID的后继节点,提高系统效率。
1.3 SIP消息
  在已有标准SIP协议的基础上,P2P SIP尽可能地保持SIP协议的原貌,因此所有需要维持DHT和定位资源的操作都是通过使用SIP消息来实现的。基本上是为了两种目的来交换消息的。第一种目的是维持DHT,例如某些消息用来通知网络有节点加入或者离开;第二种目的是用来完成用户之间的通信,这种消息是大多数SIP用户所习惯的,例如:注册用户、邀请其他用户来参加会议等。当使用DHT来实现分布式注册时,注册和其他查询都在DHT内来执行。一旦目标资源被找到,更深层的通信就直接在用户代理之间进行,这一点类似于传统的SIP通信。
  传统的SIP系统使用“注册”消息来实现“增加、删除、请求绑定”,因此,笔者选择用“注册”方法来维持DHT。使用SIP“注册”消息,不仅是为了在DHT维持操作中把节点绑定为邻居,同时也用它绑定资源到相应的节点,这些操作在传统的SIP系统中是由SIP注册机来实现的。
2 工作原理
2.1 节点注册
  一个节点启动时,根据它所处的物理环境以及它要达到的不同目的,可能会出现两种情况。第一,当节点启动时,用户输入它的身份,节点通过DNS找到可能存在的SIP服务器地址,并发送SIP 注册消息,如果注册成功,它就可以与传统的SIP节点进行通信。第二,一个节点启动时,首先计算其Node-ID例如k,然后发送一个注册消息给它找到的第一个节点(bootstrap)请求加入。这个节点(bootstrap)就会查找它所知道的Node-ID最接近k的其他节点,并且将要加入的节点重定向到该节点。要加入的节点一直重复上述操作,直到到达允许它加入的超级节点,然后这个超级节点会告知它有哪些邻居节点以及应该负责保存哪些资源内容。节点加入到P2P SIP网络中之后,还会与其他节点进行定期的消息交换,以了解网络中其他节点的进出情况。
2.2 资源注册
  节点注册时,并没有将节点所含资源注册到P2P SIP网络。当一个节点加入到网络中后,它所包含的资源会以传统SIP系统的注册方式一样进行注册,不同之处在于,传统SIP系统是将资源保存在服务器中,而P2P SIP系统是将资源保存到相应的节点上。
2.3 呼叫建立
  建立呼叫的第一步工作是找到资源所在的节点,首先将目标资源进行相应的运算以获得Resource-ID,然后将一个注册消息发送到最接近于Resource-ID的节点。重复上述工作,直到目标节点被找到,该节点会发送一个200 OK的连接信息或者一个404未找到的消息。一旦目标资源被找到,两个节点上的UA就会直接进行通信,呼叫建立完毕。在呼叫建立的过程中,超级节点既可以扮演代理服务器,也可以扮演重定向器的角色。重定向是其首选方式,因为它可排除超级节点的呼叫循环情况。然而,在一些特殊情况下(比如有防火墙和NAT),代理就成为惟一选择。
2.4 节点关闭和失效
  当一个普通节点离开系统,它首先发送注销消息到超级节点,然后超级节点就会依次告知相关节点该节点已经注销,因此一个失效的节点不会影响系统的其他部分。在任何情况下,超级节点都可通过周期刷新检测到失效的普通节点,它也可以通过发送选项条件消息到这些失效节点,查看它们是否还有响应。
  当一个超级节点离开时,所有相关节点需要更新到这个超级节点的DHT邻居超级节点上。如果超级节点关闭,它会平缓地发送它的节点记录到其他P2P节点,这样可以保障当超级节点关闭时,其他用户可以定位到这些记录。它会发送SIP注册消息到DHT节点(其他的超级节点),使得这个DHT节点代替它保持这些用户记录。这无需通知普通节点,所属的普通节点将会在下次注册刷新和查询时连接到那些保存它们记录的超级节点。
  当一个超级节点意外失败时,它相邻的DHT节点(超级节点)检测到失败并调整DHT以存储失败节点保留的记录,但是相关的映射已经丢失了,除非那些原始的节点重新发起注册刷新,注册刷新转到新的超级节点才可以处理相应的在DHT里的记录。
3 安全性分析
  安全是P2P系统里最需要解决的重要问题,因为整个系统里有很多潜在的不可信的节点。因此,在P2P SIP系统当中,也存在很多安全问题亟待解决。
3.1认证与授权
  用户加入P2P 架构的叠加层网络, 尤其是通信类应用, 必须保证用户标识的可认证性和可记忆性, 例如用户选用号码或邮件地址作为用户标识来加入到网络。在传统的SIP网络中,有集中的注册服务器来对用户进行鉴权和授权,可以确保用户身份不被假冒, 也可以确保用户的个性化配置和可移动性。而在P2P SIP中,如何对用户的用户名、鉴权密钥和配置数据进行P2P化存储与服务是一个问题。对于这个问题,可以考虑采用如下几种策略来解决:端对端的数字验证、逐跳传输层安全(TLS)或者端对端S/MIME。
3.2 隐私和机密
  其主要工作是对发送到不可信赖节点的信息进行保护以及防止滥用信息。在P2P SIP网络中,在用户定位呼叫里可能包括大量的“不可信”节点,而不像在传统的SIP电话系统里那些可信的服务器。在传统的基于服务器的电话系统里,呼叫的双方都对服务器是可信的,这样就没有安全问题。而在P2P SIP系统中,如何保护那些发送到不可信赖节点的信息是一个问题。另外,即使节点是可信的,但也无法保证呼叫的日志请求不会在以后被居心不良者滥用。
3.3 处理恶意节点
  假设在P2P SIP网络中有一些恶意的节点,它有可能把一次呼叫转移到了一个发起方并不想去的节点。有一种解决方法就是在逐跳的路由节点上改变源头的标示,这样会防止负责中转的机器知道呼叫的源头是谁。
3.4 避免“搭便车”
  还有另外一种威胁来自“搭便车”。一些节点使用P2P呼叫和收信服务,但是拒绝成为超级节点为他人服务。系统应当制定一些策略来阻止这类节点。例如,节点可以通过提供服务来获得较高信用等级,从而获得其他服务。每个节点都可以启动初始信用帐户,在NAT和防火墙后的节点,如果不能成为超级节点,则需要付出自己的信用帐户的钱来获得服务。那些用光了信息额度的节点、拒绝服务的节点将会降低可以获得服务的等级,只有很少的服务可用。
  除以上分析之外,利用P2P SIP技术还可以实现很多高级服务,不仅仅是基本的通话功能。例如:离线用户的消息转发、音频/视频邮件、多方参与的会议、穿越NAT和防火墙、数据存储的网络化等。虽然P2P SIP还处在学术研究阶段,还存在各种各样需要解决的问题,但是这种新技术的出现,为今后提供更加方便、自由的服务创造了可能,因此它的发展值得人们期待。
参考文献
[1] MILOJICIC D, KALOGERAKI V, LUKOSE R M,et al.Peer-to-peer computing[EB/OL].http://www.hpl.hp.com/techreports/2002/HPL-2002-57R1.pdf,2002.
[2]  ROSENBERG J, SCHULZRINNE H, CAMARILLO G,et al.SIP: session initiation protocol [EB/OL].http://www.ietf.org/rfc/rfc3261.txt, 2002-06.
[3] ROSENBERG J,SCHULZRINNE H. Session initiation protocol(SIP): locating SIP servers[EB/OL].http://www.ietf.org/rfc/rfc3263.txt, 2002-06.
[4]  STOICA I, MORRIS R, KARGER D, et al. Chord: A scalable peer-to-peer lookup service for internet applications[EB/OL].http://pdos.csail.mit.edu/papers/chord:sigcomm01/chord_sigcomm.pdf, 2001-08.
[5]  CASTRO M, DRUSCHEL P, GANESH A, et al. Security for structured peer-to-peer overlay networks[EB/OL].http://research.microsoft.com/~antr/PAST/security.pdf, 2002-12.
[6]  ADAR E, HUBERMAN B A. Free riding on gnutella[EB/OL].http://www.hpl.hp.com/research/idl/papers/gnutella/gnutella.pdf, 2000-10.

本篇文章来源于 中国协议分析网|www.cnpaf.net 原文链接:http://www.cnpaf.net/Class/otherprotocol/200903/23353.html

P2P与SIP技术的研究相关推荐

  1. P2P流量识别技术汇总(原理、优缺点介绍)

    随着P2P技术不断地发展演进,P2P技术及架构的演进经历了集中式.全分布式.混合式三个阶段.P2P常规流量检测一般通过常用的端口来进行识别,然而随着架构的演进,P2P流量识别也因此从简单的端口匹配到复 ...

  2. 基于p2p的sip电话系统

    摘要 p2p系统天生拥有高扩展性.健壮性和高容错性的特点,这些特点得益于系统没有中央服务器并且网络是自己管理的这种结构.本系统实现了在 p2p系统中较长的延迟的代价下定位感兴趣的资源.internet ...

  3. 《区块链跨链技术进展研究》论文笔记

    <区块链跨链技术进展研究>论文笔记 1 前言 2 区块链的跨链需求及技术难点 2.1 区块链跨链的研究目的 2.2 区块链跨链主流的解决方案 2.2.1 公证人机制 2.2.2 侧链/中继 ...

  4. P2P对等网络技术原理整合

    P2P(Peer to Peer)对等网络 P2P技术属于覆盖层网络(Overlay Network)的范畴,是相对于客户机/服务器(C/S)模式来说的一种网络信息交换方式.在C/S模式中,数据的分发 ...

  5. 【集成电路】深度解密:集成电路系统级封装(SiP)技术和应用 !

    超越摩尔之路--SiP简介 根据国际半导体路线组织(ITRS)的定义:SiP为将多个具有不同功能的有源电子元件与可选无源器件,以及诸如MEMS或者光学器件等其他器件优先组装到一起,实现一定功能的单个标 ...

  6. P2P直播的技术原理和改进

    原文地址:http://bbs.tvkoo.com/dispbbs.asp?boardID=3&ID=4017&page=1 最近对P2P直播技术进行了一些研究,谈谈个人对Tvkoo软 ...

  7. 基于P2P的流媒体技术概述

    摘  要:P2P流媒体技术已成为网络应用中热门的技术之一,本文主要介绍流媒体,P2P的相关概念,并着重对P2P流媒体的关键技术进行了研究,最后又提出了P2P流媒体技术应该面对的挑战.  关键词:P2P ...

  8. 音视频即时通讯中P2P的流媒体技术

    摘 要:P2P流媒体技术已成为网络应用中热门的技术之一,本文主要介绍流媒体,P2P的相关概念,并着重对P2P流媒体的关键技术进行了研究,最后又提出了P2P流媒体技术应该面对的挑战. 1 引言    随 ...

  9. 图像检测技术的研究现状

    图像检测技术的研究现状 技术检测 图像处理知识库 · 2016-01-08 19:59 图像检测技术的研究现状 所谓图像检测,就是通过图像对感兴趣的特征区域(检测目标)进行提取的过程,其中图像是承载检 ...

最新文章

  1. 将扫描字符转换成点阵信息
  2. JAVA命令运行cmd命令得到的结果乱码Runtime.getRuntime().exec();
  3. oracle 如何形成死锁,ORACLE死锁
  4. 如果用超级计算机渲染阿丽塔,【集群渲染】《阿凡达》幕后的渲染集群与渲染技术...
  5. 使用Vue构建中(大)型应用
  6. android.mk ndk编译选项优化,Android NDK 编译脚本分析 之一
  7. java 线程“生产/消费”模型1
  8. php怎么字符串转为整数,在PHP中将字符串转换为整数的最快方法
  9. 十八.多个SLAM框架(A-LOAM、Lego-loam、LIO-SAM、livox-loam)室外测试效果粗略对比分析
  10. git 怎么拉取线上代码到本地进行合并_android studio如何使用git提交、拉取、合并代码的操作...
  11. Google Chrome 调试JS简单教程[更新]
  12. 滴滴回应高额抽成:确实存在;抖音火山版被判赔腾讯 800 万元;华为鸿蒙系统有望下月规模化推送|极客头条...
  13. 扫雷游戏网页版_梦幻西游出网页版,王者出新英雄阿古朵,谁在杀死国产游戏的创新...
  14. Qt文档阅读笔记-QCustom3DLabel使用及Q3DSurface基本信号
  15. 【常见手机操作系列】开启微信收款语音功能
  16. python实验四_20191318实验四 《Python程序设计》实验报告
  17. 中兴java笔试题_中兴Java 笔试题.doc
  18. Mac下如何重启SSH
  19. 星星之火OIer:对拍
  20. Android小应用——监控屏幕使用时间

热门文章

  1. 在Eclipse上搭建Android开发环境
  2. 用计算机做图画ppt模板,装逼|如何用一张图片做出一份高颜值的PPT模板
  3. 蒙特卡洛模拟电动汽车充电matlab,基于蒙特卡洛模拟的电动汽车充电负荷预测
  4. conv1d(): argument ‘padding‘ (position 5) must be tuple of ints, not str 这个错误是怎么回事呀?请各位帮忙看看,万分感谢
  5. STM32 USB HID IAP升级
  6. Java实现 LeetCode 838 推多米诺(暴力模拟)
  7. Tensorboard报错的解决
  8. 冲孔网——现在普遍应用的装饰产品-KAIYAO
  9. Python中super()函数简介及用法分享
  10. 蜗牛星际安装winserver 2012的网卡驱动