osip工作原理和过程
计算机网络应用 OSI参考模型通信原理

计算机网络应用OSI参考模型通信原理在前面两节中,我们学习了OSI参考模型的7层结构及各层所具有的功能等知识。
下面,我们来学习OSI参考模型的通信原理,即数据传输过程。
在OSI参考模型中,当端到端进行通信时,首先由发送端(发送方)的发送进程将数据传送给应用层,应用层在数据的头部加上该层的控制和识别信息,并将其传送到其下一层(表示层)。
该过程一直重复至物理层,并由物理传输媒介将数据传送到目的端(接收方),在接收进程所在计算机中,信息按从物理层依次至应用层的方向传递,在此过程中添加在数据头部各层的控制和识别信息将被逐层去掉,最后数据被传送到接收进程。
其数据传输过程如图1-26所示。
图1-26 OSI参考模型中通信过程在OSI参考模型通信过程中,由高层至低层的过程中,各层数据头部封装该层的数据标识信息,当由低层至高层时,在每层需要解封装数据头部标识信息。
其过程以主机A与主机B的通信为例进行说明。
在主机A的发送进程中,首先数据在应用层,加上应用层协议要求的控制信息AH(AH 表示应用层控制信息),形成应用层的协议数据单元;接着继续传送,当传送到表示层时,在加上表示层的协议控制信息PH(PH表示表示层控制信息),形成表示层的协议数据单元。
表示层的协议数据单元传到会话层,加上会话层协议要求的控制信息SH(SH表示会话层控制信息),从而形成会话层的协议数据单元。
依次类推,到达数据链路层后,数据链路层的协议控制信息分为两部分,分别为控制头部信息和尾部信息,从而形成数据帧;将帧传送到物理层时,不再加任何控制信息,而是转换成比特流,并通过传输介质将其传送到主机B的物理层。
主机B的物理层将比特流传给数据链路层,在数据链路层中,将帧中的控制头部信息和尾部信息去掉,形成网络层的协议数据单元,然后,传送给网络层,在网络层去掉网络层协议控制信息NH(NH表示网络层控制信息),形成网络层的服务数据单元。
依次类推,直到数据传送到主机B的应用进程,其过程如图1-27所示。
osi七层模型理解

osi七层模型理解osi七层模型是计算机网络体系结构的一种理论模型,它将计算机网络的通信过程分为七个层次,每个层次都有特定的功能和任务,通过逐层协作的方式实现数据在网络中的传输和处理。
这个模型的设计灵感来自于电信领域的分层设计思想,它非常有效地解决了复杂网络的设计和管理问题。
在osi七层模型中,每一层都有不同的功能和职责。
下面我将依次介绍每个层次的作用:1. 物理层:物理层是网络通信的最底层,主要负责传输二进制数据,将数据转换为电流、光信号或无线波传输到物理介质上。
它关注的是如何在网络中传输原始位流,而不关注数据的内容。
2. 数据链路层:数据链路层负责将物理层传输的数据进行分帧和差错校验,确保数据以正确的方式传输。
它还负责管理数据的帧,提供流量控制和数据重发功能。
3. 网络层:网络层是整个网络的核心,负责数据的路由选择和数据包的转发。
它使用路由器来决定数据的最佳传输路径,并实现不同网络之间的通信。
4. 传输层:传输层主要负责端到端的数据传输,它提供可靠的数据传输服务,确保数据的完整性和顺序性。
常见的传输层协议有TCP 和UDP。
5. 会话层:会话层负责建立、管理和终止应用程序之间的会话。
它提供了会话控制、同步和数据交换的功能,为上层应用程序提供了一个稳定可靠的通信环境。
6. 表示层:表示层主要负责数据的格式化、编码和压缩。
它将数据转换为适合网络传输的格式,并提供数据的加密和解密功能。
7. 应用层:应用层是最高层,它为用户提供各种网络应用服务。
常见的应用层协议有HTTP、FTP、SMTP等。
osi七层模型的设计理念是分层抽象,每一层只关注自身的功能和数据处理,各层之间通过明确定义的接口进行交互和传输数据。
这种分层设计使得网络更加可靠、可扩展和易于管理。
了解osi七层模型对于网络设计和故障排查都非常重要。
通过遵循七层模型的原则,我们可以更好地组织和管理网络资源,提高网络性能和安全性。
在故障排查时,也可以通过逐层分析,定位和解决问题,加快故障修复的速度。
osip2协议栈原理分析以及总结

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结构体。
osip学习说明

oSIP工作过程
• 1、
系统初始化过程。
• 在OSIP工作之前,必须先初始化,主要有以下几个部分: • (1)系统资源申请,包括资源和链表的处理。 函数:osip_init() • (2)设置系统osip_set_message_callback函数 • (3)打开接收远端消息接收通道。它包括以下几个步骤
系统内部事务的产生过程
• 包括一个新的invite、 response、ack的发送 或接收,除了对非2xx 的应答ack外,其他的 请求和应答都会产生 一个新的transaction, 并且产生一个新的 sipevent事件。
_eXosip_transaction_init
osip_new_outgoing_sipmessag e (invite)
Kill event?
Y
osip_free (evt)
No
fsm_callmethod
osip的transaction的管理
• • • • • • • • • • • • • struct osip { void *application_context; /**< User defined Pointer */ /* list of transactions for ict, ist, nict, nist */ osip_list_t osip_ict_transactions; /**< list of ict transactions */ osip_list_t osip_ist_transactions; /**< list of ist transactions */ osip_list_t osip_nict_transactions; /**< list of nict transactions */ osip_list_t osip_nist_transactions; /**< list of nist transactions */ } 上面结构事务管理列表结构体,从中可以看出,事务分成4个不通的类型进行管 理,如果我们需要调用OSIP协议栈的话,必须自己先创建事务管理控制块,只需要 定期扫描该控制块下面的4个不通事务管理列表进行处理即可. osip_create_transaction创建事务 osip_find_transaction查询事务 osip_transaction_free清楚事务
网络基础 OSI的通信原理

网络基础 OSI 的通信原理OSI 参考模型确立了计算机网络互联的新格局,并不断演进以适应计算机网络技术的快速发展。
它具有以下几方面的特性:● 它定义一种抽象的结构,而并非是具体实现的描述; ● 它是一种异构系统互联的分层结构;● 在不同系统上的相同层的实体称为同等层次实体,同等层实体之间通信由该层的协议管理; ● 各层相互独立,每层完成所定义的功能,修改本层的功能不会影响到其它层; ● 它提供了控制互联系统交互规则的标准框架;● 相邻层间的接口定义了原语操作和低层向上层提供的服务; ● 所提供的公共服务是面向连接和无连接的数据服务; ●最底层能够直接传输数据。
在OSI 参考模型中,用户A 向用户B 发送数据时,首先用户A 把需要传输的信息(data )告诉用户A 系统的应用层,并发布命令,然后由应用层加上应用的报头信息送到表示层,表示层再加上表示层的控制信息送往会话层,会话层再加上会话层的控制信息送往传输层。
依此类推,数据报文到达数据链路层,数据链路层加上控制信息和尾层信息,形成数据帧,最后送往物理层,物理层不考虚信息的实际含义,以比特(bit )流(0和1代码)传送到物理信道(传输介质),到达用户B 系统的物理层。
在B 系统中,将物理层所接收的比特流数据送往数据链路层,以此向上层传送,并在传送过程中拆除控制信息以及尾信息,直到传送到应用层,告诉用户B ,如图1-17所示。
这样看起来好像是对方应用层直接发送来的信息,但实际上相应层之间的通信是虚通信,这个过程可以用一个简单的例子来描述。
一个产品通过生产线进行包装,每经过一个人或者程序将包装一层;将包装好的产品运输到目标地;在目标地想得到该产品,必须进行反包装(也就是拆除包装),将每经过一个人或者程序将拆除一层包装;最终得到产品。
比特流传输(0或者1)图1-17 数据传输过程图1-18中的虚线表示虚拟传递,实线表实际传递。
要将P 数据从用户应用进程PA 传向用户应用进程PB 。
osi协议工作过程

osi协议工作过程OSI(Open Systems Interconnection,开放系统互联)是一种网络通信协议,它定义了计算机或网络设备之间进行通信的七个不同层次。
每个层次负责处理不同的通信任务,并通过接口与上层和下层进行通信。
下面将详细介绍OSI协议的工作过程。
第一层:物理层物理层是OSI协议的最底层,它负责在网络中传输比特流(Bit Stream)。
物理层的任务包括定义实际的电气、光学和无线介质以及连接器的规范。
在物理层上,数据被转换成电压、电流或光脉冲等物理形式传输。
第二层:数据链路层数据链路层处理传输有差错的信道上的数据传输。
它将比特流分割成数据帧,并检测并纠正错误。
数据链路层还负责对传输的数据进行流量控制和数据链路管理。
常见的数据链路协议有以太网(Ethernet)和无线局域网(Wi-Fi)。
第三层:网络层网络层负责在网络中选择传输路径,将数据包(Packet)从源主机发送到目标主机。
它使用IP(Internet Protocol)地址来定位目标主机和路由器,并使用路由选择算法来决定最佳路径。
常见的网络协议有IP、ICMP(Internet Control Message Protocol)和IPsec(IP Security)。
第四层:传输层传输层提供端到端的数据传输服务,并确保可靠的数据传输。
它将数据分割为较小的段,并为每个段分配序列号,以确保数据按正确的顺序到达目标。
传输层还提供流量控制和拥塞控制机制,以保证传输效率。
常见的传输协议有TCP(Transmission Control Protocol)和UDP (User Datagram Protocol)。
第五层:会话层会话层负责建立、管理和终止两个节点之间的会话。
它为应用程序提供会话控制和同步功能,以确保通信的顺序性和可靠性。
会话层还负责身份验证和安全性的实现。
常见的会话层协议有NetBIOS和RPC (Remote Procedure Call)。
OSI模型七个层的作用及工作原理

OSI模型七个层的作用及工作原理osi模型,即开放式通信系统互联参考模型,是国际标准化组织(iso)提出的一个试图使各种计算机在世界范围内互联为网络的标准框架。
0SI模型分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,在本文对这七个层的作用及工作原理做简单介绍。
OSI/RM协议是由ISO(国际标准化组织)制订的,它的基本功能是:提供给开发者一个必需的、通用的概念以便开发完善、可以用来解释连接不同系统的框架。
根据标准,0SI模型分七层,见图1,用这些规定来实现网络数据的传输。
应用实体应用冥体1、物理层(Physical Layer)OSI模型的最底层或第一层。
该层包括物理联网媒介,如电缆连线连接器,主要是对物理连接方式、电气特性、机械特性等做一些规定,制订相关标准,这样大家就可以按照相同的标准开发出通用的产品,很明显直流24V与交流220V是无法对接的,因此就要统一标准,大家都用直流24V吧,至于为什么采用24V呢?您就当是争执各方妥协的结果吧。
所以,这层标准解决的是数据传输所应用的设备标准的问题。
物理层的协议产生并检测电压,以便发送和接收携带数据的信号。
尽管物理层不提供纠错服务,但它能够设定数据传输速率并监测数据出错率,网络物理问题,如电线断开,将影响物理层。
用户要传递信息就要利用一些物理媒体,如双绞线、同轴电缆等,但具体的物理媒体并不在0SI 的7层之内,有人把物理媒体当做第0层,物理层的任务就是为它的上一层提供一个物理连接,以及它们的机械、电气、功能和过程特性。
如规定使用电缆和接头的类型、传送信号的电压等。
在这一层,数据还没有被组织,仅作为原始的位流或电气电压处理,请注意,我们所说的通信仅仅指数字通信方式,因此,数据的单位是比特(位-bit)o2、数据链路层(Datalink Layer)OSI模型的第二层。
它控制网络层与物理层之间的通信,解决的是所传输的数据的准确性的问题。
一个动画看懂网络原理之数据在OSI模型各层的传递过程(网络篇)

一个动画看懂网络原理之数据在OSI模型各层的传递过程(网络篇)小伙伴们大家好!昨天发一篇文章,有不少朋友留言。
有的朋友说专业术语多,有的朋友说英文一堆看不懂,有的朋友说解读的还不够详细。
我在这里给大家道歉了。
因为朋友们的专业都不一样,对网络知识掌握的情况不一样,所以解读的尺度我还是得好好考虑一下。
如果解读的不够细致,欢迎各位留言提问;如果解读的不够专业,请各位大牛不吝留言赐教。
谢谢各位小伙伴!数据传输赶快进入正题,今天要给大家介绍的是一个动画看懂网络原理之数据在OSI参考模型各层的传递过程。
一、什么是OSI参考模型?OSI(Open System Interconnect),中文翻译即开放式系统互联,通常在教学过程中被称作OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型。
该体系结构标准定义了网络互连的七层框架,自底而上,从第一层到第七层分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,即ISO开放系统互连参考模型。
在这一框架下,进一步详细规定了每一层的功能,从而实现开放系统环境中的互连互通性、互操作性和应用的可移植性。
注:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,此七层对应的英文分别为Physical Layer、Data Link Layer、Network Layer、Transport Layer、Session Layer、Presentation Layer,Application Layer。
我们把第七层至第一层的每一层首字母取出,编成一句话,用来记忆这七层,这句话是:All People Seem To Need Data Process。
二、OSI参考模型七层的功能1、物理层(Physical Layer)物理层是OSI参考模型的最底层,它利用传输介质为其上层数据链路层提供物理连接。
它主要关心的是通过物理链路从一个节点向另一个节点传送比特流(bit),物理链路可能是铜缆、光纤、无线或其他的通讯媒介。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OSIP工作原理和工作过程
雷/wcl0715
感谢OSIP代码整理小组的工作。
一、概述:
首先说明一个概念:OSIP是一个开原的标准C的sip 3261的CORE,实际上是一个SIP 的信令实现,从另一个角度说,它是SIP的一个信令解释器,任务是负责生成和解析SIP信令,仅此而已,其它的事情,比如收包,发包,建立RTP流的过程等等和OSIP没有任何必然关系。
理论上OSIP可以应用在任何可以编译C语言的系统上。
二、工作原理
OSIP实现的核心是状态机,为了便于保持逻辑的清晰和代码模块化的实现,OSIP分成两对状态机,分别用来处理正常的CALL流程和其它非CALL流程,对应的每对状态机又分成out和in两个状态,因此OSIP共有四个状态机。
详细的状态机部分文挡请参考OSIP 的状态机分析,在我们的资源连接里你可以找到它,你也可以登陆我的BLOG来寻找它。
对不同的状态OSIP相应的用不同的状态机处理,在这些状态机下,OSIP对本身或者来自对方的消息进行处理,从而推动自身状态的改变,这也就是OSIP的核心工作原理。
和其它的SIP协议栈的实现一样,OSIP采用CALLBACK函数的方法来对用户程序提供接口,当系统有事件发生,或者状态改变的时候,OSIP调用这些CALLBACK函数,来完成用户的要求(比如收到对方180消息后,本地要响铃,实现方法就是在OSIP的收到180消息的CALLBACK函数里实现响铃代码),因此OSIP用户需要自己编写这些CALLBACK 函数,实现自己所需要的功能,然后在系统初始化过程中,和系统callback函数挂接,这样当系统调用CALLBACK的时候就会执行你的函数,这也就是OSIP初始化的时候,要设定一大堆CALLBACK函数的原因,在接触协议初期,也许你觉得烦琐,但尽可能多的让用户能对事件进行处理,才能保证协议栈的可用性这样,这在系统越来越复杂的情况下,或者应用比较复杂的情况下,尤为重要。
二、工作过程
1、系统初始化过程。
在OSIP工作之前,必须先初始化,主要有以下几个部分:
(1)系统资源申请,包括资源和链表的处理。
函数:osip_init()
(2)设置系统CALLBACK函数
osip_set_cb_send_message ();
//系统的信令发送函数,在这个函数中,要完成信令包的向外发送功能。
这个
函数在后面会详细的讲。
osip_set_kill_transaction_callback ();
//设置四个状态机下消息传输失败的处理函数。
osip_set_message_callback ();
//设置各种状态机下各种事件发生后用户的回调,注意:你可以只设置你需要
的,对你不关心的,你可以不设置,那么这些时间发生的时候,系统就不会处
理。
比如你可以不对1XX 消息处理,那么你不对挂1xx事件对挂就可以了。
(3)打开接收远端消息接收通道。
打开通道就是保证远方的消息能够顺利的被本地接收到,然后交给SIP CORE处理,它包括以下几个步骤
Step1:监听端口
打开SIP端口SOCKET,然后监听此端口,如5060。
但目前SIP被封杀,所以建议您换一个。
需要注意的是,SIP支持TCP和UDP两种方
式,请注意这两种方式的不同。
Step2:解析消息
接收到消息后,调用osip_parse函数,来完成对消息包的解析。
这个函数完成后,消息就从普通信令消息分解成了OSIP2自己可以理解的消
息事件。
osip_parse函数在src\osipparser2,应该说是比较复杂的,需要的
时候可以自己看代码,但我的建议是,在不需要的时候,没有看这些代码
的必要,这些代码中,只有你在深入的时候,才需要理解,如果您是初学,
似乎没有这个必要。
Step3:将消息送给SIP CORE处理
解吸后的消息,系统调用osip_find_transaction_and_add_event函数,把消息发送给和此消息相关的处理事物(或者说session),如果系统中没
有和这个消息相关的session(也就是说是个新的request),那么此时将新
建立一个session(或者说transaction,因为在不同层面有不同理解),用于处
理新的事务。
实际上,这个session创立的过程也就是一个新的系统状态
机的建立过程,根据这个消息的种类,osip_transaction_init负责初始化,
建立一个新的和种类对应的状态机(四种状态机中的一种),然后调用
osip_transaction_add_event把消息扔给这个刚建立起来的状态机处理。
一
个新的状态机也就开始运做。
到此,OSIP就已经正常工作,可以接收网络来的消息。
2、一个呼叫过程。
下面通过一对呼叫的连接过程说明OSIP的消息的整个处理过程。
假设终端A呼叫终端B,两放都是用的OSIP CORE。
注意:阅读以下的东西的时候我认为你已经理解了我上面说的东西,并且对OSIP的状态机有了一个比较完整的理解,如果不理解,请先阅读另一篇文挡:osip2的状态机分析。
Stp1:A生成一个Invite消息
这个过程是大家都熟悉的过程,也就是利用本地信息,组建一个SIP包的过程,具体的请参考EXOSIP,不再说明,需要注意的是:rtp流的本地接收发送端口是在这里就建立的,然后放到SDP中。
Step2:A 把生成的消息交给核心处理。
首先系统调用osip_transaction_init ,产生一个新的状态机。
在发送invite请求的时候,这个状态机是ICT(带invite的client端状态机)。
状态机产生后,系统调用函数把消息扔给状态机处理,osip_transaction_add_event负责把消息插到队列中,Step3:A的ICT状态机调用ict_snd_invite函数发送invite包给对方,状态机自身从初始状态跳转到calling状态,等待对方回应,并设置响应的A超时和B(忘记是什么了,自己看去吧)超时,当A超时到达的时候,向对方重发一次数据包,并且把A
时间的时间增加一倍(最长为4S,如果超过4S,将不再增加)。
当B时间到达后,系统认为对方没有响应,则释放资源,结束本次操作。
Step4:B的信令监听端口接收到此invite请求包,调用osip_parse函数,来完成对消息包的解析,然后系统调用osip_find_transaction_and_add_event函数来试图把此消息包插入已经存在的session的传输队列(比如系统还有另外一个呼叫),当系统发现当前信令包并不属于已经存在的session的时候,系统认为之是一个新的呼叫过程,因此,系统调用osip_transaction_init函数建立一个信的状态机来处理这个session,这个状态机也就是IST(带invie的server状态机),然后把信令消息插到新状态机的事件列表中,供其处理。
Step5:B的IST处理A的invite请求,自身的状态机从IST_PRE_PROCEEDING 跳转到IST_PROCEEDING状态,并发送100消息给对方,调用用户设置的回掉函数来完成用户收到请求时候的处理。
注意,B应该发两次1XX消息给对方,一个是100,一个是180。
因为这两个类似,我比较懒,就不写了,下面的状态也一样。
Step6:A收到1xx的回应,自身从ICT_CALLING状态跳转到ICT_PROCEEDING 状态,并调用用户的回掉函数来完成用户的要求。
注意,A会收到B过来的两次1XX 消息,参考step5的说明。
Step7:B的用户认可,可以接收A的此次呼叫,B发送调用ist_snd_2xx函数,发送200 OK消息给A,B的状态机IST从IST_PROCEEDING IST_TERMINATED。
完成一次IST的服务。
Step8:A接收到200 0K,状态机跳转到ICT_TERMINATED状态,完成一个ICT 服务。
3、信令结束后,RTP流的建立
在Invite信令中,A告诉了B本地的RTP接收地址和端口,B在200 OK中告知了A本地的RTP的接收地址和端口,因此,信令结束后,A和B就可实现流的
互通(通常是音频),需要注意的是,RTP并不是OSIP的一部分,从模块上说,
它是逻辑上的另外一个部分,RTP流是依靠SIP信令里的信息建立起来的,但和
SIP或者SIP信令本身而言并没有任何必然联系。
另外,就RTP要传送的音频数据本身而言(例如音频数据),和SIP更没有必然联系。
通常,数据是这样产生的,A采集音频数据,然后交给编码部分编码(例
如711,723),压缩完后的数据,由RTP打包,然后发送给B。
B接收这些数据,
拆RTP包,拿出原始数据,交给解码,解出数据后给播放进行播放。
从这里也可
以看出,OSIP2和这部分也是没有任何联系的。
其实这个过程也是很简单的过程,主要是熟悉下RTP的使用,数据产生后调用RTP函数发送出去就可以了,当然,还需要监听本地的RTP接收端口。
关于RTP流的建立的过程会在另外一个代码整理文挡,RTP流的建立的文挡里面详细的写(希望不是我干)。
好,就这么多,我想该说的我都说了,如果有任何问题,请在群里寻找答案。
雷。