精华内容
下载资源
问答
  • Wireshark协议分析入门开发

    万人学习 2017-08-11 16:29:54
    Wireshark是目前全球使用广泛的开源抓包软件(前身为Ethereal),是一个通用化的网络数据嗅探器和协议分析器,由Gerald Combs编写并于1998年以GPL开源许可证发布。如果是网络工程师,可以通过Wireshark对网络进行...
  • RTP协议分析

    万次阅读 多人点赞 2018-06-13 10:16:21
    RTP协议分析第1章. RTP概述1.1. RTP是什么RTP全名是Real-time Transport Protocol(实时传输协议)。它是IETF提出的一个标准,对应的RFC文档为RFC3550(RFC1889为其过期版本)。RFC3550不仅定义了RTP,而且定义了...

    RTP协议分析

    第1章.     RTP概述

    1.1.  RTP是什么

    RTP全名是Real-time Transport Protocol(实时传输协议)。它是IETF提出的一个标准,对应的RFC文档为RFC3550RFC1889为其过期版本)。RFC3550不仅定义了RTP,而且定义了配套的相关协议RTCPReal-time Transport Control Protocol,即实时传输控制协议)。RTP用来为IP网上的语音、图像、传真等多种需要实时传输的多媒体数据提供端到端的实时传输服务。RTPInternet上端到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP来提供。

    1.2.  RTP的应用环境

    RTP用于在单播或多播网络中传送实时数据。它们典型的应用场合有如下几个。

    简单的多播音频会议。语音通信通过一个多播地址和一对端口来实现。一个用于音频数据(RTP),另一个用于控制包(RTCP)。

    音频和视频会议。如果在一次会议中同时使用了音频和视频会议,这两种媒体将分别在不同的RTP会话中传送,每一个会话使用不同的传输地址(IP地址+端口)。如果一个用户同时使用了两个会话,则每个会话对应的RTCP包都使用规范化名字CNAMECanonical Name)。与会者可以根据RTCP包中的CNAME来获取相关联的音频和视频,然后根据RTCP包中的计时信息(Network time protocol)来实现音频和视频的同步。

    翻译器和混合器。翻译器和混合器都是RTP级的中继系统。翻译器用在通过IP多播不能直接到达的用户区,例如发送者和接收者之间存在防火墙。当与会者能接收的音频编码格式不一样,比如有一个与会者通过一条低速链路接入到高速会议,这时就要使用混合器。在进入音频数据格式需要变化的网络前,混合器将来自一个源或多个源的音频包进行重构,并把重构后的多个音频合并,采用另一种音频编码进行编码后,再转发这个新的RTP包。从一个混合器出来的所有数据包要用混合器作为它们的同步源(SSRC,见RTP的封装)来识别,可以通过贡献源列表(CSRC表,见RTP的封装)可以确认谈话者。

    1.3.  相关概念

    1.3.1.  流媒体

    流媒体是指Internet上使用流式传输技术的连续时基媒体。当前在Internet上传输音频和视频等信息主要有两种方式:下载和流式传输两种方式。

    下载情况下,用户需要先下载整个媒体文件到本地,然后才能播放媒体文件。在视频直播等应用场合,由于生成整个媒体文件要等直播结束,也就是用户至少要在直播结束后才能看到直播节目,所以用下载方式不能实现直播。

    流式传输是实现流媒体的关键技术。使用流式传输可以边下载边观看流媒体节目。由于Internet是基于分组传输的,所以接收端收到的数据包往往有延迟和乱序(流式传输构建在UDP上)。要实现流式传输,就是要从降低延迟和恢复数据包时序入手。在发送端,为降低延迟,往往对传输数据进行预处理(降低质量和高效压缩)。在接收端为了恢复时序,采用了接收缓冲;而为了实现媒体的流畅播放,则采用了播放缓冲。

    使用接收缓冲,可以将接收到的数据包缓存起来,然后根据数据包的封装信息(如包序号和时戳等),将乱序的包重新排序,最后将重新排序了的数据包放入播放缓冲播放。

    为什么需要播放缓冲呢?容易想到,由于网络不可能很理想,并且对数据包排序需要处理时耗,我们得到排序好的数据包的时间间隔是不等的。如果不用播放缓冲,那么播放节目会很卡,这叫时延抖动。相反,使用播放缓冲,在开始播放时,花费几十秒钟先将播放缓冲填满(例如PPLIVE),可以有效地消除时延抖动,从而在不太损失实时性的前提下实现流媒体的顺畅播放。

    到目前为止,Internet 上使用较多的流式视频格式主要有以下三种:RealNetworks 公司的RealMedia ,Apple 公司的QuickTime 以及Microsoft 公司的Advanced Streaming Format (ASF) 

    上面在谈接收缓冲时,说到了流媒体数据包的封装信息(包序号和时戳等),这在后面的RTP封装中会有体现。另外,RealMedia这些流式媒体格式只是编解码有不同,但对于RTP来说,它们都是待封装传输的流媒体数据而没有什么不同。

    第2章.     RTP详解

    2.1.  RTP的协议层次

    2.1.1.  传输层的子层

    RTP(实时传输协议),顾名思义它是用来提供实时传输的,因而可以看成是传输层的一个子层。图 1给出了流媒体应用中的一个典型的协议体系结构。

    图 1 流媒体体系结构

    从图中可以看出,RTP被划分在传输层,它建立在UDP上。同UDP协议一样,为了实现其实时传输功能,RTP也有固定的封装形式。RTP用来为端到端的实时传输提供时间信息和流同步,但并不保证服务质量。服务质量由RTCP来提供。这些特点,在第4章可以看到。

    2.1.2.  应用层的一部分

    不少人也把RTP归为应用层的一部分,这是从应用开发者的角度来说的。操作系统中的TCP/IP等协议栈所提供的是我们最常用的服务,而RTP的实现还是要靠开发者自己。因此从开发的角度来说,RTP的实现和应用层协议的实现没不同,所以可将RTP看成应用层协议。

    RTP实现者在发送RTP数据时,需先将数据封装成RTP包,而在接收到RTP数据包,需要将数据从RTP包中提取出来。

    2.2.  RTP的封装

    一个协议的封装是为了满足协议的功能需求的。从前面提出的功能需求,可以推测出RTP封装中应该有同步源和时戳等字段,但更为完整的封装是什么样子呢?请看图2

     2 RTP的头部格式

    版本号(V):2比特,用来标志使用的RTP版本。

    填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含附加的填充字节。

    扩展位(X):1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部。

    CSRC计数器(CC):4比特,含有固定头部后面跟着的CSRC的数目。

    标记位(M):1比特,该位的解释由配置文档(Profile)来承担.

    载荷类型(PT):7比特,标识了RTP载荷的类型。

    序列号(SN):16比特,发送方在每发送完一个RTP包后就将该域的值增加1,接收方可以由该域检测包的丢失及恢复包序列。序列号的初始值是随机的。

    时间戳:32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时间戳是去除抖动和实现同步不可缺少的。

    同步源标识符(SSRC)32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法。

    贡献源列表(CSRC List):015项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。

    2.3.  RTCP的封装

    RTP需要RTCP为其服务质量提供保证,因此下面介绍一下RTCP的相关知识。

    RTCP的主要功能是:服务质量的监视与反馈、媒体间的同步,以及多播组中成员的标识。在RTP会话期 间,各参与者周期性地传送RTCP包。RTCP包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,各参与者可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTPRTCP配合使用,它们能以有效的反馈和最小的开销使传输效率最佳化,因而特别适合传送网上的实时数据。

    从图 1可以看到,RTCP也是用UDP来传送的,但RTCP封装的仅仅是一些控制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中。RTCP有如下五种分组类型。

    类型

    缩写表示

    用途

    200

    SRSender Report

    发送端报告

    201

    RRReceiver Report

    接收端报告

    202

    SDESSource Description Items

    源点描述

    203

    BYE

    结束传输

    204

    APP

    特定应用

    表 1 RTCP的5种分组类型

    上述五种分组的封装大同小异,下面只讲述SR类型,而其它类型请参考RFC3550

    发送端报告分组SRSender Report)用来使发送端以多播方式向所有接收端报告发送情况。SR分组的主要内容有:相应的RTP流的SSRCRTP流中最新产生的RTP分组的时间戳和NTPRTP流包含的分组数,RTP流包含的字节数。SR包的封装如图3所示。

     3 RTCP头部的格式

    版本(V):同RTP包头域。

    填充(P):同RTP包头域。

    接收报告计数器(RC):5比特,该SR包中的接收报告块的数目,可以为零。

    包类型(PT):8比特,SR包是200

    长度域(Length):16比特,其中存放的是该SR包以32比特为单位的总长度减一。

    同步源(SSRC):SR包发送者的同步源标识符。与对应RTP包中的SSRC一样。

    NTP TimestampNetwork time protocolSR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。

    RTP Timestamp:与NTP时间戳对应,与RTP数据包中的RTP时间戳具有相同的单位和随机初始值。

    Senders packet count:从开始发送包到产生这个SR包这段时间里,发送者发送的RTP数据包的总数. SSRC改变时,这个域清零。

    Sender`s octet count:从开始发送包到产生这个SR包这段时间里,发送者发送的净荷数据的总字节数(不包括头部和填充)。发送者改变其SSRC时,这个域要清零。

    同步源nSSRC标识符:该报告块中包含的是从该源接收到的包的统计信息。

    丢失率(Fraction Lost):表明从上一个SRRR包发出以来从同步源n(SSRC_n)来的RTP数据包的丢失率。

    累计的包丢失数目:从开始接收到SSRC_n的包到发送SR,SSRC_n传过来的RTP数据包的丢失总数。

    收到的扩展最大序列号:从SSRC_n收到的RTP数据包中最大的序列号,

    接收抖动(Interarrival jitter):RTP数据包接受时间的统计方差估计

    上次SR时间戳(Last SR,LSR):取最近从SSRC_n收到的SR包中的NTP时间戳的中间32比特。如果目前还没收到SR包,则该域清零。

    上次SR以来的延时(Delay since last SR,DLSR):上次从SSRC_n收到SR包到发送本报告的延时。

    2.4.  RTP的会话过程

    当应用程序建立一个RTP会话时,应用程序将确定一对目的传输地址。目的传输地址由一个网络地址和一对端口组成,有两个端口:一个给RTP包,一个给RTCP包,使得RTP/RTCP数据能够正确发送。RTP数据发向偶数的UDP端口,而对应的控制信号RTCP数据发向相邻的奇数UDP端口(偶数的UDP端口+1),这样就构成一个UDP端口对。 RTP的发送过程如下,接收过程则相反。

    1)        RTP协议从上层接收流媒体信息码流(如H.263),封装成RTP数据包;RTCP从上层接收控制信息,封装成RTCP控制包。

    2)        RTPRTP 数据包发往UDP端口对中偶数端口;RTCPRTCP控制包发往UDP端口对中的接收端口。

    第3章.     相关的协议

    3.1.  实时流协议RTSP

    实时流协议RTSPReal-Time Streaming Protocol)是IETF提出的协议,对应的RFC文档为RFC2362

    从图 1可以看出,RTSP是一个应用层协议(TCP/IP网络体系中)。它以C/S模式工作,它是一个多媒体播放控制协议,主要用来使用户在播放流媒体时可以像操作本地的影碟机一样进行控制,即可以对流媒体进行暂停/继续、后退和前进等控制。

    3.2.  资源预定协议RSVP

    资源预定协议RSVP(Resource Reservation Protocol)IETF提出的协议,对应的RFC文档为RFC2208

    从图 1可以看出,RSVP工作在IP层之上传输层之下,是一个网络控制协议。RSVP通过在路由器上预留一定的带宽,能在一定程度上为流媒体的传输提供服务质量。在某些试验性的系统如网络视频会议工具vic中就集成了RSVP

    第4章.     常见的疑问

    4.1.  怎样重组乱序的数据包

    可以根据RTP包的序列号来排序。

    4.2.  怎样获得数据包的时序

    可以根据RTP包的时间戳来获得数据包的时序。

    4.3.  声音和图像怎么同步

    根据声音流和图像流的相对时间(即RTP包的时间戳),以及它们的绝对时间(即对应的RTCP包中的RTCP),可以实现声音和图像的同步。

    4.4.  接收缓冲和播放缓冲的作用

    1.3.1所述,接收缓冲用来排序乱序了的数据包;播放缓冲用来消除播放的抖动,实现等时播放。

    第5章.     实现方案

    ID

    Protocol

    Captured contents

    Account

    password

    Local telephone

    number

    Opponents

    Telephone

    Number

    audio

    login

    logout

    36

    Rtp

     

     

     

     

     

     

    表 2 协议分析要求

     2给出了协议分析要求。容易看出要获取RTP音频包中的音频信息很容易,直接将RTP包的包头去掉即可。当然,要成功地播放解码获取到的音频流,需要知道其编码,这可从RTP包包头的有效载荷类型字段(PT)获得。

    第6章.     参考资料

    [1]      RFC文档:RFC3550对应RTP/RTCPRFC2362对应RTSPRFC2208对应RSVP

    [2]      http://www.faqs.org/rfcs/,上面有全面的英文RFC文档

    [3]      http://www.cnpaf.net/,有不少协议分析文档,也有中文RFC文档,但质量不是特别高。

    展开全文
  • HTTP协议分析

    万次阅读 多人点赞 2019-06-23 12:30:24
    HTTP(HyperText Transfer Protocol)即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,它是万维网交换信息的基础,它允许将HTML(超文本标记语言)文档从Web服务器传送到Web浏览器。...

    HTTP简介

    HTTP(HyperText Transfer Protocol)即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,它是万维网交换信息的基础,它允许将HTML(超文本标记语言)文档从Web服务器传送到Web浏览器。

    HTTP协议目前最新版的版本是1.1,HTTP是一种无状态的协议无状态是指Web浏览器与Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(Response),连接就被关闭了,在服务器端不保留连接的有关信息。也就是说,HTTP请求只能由客户端发起,而服务器不能主动向客户端发送数据。

    HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

    HTTP工作原理:

    HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

    Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。

    Web服务器根据接收到的请求后,向客户端发送响应信息。

    HTTP默认端口号为80,但是你也可以改为8080或者其他端口。

    HTTP三点注意事项:

    • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
    • HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    HTTP请求与响应

    HTTP遵循请求(Request)/应答(Response)模型,Web浏览器向Web服务器发送请求时,Web服务器处理请求并返回适当的应答。

    HTTP请求:

    POST /test.php HTTP/1.1               //请求行
    HOST:www.test.com                    //请求头
    User-Agent:Mozilla/5.0 (windows NT 6.1;rv:15.0)Gecko/20100101 Firefox/15.0        //空白行,代表请求头结束
    Username=admin&password=admin       //请求正文
    

    HTTP请求包括三部分,分别是请求行(请求方法)、请求头(消息报头)和请求正文。

    HTTP请求第一行为请求行,由三部分组成,第一部分说明了该请求时POST请求,第二部分是一个斜杠(/login.php),用来说明请求是该域名根目录下的login.php,第三部分说明使用的是HTTP1.1版本。

    HTTP请求第二行至空白行为请求头(也被称为消息头)。其中,HOST代表请求主机地址,User-Agent代表浏览器的标识,请求头由客户端自行设定。

    HTTP请求第三行为请求正文,请求正文是可选的,它最常出现在POST请求方式中。

    HTTP请求方法:

    根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

    HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。

    HTTP1.1 新增了五种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

    序号 方法 描述
    1 GET 请求指定的页面信息,并返回实体主体。
    2 HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
    3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
    4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
    5 DELETE 请求服务器删除指定的页面。
    6 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
    7 OPTIONS 允许客户端查看服务器的性能。
    8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
    8 PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

    GET、POST、HEAD、PUT请求:

    • GET:GET方法用于获取请求页面的指定信息。如果请求资源为动态脚本(非HTML),那么返回文本是Web容器解析后的HTML源代码。GET请求没有消息主体,因此在消息头后的空白行是没有其他数据。

    • POST:POST方法也与GET方法相似,但最大的区别在于,GET方法没有请求内容,而POST是有请求内容的。

    • HEAD:这个请求的功能与GET请求相似,不同之处在于服务器不会再其响应中返回消息主体,因此,这种方法可用于检查某一资源在向其提交GET请求前是否存在。

    • PUT:PUT方法用于请求服务器把请求中的实体存储在请求资源下,如果请求资源已经在服务器中存在,那么将会用此请求中的数据替换原先的数据。向服务器上传指定的资源。

    HTTP响应:

    HTTP/1.1 200 OK   					 //响应行
    Date: Sun, 15 Nov 2015 11:02:04 GMT    //响应头
    Server: bfe/1.0.8.9
    Content-Length: 2605
    Content-Type: application/javascript
    Cache-Control: max-age=315360000
    Expires: Fri, 13 Jun 2025 09:54:00 GMT
    Content-Encoding: gzip
    Set-Cookie: H_PS_PSSID=2022_1438_1944_1788; path=/; domain=test.com
    Connection: keep-alive
    					      //空白行,代表响应头结束
    <html>
    <head><title> Index.html </title></head>  //响应正文消息主题
    
    

    HTTP响应的第一行为响应行,其中有HTTP版本(HTTP/1.1)、状态码(200)以及消息“OK”。

    第二行至末尾的空白行为响应头,由服务器向客户端发送。

    消息头之后是响应正文,是服务器向客户端发送的HTML数据。

    HTTP消息头:

    请求头:请求头只出现在HTTP请求中,请求报头允许客户端向服务端传递请求的附加信息和客户端自身信息。

    响应头:响应头是服务器根据请求向客户端发送的HTTP头。

    HTTP请求头:

    • Host 请求报头域主要用于指定被请求资源的Internet主机和端口。
    • User-Agent 请求报头域允许客户端将它的操作系统、浏览器和其他属性告诉服务器。
    • Referer 包含一个URL,代表当前访问URL的上一个URL,也就是说,用户是从什么地方来到本页面。当前请求的原始URL地址。
    • Cookie 是非常重要的请求头,常用来表示请求者的身份等。
    • Accept 这个消息头用于告诉服务器客户端愿意接受那些内容,比如图像类,办公文档格式等等。

    HTTP响应头信息:

    应答头 说明
    Allow 服务器支持哪些请求方法(如GET、POST等)。
    Content-Encoding 文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。
    Content-Length 表示内容长度。
    Content-Type **表示后面的文档属于什么MIME类型。**Servlet默认为text/plain,但通常需要显式地指定为text/html。
    Date 当前的GMT时间。
    Expires 应该在什么时候认为文档已经过期,从而不再缓存它?
    Last-Modified **文档的最后改动时间。**客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。
    Location **表示客户应当到哪里去提取文档。**Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。
    Refresh 表示浏览器应该在多少时间之后刷新文档,以秒计。注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。
    Server 服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。
    Set-Cookie 设置和页面关联的Cookie。
    WWW-Authenticate 客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。

    拦截HTTP请求的分析点:

    在这里插入图片描述

    HTTP状态与会话

    HTTP状态码:

    当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

    HTTP状态码的英文为HTTP Status Code。

    五种状态码:

    • 1xx:信息提示,表示请求已被成功接收,继续处理。
    • 2xx:请求被成功提交。
    • 3xx:客户端被重定向到其他资源。
    • 4xx:客户端错误状态码,格式错误或者不存在资源。
    • 5xx:描述服务器内部错误。

    常见的状态码描述如下:

    • 200:客户端请求成功,是最常见的状态。
    • 302:重定向。
    • 404:请求资源不存在,是最常见的状态。
    • 400:客户端请求有语法错误,不能被服务器所理解。
    • 401:请求未经授权。
    • 403:服务器收到请求,但是拒绝提供服务。
    • 500:服务器内部错误,是最常见的状态。
    • 503:服务器当前不能处理客户端的请求。

    会话与会话状态简介:

    WEB应用中的会话是指一个客户端浏览器与WEB服务器之间连续发生的一系列请求和响应过程。

    WEB应用的会话状态是指WEB服务器与浏览器在会话过程中产生的状态信息,借助会话状态,WEB服务器能够把属于同一会话中的一系列的请求和响应过程关联起来。

    如何实现有状态的会话:

    某个用户从网站的登录页面登入后,在进入购物页面购物时,负责处理购物请求的服务器程序必须知道处理上一次请求的程序所得到的用户信息。

    HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的 ,浏览器的每一次请求都是完全孤立的。

    WEB服务器端程序要能从大量的请求消息中区分出哪些请求消息属于同一个会话,即能识别出来自同一个浏览器的访问请求,这需要浏览器对其发出的每个请求消息都进行标识,属于同一个会话中的请求消息都附带同样的标识号,而属于不同会话的请求消息总是附带不同的标识号,这个标识号就称之为会话ID(SessionID)

    会话ID可以通过一种称之为Cookie的技术在请求消息中进行传递,也可以作为请求URL的附加参数进行传递会话ID是WEB服务器为每客户端浏览器分配的一个唯一代号,它通常是在WEB服务器接收到某个浏览器的第一次访问时产生,并且随同响应消息一道发送给浏览器。

    会话过程由WEB服务器端的程序开启,一旦开启了一个会话,服务器端程序就要为这个会话创建一个独立的存储结构来保存该会话的状态信息,同一个会话中的访问请求都可以且只能访问属于该会话的存储结构中的状态信息。

    Cookie技术:

    Cookie是一种在客户端保持HTTP状态信息的技术,它好比商场发放的优惠卡。

    Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一片数据,WEB服务器传送给各个客户端浏览器的数据是可以各不相同的。

    一旦WEB浏览器保存了某个Cookie,那么它在以后每次访问该WEB服务器时,都应在HTTP请求头中将这个Cookie回传给WEB服务器。

    Cookie技术最先被Netscape公司引入到 Navigator浏 览器中。

    现在,绝大多 数浏览器都支持Cookie,或者至少兼容 Cookie技 术的使用。

    **Cookie是一小段文本信息,**伴随着用户请求和页 面在Web服务器和浏览器之间传递。Cookie包含每次 用户访问站点时Web应用程序都可以读取的信息。

    Cookie只是一段文本,所以它只能保存字符串。

    WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传给WEB服务器。

    一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。

    一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。

    浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

    Cookie的传送过程示意图:

    在这里插入图片描述

    图:Cookie的传送过程示意图

    Cookie功能特点:

    • 存储于浏览器头部/传输于HTTP头部
    • 写时带属性,读时无属性
    • HTTP头中Cookie: user=bob; cart=books;
    • 属性 name/value/expire/domain/path/httponly/secure/…
    • 由三元组[name,domain,path]唯一确定cookie

    Set-Cookie2响应字段:

    Set-Cookie2头字段用于指定WEB服务器向客户端传送的Cookie内容,但是按照Netscape规范实现Cookie功能的WEB服务器,使用的是Set-Cookie头字段,两者的语法和作用类似。

    Set-Cookie2头字段中设置的cookie内容是具有一定格式的字符串,它必须以Cookie的名称和设置值开头,格式为“名称=值”,后面可以加上0个或多个以分号(;)和空格分隔的其它可选属性,属性格式一般为“属性名=值”。

    举例:

    Set-Cookie2: user=hello; Version=1; Path=/

    除了“名称=值”对必须位于最前面外,其它的可选属性的先后顺序可以任意。

    Cookie的名称只能由普通的英文ASCII字符组成,浏览器不用关心和理解Cookie的值部分的意义和格式,只要WEB服务器能理解值部分的意义就行。

    大多数现有的WEB服务器都是采用某种编码方式将值部分的内容编码成可打印的ASCII字符,RFC 2965规范中没有明确限定编码方式。

    Cookie请求字段:

    • Cookie请求头字段中的每个Cookie之间用逗号(,)或分号(;)分隔。

    • 在Cookie请求头字段中除了必须有“名称=值”的设置外,还可以有Version、Path、Domain、Port等几个属性。

    • 在Version、Path、Domain、Port等属性名之前,都要增加一个“$”字符作为前缀。

    • Version属性只能出现一次,且要位于Cookie请求头字段设置值的最前面,如果需要设置某个Cookie信息的 Path、Domain、Port等属性,它们必须位于该Cookie信息的“名称=值”设置之后。•浏览器使用Cookie请求头字段将Cookie信息回送给WEB服务器。

    • 多个Cookie信息通过一个Cookie请求头字段回送给WEB服务器。

    • 浏览器根据下面的几个规则决定是否发送某个Cookie信息:

      • 请求的主机名是否与某个存储的Cookie的Domain属性匹配;

      • 请求的端口号是否在该Cookie的Port属性列表中;

      • 请求的资源路径是否在该Cookie的Path属性指定的目录及子目录中;

      • 该Cookie的有效期是否已过。

    • Path属性指向子目录的Cookie排在Path属性指向父目录的Cookie之前。

    • 举例:Cookie: $Version=1; Course=Java; $Path=/hello/lesson; Course=vc; $Path=/hello

    Cookie的安全属性:

    • secure属性

      当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。

    • HttpOnly属性

      如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。

    secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,HttpOnly属性的目的是防止程序获取cookie后进行攻击。

    这两个属性并不能解决cookie在本机出现的信息泄漏的问题(FireFox的插件FireBug能直接看到cookie的相关信息)。

    Session技术:

    什么是Session?

    使用Cookie和附加URL参数都可以将上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多,将极大降低网络传输效率和增大服务器端程序处理的难度。

    Session技术是一种将会话状态保存在服务器端的技术 ,它可以比喻成是医院发放给病人的病历卡和医院为每个病人保留的病历档案的结合方式 。

    客户端需要接收、记忆和回送 Session的会话标识号,Session可以且通常是借助Cookie来传递会话标识号。

    Session的跟踪机制:

    Servlet API规范中定义了一个HttpSession接口,HttpSession接口定义了各种管理和操作会话状态的方法。

    HttpSession对象是保持会话状态信息的存储结构,一个客户端在WEB服务器端对应一个各自的HttpSession对象。

    WEB服务器并不会在客户端开始访问它时就创建HttpSession对象,只有客户端访问某个能与客户端开启会话的Servlet程序时,WEB应用程序才会创建一个与该客户端对应的HttpSession对象。

    WEB服务器为HttpSession对象分配一个独一无二的会话标识号,然后在响应消息中将这个会话标识号传递给客户端。客户端需要记住会话标识号,并在后续的每次访问请求中都把这个会话标识号传送给WEB服务器,WEB服务器端程序依据回传的会话标识号就知道这次请求是哪个客户端发出的,从而选择与之对应的HttpSession对象。

    WEB应用程序创建了与某个客户端对应的HttpSession对象后,只要没有超出一个限定的空闲时间段,HttpSession对象就驻留在WEB服务器内存之中,该客户端此后访问任意的Servlet程序时,它们都使用与客户端对应的那个已存在的HttpSession对象。

    HttpSession接口中专门定义了一个setAttribute方法来将对象存储到HttpSession对象中,还定义了一个getAttribute方法来检索存储在HttpSession对象中的对象,存储进HttpSession对象中的对象可以被属于同一个会话的各个请求的处理程序共享。

    Session是实现网上商城的购物车的最佳方案,存储在某个客户Session中的一个集合对象就可充当该客户的一个购物车。

    Session的超时管理:

    WEB服务器无法判断当前的客户端浏览器是否还会继续访问,也无法检测客户端浏览器是否关闭,所以,即使客户已经离开或关闭了浏览器,WEB服务器还要保留与之对应的HttpSession对象。

    随着时间的推移而不断增加新的访问客户端,WEB服务器内存中将会因此积累起大量的不再被使用的HttpSession对象,并将最终导致服务器内存耗尽。

    WEB服务器采用“超时限制”的办法来判断客户端是否还在继续访问,如果某个客户端在一定的时间之内没有发出后续请求,WEB服务器则认为客户端已经停止了活动,结束与该客户端的会话并将与之对应的HttpSession对象变成垃圾。

    如果客户端浏览器超时后再次发出访问请求,WEB服务器则认为这是一个新的会话的开始,将为之创建新的HttpSession对象和分配新的会话标识号。

    会话的超时间隔可以在web.xml文件中设置,其默认值由Servlet容器定义。

    <session-config>
      <session-timeout>30</session-timeout>
    </session-config>
    

    利用Cookie实现Session跟踪:

    如果WEB服务器处理某个访问请求时创建了新的HttpSession对象,它将把会话标识号作为一个Cookie项加入到响应消息中,通常情况下,浏览器在随后发出的访问请求中又将会话标识号以Cookie的形式回传给WEB服务器。

    WEB服务器端程序依据回传的会话标识号就知道以前已经为该客户端创建了HttpSession对象,不必再为该客户端创建新的HttpSession对象,而是直接使用与该会话标识号匹配的HttpSession对象,通过这种方式就实现了对同一个客户端的会话状态的跟踪。

    利用URL重写实现Session跟踪:

    Servlet规范中引入了一种补充的会话管理机制,它允许不支持Cookie的浏览器也可以与WEB服务器保持连续的会话。这种补充机制要求在响应消息的实体内容中必须包含下一次请求的超链接,并将会话标识号作为超链接的URL地址的一个特殊参数。

    将会话标识号以参数形式附加在超链接的URL地址后面的技术称为URL重写。如果在浏览器不支持Cookie或者关闭了Cookie功能的情况下,WEB服务器还要能够与浏览器实现有状态的会话,就必须对所有可能被客户端访问的请求路径(包括超链接、form表单的action属性设置和重定向的URL)进行URL重写。

    HttpServletResponse接口中定义了两个用于完成URL重写方法:

    • encodeURL方法
    • encodeRedirectURL方法

    Cookie和Session的不同:

    session和cookies同样都是针对单独用户的变量(或者说是对象好像更合适点),不同的用户在访问网站的时候 都会拥有各自的session或者cookies,不同用户之间互不干扰。

    他们的不同点是:

    1. 存储位置不同

      session在服务器端产生,比较安全,但是如果session较多则会影响性能

      cookies在客户端产生,安全性稍弱

    2. 生命周期不同

      session生命周期 在指定的时间(如20分钟)到了之后会结束,不到指定的时间,也会随着浏览器进程的结束而结束。

      cookies默认情况下也随着浏览器进程结束而结束,但如果手动指定时间,则不受浏览器进程结束的影响。

    cookie 和session 的区别:

    1. cookie数据存放在客户的浏览器上,session数据放在服务器上。

    2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
      考虑到安全应当使用session

    3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

      考虑到减轻服务器性能方面,应当使用COOKIE

    4. 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。

    展开全文
  • 无线充电Qi通信协议分析

    万次阅读 2020-04-05 09:30:50
    无线充电Qi通信协议分析

    1 工作原理
    无线充电通信采用的是backscatter调制方式,简单来说就是一种负载调制方式,类似于RFID的原理。并且无线充电过程主要是有Power Receiver(一般指手机)控制,而Power Transmitter(充电板)是被动接受请求并处理。

    无线充电WPC通信序列简单介绍:
    1) 将手机放在充电板上
    2) 充电板根据发送测线圈的电容变化探测到有物体放在了充电板上
    3) 充电板应用电力信号到初级线圈上作为ping消息,并等待超时,如果超时就说明是异物放置在了充电板上,这时充电板撤销电力供应,这个过程也叫FOD,即异物检测;如果没有超时,就进入下一步
    4) 手机检测到了次级线圈感应了电压信号,就发送Signal Strength消息(主要内容是初级线圈和次级线圈的耦合程度,也就是放的位置正不正)
    5) 充电板检测到Signal Strength消息,取消超时,进入ID&Configuration阶段等待手机发送这两种消息
    6) 手机发送ID消息(包括VID和产品序列号),发送Configuration消息(主要是整流电路需要输出的最大功率Max Power=UI)
    7) 充电板根据接受的Configuration消息调整初级线圈相应的参数,并调整初级线圈震荡频率开始发送正常的电力
    8) 在充电过程中充电板还接受手机发送的Charge Status和Control Error等消息,譬如手机的电池充满了,手机发送充电完成消息,充电板接收到消息就停止充电。

    2 WPC会员规则
    2.1 小企业会员 (Small business member)
    对于年收入不足1千万美元的企业,只需缴纳年费5000美元,但在产品库中每注册一个产品需缴纳2500美元费用,首个产品可免费进行注册。

    2.2 准会员 (Associate Member)
    每年缴纳年费15000美元,可获得Qi商标许可权,可参与Qi产品互操作性测试,通过对规范草案进行评价来影响草案制定,免费在产品注册数据库中注册产品,且无数量限制,但是无权参加技术会议。

    2.3 正式会员 (Full Member)
    每年缴纳年费20000美元,可参加所有工作组和特别工作队的会议,可订阅所有邮件,免费在产品注册数据库中注册产品,且无数量限制。

    2.4 长老会员 (Regular Member)
    每年缴纳年费25000美元,可组织活动和参加会议,可担任工作组主席,在WPC工作指导小组有表决权,免费在产品注册数据库中注册产品,且无数量限制。

    3 Abbreviation
    FOD:Foreign Obeject Detector,异物检测
    Qi: 读作chee

    展开全文
  • USB协议分析

    千次阅读 2020-03-21 09:34:58
    USB协议分析

    1 ULPI PHY passive sniffing mode
    概念: non driving, no pull-up, no pull-down

    Function Control.opMode = 1; // non-Driving
    OTG Control.DpPulldown = 0; // no pull-down
    OTG Control.DmPulldown = 0; // no pull-down
    USB IO.ChargerPullupEnDP = 0; // no pull-up
    USB IO.ChargerPullupEnDM = 0; // no pull-up

    2 Beagle USB Analyzer
    2.1 Beagle USB 12 Analyzer
    在USB Host和Device之间的DP/DM上连接一个Fairchild USB1T11A,Fairchild USB1T11A连接到隔离器件ADUM1400后,隔离器件再连接到FPGA;FPGA通过CY7C68013A连接到PC。
    Figure 2-1 Beagle USB 12 Analyzer

    2.2 Beagle USB 480 Analyzer
    USB 2.0的协议分析仪有2个PHY,支持LS/FS的Fairchild USB1T11A,支持HS的USB3300(passive sniffing mode)。
    Figure 2-2 Beagle USB 480 Analyzer

    2.3 Beagle USB 5000 v2 analyzer
    有2块PCB,下层是模拟PCB,上层是数字PCB,数字PCB上包括FPGA和CYUSB3014 BZX,其中CYUSB3014 BZX负责上传数据到PC,该芯片在数字PCB上的位置靠近Target Host Port口。

    2.4 URLs
    Review: Total Phase Beagle USB 12 Analyzer
    https://eleccelerator.com/review-total-phase-beagle-usb-12-analyzer/

    Beagle USB 480
    https://www.bunniestudios.com/blog/?p=4106

    3 OpenVizsla
    3.1 FPGA-based USB analyzer
    在USB Host和Device之间的DP/DM上连接一个USB3343(passive sniffing mode),USB3343连接到FPGA;FPGA通过FIFO模式连接到FT2232H,FT2232H连接到PC。
    Figure 3-1 OpenVizsla board

    3.2 URLs
    Open Hardware FPGA-based USB analyzer
    http://openvizsla.org/
    https://github.com/openvizsla

    USB 2.0 Bus/Protocol Analyzer Hardware/Software Comparison
    http://www.summitsoftconsulting.com/UsbAnalyzers.htm

    4 Windows软件抓包工具
    4.1 Bus Hound

    4.2 USBPcap
    USBPcap - USB Packet capture for Windows
    https://desowin.org/usbpcap/

    5 Linux usbmon抓包
    5.1 sniff原理
    binary格式路径:/dev/usbmonX
    text格式路径:/sys/kernel/debug/usb/usbmon

    获得usbmon的主设备号:cat /proc/devices
    创建binary节点:
    mknod /dev/usbmon0 c $major 0
    mknod /dev/usbmon1 c $major 1
    mknod /dev/usbmon2 c $major 2

    5.2 usbmon tcpdump
    1)mount -t debugfs none_debugs /sys/kernel/debug
    2)cat /sys/kernel/debug/usb/devices - 确定usb的总线号
    3)tcpdump -D
    4)tcpdump -i usbmon1 -s 128 -w /data/usb_sniff.pcap &
    5)killall tcpdump
    6)wireshark工具打开usb_sniff.pcap

    usbmon1 - xHCI LS/FS/HS
    usbmon2 - xHCI SS

    5.3 Wireshark过滤规则
    1)usb.src == "1.6.1" and usb.dst == "host" - 改到对应的USB bus_no.addr.ep_no
    2)usb.src == host and ublox

    5.4 USB协议URB解析Wireshark插件
    usb_table = DissectorTable.get("usb.bulk")
    usb_table:add(0xff, my_proto)
    usb_table:add(0xffff, my_proto)

    5.5 usbmon sysfs接口
    cat /sys/kernel/debug/usb/usbmon/1u > /sdcard/1u_usbmon.txt
    命令中1u表示Bus=01,通过命令获得cat /sys/kernel/debug/usb/devices

    cd /sys/kernel/debug/usb/usbmon
    反向查找,查找不包含"1:003:2"(总线号:设备地址:端点号)字符串的其它内容
    cat 1u  |grep -v "1:003:2"
    排除多个字符串:cat 1u  |grep -vE "1:003:2|1:004:1"

    5.6 usbfs
    echo 1 > /sys/module/usbcore/parameters/usbfs_snoop

    6 Abbreviations
    DSLogic:Dream Source Lab

    展开全文
  • ICMP协议分析

    千次阅读 2019-05-12 23:52:51
    ICMP协议分析 1.关于ICMP: ICMP是(Internet Control Message Protocol)Internet控制报文协议。 ICMP协议是一种面向无连接的协议,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制...
  • 百度web登录协议分析

    千次阅读 2019-05-28 14:24:43
    百度web登录协议分析
  • 蓝牙协议分析_协议架构

    千次阅读 2018-05-01 17:47:01
    1. 前言本文是蓝牙协议分析的第二篇文章,在“蓝牙协议分析_基本概念”的基础上,从整体架构的角度,了解蓝牙协议的组成,以便加深对蓝牙的理解。2. 协议层次蓝牙协议是通信协议的一种,为了把复杂问题简单化,任何...
  • 搜狐影音P2P协议分析
  • FTP协议分析

    万次阅读 2016-04-08 12:06:14
    FTP协议分析二、实验目标 1、理解FTP协议的工作原理; 2、了解FTP协议的常用命令; 3、了解应用层协议与传输层协议的关系三、实验原理 FTP(File Transfer Protocal),是文件传输协议的简称。FTP使得主机...
  • SMTP协议分析

    千次阅读 2017-07-19 18:06:22
    SMTP协议分析 第1章.  SMTP概述 1.1.  SMTP在邮件通信中的位置 SMTP,即简单邮件传送协议,所对应RFC文档为RFC821。同http等多数应用层协议一样,它工作在C/S模式下,用来实现因特网上的邮件传送。SMTP在整个...
  • ARP协议分析

    千次阅读 2016-04-08 12:32:12
    一、实验名称 ARP协议分析 二、实验目标 熟悉ARP命令的使用,理解ARP的工作过程,理解ARP报文协议格式。三、实验内容
  • 实验18 用户数据报协议(UDP)分析练习一 UDP数据报分析实验学时 0.5学时实验目的 ● 掌握UDP协议的报文格式 ● 掌握UDP协议校验和的计算方法 ● 理解UDP协议的优缺点实验环境 网络拓扑结构一实验工具 协议分析器 ...
  • 蓝牙协议分析工具

    千次阅读 2020-02-27 17:20:36
    市面上有各种各样的蓝牙协议分析工具,但专业开发蓝牙的公司里基本都是使用Ellisys Bluetooth Analyzer和Frontline这两种协议分析工具,与之配套的软件也是各有千秋,但本人觉得Ellisys软件的界面及使用方法对开发...
  • TLS协议分析

    万次阅读 2016-04-21 17:34:46
    TLS协议分析 2015-09-06 本文目标: 学习鉴赏TLS协议的设计,透彻理解原理和重点细节 跟进一下密码学应用领域的历史和进展 整理现代加密通信协议设计的一般思路 本文有门槛,读者需要对现代密码学...
  • SSL协议分析

    千次阅读 2021-05-06 14:30:20
    Secure Sockets LayerSSL协议概述SSL解决的问题(功能)协议的使用SSL在协议栈的位置SSL协议的分层模型SSL体系结构SSL的两个重要概念主要工作流程SSL握手协议的握手过程SSL记录层的功能SSL协议脆弱性分析 SSL协议...
  • Ethereal是一个开放源码的网络分析系统,也是是目前最好的开放源码的网络协议分析器,支持Linux和windows平台。  Ethereal起初由Gerald Combs开发,随后由一个松散的Etheral团队组织进行维护开发。它目前所提供的...
  • Kafka协议分析

    千次阅读 2015-10-22 11:27:39
    Kafka协议分析Kafka客户端协议可以分析出Producer、Consumer以及Kafka一些细节。HostBroker有个配置,是配置Host的,默认获取的系统的host。这个对于刚刚接触Kafka的用户不好理解,这个host干什么用的呢?其实,...
  • FTP协议分析实验

    千次阅读 2017-03-14 10:43:48
    FTP协议分析实验   【实验目的】 分析FTP协议的安全性。 【实验步骤】 1. 配置 Serv-U 服务器;建立用户名和密码(例如用户名是USER,密码PASS); (有很多可参考的网络资源。比如 ...
  • 使用逻辑分析进行UART通信协议分析

    千次阅读 2017-05-13 09:20:13
    使用逻辑分析进行UART通信协议分析本实验过程使用下列软硬件工具实现: 硬件设备:逻辑分析仪 软件:Saleae Logic1.2.14,NuMicro ISP ProgrammingTool 效果目标 通过逻辑分析仪抓取uart通信过程中的信号,对其协议...
  • mysql网络协议分析

    千次阅读 2018-07-03 15:14:41
    mysql网络协议分析我们从客户端本地登陆一个mysql的用户以及使用mysql命令获得想要的消息. 需要去请求mysql的服务器,这个时候就需要用到mysql的网络通信协议. 当你打算编写数据库的代理服务器,数据库的中间件,...
  • BPDU协议分析

    千次阅读 2014-01-21 08:17:51
    BPDU协议分析-sniffer应用系列    2.1 BPDU协议概述    现代交换网络环境中,为了防止发生交换环路引起广播风暴等问题,常采用STP(Spanning Tree Prtocol,生成树协议)技术。STP利用BPDU(Bridge ...
  • Google Protobuf 协议分析

    千次阅读 2014-12-22 00:07:12
    protobuf 是google开源的一个序列化框架,类似xml,json,最大的特点是基于二进制...前面几篇文章说了protobuf的用法,看到网上也没有分析protobuf协议的文章,就利用一些时间写了 protobuf 的协议分析,希望大家喜欢。
  • android源码蓝牙协议分析

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,844
精华内容 19,137
关键字:

协议分析