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

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

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. python 将文件大小转换为human readable 的大小表示

    定义了一个函数, def HRS(size):    units=('B','KB','MB','GB','TB','PB')    for i in range(len(units)-1,-1,-1 ...

  2. gpg无法生成密钥对的问题

    今天在archlinux中生成key的过程中,发现卡在收集随机信息的步骤了. 而在windows系统中启动kleopatra之后,一直是一个任务条,显示loading certificate cach ...

  3. ASCII 码

    http://baike.baidu.com/link?url=Y4crTsVq678Z8fr92DAGIrqVHoexVXsMc-WKBMVUKGDq4KbEOuhWbUQXuQEtnlom4yln ...

  4. Nginx技术研究系列1-通过应用场景看Nginx的反向代理

    随着我们业务规模的不断增长,整个系统规模由两年前的几十台服务器,井喷到现在2个数据中心,接近400台服务器,上百个WebApi站点,上百个域名. 这么多的WebApi站点这么多的域名,管理和维护成本很 ...

  5. Linux中常用的50个命令

    1. [命令]:cat [功能说明]: concatenate files and print on the standard output #连接文件并打印到标准输出,有标准输出的都可以用重定向定向 ...

  6. 仿照admin实现一个自定义的增删改查的组件

    1.首先,创建三个项目,app01,app02,stark,在settings里边记得配置.然后举例:在app01的model里边写表,用的db.sqlite3,所以数据库不用再settings里边配 ...

  7. 孤立森林(Isolation Forest)

    前言随着机器学习近年来的流行,尤其是深度学习的火热.机器学习算法在很多领域的应用越来越普遍.最近,我在一家广告公司做广告点击反作弊算法研究工作.想到了异常检测算法,并且上网调研发现有一个算法非常火爆, ...

  8. linux常用命令:ls命令

    ls命令是linux下最常用的命令.ls命令就是list的缩写,缺省下ls用来打印出当前目录的清单,如果ls指定其他目录那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查看linux ...

  9. Node.js中环境变量process.env详解

    Node.js中环境变量process.env详解process | Node.js API 文档http://nodejs.cn/api/process.html官方解释:process 对象是一个 ...

  10. golang学习笔记7 使用beego swagger 实现API自动化文档

    golang学习笔记7 使用beego swagger 实现API自动化文档 API 自动化文档 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/doc ...