Resiprocate协议栈分析
- 格式:pdf
- 大小:1.02 MB
- 文档页数:54
基于SIP的B2BUA服务器设计作者:庄伟胤唐余亮来源:《中国新通信》2014年第07期【摘要】 Session Initiation Protocol(SIP)是下一代网络的核心控制协议,用于在IP数据网络上建立、改变和结束多媒体会话。
SIP服务器作为下一代网络的核心设备,它的实现就显得尤为重要。
一种方法是代理服务器Proxy,它只在SIP交互时保存状态,而不是在整个呼叫中维护状态,这限制了代理服务器更大范围的应用。
另一种方法是背对背的用户代理(B2BUA,Back-to-Back User Agent)服务器,它在整个呼叫过程中都维护状态。
文章从SIP 协议的基本原理出发,利用reSIProcate协议栈实现SIP B2BUA服务器并对其做了压力测试。
【关键词】 RFC 3261 SIP B2BUA一、SIP协议SIP是2001年推出的IETF标准(RFC 3261),用于在IP数据网络上建立、改变和结束多媒体会话。
SIP系统采用C/S模型,定义了服务器和用户代理。
SIP系统的端系统称为用户代理(User Agent,UA),包含用户代理客户端(User Agent Client,UAC)和用户代理服务器(User Agent Server,UAS)。
UAC负责呼叫的发出,而UAS负责呼叫的接收。
典型的基于Proxy的呼叫过程为:主叫方向被叫方发出INVITE请求消息,开始建立会话。
Proxy接收到这条消息时会回复一条100 Trying告诉主叫方消息正在处理,然后INVITE 消息经过Proxy路由转发到被叫方,被叫方回复100 Trying 和180 Ringing响铃,被叫方接听回复200 OK,主叫方回复ACK,会话建立。
要结束会话时,其中一方发送BYE消息,另外一方回复200 OK。
二、B2BUA服务器介绍按照RFC 3261中的定义,B2BUA是一个逻辑实体,它就像UAS一样接收和处理请求。
sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。
它在<include/linux/skbuff.h>中定义,并包含很多成员变量供网络代码中的各子系统使用。
这个结构在linux内核的发展过程中改动过很多次,或者是增加新的选项,或者是重新组织已存在的成员变量以使得成员变量的布局更加清晰。
它的成员变量可以大致分为以下几类:∙Layout 布局∙General 通用∙Feature-specific功能相关∙Management functions管理函数这个结构被不同的网络层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。
L4向L3传递前会添加一个L4的头部,同样,L3向L2传递前,会添加一个L3的头部。
添加头部比在不同层之间拷贝数据的效率更高。
由于在缓冲区的头部添加数据意味着要修改指向缓冲区的指针,这是个复杂的操作,所以内核提供了一个函数skb_reserve (在后面的章节中描述)来完成这个功能。
协议栈中的每一层在往下一层传递缓冲区前,第一件事就是调用skb_reserve在缓冲区的头部给协议头预留一定的空间。
skb_reserve同样被设备驱动使用来对齐接收到包的包头。
如果缓冲区向上层协议传递,旧的协议层的头部信息就没什么用了。
例如,L2的头部只有在网络驱动处理L2的协议时有用,L3是不会关心它的信息的。
但是,内核并没有把L2的头部从缓冲区中删除,而是把有效荷载的指针指向L3的头部,这样做,可以节省CPU时间。
1. 网络参数和内核数据结构就像你在浏览TCP/IP规范或者配置内核时所看到的一样,网络代码提供了很多有用的功能,但是这些功能并不是必须的,比如说,防火墙,多播,还有其他一些功能。
大部分的功能都需要在内核数据结构中添加自己的成员变量。
因此,sk_buff里面包含了很多像#ifdef这样的预编译指令。
Resiprocate介绍1.前言本文主要内容来自互联网,特此感谢Steven的辛苦撰写和resiprocate开源组织的无私奉献以及sip协议的创造者Schulzrinne教授和Rosenberg大师的辛勤工作。
2.从SIP谈起说明:不期待一次就把RFC3261或者其他的协议文档内容及其细节全部记住或者完全理解;把原理性的东西及其脉络厘清也许更重要;在调试程序和看协议栈源码的过程中我的做法是一直把RFC3261(经常的是那份中文文档☺的文档打开;遇到忘记或者不是太明白的概念和内容就在文档中再搜索相关主题及内容来看看;经常会碰到这样的问题,我发个内容给SIPProGy或者SIPServer,可是并没得到我希望的回复或者与期待的回复内容有出入,这时,我的经常做法是再去研读协议的相关定义,看看是不是我哪个细节并没理解深入或者引起注意,导致我发出去的内容与协议标准有出入或者我的流程与协议定义不吻合。
接下来的内容是前人的文档整理,只是个大概,如果没兴趣,完全可以跳过不看;协议栈部分基本上是分成DUM与Stack两部份可以先后看,也可以先看Stack部分。
补充说明:文档中的大部分图片都来自网上公开的资料,只有少数几幅是自绘,因此出现内容不清和误导,概不负责☺特此感谢借鉴资料和图片的原创者们,虽然他们并不知道又误导了一个菜鸟。
2.1SIP(SessionInitiationProtocol)简介最先由美国哥伦比亚大学的HenningSchulzrinne教授在1998年初开始发起,1999年3月由IETF的MMUSIC(MultipartMultimediaSessionControl)工作小组制定正式标准成为RFC2543,1999年9月IETF成立新的工作小组,负责SIP新版本2.0的制定,并于20GG年7月释出初版RFC2543bis,于20GG 年发布了RFC3261。
RFC3261的发布,标示着SIP的基础已经确立,随后又发布了几个RFC增定版本,充实了安全性及身份认证等几个领域的内容,例如RFC3262对临时响应做了可靠性的规范。
fc协议栈分析协议名称:FC协议栈分析协议一、引言本协议旨在对FC协议栈进行详细分析,包括其结构、功能、特性以及相关应用。
通过对FC协议栈的分析,可以帮助用户更好地理解和应用该协议栈。
二、背景FC(Fibre Channel)协议栈是一种高速、可靠的数据传输协议,广泛应用于存储网络和计算机网络领域。
该协议栈提供了一种可扩展的、灵活的架构,支持多种传输速率和拓扑结构。
三、协议栈结构1. 物理层(Physical Layer):负责传输介质的物理连接和电信号的传输,包括光纤、电缆等。
2. 数据链路层(Data Link Layer):负责数据的分帧、差错检测和流量控制,提供可靠的数据传输。
3. 网络层(Network Layer):负责数据的路由和寻址,提供端到端的通信。
4. 传输层(Transport Layer):负责数据的可靠传输和流量控制,提供端到端的连接。
5. 会话层(Session Layer):负责建立和管理会话,提供应用程序之间的通信。
6. 表示层(Presentation Layer):负责数据的格式转换和加密解密,提供数据表示和交换的标准。
7. 应用层(Application Layer):负责应用程序的数据交互和处理。
四、协议栈功能1. 数据传输:FC协议栈提供高速、可靠的数据传输功能,支持多种传输速率,如1Gbps、2Gbps、4Gbps、8Gbps、16Gbps等。
2. 数据路由:FC协议栈支持多种拓扑结构,如点对点、环形、树形等,可以根据网络需求进行灵活配置。
3. 差错检测与纠正:FC协议栈提供差错检测和纠正机制,保证数据传输的可靠性和完整性。
4. 流量控制:FC协议栈支持流量控制功能,可以根据网络负载和带宽需求进行动态调整,提高网络性能。
5. 端到端连接:FC协议栈提供端到端的连接功能,保证数据的可靠传输和顺序交付。
6. 数据格式转换:FC协议栈支持数据的格式转换和加密解密,提供数据表示和交换的标准。
深入解析无线传感器网络中的网络协议栈无线传感器网络(Wireless Sensor Network,WSN)是一种由大量分布在空间中的无线传感器节点组成的网络系统。
这些节点可以感知环境中的各种物理量,并将其通过无线通信传输给中心节点进行处理和分析。
在WSN中,网络协议栈起着至关重要的作用,它负责管理和协调节点之间的通信,保证数据的可靠传输和网络的高效运行。
一、物理层物理层是WSN网络协议栈的最底层,主要负责将数字信号转换为模拟信号并进行无线传输。
在物理层中,常用的调制技术有频移键控(FSK)、相移键控(PSK)和正交频分多址(OFDM)等。
此外,物理层还需要考虑能量消耗的问题,因为无线传感器节点通常由电池供电,能量是非常有限的资源。
二、链路层链路层位于网络协议栈的第二层,主要负责节点之间的数据帧传输。
在WSN 中,由于节点之间的通信距离较近,链路层通常采用低功耗的无线通信技术,如低功耗蓝牙(Bluetooth Low Energy,BLE)和Zigbee等。
链路层还需要解决无线信道的共享和冲突问题,以保证数据的可靠传输。
三、网络层网络层是WSN网络协议栈的第三层,主要负责节点之间的寻址和路由。
在WSN中,网络层需要解决节点拓扑结构的建立和维护问题,以及数据包的转发和路由选择问题。
为了降低能量消耗,网络层通常采用分层路由协议,将网络划分为多个层次,每个层次的节点负责转发和处理相应的数据。
四、传输层传输层位于网络协议栈的第四层,主要负责节点之间的可靠数据传输。
在WSN中,由于节点之间的通信距离较近,传输层通常采用无连接的传输协议,如用户数据报协议(User Datagram Protocol,UDP)。
传输层还需要解决数据包的分段和重组问题,以保证数据的完整性和可靠性。
五、应用层应用层是WSN网络协议栈的最顶层,主要负责节点之间的应用数据交互。
在WSN中,应用层需要根据具体的应用需求设计相应的协议和算法,以实现对环境中各种物理量的感知和监测。
OSIP2协议栈学习总结1、Osip2协议栈介绍Osip2是一个开放源代码的sip协议栈,是开源代码中不多使用C语言写的协议栈之一,它具有短小简洁的特点。
它的核心特性为sip协议数据的解析和事务的管理。
数据包的收发、RTP 流的处理等,并不在Osip2中完成。
应用程序使用Osip 时需要单独去实现这些模块。
Osip2的缺点是没有很好的上层api封装,使得上层应用在调用协议栈时很破碎;只做到了transaction层次的协议过程解析,缺少call、session、dialog等过程的解析,这也增加了使用的难度。
2、Osip2协议栈体系结构OSIP主要由解析模块、工具模块和状态机模块构成,其核心是状态机模块.OSIP结构如图所示.2.1 语法解析器libosip库源码src/osipparser2为解析器源码,OSIP解析模块主要用于对SIP请求与响应进行封装与解析处理,分为SIP解析、URL解析与SDP解析完成对sip协议相关字段的构造和解析。
比如,将紧凑的存储于内存buffer中的sip 数据解析到清晰定义的数据结构体中,每一个字段代表sip协议中有意义的一个头域。
SIP解析主要负责SIP标题头的解析与封装。
SDP解析除了对数据包中SDP会话各类型进行解析外还包含对各类型的初始化和释放操作以及对整个SDP包的一些基本操作。
URL解析主要负责对SIP URI中包含的host,port,username,password等信息进行解析与设置。
2.2 有限状态机SIP状态机模块负责完成对某个事务状态的维持及处理。
并且在特定的状态下触发相应的事件或者回调函数。
OSIP协议栈的状态机主要分为4类:INVITE客户端事务ICT,非INVITE 客户端事务NICT,INVITE服务器端事务IST,非INVITE服务器端事务NIST。
2.3 工具模块OSIP工具模块分为对话管理工具和SDP协商工具。
对话管理工具使用户能够根据RFC3261对dialog进行操作,建立相应dialog结构体。
蓝牙协议栈详解蓝牙协议栈是指蓝牙通信中的软件协议,它定义了蓝牙设备之间的通信规则和数据传输方式。
蓝牙协议栈由多个层次组成,每个层次负责不同的功能和任务。
本文将对蓝牙协议栈的各个层次进行详细解析,以便读者更好地理解蓝牙通信原理。
1. 物理层(Physical Layer)物理层是蓝牙协议栈中最底层的层次,它定义了蓝牙设备的无线通信方式和频率。
蓝牙使用2.4GHz的ISM频段进行通信,采用频率跳变技术来避免干扰。
物理层还定义了蓝牙设备的功率等级和传输速率,以及通信距离的限制。
2. 链路层(Link Layer)链路层是蓝牙协议栈中的第二层,它负责建立和管理蓝牙设备之间的连接。
链路层主要包括两个子层:广告子层和连接子层。
广告子层负责设备的广告和发现,用于建立连接;连接子层负责连接的建立、维护和关闭。
链路层还定义了蓝牙设备之间的数据传输方式,如数据包的格式、错误检测和纠错等。
3. 主机控制器接口(Host Controller Interface,HCI)主机控制器接口是蓝牙协议栈中的第三层,它定义了主机和主机控制器之间的通信方式。
主机控制器接口可以通过串口、USB等方式与主机连接,主要负责传输命令和数据,以及处理主机和主机控制器之间的事件和状态。
4. L2CAP层(Logical Link Control and Adaptation Protocol)L2CAP层是蓝牙协议栈中的第四层,它提供了面向连接和面向无连接的数据传输服务。
L2CAP层可以将较大的数据包分割成多个小的数据包进行传输,并提供可靠的数据传输机制。
L2CAP层还支持多个逻辑信道的复用和分离,以满足不同应用的需求。
5. RFCOMM层(Radio Frequency Communication)RFCOMM层是蓝牙协议栈中的第五层,它通过虚拟串口的方式提供串行数据传输服务。
RFCOMM层允许应用程序通过串口接口与蓝牙设备进行通信,实现数据的传输和控制。
春节去青岛旅游
春节来临之际,我决定去青岛旅游,远离喧嚣,感受海风的清新。
踏上了征程,一路上,春天的气息逐渐弥漫开来。
抵达青岛,我被城市的美丽景色所吸引。
蓝天白云下,碧海银沙映衬着洁白的建筑,整个城市如诗如画。
我沿着海边散步,不时有海风轻拂而过,使人心旷神怡。
青岛还以它独特而迷人的饮食文化而闻名。
我品尝了当地的海鲜,新鲜出炉的章鱼烧、煎饼果子和炸鱼排等美食让我欲罢不能。
每一口都充盈着海的味道,让人陶醉其中。
除了美食,青岛还有许多名胜古迹值得一游。
我参观了八大关,这里有着悠久的历史和建筑风格,散发着浓厚的欧洲风情。
登上栈桥,我俯瞰着整个城市和壮观的海景,顿时心生敬畏之情。
在青岛的街头巷尾,我感受到了浓厚的年味。
人们正在忙着采购年货,市场上热闹非凡。
我也加入了这个喜庆而热闹的氛围,买了些特色小吃和纪念品,带回家和家人共享这美好的时光。
回顾这次青岛之行,我收获满满。
春节时节,青岛展现出它独特的魅力,无论是海滨风光、美食文化还是年味浓厚的市井气息,都让我感受到了新的生机与希望。
这次旅行让我愉快地度过了春节假期,也为新的一年注入了激励和动力。
竭诚为您提供优质文档/双击可除linux,ip协议栈源代码分析,pdf篇一:netfilter源代码分析详解一、概述filter/iptables框架简介netfilter/iptables是继2.0.x的ipfwadm、2.2.x的ipchains之后,新一代的linux防火墙机制。
netfilter采用模块化设计,具有良好的可扩充性。
其重要工具模块iptables连接到netfilter的架构中,并允许使用者对数据报进行过滤、地址转换、处理等操作。
netfilter提供了一个框架,将对网络代码的直接干涉降到最低,并允许用规定的接口将其他包处理代码以模块的形式添加到内核中,具有极强的灵活性。
2.主要源代码文件linux内核版本:2.4.21netfilter主文件:net/core/netfilter.cnetfilter主头文件:include/linux/netfilter.hipv4相关:c文件:net/ipv4/netfilter/*.c头文件:include/linux/netfilter_ipv4.hinclude/linux/netfilter_ipv4/*.hipv4协议栈主体的部分c文件,特别是与数据报传送过程有关的部分:ip_input.c,ip_forward.c,ip_output.c,ip_fragment.c等二、netfilter/iptables-ipv4总体架构netfilter主要通过表、链实现规则,可以这么说,netfilter是表的容器,表是链的容器,链是规则的容器,最终形成对数据报处理规则的实现。
详细地说,netfilter/iptables的体系结构可以分为三个大部分:filter的hook机制netfilter的通用框架不依赖于具体的协议,而是为每种网络协议定义一套hook函数。
这些hook函数在数据报经过协议栈的几个关键点时被调用,在这几个点中,协议栈将数据报及hook函数标号作为参数,传递给netfilter框架。