CIFS协议详解

CIFS的概述

什么是CIFS?

通用Internet文件系统(CIFS),也称为服务器消息块(SMB),是一种网络协议,其最常见的用途是共享局域网(LAN)的文件。该协议允许客户端对文件进行操作,就好像他们在本地计算机上。如读,写,创建,删除,重命名操作都支持,唯一的区别是,该文件不是在本地计算机上,实际上是在远程服务器上。

CIFS 协议的工作方式从客户端向服务器发送的数据包。每个数据包通常是某种,如打开文件、关闭文件或读取的文件的基本要求。然后,服务器接收数据包,如果请求的是法律,验证客户端具有适当的文件的权限,最后执行请求,并返回到客户端的响应数据包检查。客户端然后分析响应数据包,并可以确定初始请求成功。

CIFS 是相当高级的网络协议。在OSI 模型中,最可能描述在应用/表示层。这意味着CIFS 依赖于其他运输的协议。可靠的运输所使用的最常见的协议是NetBIOS 通过TCP (NBT),其将在下面的NetBIOS 章描述。其他协议已用于传输层,但是随着互联网的巨大的普及,NBT 已成为事实标准。

虽然CIFS 的主要目的是,文件共享,但有CIFS 通常与其相关联的其他功能。大多数CIFS 实现也能够确定的其他CIFS 服务器上网络(浏览)、印刷和更复杂的身份验证技术。没有这些主题将讨论本文档中但是,只有基本的CIFS 文件操作。

CIFS 在哪里?

CIFS 协议最常用与微软的操作系统。Windows 的工作组是要使用CIFS,第一次微软操作系统和每个微软操作系统自那时已经能够CIFS 服务器和客户端的功能。Microsoft 操作系统使用CIFS 的远程文件操作(通常映射的网络驱动器),浏览(通过网上邻居图标)、(NT 和Windows 2000)、身份验证和远程打印机服务。它会公平地说,本机Microsoft 网络的核心围绕其CIFS 服务。

CIFS 协议是因为微软的大型企业和家庭用户群,发现几乎到处都。口味的Unix 操作系统还实现CIFS 客户端/服务器通过Samba 程序。苹果计算机也有CIFS 客户端和服务器可用,这可能会使CIFS 的最常见的文件共享协议可用。

CIFS 历史记录:

1984 年,IBM 写了允许上小的子网的主机之间的基本网络通信应用编程接口(API)。API,但是,所需实际发送和接收数据的传输层协议。第二年,IBM 发布能让来生活的NetBIOS API 的传输层协议。API 和传输协议被合并成一个实体,并称为NetBIOS 增强的用户界面或NetBEUI。

当时,其他传输协议是共同使用,和NetBIOS API 很快,实施使用DECnet、IPX/SPX 和TCP/IP 等各种其他的传输协议。API 变得相当流行。

不久之后,微软和英特尔创建的第一个节目的SMB/CIFS 文件共享协议,标题为"核心协议"。微软和英特尔选择了使用上述的NetBIOS API 的上层CIFS 数据包传递。因此,通过TCP 使用NetBIOS CIFS 成为标准的网络文件共享Microsoft 操作系统的机制。

许多功能添加了初始的核心协议,随着时间的推移。目前,大多数Windows 客户端支持至少6 的不同变体CIFS 协议中,每个版本,通常包含一些更多的功能,比上一次。到目前为止,至少100 不同CIFS 操作,列表中不断增长。小幅鲁棒特征集包括:?文件访问

?文件和记录锁定

?安全文件缓存

?文件更改通知

?协议协商

?扩展的文件属性处理

?批的请求

?Unicode 支持

CIFS 协议,但是,绝对显示年龄的迹象。几次在最后13 年,已扩展议定书》的功能集和造成的影响越来越明显。有多个完成相同的任务的CIFS 数据包和CIFS 数据包的许多有记录的选项。互联网工程任务组(IETF) 和存储网络产业协会(SNIA)努力纠正这种困境。它们正在朝着创建CIFS1.0 规范,其中列出了只需要在未来的支持的当前CIFS 操作的子集。规范还试图定义更清楚各包选项。有很多工作来做,但这绝对是一个好的开始。

NetBIOS:

本节将重点常用的上层CIFS 服务的NetBIOS 职能。如上文所述,NetBIOS 运行在许多级别的传输协议,但对于现代天实现,TCP/IP 协议套件是目前为止最普遍使用的传输协议。在1987 年RFC1001 和RFC1002 中记录的技术和NetBIOS 对运行的TCP/UDP (aka NBT) 的概念。这两个文件都非常完整;RFC1001 涵盖概念和方法,而RFC1002 包括详细的规格。

在这些文档中所述三个主要服务:名称服务、会议服务和数据报服务。每个这些服务和典型CIFS 实现的关系将在下文讨论。包括在这一节的最后是潜在未来NetBIOS 变化的简短说明。

服务名称:

NetBIOS 名称是人类可读的名称分配给网络上的计算机。这些名称最常见的Windows 操作系统在网上邻居中。NetBIOS 命名同样的目的为DNS 系统在TCP/IP 的世界;它允许调用的计算机的名称,人类和系统的可读名称映射到传输地址,如IP。不过,非常不同的NetBIOS 名称注册的IP 和解析名称到IP 的方法。

更好地理解的NetBIOS 名称操作运作这一节首先涵盖主要性能的NetBIOS 命名约定,,然后介绍常见NetBIOS 命名程序的简要概述了。

NetBIOS 命名属性:

广播和/或基于服务器。NetBIOS 名称注册和查找可以全部完成通过广播和局部区域网络或通过使用中央NetBIOS 名称服务器(NBNS 或WINS [1] )。通常,通过DNS,可以使用只有一个集中的名称服务器。是"和/或"的选项,必须由管理员使用任一配置所有的NetBIOS 计算机在网络上:

?广播唯一(b 节点)

?只有NBNS (p 节点)

?广播第一次和NBNS 仅当没有响应广播(m 节点)

?NBNS,然后广播如果服务器没有响应(h 节点)

由于这些选项,有两个,每个命名的活动,其中一个描述的广播的方法,其他描述的服务器的方法的说明。

动态注册。DNS 和NetBIOS 命名也不同如何创建可读的名称和IP 地址之间的关联。与DNS,管理员通常有一次,添加到服务器的DNS 条目和DNS 名称和IP 静态永远举行。与NetBIOS,当计算机启动时,它在注册其名称/ip 组合动态。NetBIOS 计算机也可以取消注册其名称每当它不再需要该名称。

名称语法。NetBIOS 名称必须符合一组严格的规则。下面的列表描述了主要的属性的名称必须遵守。

1. 注册的NetBIOS 名称可以引用(唯一名称),或者单个的工作站或可以参考的工作组(组名称)的所有一部分的多个节点。

2. NetBIOS 名称存在没有分层格式平面名称空间中。这意味着有没有"点"(即。' 字符)的NetBIOS 名称,作为在DNS 名称[2] 。因为这个平面名称空间的任何唯一的名称(如上所述)只能注册在一台计算机。

3. NetBIOS 名称必须只包含以下范围的字符、a-z、A-Z、0-9 或以下字符之一!@ # $ % ^ & ( ) - ' { } .~

4. NetBIOS 名称来描述该资源,使用最多15 个字符,16届字节指的资源类型。资源类型字节指示注册计算机有哪些属性[3] .

NetBIOS 常见过程概述:

两个最常见NetBIOS 名称服务网络上的计算机程序名称注册和名称查询。虽然名称查询确定与给定的名称关联的IP 地址名称注册将IP,与相关联的NetBIOS 名称。下文为b 节点和p 节点列出这两个过程。M 节点和h 节点,将会在一起,有时会尝试使用广播的方法第一,和有时会首先尝试使用NBNS 方法合并这些程序。

名称登记(b 节点):工作站希望登记的名称生成一个NetBIOS 名称注册数据包(在RFC1002 中定义),然后广播数据包通过UDP 协议端口137 上的子网。此数据包中包含工作站欲注册的名称和该工作站的IP 地址。工作站然后重复此过程三次,等待250 毫秒之间广播节目。在此期间,工作站等着看是否任何其它工作站将发送回一个防御数据包。从已注册此名称为其自己的任何其他工作站将发送此数据包(防御不应将发送一个组名称上如是合法的注册相同的组名称的多个工作站)。如果收到没有防御反应,则工作站已成功注册名称。

名称登记(p 节点):P 节点还生成一个NetBIOS 名称注册数据包(在RFC1002 中定义),而是直接向通过UDP 协议端口137 NBNS 服务器数据包单播数。NBNS 然后搜索它的内部名称的数据库,检查其他已注册了相同的唯一名称的工作站。如果已注册名称,NBNS 发送回负名称注册响应[4] 。如果没有工作站已注册名称,服务器将发送肯定名称注册响应和工作站已成功注册名称。

名称查询(b 节点):欲获取IP 地址的NetBIOS 名称从工作站首先生成名称查询请求(在RFC1002 中定义),然后广播数据包通过UDP 协议端口137 上的子网。请求数据包包含工作站欲查询的NetBIOS 名称。工作站然后重复此过程3 倍,等待5 秒之间每个重新传输。在此期间,工作站或者接收积极名称查询响应的计算机的名称,拥有来自或接收到什么。如果接收到积极名称查询响应时,包将包含查询的NetBIOS 名称的IP 地址。名称查询(p 节点):P 节点查询还生成名称的查询请求,但再次单播数直接向通过UDP 协议端口137 NBNS 服务器数据包。NBNS 然后搜索匹配的NetBIOS 名称为其内部数据库。如果找到匹配项,NBNS 将发送回请求的IP 地址与工作站积极名称查询响应。如果找不到匹配,NBNS 将发送回工作站负名称查询响应。

会议服务:

RFC1001 各国,"会话是可靠的消息交换,一对NetBIOS 应用程序之间进行。会话在全双工、顺序,以及可靠。"会话服务的NetBIOS 是哪个网络的计算机交换消息的泛型方法。这些消息可以是任何类型;会话服务只关注到可靠地按顺序的两个点之间传输消息。

RFC1001 去说TCP 端口139 上的应该用于模拟会议服务功能。TCP 与少数的例外情况极为类似的会议服务。主要区别是TCP 是面向流和不保留消息边界。这是相对于这一次在网络上发送一条消息,并预期一次从网络读取一条消息的会话服务。但是,解决这个问题很简单:每个会话服务数据包只是封装与指示邮件的大小前小头发送。

CIFS 使用会话服务发送和接收上层的所有命令,包括文件和打印机的所有操作。因此,在任何CIFS 网络通信中的第一步通常是建立在客户端和服务器之间的NetBIOS 会话。

会话服务是由小组定义的网络基元的介绍如下。描述还包括原始映射到TCP/IP 的方式。

?电话:启动的NetBIOS 会话。这被映射到TCP,启动和创建全双工的TCP 连接,然后发送NetBIOS 调用的数据包。呼叫数据包中包含客户端的NetBIOS 名称和服务器的NetBIOS 名称。

?听:等待NetBIOS 调用命令。这被映射到TCP 作为服务器等待端口139 传入的请求会话(TCP 启动,随后通过接收呼叫数据包上文所述)。

?挂断:结束NetBIOS 会话。这是由只需启动正常的TCP 拆卸序列映射到TCP。

?发送:通过NetBIOS 会话发送一条消息。这是由封装与小头包含邮件大小的数据,然后通过TCP 流发送数据映射到TCP。

?接收:从NetBIOS 会话接收消息。这被映射到TCP 作为接收从TCP 流,直到到了整个邮件(由上面提到的小头的大小)。

?会话状态:从RFC1001"获取有关请求者的会话,根据指定的名称的所有信息"。

这不是由作者是意识到任何CIFS 实现使用。

会话服务将很容易地映射到TCP,并因此,描述和实施不是过于复杂。CIFS 的每个数据包封装与指示邮件大小的4 字节会话标题中,虽然是很容易忘记以本机CIFS 是不只是通过TCP 模式运行。

数据报服务:

RFC1001 各国,"数据报服务是不可靠的、非顺序的、无连接的服务"。数据报服务由NetBIOS 应用程序用作快速、广播能力、低开销的方法来传输数据。正如RFC 说明指出,不过,数据报传递是不可靠的也可以到达顺序。

RFC 继续状态端口138 上的UDP 协议应被用于实现tcp/ip 协议内的NetBIOS 数据

报服务。UDP 是非常相似的NetBIOS 数据报服务,但仍必须稍微修改要效仿的所有的数据报服务功能。

是通过UDP 发送的所有的NetBIOS 数据报包有头前暂停处理它们。此标头包含两个重要信息: NetBIOS 名称的数据包发件人和NetBIOS 数据报是否零碎,无法通过UDP 发送。使用此信息,可以完全模拟NetBIOS 数据报服务,通过UDP 协议。

CIFS 实现通常使用NetBIOS 数据报服务,进行浏览。浏览是发现(Windows 然后在网上邻居中显示此列表)在网络上的CIFS 服务器的NetBIOS 名称的过程。浏览不属于标准的CIFS 协议,不过。虽然大多数CIFS 实现还实现浏览,它们是单独的实体。因此,纯的CIFS 实现将不需要执行的NetBIOS 数据报服务,只对会话和上文所述的名称服务。

未来的变化:

许多供应商目前正期待完全淘汰NetBIOS 和只需运行CIFS 直接通过TCP 和UDP。CIFS1.0 的草案规范明确指出CIFS 不取决于任何特定的传输协议和有简短的附录,它指示如何通过TCP CIFS 将运行以本机方式。

NetBIOS 仍然存在主要用于向后兼容性。如果删除了NetBIOS,所做的更改不会十分激烈。DNS 和域的名称将替换NetBIOS 命名服务。会议服务所需的所有数据包会都运行直接通过TCP,并会有没有NetBIOS 前暂停处理标头。所需的数据报服务的所有数据包会都运行直接通过UDP,并再次,pre 暂停处理标头将成为不必要。

如果这些变化,实际上将由供应商是未知的。微软似乎很感兴趣提供无NetBIOS CIFS。如果微软最终不会释放操作系统使用CIFS NetBIOS 脱钩,其他供应商可能还使交换机。

CIFS 塔内件

简而言之,通用的网络文件系统(CIFS) 是允许文件共享网络节点之间的网络协议。客户端发送到服务器的请求数据包,并响应数据包与客户端的服务器响应的客户端服务器设计基于议定书》。每个发送的数据包中包含标准的头,再加上两个可变长度字段使用的包的特定信息。每个数据包还包含命令字段,指示该数据包试图完成的一般用途。常用命令字段指示包的目的,是要登录、打开文件、从文件中读取或写入文件。

要获得更深入的了解,议定书》上CIFS 下面, 有三个详细的部分。第一节涵盖主要协议属性。第二节介绍CIFS 标准数据包报头通过关系图创建的各个字段和定义它们的目的。最后一节有两个典型的数据包序列演练:登录到服务器并打开/读取的文件。

协议属性:

客户端/服务器+ 请求/响应:如上文所述,CIFS 体系结构基于客户端发送请求,并答复每个请求的服务器发送[5] 。该协议是能有多个优秀的同时请求。这被完成通过多重的id (MID)的使用。客户端确保了每个请求发送到服务器具有独特的MID。当在服务器响应给定请求时,该响应包含相同的MID。这种方式,多个请求可以发送到服务器,以及客户端可以简单地匹配与它生成的知道哪些请求只是已回复的MID 中期响应。

基于命令:CIFS 的每个数据包包含1 字节命令中的一个字段。目前100++ 命令,每个数据包的核心功能是围绕指定的命令。对客户端响应总是有相同的命令代码,作为该请求。可在CIFS1.0 草案规范内的常见命令代码列表。

协议方言/谈判:自成立以来,在八十年代有很多版本的CIFS 协议。每个协议版本称为方言和分配一个唯一的字符串以标识如"PC 网络程序1.0"或"NT LM 0.12"方言。当客户端想要访问远程服务器上的文件时,发送的第一个CIFS 数据包是协商协议数据包。此CIFS 的数据包,在客户端列出的所有方言字符串它有能力的认识。在响应数据包中,服务器指示它希望进行交流,或指示服务器理解没有方言的方言。这种方法,客户端和服务器可以协商哪些特定CIFS 会话使用的方言。

/共享用户级安全性:一个共享是一个服务器实体(通常是一个文件的文件夹或打印机)被标记为可用,以CIFS 客户端的网络共享。限制的访问共享是带来两种方式之一:

1. 用户级安全性:指示欲访问共享的客户端必须提供用户名和密码进行访问。这提供了服务器管理员细粒对谁有权访问该共享的控制。在Windows NT 和Windows 2000 中使用这种类型的安全。

2. 共享级安全性:指示共享本身需要密码才能访问,但没有用户名是必需的建立了没有用户标识。例如,X 的密码无法分配到一定的份额。任何用户知道密码X 然后可以访问的共享。没有细致的控制,因为没有概念的单个用户和他们的权利。在Windows 95 和98 使用这种类型的安全。

加密:上面的两个安全方法之一,实际密码发送到服务器[6] 以加密格式。有两种常用的加密方法:较新的NT 风格与较旧的LAN 管理器样式。这两种加密方法使用质询响应身份验证,服务器向客户端发送一个随机字符串,并预计证明客户知道随机字符串和用户密码的响应。

命令配料:许多CIFS 数据包都能借用其他CIFS 数据包,以减少响应延迟和更好地利用

网络带宽。这种技术被称为效率与中国配料。

机会锁定:当CIFS 包指定打开的文件时,可以请求机会锁定操作(锁定)。如果授予服务器,操作锁定指示客户端没有其他实体正在访问该文件。这允许客户端对它想要的文件并不一定非要把它们写在作任何修改都立即向服务器。有多种类型的机会锁定和他们有细微的差别。请参见CIFS1.0 草案规范的详细信息。

数据包报头:

每一个CIFS 请求和响应作为模板使用下面的数据包报头。模板后介绍了各个领域。01234567012345670123456701234567 0xFF'我'' B'

命令错误类必须为零错误代码错误代码(续)标志Flags2

垫或安全签名——通常垫,因此必须为零

树ID (工贸署)进程ID (PID)

用户ID (UID)多重ID (中)字数统计由字数统计变量指定ParameterWords [字数统计] ——的可变大小本节中

的单词数。

ByteCount

由ByteCount 变量指定缓冲区[ByteCount] ——在本条中可变大小的字节数。

标头:CIFS 的每个数据包的开头包含4 个字节的标头。第一个字节为0xFF,紧接着的字母的ASCII 表示',是',和'B'。

命令:命令字段包含一个字节代码指示CIFS 数据包类型。从该字段的CIFS1.0 草案的例子是SMB_COM_READ_ANDX [7] (0x2E)、SMB_COM_TREE_CONNECT (0x70)和SMB_COM_NEGOTIATE (0x72)。

错误类:服务器指示给定的请求非常成功,错误类的字段。通常情况下,该字段是零,表示成功。如果非零,该字段指示的错误代码是从哪个班。错误类字段设置时,采用下列值之一:? ERRDOS (0x01)——错误是从核心DOS 操作系统设置

? ERRSRV (0x02)——由服务器的网络文件管理器生成错误

? ERRHRD (0x03) ——硬件错误

? ERRCMD (0xFF) ——命令不是"SMB"格式

错误代码:这16 位字段指示已发生的错误的类型。它通常设置为零,指示没有错误。如果设置,此数字与上面的错误类结合可以提供完整的错误说明,如"密码错误"或"文件不存在"CIFS1.0 草案中抬头。正如与错误类,此字段设置只能由上一个请求的响应中的服务器。标志:大多数的标志字段中的8 位指定特定的选项。注意在此字段中的唯一一个颇有点3。

3 位设置为'1',此特定的数据包中的所有路径名必须须都被当作为无壳。3 位设置为'0',当所有的路径名是区分大小写的。

Flags2:这16 位字段指定更多的选项。有用的位:

? 位0,如果设置,指示服务器可能会返回长文件名,在响应中。

? 位6,如果设置,指示任何请求中的路径名是长文件名。

? 如果位16,设置,指示该数据包中的字符串以UNICODE 编码。

垫/安全签名:此字段通常设置为零。

树ID (工贸署):工贸署是一个16 位的数字标识的资源(磁盘共享或打印机,通常)所指的这个特定的CIFS 数据包。当数据包进行交换,的确没有任何与资源时,此数字将是毫无意义和被忽略。

如果客户希望获得对资源的访问权限,客户端将发送CIFS 数据包与命令字段设置为

SMB_COM_TREE_CONNECT_ANDX。在此数据包,指定的共享或打印机名称(即

//SERVER/DIR)。然后,服务器将验证存在相应的资源,并在客户端具有访问权限,然后

返回表示成功的响应。在此响应数据包,服务器将设置工贸署随意的任何数字。从此以后,如果客户机希望提出请求特定的资源,它将设置工贸署数它时获得。

进程ID (PID):PID 是一个16 位的数字标识哪个进程发出CIFS 请求客户端上。服务器使用此号码进行检查并发问题(通常以保证的文件将不损坏的竞争客户端进程)。

用户ID (UID):UID 是16 位的数字,发出CIFS 请求客户端的用户标识。通过发送包含用户名和密码的CIFS 会话设置请求,客户端必须从服务器获取UID。后验证用户名/密码,服务器响应设置的会话,并包括生成的UID。客户端然后所有未来CIFS 请求中使用已分配的UID。如果这些客户端请求的任何要求被检查的文件/打印机权限,服务器将验证请求中的UID 已执行的操作所需的权限。

UID 的有效期仅为给定的NetBIOS 会话。其他会话可能使用相同的UID 具有不同的用户相关联的服务器。注意:如果服务器运行在共享级安全模式(见上文),UID 是毫无意义和被忽略。

多重ID (中):MID 是一个16 位值,用来让多个优秀的客户端请求存在不会产生混淆。每当客户端发送一个CIFS 数据包,它检查是否有任何其他悬而未决的请求挂起。如果是这样,它确保新的请求会有不同的MID 然后以前未完成的请求。每当服务器答复CIFS 请求,它确保它将发送的响应与中期,它收到请求相匹配。在执行此过程,客户端可以总是知道究竟哪些优秀的请求传入的答复相关的。

字数统计和参数的话:CIFS 数据包使用这两个字段来保存特定命令的数据。CIFS 数据包页眉模板上面不能每个可能的CIFS 数据包的每种可能的数据类型。若要纠正此问题,参数词字段创建具有可变长度。字数统计指定参数词字段实际上将包含多少16 位字。这种方式,每个CIFS 数据包可以调整执行它自己的特定命令的数据所需的大小。

对于每个数据包类型的字数统计通常是常量和CIFS1.0 草案中定义的。有两个wordcounts 定义的每个单独的命令;为客户端请求,另一个用于服务器响应的一个字数统计。因为有必要,可请求的数据量不一定是发出答复所需的相同数额需要两项罪名。ByteCount 和缓冲区:这些字段是非常类似于以上;字数统计和参数词字段他们持有数量可变的数据指定每个包的基础上的。Bytecount 指示数据的字节数将下面的缓冲区字段中存在。

上述参数数据部分和缓冲区之间的主要区别是它们存储的数据类型。缓冲区数据节通常持有大量原始数据(例如文件数据),参数字数据部分通常用于保存少量的数据包的选项。

数据包序列演练:

两个常见CIFS 客户端/服务器数据包交换列示如下。第一次交换显示哪些数据包被发送时客户端将首次启动与服务器的联系人:建立NetBIOS 会话、CIFS 方言协商、发送用户名和密码,和最后,连接到一个资源(例如,打印机或目录的共享)。第二个exchange 会检查打开文件并从中读取所需的数据包。

对于每个exchange,初始的摘要概述的整个过程。此外,发送和接收的每个数据包是详细的(通过上市出各种数据包标头值),也总结了。

请注意在所有示例中,客户端总是发送对TCP 端口139 和在服务器总是响应客户端选择的暂时端口数。此外,下列CIFS 数据包字段不会为每个个人的数据包所述:?错误码类——总是零点时从客户端发送,并假定当从服务器(示例不包括错误情形)返回零。

?标志——设置为0x00 所有数据包(区分大小写的路径名)

?Flags2——设置为0x0001 的所有数据包(长支持文件名称)

垫/安全签名——所有的数据包中设置为0

初次接触、登录和树连接:

当CIFS 客户端确定它希望访问CIFS 服务器上的资源时,下面的数据包序列被交换。第一,为了提供的可靠消息序列运输服务建立NetBIOS 会话。然后,客户端和服务器协商会沟通的CIFS 方言。客户端然后登录到服务器时,发送用户名和密码(对于此示例,服务器将运行在用户级安全性)。最后,客户端连接到所需的资源。

# 1 数据包请求,客户端–?服务器

目的:建立NetBIOS 会话

摘要:客户端,欲与服务器交换CIFS 数据包启动本身和服务器之间的NetBIOS 会话(称为"调用服务器"前面的NetBIOS 部分)。这提供了两个端点之间的已编序的、可靠的消息传递。注意客户端必须知道该服务器的NetBIOS 名称才能调用它,也必须表明自己的NetBIOS 名称。

要建立NetBIOS 会话事件如下所示。第一,在客户端建立与服务器的端口139 全双工的TCP 连接。这实现的一旦客户端建立并通过TCP 连接发送NetBIOS 会话请求数据包(不图解上面,NetBIOS 部分但RFC1002 中所述)。总之,会话请求数据包包含客户端的NetBIOS 名称、服务器的NetBIOS 名称和整型常数指示包的目的是建立一个NetBIOS 会话。请有关更多详细信息,参阅RFC1002。

# 2 数据包响应,服务器–?客户端

目的:积极的NetBIOS 会议确认

摘要:如果上述会议请求数据包包含服务器的NetBIOS 名称,和数据包格式设置正确,与简单会话的服务器答复设立的确认。RFC1002 还描述了这4 个字节的数据包。总之,它指示会议成功建立或错误代码。

# 3 数据包请求,客户端–?服务器

目的:谈判CIFS 方言

摘要:现在,建立NetBIOS 会话,可以随时发送第一次真正CIFS 请求客户端。客户端发送SMB_COM_NEGOTIATE 命令和包括可识别CIFS 方言的列表。

数据包:

命令:SMB_COM_NEGOTIATE (0X72)

工贸署:忽略此数据包中。

PID:设置来处理客户端进程的ID。

UID:忽略此数据包中。

MID:任何的唯一编号。

字数统计: 0

ParameterWords:有没有因为字数统计为0。

Bytecount:设置为119 (取决于客户端知道多少CIFS 方言的变量)。

缓冲区:包含119 个字节,价值的方言说明、示例会如下:"PC 网络程序1.0"、"MICROSOFT 网络3.0"、"DOS LM1.2X002"、"DOS LANMAN2.1","3.1a","NT LM 0.12"中的。

# 4 数据包响应,服务器–?客户端

目的:从请求列表中选择CIFS 方言

摘要:服务器现在响应协商协议请求通过选择中进行通信的方言。

数据包:

命令:SMB_COM_NEGOTIATE (0x72)

工贸署:忽略此数据包中。

PID:当数据包是从服务器时忽略。

UID:忽略此数据包中。

MID:匹配唯一号码选择了上面。

字数统计:此数目取决于选择的方言。对于本示例,我们将假定服务器选择了"NT LM 0.12"

[8] 。在此情况下,字数统计是17。

ParameterWords:此处包含的17 字显示所选择的方言和许多服务器属性。注意的是MaxMpxCount (其中规定挂起的请求,客户端可以启动的最大数目)和32 位能力的标志(如果这如果支持UNICODE,则表示支持大文件,如果支持NT 命令,等等)。Bytecount:变量,通常大于8。

缓冲区:通常包含客户端加密目的使用下一个数据包中的8 个字节的随机字符串。

# 5 数据包请求,客户端–?服务器

目的:用户登录

摘要:现在,CIFS 方言已获通过后,客户端发送数据包包含一个用户名和密码以获取用户ID (UID)。此数据包还中继到服务器,客户端功能,因此必须发送数据包,即使服务器正在使用共享级别安全。

数据包:

命令:SMB_COM_SESSION_SETUP_ANDX (0x73)

工贸署:忽略此数据包中。

PID:设置来处理客户端进程的ID。

UID:忽略此数据包中。

MID:任何的唯一编号。

字数统计: 12

ParameterWords:这一节是非常类似于服务器的谈判协议参数字响应。然而,上市服务器的功能,而不是它列出了客户端的。它还包含在下面的缓冲区部分中提供的密码的大小。Bytecount:变量,在下面的缓冲区中包含加密的密码、用户名、操作系统和本机LAN 管理器的名称。因此,在此处列出的大小取决于所有这些实体的字符串大小。

缓冲区:如上文所述,此字段实际上包含密码、用户名和其他识别操作系统所涉及的字符串。

# 6 数据包响应,服务器–?客户端

目的:指示用户ID (UID) 或返回错误,如果坏密码

摘要:一旦服务器收到的加密的密码和用户名,它会检查结合是否有效。如果密码无效,将返回此响应数据包与错误类和代码设置为相应的错误值。如果用户名/密码是正确的则此数据包包含客户端将开始从这里发送的每个数据包的UID。

数据包:

命令:SMB_COM_SESSION_SETUP_ANDX (0x73)

工贸署:忽略此数据包中。

PID:当数据包是从服务器时忽略。

UID:16 位的数字,服务器已分配给代表客户端的用户标识。

MID:匹配唯一编号选择了上面。

字数统计: 3

ParameterWords:没有相关的正常运行。

Bytecount:变量,在下面的缓冲区中包含说明服务器操作系统和本机LAN 管理器类型的字符串。

缓冲区:包含该值指示服务器操作系统和LAN 管理器类型的字符串。

# 7 数据包请求,客户端–?服务器

目的:连接到特定的资源

摘要:此时,客户端验证自身到服务器,并可以继续连接到实际的共享。此数据包,在客户端指定它希望访问的共享。共享名称指定UNC 格式(即//SERVER/SHARE)。

数据包:

命令:SMB_COM_TREE_CONNECT_ANDX (0x75)

工贸署:忽略此数据包中。

PID:设置来处理客户端进程的ID。

UID:从以上的会话设置响应中返回的UID 的服务器设置。

MID:任何的唯一编号。

字数统计: 4

ParameterWords:没有相关的正常运行。

Bytecount:变量,取决于下面请求的UNC 字符串的大小。

缓冲区:包含客户机希望访问的共享名称。

# 8 数据包响应,服务器–?客户端

目的:指示树ID (工贸署)或错误,如果不存在的共享名称

摘要:如果上面指定的共享存在并且用户具有访问权限,则服务器将返回与工贸署成功的响应设置数它希望,请参阅作为资源。如果不存在共享或用户没有访问权限,服务器会返回相应的错误类和这里的错误代码。假定此数据包表示成功,客户端现在有它从指定的共享访问文件所需要的一切。这是最后的邮包在此客户端/服务器交换。

数据包:

命令:SMB_COM_SESSION_SETUP_ANDX (0x73)

工贸署:哪个服务器已分配给代表所请求的资源的16 位数字。

PID:当数据包是从服务器时忽略。

UID:16 位数字表示该用户。

MID:匹配唯一编号选择以上。

字数统计: 3

ParameterWords:没有相关的正常运行。

Bytecount:变量,在下面的缓冲区中包含说明请求的资源的本机文件系统和设备类型的字符串。

缓冲区:包含状态本机文件系统和设备类型的字符串。

文件打开并读取:

一个客户端完成以上所述的初始数据包交换序列,它可能会打开并读取文件从共享请求。打开的文件包括一个CIFS 请求和一个CIFS 响应。读取的请求还包括一个请求和一个响应数据包。

# 1 数据包请求,客户端–?服务器

目的:打开文件

摘要:为了读取或写入文件,首先必须打开它。此CIFS 数据包会正是这样做。

数据包:

命令:SMB_COM_OPEN_ANDX (0x2D)

工贸署:设置为返回工贸署从树的服务器连接以上的响应。

PID:设置来处理客户端进程的ID。

UID:从上述的会话设置响应返回的UID 的服务器设置。

MID:任何的唯一编号。

字数统计: 15

ParameterWords:指定许多打开选项如模式(读取、写入或读写)和共享模式(无、读取、写入)。

Bytecount:变量,取决于包含文件名的字符串的大小。

缓冲区:包含要打开的文件的名称。

# 2 数据包响应,服务器–?客户端

目的:指示文件ID 或错误代码,如果问题

摘要:服务器检查是否上面的文件名存在,并且如果在指定的用户UID 有访问该文件的权限。如果不满足这些条件,则服务器会返回相应的错误类和错误代码,指示该问题什么。如果没有错误,则服务器返回响应数据包包括后续的访问该文件包中的文件ID (FID)可以使用。请注意FID 返回到客户端的响应参数词字段中。标准CIFS 头上没有FID 字段。数据包:

命令:SMB_COM_OPEN_ANDX (0x2D)

工贸署:16 位的数字,其中服务器分配给代表所请求的资源。

PID:当数据包是从服务器时忽略。

UID:16 位数字表示该用户。

MID:匹配唯一编号选择以上。

字数统计: 15

ParameterWords:指示哪种类型的操作发生的很多标志和非常重要的16 位FID。Bytecount: 0

缓冲区:没有缓冲区中的数据。

# 3 数据包请求,客户端–?服务器

目的:从文件中读取

摘要:假设以上的响应表示FID 的客户端使用,现在可以发出实际的读取的请求的文件数据。

数据包:

命令:SMB_COM_READ_ANDX (0x2E)

工贸署:工贸署从树设置为服务器返回连接以上的响应。

PID:设置来处理客户端进程的ID。

UID:从会话设置响应上述设置为服务器返回的UID。

MID:任何的唯一编号。

字数统计: 10

ParameterWords:在这里,FID 说所以知道服务器,打开的文件所指的客户端。此外在这里表示的是32 位的文件偏移量和16 位计数值。这两个数字听写的位置和多少文件从返回的数据。

Bytecount: 0

缓冲区:没有缓冲区中的数据。

# 4 数据包响应,服务器–?客户端

目的:返回文件请求的数据

摘要:此包包含请求的文件的数据。假设UID,工贸署和FID 只是所有有效数字在请求中,错误在这里应该是不太可能。

数据包:

命令:SMB_COM_READ_ANDX (0x2E)

工贸署:哪个服务器已分配给代表所请求的资源的16 位数字。

PID:当数据包是从服务器时忽略。

UID:16 位数字表示该用户。

MID:匹配唯一编号选择以上。

字数统计: 12

ParameterWords:在这里,表示被实际读取的字节数。这不一定匹配请求(如请求超出文件边界)的数目。

Bytecount:变量,缓冲区将保存文件数据,所以此号码也被实际读取的字节数。

缓冲区:请求的文件数据。

最后的评论:

CIFS 协议的讨论到此结束。有关详细信息,请参考书目节或https://www.360docs.net/doc/a111560624.html,。意见或错误的意见呢?请通过电子邮件details@https://www.360docs.net/doc/a111560624.html,.

这是很有可能在此文档中的错误。CodeFX 提供本文仅用于提供信息。CodeFX 否认所有的担保、表示或暗示担保,包括适销性或特定用途适用性的担保。

参考书目:

奥尔巴赫,卡尔。Tcp/Udp 传输上的Netbios 服务协议标准:

概念和方法。RFC1001,1987 年3 月。

[关于如何实施各种NetBIOS 呈现的概念和方法

TCP/UDP 网络上的服务。没有CIFS 的信息,但是,CIFS 使用

NetBIOS,所以仍然相关的信息的传输协议。自由

可得到各地的网站。

奥尔巴赫,卡尔。Tcp/Udp 传输上的Netbios 服务协议标准:

详细的规范。RFC1002,1987 年3 月。

[相同特征以上,除此RFC 给出实际的数据包格式和

仿真代码实现。也可在web 上自由。]

埃克斯坦,庄-布朗和彼得·凯利。使用Samba 。奥赖利。1999 年11 月

[这本书虽然主要是有关使用和学习桑巴,它提供了质量

NetBIOS 和良好的常见CIFS 问题的描述信息。第章

1 是最相关的。这本书是可用网上自由在

https://www.360docs.net/doc/a111560624.html,/catalog/samba/chapter/book/index.html.]

赫特尔克里斯"桑巴:介绍"。Samba 网页。1999 年6 月10 日。桑巴

网页。2000。https://www.360docs.net/doc/a111560624.html,/samba/docs/SambaIntro.html.

[CIFS 的体面的概述。包含对潜在未来CIFS 的好信息。

可用网上自由在上面链接。]

霍。"CIFS:常见的不安全因素失败审核"。禽的研究。

1997 年1 月。https://www.360docs.net/doc/a111560624.html,/hacking/cifs.txt.

[标题说明了一切。这漫长的纸上安全给伟大的概述

CIFS 的缺陷。很好的信息,可自由地在上面链接网上。]

互联网工程任务组(IETF) 存储网络工业协会

(SNIA)。常见的网络文件系统(CIFS)

协议。因特网草案版本,2000 年5 月。

[这是在这中引用了大量的规范CIFS1.0 草案

文档。这是查找详细信息排名第一。

最好的地方找到最新的版本可能是SNIA 网站

(https://www.360docs.net/doc/a111560624.html,)。要从"产品和服务"链接

"工作组"到"nas"到"cifs"到"技术活动"。有一次,

检查"工作完成"节]。

公开组中。X 协议/ 打开PC 互联网络:SMB,第2 版.

伯克希尔公司,英国:X/打开有限,1992 年9 月的公司。

[本文档是X / SMB 协议规范的打开的1992年尝试。

总之,很全面、彻底,但是,所有的材料是有些过时

在这点上。不可用自由,必须购买直接从X / 打开。]

夏普,理查德。"什么是SMB"。Samba 网页。1999 年9 月27 日。Samba 网页2000. https://www.360docs.net/doc/a111560624.html,/cifs/docs/what-is-smb.html.

[可能最佳SMB/CIFS 介绍可用。也有许多有趣的链接。]

采煤机、也很激动"SMB 的历史"。Samba 网页。1996 年11 月16 日。Samba 网页2000. https://www.360docs.net/doc/a111560624.html,/cifs/docs/smb-history.html.

[包含SMB 协议的历史记录。基本上的各种文档列表

这了SMB 发展,他写过他们,以及何时。]

Tridgell,安德鲁。"内部Microsoft 网络连接"。Samba 的Ftp 站点。

https://www.360docs.net/doc/a111560624.html,/pub/samba/slides/inside_SMB.tar.gz。1999 年7 月31 日。

[另一种很好的介绍CIFS。这还包括一些浏览和

NetBIOS 名称服务的信息。写的原始桑巴的核心作者。]

附加信息:

有关其他信息,获取对上面列出的参考书目的全部或部分的访问。如果仍然需要更多的信息,请参考下面的链接。

?Samba 网站包含的信息,从web 链接到演示文稿幻灯片的财富。这可以通过单击文档链接在https://www.360docs.net/doc/a111560624.html,找到。请注意上面的书目链接直接到此站点上的几个优秀文章。

?可以在https://www.360docs.net/doc/a111560624.html,/cifs/index.html找到的NetBIOS 非常详细的解释和CIFS 的简要概述.

?微软自己的FTP 站点上有一些CIFS 文件。这可以位于

https://www.360docs.net/doc/a111560624.html,/developr/drg/cifs。其中许多文件描述了旧方言的CIFS 协议。阅读"index.txt"文件上的ftp 站点的详细信息可用的文件上。

?以下网站包含许多有用的、有趣的CIFS 链接。

https://www.360docs.net/doc/a111560624.html,/homepages/TimothyDEvans/nbf.htm

?有两个CIFS 社区用途的邮寄列表。更多活动的两个是Samba 列表中,可以搜索和订阅了通过以下链接。https://www.360docs.net/doc/a111560624.html,/samba/archives.html。微软赞助商列表;

可以查看或订阅了在https://www.360docs.net/doc/a111560624.html,/archives/cifs.html.

?理解CIFS 协议的最佳方法之一是看着它在行动中。从https://www.360docs.net/doc/a111560624.html,下载缥缈的数据包嗅探器的副本。如果您有的GTK + GUI 库使用Win32 和Unix 机器

Ethereal。它是完全免费的并包括一个很正常的CIFS 解析器。

?最后,还可用于搜索和发布新闻组comp.protocols.smb。

rtmp流媒体协议

H5视频直播扫盲 1 H5到底能不能做视频直播 当然可以, H5火了这么久,涵盖了各个方面的技术。 对于视频录制,可以使用强大的webRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音对话或视频对话的技术,缺点是只在PC的chrome上支持较好,移动端支持不太理想。 对于视频播放,可以使用HLS(HTTP Live Streaming)协议播放直播流,ios和android都天然支持这种协议,配置简单,直接使用video标签即可。 webRTC兼容性: video标签播放hls协议视频:

1 2 3 4

Your browser does not support HTML5 video. 2 到底什么是HLS协议 简单讲就是把整个流分成一个个小的,基于HTTP的文件来下载,每次只下载一些,前面提到了用于H5播放直播视频时引入的一个.m3u8的文件,这个文件就是基于HLS协议,存放视频流元数据的文件。 每一个.m3u8文件,分别对应若干个ts文件,这些ts文件才是真正存放视频的数据,m3u8文件只是存放了一些ts文件的配置信息和相关路径,当视频播放时,.m3u8是动态改变的,video标签会解析这个文件,并找到对应的ts文件来播放,所以一般为了加快速度,.m3u8放在web服务器上,ts文件放在cdn上。 .m3u8文件,其实就是以UTF-8编码的m3u文件,这个文件本身不能播放,只是存放了播放信息的文本文件: 1 2 3 4 5#EXTM3U m3u文件头 #EXT-X-MEDIA-SEQUENCE 第一个TS分片的序列号#EXT-X-TARGETDURATION 每个分片TS的最大的时长#EXT-X-ALLOW-CACHE是否允许cache #EXT-X-ENDLISTm3u8文件结束符

rtmp协议

RTMP:Real Time Messaging Protocol 实时消息传送协议 字节序:大端 Message Format: Timestamp:4 bytes Length:3 bytes Type ID:1 bytes Message Stream ID:4 bytes 小端 Handshake three static_sized chunks client:C0 C1 C2 server:S0 S1 S2 simple handshake: handshake sequence 握手开始于客户端发送C0、C1块 客户端在发送C2块之前必须等待直到S1块被接收 客户端在发送任何其他数据之前必须等待直到S2块被接收 服务器在发送S0、S1之前必须等待直到C0被接收或是C1被接收服务器在发送S2之前必须等待直到C1被接收 服务器在发送任何其他数据之前必须等待直到C2被接收 C0和S0格式 一个字节(8bits) 本版本是3 C1和S1格式 1536个字节

C2和S2格式 1536个字节,是C1和S1的回复响应 time:必须包含对等段发送的时间戳(对C2来说是S1,对S2来说是C1)time2:必须包含先前发送的被对端读取的包(S1或C1)的时间戳 handshake diagram

Complete handshake Chunking Chunk format A header and data +--------------+----------------+--------------------+----------+ | Basic Header | Message Header | Extended Timestamp | Chunk Data| +--------------+----------------+--------------------+----------+ | | |<------------------- Chunk Header ----------------->| Chunk Format Basic header:1-3bytes,chunk stream ID and chunk type(fmt) 长度可变type depend on the format of the encoded message header the length depend on the chunk stream ID ID:3-65599,0\1\2 reserved 0:2bytes,ID range 64-319 (the second byte+64) 1:3bytes,ID range 64-65599(the third byte*256+the second byte+64) 2:low-level protocol 2-63: 64-319:

RTMP协议

RTMP Protocol Connect NetConnect.connect() Flash Play 通过NetConnect.connect连接到RTMP Server时,首先进行握手,再发送connect的参数. 1) 握手过程有三步: Step 1, Flash Player 至RTMP Server : 1个byte(0x03)+1536个byte数据. Step 2, RTMP Server至Flash Player : 1个byte(0x03)+1536个byte数据(Server的握手数据) + 1536个byte数据(通过和随机数hash得出, 详见附录) Step 3, Flash Player 至RTMP Server : 1536个byte数据(RTMP Server计算出来的). 注意:这个数据块没有1个byte的0x03. 2) 接下是connect参数 RTMP Server <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

RTMP Server >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Flash Player RTMP协议步骤 Step 1 发送一个0x05的包,即ServerBW, (channel 0x02) (0x00 26 25 a0) Step 2 发送一个0x06的包,即ClientBW, (channel 0x02) (0x00 26 25 a0) + (0x02) Step 3 发送一个0x14的包,即Invoke, (channel 0x03) (body超过128的长度就要分包, 用0xc3来) string (“_result”) + number (0x3F F0 00 00 00 00 00 00) + Object string (“capabilities”) ; number (31.0) string (“fmsV er”) ; string (随便填) (“RubyIZUMI/0,1,2,0”) End Of Object (0x00 00 09) //(connect status) + Object string (“code”) ; string (“NetConnection.Connect.Success”) string (“level”) ; string (“status”) string (“description”) ; string (“Connection Succeeded.”) End Of Object (0x00 00 09) RTMP Server <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

课题_nginx搭建rtmp协议流媒体服务器总结

nginx搭建rtmp协议流媒体服务器总结 最近在ubuntu12.04上搭建了一个rtmp服务器,感觉还挺麻烦的,所以记录下。 大部分都是参考网络上的资料。 前提: 在linux下某个目录中新建一个nginx目录。 然后进入该目录去下载搭建环境所需要的一些资源包。 此处在/root/ 目录下新建一个nginx目录即: /root/nginx/ ==================================== 1、安装依赖包: #yum -y install gcc glibc glibc-devel make nasm pkgconfig lib-devel openssl-devel expat-devel gettext-devel libtool mhash.x86_64 perl-Digest-SHA1.x86_64 2、安装相关工具包 1). git # mkdir soft-source # cd soft-source # wget ://https://www.360docs.net/doc/a111560624.html,/projects/git-snapshots/git/git-latest.tar.xz # xz -d git-latest.tar.xz # tar xzvf git-latest.tar # cd git-2014-06-27 # autoconf # ./configure # make && make install # git --version git version 2.0.0.GIT # cd .. 2). zlib # wget ://https://www.360docs.net/doc/a111560624.html,/zlib-1.2.8.tar.gz # tar -zxvf zlib-1.2.8.tar.gz cd zlib-1.2.8 # ./configure # make # make install # cd .. 3). pcre # wget ://exim.mirror.fr/pcre/pcre-8.12.tar.gz # tar zxvf pcre-8.12.tar.gz # cd pcre-8.12 # ./configure # make && make install # cd .. 4). yadmi yadmi的作用是为flv文件添加关键帧,才能实现拖动播放 # wget ://https://www.360docs.net/doc/a111560624.html,/projects/yamdi/files/yamdi/1.4/yamdi-1.4.tar.gz/download # tar xzvf download # cd yamdi-1.4 # make && make install # cd .. 使用方法: # yamdi -i input.flv -o out.flv 给input.flv文件添加关键帧,输出为out.flv文件 5). OpenSSL # wget ://https://www.360docs.net/doc/a111560624.html,/source/openssl-1.0.1c.tar.gz # tar -zxvf openssl-1.0.1c.tar.gz # ./config # make # make install 3、安装ffmpeg及其依赖包: 1). Yasm # wget ://https://www.360docs.net/doc/a111560624.html,/projects/yasm/releases/yasm-1.2.0.tar.gz # tar xzvf yasm-1.2.0.tar.gz

iSCSI协议

一、基本概念 SCSI,小型计算机系统接口,基于client-server模型,client(initiator)将命令发送给server(target),server处理命令后回传结果给client。由于要传送命令必然要用到相应的传输协议,iSCSI就是其中的一种传输协议,除此之外还有FC等。 iSCSI也就是SCSI over IP,使用TCP/IP协议来传递SCSI命令与响应,其借用现有的互连网来实现SCSI通讯,成本低,管理、使用方便。 iSCSI也有initiator和target,分别对应于SCSI的initiator和target,iSCSI initiator 与target使用TCP进行通信从而实现了SCSI的initiator与target之间的通信。 如何使用iSCSI来传递SCSI命令与响应呢?首先要明白SCSI target中包含许多LU(逻辑单元),每一个SCSI命令都有其目标LU,这些LU负责对针对其的SCSI命令进行处理与响应。iSCSI有自己的PDU,在iSCSI initiator端,其包含SCSI initiator下发给其的LUN(逻辑单元号码)及SCSI命令(CDB),在被作为TCP的数据部分传递到iSCSI target 端后由SCSI target根据LUN将SCSI命令投放到目标LU中,LU在处理命令后把响应结果递交给SCSI target,SCSI target再将其递交给iSCSI target,iSCSI target把结果封装成iSCSI PDU,再使用TCP回传给iSCSI initiator,iSCSI initiator再将结果递交给上层SCSI initiator,如图1所示: 图1.iSCSI协议层次 iSCSI Device: 利用iSCSI传递服务子系统进行传递的SCSI设备。 iSCSI Node: iSCSI节点表示一个iSCSI启动器或者iSCSI目标器。在一个网络实

实时流煤体协议概述v1.0

实时流煤体协议概述v1.0

实时流煤体协议概述 流媒体传输类型: 流媒体传输分两类:实时流媒体和顺序流媒体 一般来说,如果视频为现场直播,或使用专用的流媒体服务器,或应用如RTSP等专用实时协议,即为实时流媒体传输; 如果使用普通的HTTP服务器,将音视频数据以从头至尾方式发送,则为顺序流媒体传输。 实时流传输既可传输实况直播,也可传输完整的音视频文件(专用协议流式)。 顺序流媒体不可用于实况直播,仅能传输完整的音视频文件(HTTP渐进式)。 主流的流媒体协议 主流的流媒体协议主要有:RTMP,HLS,RTSP等。

附:流媒体播放实现流程 一,h ttp渐进式下载原理(仅支持文件播放)http边下载边播放,严格意义上讲,不是实况直播协议。他的原理是先下载文件的基本信息,音频视频的时间戳,再下载音视频数据,以播放mp4为例,先下载文件头,根据文件头指引下载文件尾,然后再下载文件的音视频数据。 播放方式:1. 浏览器调用系统播放器播放; 2. 使HTML5的Video标签,浏览器内部支持直接播放。

二,苹果支持的hls原理(支持文件播放和实况直播)HLS的文件点播 1.使用“文件分段器”将基于H264和AAC或MP3的MPEG4分段, 生成.ts和.m3u8文件,存储于普通服务器上。 2.苹果应用程序或苹果浏览器可以通过访问.m3u8文件获取到索引, 并下载所需要的数据片段来播放。 HLS的实况直播 1.使用“流分段器”将基于H264、AAC、MP3的MPEG2传输 流分段, 2.可使用其它工具将MPEG4音视频文件加载到MPEG2传输流当中。 3.生成.ts和.m3u8文件,存储于普通服务器上。 4.苹果应用程序或苹果浏览器可以通过访问.m3u8文件获取到索引, 并下载所需要的数据片段来播放。 三,A dobe Flash 支持的RTMP协议(支持文件播放和实况直播) 必须采用Flash服务器FMS(Flash Media Server) 或 RED5. FMS的文件点播 1. 服务器(FMS或RED5)将F4v 或 Flv文件转化为RTMP流或HTTP流 2. 客户端(Flash插件或应用程序)获取RTMP流,提取相应的Flv 或 F4v文件片段进行播放。 FMS的实况直播 1.设备端(摄像头)将数据转化为F4v片段,通过RTMP流上传到服务器 2. 服务器(FMS或RED5)转发RTMP流到客户端 3. 客户端(Flash插件或应用程序)获取RTMP流,提取数据片段播放。 四,R TSP协议 RTSP为纯粹的传输控制协议。 RTSP协议本身不与它负载的媒体数据相关。 RTSP协议需要自定义客户端向服务器发送RTSP命令。

PANABIT支持协议库

Panabit V9.08(战国r3)专业版支持协议列表 (2009.10.16) 类别 应用协议 客户端 发布日期 版本号/注释 HTTP协议 WWW Web音乐 FLASH HTTP代理 HTTP下载 HTTP分块传输 伪IE下载 其他下载主要是“另存为” 土豆网https://www.360docs.net/doc/a111560624.html, Web视频 酷6 https://www.360docs.net/doc/a111560624.html, 6间房 https://www.360docs.net/doc/a111560624.html, 优酷https://www.360docs.net/doc/a111560624.html, Youtube https://www.360docs.net/doc/a111560624.html, HULU网https://www.360docs.net/doc/a111560624.html, 我乐网https://www.360docs.net/doc/a111560624.html, Sina视频https://www.360docs.net/doc/a111560624.html, Sohu视频 腾讯宽频 波波虎https://www.360docs.net/doc/a111560624.html, 其他Web视频 凤凰网https://www.360docs.net/doc/a111560624.html, CCTV点播https://www.360docs.net/doc/a111560624.html, Viewgood https://www.360docs.net/doc/a111560624.html, 常用协议 电子邮件 SMTP POP3 IMAP 终端类 VNC PCAnyWhere SSH Telnet 远程桌面 文件传输 FTP TFTP RSync 缺省端口873 NFS

CVS MSDS Microsoft-DS DNS DHCP NNTP SNMP NTP UPNP NETBIOS DAYTIME 端口为13 SYSLOG 缺省端口514 DECRPC LDAP NAT端口映射 网络管理 ISA控制协议 HTTPS Socks4/5 L2TP PPTP IPSEC GRE 网络安全 OpenVPN 360更新 Nod32更新 Windows更新 软件更新 卡巴斯基更新 流媒体协议 RTSP MMS QuickTime QuickTime 7 Windows MediaPlayer Windows MediaPlayer 11 Real Player Real Player 11 BBSee 1.3 磊客https://www.360docs.net/doc/a111560624.html, 新浪奥运视频 网易奥运视频 QQ奥运视频 CCTV央视高清 RTMP P2P下载 BitComet 2009.06.22 1.13 BT BitSpirit 2009.07.27 V 3.6.0.135

RTSP协议转换RTMP直播协议

RTSP协议转换RTMP直播协议 RTSP协议也是广泛使用的直播/点播流媒体协议,最近实现了一个RTSP协议转换RTMP直播协议的程序,为的是可以接收远端设备或服务器的多路RTSP直播数据,实时转换为RTMP直播协议,推送到FMS、Red5、wowza server等RTMP 服务器,以实现flash观看RTSP直播源的需求。程序同时也具备从FLV文件获取输入数据并转换RTMP直播。实现的思路分享如下。 要点分析 首先,程序的主要目的,是从多路RTSP输入源中提取AAC编码的音频和H.264编码视频数据,并生成RTMP数据包,然后组装RTMP推送协议,并发往RTMP 服务器。在发送的过程中,要求可以从RTSP数据源切换到具有相同h.264和aac 编码的FLV文件中,并不影响RTMP直播。因此,本程序的关键点有以下部分: 1.RTSP直播流的读取 2.H.264和AAC编码数据的分析、处理 3.FLV文件数据的提取及与RTSP直接的切换和衔接 4.RTMP数据包封装 5.RTMP推送协议 有了关键点,就可以一项一项的去分析。 设计思路 根据上面分析的要点,首先要选择RTSP直播协议的读取。我们不需要从零做起,网络上有很多和RTSP相关的开源项目可以使用或借鉴,我选择了Live555。 Live555是一个跨平台的流媒体解决方案,主要支持RTSP协议,好像也支持SIP(这个也是我马上研究的重点,之后会写文章研究SIP相关的技术实现)。Live555实现了RTSP包括服务器-客户端的整套结构,是很知名的一个开源项目。网上有很多关于Live555学习和使用的文章,我就不具体介绍了。

flex视频播放器(支持rtmp协议)开发代码

Flex视频播放器(支持rtmp协议)开发代码 开发工具:flash builder4.5 + red5服务器 建议参考之前阶段代码: (1)flex视频播放器开发初级阶段代码:https://www.360docs.net/doc/a111560624.html,/detail/ll_jj_yy/ (2)支持rtmp协议,播放red5服务器上的flv视频文件. 直接来代码:

RTSP协议转换RTMP直播协议

RTSP协议转换RTMP直播协议

RTSP协议转换RTMP直播协议 RTSP协议也是广泛使用的直播/点播流媒体协议,最近实现了一个RTSP协议转换RTMP直播协议的程序,为的是可以接收远端设备或服务器的多路RTSP 直播数据,实时转换为RTMP直播协议,推送到FMS、Red5、wowza server等RTMP 服务器,以实现flash观看RTSP直播源的需求。程序同时也具备从FLV文件获取输入数据并转换RTMP直播。实现的思路分享如下。 要点分析 首先,程序的主要目的,是从多路RTSP输入源中提取AAC编码的音频和H.264编码视频数据,并生成RTMP数据包,然后组装RTMP推送协议,并发往RTMP服务器。在发送的过程中,要求可以从RTSP数据源切换到具有相同h.264和aac 编码的FLV文件中,并不影响RTMP直播。因此,本程序的关键点有以下部分: 1.RTSP直播流的读取 2.H.264和AAC编码数据的分析、处理 3.FLV文件数据的提取及与RTSP直接的切换和衔接 4.RTMP数据包封装 5.RTMP推送协议 有了关键点,就可以一项一项的去分析。 设计思路 根据上面分析的要点,首先要选择RTSP直播协议的读取。我们不需要从零做起,网络上有很多和RTSP相关的开源项目可以使用或借鉴,我选择了Live555。 Live555是一个跨平台的流媒体解决方案,主要支持RTSP协议,好像也支持SIP(这个也是我马上研究的重点,之后会写文章研究SIP相关的技术实现)。Live555实现了RTSP包括服务器-客户端的整套结构,是很知名的一个开源项目。

网上有很多关于Live555学习和使用的文章,我就不具体介绍了。 H.264和AAC数据的分析处理,这个对于从没做过相关项目开发的人来说,应该是一个难点,主要是相关概念的理解。好在我一直在做这块,也比较好弄。 第4和第5点,可以参照文章“RTMP协议发送H.264编码及AAC编码的音视频(https://www.360docs.net/doc/a111560624.html,/haibindev/archive/2011/12/29/2305712.html),实现摄像头直播”的技术方法,来加以实现。因此,主要需要处理的就是RTSP 直播流数据的获取,以及对其中H.264和AAC编码数据的处理。 于是可以画出大体结构如下: RtmpThread的主要工作就是发送音频数据流的解码信息头和视频数据流的解码信息头,并不断从DataBufferQueue中取出数据,封装为RTMP Packet,发送出去。流程如下列代码所示:(process_buf_queue_,即是上图中的DataBufferQueue)

SCSI-FC-ISCSI几种协议及接口介绍

几种协议及接口介绍 我们知道,在早期的SAN存储系统中,服务器与交换机的数据传输是通过光纤进行的,因为服务器是把SCSI指令传输到存储设备上,不能走普通LAN网的IP协议,所以需要使用FC传输,因此这种SAN 就叫FC-SAN,而后期出现了用IP协议封装的SAN,可以完全走普通LAN网络,因此叫做IP-SAN,其中最典型的就是现在热门的ISCSI。 这两种方式都需要对数据块进行繁重的读包解包操作,因此高性能的SAN系统是需要在服务器上安装一块专门负责解包工作以减轻处理器负担的网卡,这种网卡大家就叫它HBA卡,它除了执行解包工作外当然还可以提供一个光纤接口(如果是iSCSI HBA卡就是提供普通的RJ45接口)以用于跟对应的交换机连接;另外,HBA物理上你可以把它当作网卡一样插在PCI或者PCI-E槽位里,因此这种设备的用法非常相一张网卡,很多人也就把它跟普通网卡或普通的光纤网卡混淆了。当然,有的iSCSI HBA卡就可以当作普通网卡来用,不过从价格上考虑这是非常奢侈的。 HBA的常规定义:就是连接主机I/O总线和计算机内存系统的I/O适配器。按照这个定义,像显卡就是连接视频总线和内存,网卡就是连接网络总线和内存,SCSI-FC卡就是连接SCSI或者FC总线和内存的,它们都应该算是HBA。HBA卡有FC-HBA和iSCSI HBA将来还有其他HBA卡,但是,HBA通常用在SCSI。Adapter(适配器)和NIC用于FC;而NIC也会用于以太网和令牌环网。 其实,网卡是大家常提到的一个类型设备的总称,是指安装在主机里,通过网络连接线(双绞线、光纤线缆、同轴电缆等)与网络交换机(以太网交换机、FC交换机、ISCSI交换机等)、或与其它网络设备(存储设备、服务器、工作站等)连接,从而形成一个网络的硬件设备。 那么,光纤网卡这个称呼到底是不是指光纤口HBA卡呢? 实际上大家常说的光纤网卡指的就是光纤通道网络里的HBA卡。 因传输协议的不同的,网卡可分为三种,一是以太网卡,二是FC网卡,三是iSCSI网卡。 ?以太网卡:学名Ethernet Adapter,传输协议为IP协议,一般通过光纤线缆或双绞线与以太网交换机连接。接口类型分为光口和电口。光口一般都是通过光纤线缆来进行数据传输,接口模块一般为SFP(传输率2Gb/s)和GBIC(1Gb/s),对应的接口为SC、ST和LC。电口目前常用接口类型为RJ45,用来与双绞线连接,也有与同轴电缆连接的接口,不过现在已经用的比较少了。 ?FC网卡:一般也叫光纤网卡,学名Fibre Channel HBA。传输协议为光纤通道协议,一般通过光纤线缆与光纤通道交换机连接。接口类型分为光口和电口。光口一般都是通过光纤线缆来进行数据传输,接口模块一般为SFP(传输率2Gb/s)和GBIC(1Gb/s),对应的接口为SC和LC。电口的接口类型一般为DB9针或HSSDC。 ?ISCSI网卡:学名ISCSI HBA,传输ISCSI协议,接口类型与以太网卡相同。 大家说的“光纤网卡”一般是指FC HBA卡,插在服务器上,外接存储用的光纤交换机;而光口的以太网卡一般都叫做“光纤以太网卡”,也是插在服务器上,不过它外接的是带光口的以太网交换机。

RTMP头RTMP协议封包 参考Red5

RTMP头RTMP协议封包参考Red5 RTMP协议封包由一个包头和一个包体组成,包头可以是4种长度的任意一种:12, 8, 4, 1 byte(s).完整的RTMP包头应该是12bytes,包含了时间 戳,AMFSize,AMFType,StreamID信息, 8字节的包头只纪录了时间 戳,AMFSize,AMFType,其他字节的包头纪录信息依次类推。包体最大长度默认为128字节,通过chunkSize可改变包体最大长度,通常当一段AFM数据超过128字节后,超过128的部分就放到了其他的RTMP封包中,包头为一个字节. 完整的12字节RTMP包头每个字节的含义: 用途大小(Byte)含义 Head_Type1包头 TiMMER3时间戳 AMFSize3数据大小 AMFType1数据类型 StreamID4流ID 一、Head_Type 第一个字节Head_Type的前两个Bit决定了包头的长度.它可以用掩码0xC0进行"与"计算: Head_Type的前两个Bit和长度对应关系: Bits Header Length 0012 bytes 018 bytes 10 4 bytes 11 1 byte Head_Type的后面6个Bit和StreamID决定了ChannelID。 StreamID和ChannelID对应关系:StreamID=(ChannelID-4)/5+1 参考red5 ChannelID Use 02Ping 和ByteRead通道 03Invoke通道我们的connect() publish()和自字写的NetConnection.Call() 数据都

RTMP协议

RTMP协议介绍 一.概述 RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。 RTMP又是Routing Table Maintenance Protocol(路由选择表维护协议)的缩写。在AppleTalk 协议组中,路由选择表维护协议(RTMP,Routing Table Protocol)是一种传输层协议,它在AppleTalk 路由器中建立并维护路由选择表。RTMP 基于路由选择信息协议(RIP)。正如RIP 一样,RTMP 使用跳数作为路由计量标准。一个数据包从源网络发送到目标网络,必须通过的路由器或其它中间介质节点数目的计算结果即为跳数。 RTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash 播放器和服务器之间音频、视频和数据传输开发的开放协议。 它有多种变种: 1)RTMP工作在TCP之上,默认使用端口1935; 2)RTMPE在RTMP的基础上增加了加密功能; 2)RTMPT封装在HTTP请求之上,可穿透防火墙; 3)RTMPS类似RTMPT,增加了TLS/SSL的安全功能; 二.协议介绍 RTMP协议(Real Time Messaging Protocol)是被Flash用于对象,视频,音频的传输.这个协议建立在TCP协议或者轮询HTTP协议之上. RTMP协议就像一个用来装数据包的容器,这些数据既可以是AMF格式的数据,也可以是FLV中的视/音频数据. 一个单一的连接可以通过不同的通道传输多路网络流.这些通道中的包都是按照固定大小的包传输的. 网络连接(Connection)

Rtmp协议中文介绍

RTMP(real time messaging protocol)协议 1,介绍 这篇文档详细说明了RTMP消息块流,它位高层多媒体流协议提供多路技术和包服务 RTMP消息块流是为RTMP协议设计的,他可以处理任何传送消息流的协议,每一个消息包含时间戳合有效负载类型标示,RTMP消息块流和RTMP一起适用于多样性音视频应用程序,从一对一和一对多向视频点播服务器直接广播到交互式会议应用程序。 当用到实时传输协议就像TCP,RTMP消息块流提供可靠地规则时间戳的端到端全信息传送。穿过多层流,RTMP消息块流不提供任何控制的优先级别和相似形式,但是可以用于高层协议提供这样的优先级,例如:一段实时视频服务会选择丢弃给于缓慢的客户的视频信息确保音频信息可以及时被接收。 RTMP消息块流包含它自己的入队协议控制消息,也提供一个高层协议机制用于嵌入用户的控制消息。 2.定义 有效负载: 包含在包中的数据,就像音频样本或者压缩的视频数据。 包: 一个数据包由固定的包头和有效负载数据组成,一些底层协议或许需要包的封装来被定义。 端口: 在TCP/IP协议中定义的用正整数表示的端口号用于在传输中提取以区分目标主机的不同应用,用于OSI传输层的传输选择(TSEL)就是端口。 传输地址: 网络地址和端口的组合识别一个传输层终端端口,例如一个IP地址和TCP端口,数据包从一个源传输层地址传送到目标段的传输层地址。 消息流: 一个通信的逻辑通道,允许消息流通。 消息流ID: 每一个消息拥有一个分配的ID识别跟随的消息流。 消息块: 消息的片段,消息被分成小的部分,在他们在网络中发送之前交叉存储。消息块确保定制时间戳的端到端全消息传送,穿过多层流。 消息块流: 一个通信的逻辑通道,允许消息块在一个特定的方向上流通,消息块流可以从客户端传送到服务器,也可以相反。 消息块流ID: 每一个消息块有一个分配的ID用于识别更随的消息块流。 复合技术: 把分开的音视频数据组合成一条音视频流的过程,使同时传送许多音视频数据成为可能。 逆复合技术: 复合的反向过程,交叉存取组装的音频视频数据,使他们成为最初的音视频数据 3.字节顺序,列队和时间格式 所有的整数字段有被网络字节负载着,字节0是第一个显示出来的,也是一段文字和字段中最重要的。 这种字节顺序一般被认为“大字节“,数字常量在这种文档里是用十进制表示。 所有RTMP消息块流是以用字节列队,例如:一个16字节的字段也许会在字数字节的偏移段。那里要填充被标示,填充字节应该有0值(似乎看不懂). 在RTMP消息块流中的时间戳用整数表示,单位为毫秒。每一个消息块流以时间戳0开始,但是这不是必须的,只要两个终端在时间点上达成一致,注意那就意味着任何穿过多消息块流异步传输(特

rtp协议,端口

竭诚为您提供优质文档/双击可除 rtp协议,端口 篇一:实时传输协议Rtp 实时传输协议Rtp 1.Rtp协议: Rtp(Real-timetransportprotocol)协议最初是在70 年代为了尝试传输声音文件,把包分成几部分用来传输语音,时间标志和队列号。经过一系列发展,Rtp第一版本在1991年8月由美国的一个实验室发布了。到本世纪1996年形成 了标准的的版本。很多著名的公司如netscape,就宣称“netscapelivemedia”是基于Rtp协议的。microsoft也宣称他们的“netmeeting”也是支持Rtp协议. Rtp被定义为传输音频、视频、模拟数据等实时数据的 传输协议。最初设计是为了数据传输的多播,但是它也用于单播的。与传统的注重的高可靠的数据传输的运输层协议相比,它更加侧重的数据传输的实时性。此协议提供的服务包括时间载量标识、数据序列、时戳、传输控制等。Rtp与辅 助控制协议Rtcp一起得到数据传输的一些相关的控制信息。 2.Rtp协议的工作原理:

如上所说明的,影响多媒体数据传输的一个尖锐的问题就是不可预料数据到达时间。但是流媒体的传输是需要数据的适时的到达用以播放和回放。Rtp协议就是提供了时间标签,序列号以及其它的结构用于控制适时数据的流放。 在流的概念中‘时间标签’是最重要的信息。发送端依照即时的采样在数据包里隐蔽的设置了时间标签。在接受端收到数据包后,就依照时间标签按照正确的速率恢复成原始 的适时的数据。不同的媒体格式调时属性是不一样的。但是Rtp本身并不负责同步,Rtp只是传输层协议,为了简化了 运输层处理,提高该层的效率。将部分运输层协议功能(比如流量控制)上移到应用层完成。同步就是属于应用层协议完成的。它没有运输层协议的完整功能,不提供任何机制来保证实时地传输数据,不支持资源预留,也不保证服务质量。Rtp报文甚至不包括长度和报文边界的描述。同时Rtp协议 的数据报文和控制报文的使用相邻的不同端口,这样大大提高了协议的灵活性和处理的简单性。 Rtp协议和udp二者共同完成运输层协议功能。udp协 议只是传输数据包,是不管数据包传输的时间顺序。Rtp的 协议数据单元是用udp分组来承载的。在承载Rtp数据包的时候,有时候一帧数据被分割成几个包具有相同的时间标签,则可以知道时间标签并不是必须的。而udp的多路复用让Rtp 协议利用支持显式的多点投递,可以满足多媒体会话的需求。

RTMP协议详解

Real Time Messaging Protocol(实时消息传送协议协议)是Adobe Systems 公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。 具体使用RTMP的AS代码大概如下: var videoInstance:Video = your_video_instance; var nc:NetConnection = new NetConnection(); var connected:Boolean = nc.connect("rtmp://localhost/myapp"); var ns:NetStream = new NetStream(nc); videoInstance.attachVideo(ns); ns.play("flvName"); Adobe也在官方网站已经提供了RTMP协议的官方文档说明,为什么要写这个系列文章最大的原因只是对前一段工作的一个总结和回顾,最近两个月,实现了一个RTMP Server的c++版本,把公司的流媒体服务和flash无缝对接起来。希望我的文字能给后来研究这个协议的同学有一定的帮助。 RTMP协议是一个基于TCP的高层协议族,当然这个玩意据说还有UDP协议版本的,不过现在还没有出来,好像Adobe下一版本的FMS会提供支持。下文将要描述的是TCP协议版本的协议。 RTMP协议的概要理解: RTMP协议是为了和flash之间交换信令以及媒体数据。为了提高使用效率信令和媒体数据都是使用相同的机制。因为是相同的机制Adobe就整出来了一些比较搞人的概念,当然每个协议第一次接触都是比较难理解的。 在RTMP协议中信令和媒体数据都称之为Message,在网络中传输这些Message,为了区分它们肯定是要加一个Message head的,所以RTMP协议也有一个Message head,还有一个问题因为RTMP协议是基于TCP的,由于TCP的包长度是有限制的(一般来说不超过1500个字节),而RTMP的Message长度是有可能很大的,像一个视频帧的包可能会有几十甚至几千K,这个问题就必然有一

RTMP协议简介

专题报告:RTMP 协议

目录 专题报告:RTMP协议 (1) 一:什么是rtmp (3) 二:RTMP消息格式 (5) 三:RTMP握手过程 (10) 三.协议控制消息 (21) 四:消息交换的例子 (25)

写在前面红色字体是重点必读,蓝色字体是分点便于区分,绿色字体是次分点便于区分一:什么是rtmp

RTMP协议 Real Time Messaging Protocol(实时消息传送协议协议)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。它有三种变种: 1)工作在TCP之上的明文协议,使用端口1935; 2)RTMPT封装在HTTP请求之中,可穿越防火墙; 3)RTMPS类似RTMPT,但使用的是HTTPS连接; 介绍: RTMP协议是被Flash用于对象,视频,音频的传输.该协议建立在TCP协议或者轮询HTTP协议之上. RTMP协议就像一个用来装数据包的容器,这些数据可以是AMF格式的数据,也可以是FLV中的视/音频数据. 一个单一的连接可以通过不同的通道传输多路网络流.这些通道中的包都是按照固定大小的包传输的. RTMP中定义了两种通信单元:消息(message)和消息块(chunk).RTMP消息是协议中实现各种流媒体控制和应用的基本逻辑信息单元,消息从种类上可以分为协议控制消息、用于发送音频数据的音频消息、用于发送视频数据的视频消息、发送用户数据的数据消息、共享对象消息以及命令消息,属于相同逻辑通道的消息组成一个消息流,这个逻辑通道通过消息格式中的“消息流ID”字段来标识。 作为应用层协议,RTMP协议架构在TCP层之上,但RTMP消息并不是直接封装在TCP中,而是通过一个被称为消息块的封装单元进行传输。消息在网络上发送之前往往要分割成多个较少的部分,这些较小的部分就是消息块,属于不同消息流的消息块可以在网络上交叉发送。这样做可以保证各个消息流中的高优先级消息块能够严格按照时间顺序达到通信的对端。比如某个较长消息的实时性要求比较低,如果不进行消息块处理,等长消息都发送完毕后再发送实时性要求高的短消息,则会对流媒体的播放质量造成影响。

相关主题
相关文档
最新文档