应用层协议:每个应用层的都是为了解决某一类应用问题。而问题的解决又必须通过位于不同主机中的多个应用进程之间的通信和协同工作来完成。应用进程之间必须遵守严格的规则。应用层协议应当定义如下几个:

  • 应用进程之间交换的报文类型,如请求报文和响应报文
  • 报文中各个字段及其详细描述
  • 包含在字段中的信息的含义
  • 进程何时、如何发送报文,以及对报文进行响应的规则

1.HTTP协议 
万维网使用统一资源定位符URL来标志万维网上的各种文档,并使每一个文档在整个因特网的范围内具有唯一的标识符URL;万维网客户程序和服务器程序必须遵守严格的协议即HTTP协议。HTTP协议是一个应用层协议,它使用TCP连接进行可靠的传送。另外为了提取显示文档,使用超文本标记语言HTML 
1.1 HTTP操作过程 

1.2 用户点击firefox浏览器的某个页面后触发的事件

  1. 浏览器分析链接指向页面的URL
  2. 向DNS请求解析URL对于的IP地址
  3. 域名系统解析出IP地址
  4. 浏览器与服务器建立TCP连接(服务器端的端口是80)
  5. 浏览器发出Get文件命令
  6. 服务器对Get请求作出相应,把文件index.html发送给浏览器
  7. 释放TCP链接
  8. 浏览器显示index.html中的所有文本信息

1.3 HTTP协议使用了面向连接的TCP作为传输层协议 
保证了数据的可靠传输.HTTP不必考虑数据在传输过程中被丢弃后又怎样被重传.但是HTTP协议本身是无连接的.,也就是说通信双方在交换HTTP报文之前不需要先建立HTTP链接 
HTTP协议是无状态的,服务器不记得曾经访问过的这个用户.

1.4 HTTP1.0和HTTP1.1

  • HTTP1.0的缺点:每请求一个文档就要两倍RTT的开销。若一个主页上有很多链接对象需要进行连接,那么每一次连接下载都需要2*RTT时间。另一种开销就是万维网客户和服务器每一次建立新的TCP连接都要分配缓存和变量。使用不行TCP连接可以缩短响应时间。
  • HTTP1.1协议很好的解决了这个问题。他使用了持续连接。万维网服务器在发送响应后仍然在一段时间内保持这条连接,是同一个客户和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。

    HTTP1.1的持续连接有两种工作方式。流水线和非流水线。

1.4 HTTP的报文结构

  • 请求报文
  • 响应报文

三个部分组成,两种报文格式的区别就是开始行不同

  1. 开始行,用于区分是请求报文(请求行)还是响应报文(状态行)
  2. 首部行
  3. 实体主体

请求报文的方法: 
GET 请求获取Request-URI所标识的资源 
POST 在Request-URI所标识的资源后附加新的数据 
HEAD 请求获取由Request-URI所标识的资源的响应消息报头 
PUT 请求服务器存储一个资源,并用Request-URI作为其标识 
DELETE 请求服务器删除Request-URI所标识的资源 
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断 
CONNECT 保留将来使用 
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

响应报文的特点 
第一行就是状态行,包括三项内容,即HTTP的版本,状态码,及结束语 
1xx 表示通知信息,请求处理中 
2xx 表示请求成功 
3xx 表示重定向 
4xx 表示客户端差错 
5xx 表示服务器差错

2. XMPP协议 
XMPP 是一种很类似于http协议的一种数据传输协议,它的过程就如同“解包装–〉包装”的过程,用户只需要明白它接受的类型,并理解它返回的类型,就可以很好的利用xmpp来进行数据通讯。基于可扩展标记语言(XML)的协议 
2.1XMPP的基本网络结构 
客户端 服务器 网关 
通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。

2.2 XMPP工作原理

XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一方发信给另外一方。通信的最后阶段是关闭流,关闭TCP/IP连接。 

2.3 关于通信原语细节的话就不总结了!大家可以参考这个人的。 
http://blog.csdn.net/imyfriend/article/details/8584360

3. MQTT协议

https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/01-Introduction.html

HTTP协议和XMPP协议、MQTT协议的更多相关文章

  1. 计算机网络【1】—— OSI七层协议和TCP/IP四层协议

    新开一贴,专门用来记录计算机网络相关知识. 一.OSI七层协议 物理层.数据链路层.网络层.传输层.会话层.表示层.应用层 二.TCP/IP四层协议 网络接口层.网际层.运输层.应用层 三.五层协议 ...

  2. 【原创】锐捷实现OSPF路由协议和NAT地址转换协议

    路由网络设计与实施 [锐捷设备实现OSPF路由协议与NAT地址转换] 说明:   本文是在多VLAN双星型交换网络的基础之上发展的.关于组建多VLAN双星型交换网络,请参阅: <思科和锐捷组建多 ...

  3. OSI七层协议和TCP/IP四层协议

    1. OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行 ...

  4. 比较下OceanBase的选举协议和Raft的选举协议的区别

    阿里技术大讲堂OceanBase专场中曾有专门一场讲座介绍OB自己实现的分布式选举算法:<分布式选举-破解数据库高可用性难题> 这里简单列一下这个选举算法和raft论文中提到的选举算法的区 ...

  5. 转:XMPP协议、MQTT协议、HTTP协议、CoAP协议的基本比较

    一.先看下相关国外的专业数据对四大协议的比较: Protocol                                    CoAP                         XMP ...

  6. MQTT协议学习总结

    一.MQTT介绍 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通 ...

  7. 安卓开发之mqtt协议

    首先物联网协议mqtt协议是基于tcp/ip协议的,使用了官方的mqttclient框架/**初始化mqttclient*/private void init() { try { //MQTT的连接设 ...

  8. MQTT协议 局域网和广域网 云服务器和虚拟主机、VPS SSH和FTP、SFTP

     MQTT协议 MQTT协议就很好的解决了coap存在的问题.MQTT协议是由IBM开发的即时通讯协议,相比来说比较适合物联网场景的通讯协议.MQTT协议采用发布/订阅模式,所有的物联网终端都通过TC ...

  9. MQTT 协议是个啥?这篇文章告诉你!

    文章首发于我的公众号「程序员cxuan」,欢迎大家关注呀- 说到做到! 之前有位读者给我留言说想要了解一下什么是 MQTT 协议,顺便还把我夸了一把,有点不好意思啦. 那么读者的要求必须要满足啊,所以 ...

随机推荐

  1. 17.在自适应屏幕里通过JQ来获取宽高并赋给需要的

    在自适应屏幕里通过JQ来获取宽高并赋给需要的div. var height = document.documentElement.clientHeight; $(window).height();(同 ...

  2. [4]传奇3服务器源码分析一 SelGate

    1. 2 留存 服务端下载地址: 点击这里

  3. QT5中QByteArray转QString中文乱码

    1.添加头文件 #include <QTextCodec> 2.用QTextCodec 设置格式转换 QByteArray barr; barr.insert(0,(char*)(pMsg ...

  4. kali linux dns劫持

    1,確定局域網ip 2,修改/etc/ettercap/etter.dns 添加自己的ip和劫持域名 3,/var/www/index.html             (修改html页面替换被劫持的 ...

  5. kali linux 基本命令(第一批)

    pwd  ,  rm    ,locate    ,cat    ,head     ,  clear    ,ls      ,cd     ,mkdir      ,touch       ,ec ...

  6. RepRap Prusa i3 平台自動補正

    RepRap Prusa i3 平台自動補正 平台校正不但費時,而且經常失敗,時在是很令人洩氣!期盼了好一陣子,Marlin終於將平台自動補正的功能加進來了!!這個功能將原本Z軸的Endstop,改裝 ...

  7. 详解 ManualResetEvent(转)

    原文:http://www.cnblogs.com/li-peng/p/3291306.html 今天详细说一下ManualResetEvent 它可以通知一个或多个正在等待的线程已发生事件,允许线程 ...

  8. IO多路复用 IO异步

    一.概念说明 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的环境给出的答案是不同的.所以先限定一下本文的环境.本文讨论的背景是Linux环境下的network I ...

  9. Linux基础命令---文本编辑tee

    tee 将标准输入的内容复制到指定的文件中,同时在标准输出中显示. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora.   1.语法   ...

  10. .pages怎么在windows上打开?Windows下打开在Mac中编辑的.pages文件方法

    .pages怎么在windows上打开?Windows下打开在Mac中编辑的.pages文件方法 1.最简单的方法是修改后缀名为.zip然后解压,解压后就可以看到一张图片,这个就是文档内容了. 2.更 ...