欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android应用开发常用的一些协议学习

程序员文章站 2022-04-11 19:37:38
...

1、网络通信

http:
基于tcp协议
http://blog.csdn.net/claram/article/details/48342007
http://www.cnblogs.com/yjf512/archive/2013/03/29/2988296.html
1)请求
① 请求方法 URI 协议/版本

② 请求头(Request Header)

③ 请求正文
get
下面是一个HTTP请求的例子:

GET/sample.Jsp HTTP/1.1

Accept:image/gif.image/jpeg,*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)

Accept-Encoding:gzip,deflate
空行。。。
username=jinqiao&password=1234

post:

POST /search HTTP/1.1  
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, 
application/msword, application/x-silverlight, application/x-shockwave-flash, */*  
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>  
Accept-Language: zh-cn  
Accept-Encoding: gzip, deflate  
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)  
Host: <a href="http://www.google.cn">www.google.cn</a>  
Connection: Keep-Alive  
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; 
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r  
空行。。。
hl=zh-CN&source=hp&q=domety  

(1)请求方法URI协议/版本

请求的第一行是“方法URL协议版本”:GET/sample.jsp HTTP/1.1

以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。

根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。

URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。

(2)请求头(Request Header)

请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。

Accept:image/gif.image/jpeg./

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)

Accept-Encoding:gzip,deflate.

(3) 请求正文

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息,就是传递的参数:

username=jinqiao&password=1234

从HTTP 1.1协议中开始找:(RFC 2616)

The HTTP protocol does not place any a priori limit on the length of a URI

所以明确一点的是HTTP协议是没有显式限制URI的长度的。理论上来说你在URI中传递多少参数都是可以的。
IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。
http://blog.csdn.net/zhangliang_571/article/details/23508953
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
http://www.cnblogs.com/yin-jingyu/archive/2011/08/01/2123548.html

2)响应
状态行
响应头
响应体
l 协议状态版本代码描述
l 响应头(Response Header)
l 响应正文
下面是一个HTTP响应的例子:

下面是一个HTTP响应的例子:
HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112
 空行。。。
<html>
<head>
<title>HTTP响应示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>
常见的状态码以及含义如下:

200 OK 服务器成功处理请求

301/302 Moved Permanently(重定向)请求的URL已移走。响应报文中应该包含一个Location URL,说明资源现在所处的位置

304 Not Modified(未修改) 客户的缓存资源是最新的,要客户端使用缓存内容

404 Not Found 未找到资源

501 Internal Server Error 服务器遇到错误,使其无法对请求提供服务 

面试通常问区别:
1.效率

GET的意思是『得』,从服务器获取数据(也可以上传数据,参数就是),效率较高
POST的意思是『给』,但可以向服务器发送数据和下载数据,效率不如GET

2.缓存

GET 请求能够被缓存,默认的请求方式也是有缓存的
POST请求默认不会缓存

    缓存是针对URL来进行缓存的,GET请求由于其参数是直接加在URL上-的,一种参数组合就有一种URL的缓存,可以根据参数来进行一一对应,重复请求是幂等的(不论请求多少次,结果都一样);
    而POST请求的URL没有参数,每次请求的URL都相同,数据体(HTTPBody)可能不同,无法一一对应,所以缓存没有意义

3.安全性

GET的所有参数全部包装在URL中,明文显示,且服务器的访问日志会记录,非常不安全
POST的URL中只有资源路径,不包含参数,参数封装在二进制的数据体中,服务器也不会记录参数,相对安全。所有涉及用户隐私的数据都要用POST传输

POST的安全是相对的,对于普通用户来说他们看不到明文,数据封装对他们来说就是屏障。但是对于专业人士,它们会抓包会分析,没有加密的数据包对他们来说也是小case。所以POST仅仅是相对安全,唯有对数据进行加密才会更安全。当然加密也有被**的可能性,理论上所有的加密方式都可以**,只是时间长短的问题。而加密算法要做的就是使得**需要的时间尽量长,越长越安全。由于我们也需要解密,加密算法太过复杂也并非好事,这就要结合使用情况进行折中或者足够实际使用即可。绕的有点远,具体的话,我将在后续的文章之中介提及,并介绍一些常用的加密算法。

4.数据量

HTTP协议中均没有对GET和POST请求的数据大小进行限制,但是实际应用中它们通常受限于软硬件平台的设计和性能。

GET:不同的浏览器和服务器不同,一般限制在2~8K之间,更加常见的是1k以内
POST方法提交的数据比较大,大小靠服务器的设定值限制,PHP默认是2M(具体的话大家以后看后端给的开发文档就行了)

https:
HTTPS一般使用的加密与HASH算法如下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
http://www.mahaixiang.cn/internet/1233.html
HTTP使用TCP三次握手建立连接,客户端和服务器需要交换3个包(具体可查看马海祥博客《HTTP服务的七层架构技术解析及运用》的相关介绍);HTTPS除了TCP的三个包,还要加上ssl握手需要的9个包,所以一共是12个包。
HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

tcp

TCP的包头结构:
源端口 16位
目标端口 16位
*** 32位
回应序号 32位
TCP头长度 4位
reserved 6位
控制代码 6位
窗口大小 16位
偏移量 16位
校验和 16位
选项  32位(可选)
这样我们得出了TCP包头的最小长度,为20字节。

http://network.51cto.com/art/201411/456783.htm
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。TCP在IP报文的协议号是6。TCP是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功。
android应用开发常用的一些协议学习
android应用开发常用的一些协议学习

udp

UDP的包头结构:
源端口 16位
目的端口 16位
长度 16位
校验和 16位
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

TCP—传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP—用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
TCP:HTTP,FTP,SMTP,TENET,POP3,Finger,NNTP,IMAP4,

UDP:BOOTP,DHCP,NTP,TFTP,SNMP

DNS可以基于TCP,也可以基于UDP。

传输层的TCP或者UDP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。
http://blog.csdn.net/mcpang/article/details/42433685

ip
TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。

IP协议(Internet Protocol)又称互联网协议,是支持网间互连的数据报协议,
它与TCP协议(传输控制协议)一起构成了TCP/IP协议簇的核心。它提供网间连接的完
善功能, 包括IP数据报规定互连网络范围内的IP地址格式。

http://blog.csdn.net/wh1511995112/article/details/51363037
TCP/IP 协议簇
TCP协议簇:传输层的 各种协议
IP协议簇:网络层的各种协议,
网络层: IP,ICMP,IGMP 传输层:TCP ,UDP,UGP
应用层:Telnet,FTP,SMTP,SNMP、http

tcp 、udp协议都是要了ip协议。
http://blog.chinaunix.net/uid-26833883-id-3627644.html
http://www.360doc.com/content/11/0522/10/3356862_118503010.shtml


I P是T C P / I P协议族中最为核心的协议。所有的T C P、U D P、I C M P及I G M P数据都以I P数据
报格式传输。它的特点如下:

不可靠(u n r e l i a b l e)的意思是它不能保证 I P数据报能成功地到达目的地。 I P仅提供最好
的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区, I P有一个简单的错误
处理算法:丢弃该数据报,然后发送 I C M P消息报给信源端。任何要求的可靠性必须由上层来
提供(如T C P) 。

无连接(c o n n e c t i o n l e s s)这个术语的意思是I P并不维护任何关于后续数据报的状态信息。
每个数据报的处理是相互独立的。这也说明, I P数据报可以不按发送顺序接收。如果一信源
向相同的信宿发送两个连续的数据报(先是 A,然后是B) ,每个数据报都是独立地进行路由
选择,可能选择不同的路线,因此B可能在A到达之前先到达。

首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首部中的源地址和目的地址都是IP协议地址

socket
我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。 实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现 只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、 listen、connect、accept、send、read和write等等。

2、邮件系统
pop 和 pop3

下载所有未阅读的电子邮件;一旦将邮件从邮件服务器端送到客户端上,
邮件服务器上的邮件将会被删除。目前的POP3邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的POP协议。
  POP3协议允许电子邮件客户端下载服务器上的邮件,
不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。
POP的全称是 Post Office Protocol ,即邮局协议,
用于电子邮件的接收,它使用TCP的110端口,现
 在常用的是第三版 ,所以简称为 POP3。
 POP3仍采用Client/Server工作模式,。当客户机需要服务时,客
 户端的软件(OutlookExpress或FoxMail)将
 与POP3服务器建立TCP连接,此后要经过POP3协议的三种工作状
在认证通过后便转入处理状态,在此状态下用户可
 收取自己的邮件或做邮件的删除,在完成响应的操作后客户机便发出quit命令,此后便进入更新状态,将(默认)做
 删除标记的邮件从服务器端删除掉。到此为止整个POP过程完成。
 当然,可以通过客户端设置,不删除服务器的源邮件。

IMAP

IMAP提供操作的三种模式
在线方式:邮件保留在Mail服务器端,
客户端可以对其进行管理。其使用方式与WebMail相类似。
离线方式:邮件保留在Mail服务器端,
客户端可以对其进行管理。这与POP协议一样。
分离方式:邮件的一部分在Mail服务器端,一部分在客户端。这与一些成熟的组件包应用(如LotusNotes/Domino)的方式类似。
IMAP工作原理及特性

在在线方式下,IMAP允许用户象访问和
操纵本地信息一样来访问和操纵邮件服务器上的信息。
IMAP软件支持邮件在本地文件夹间和服务器文件夹间的随意拖动,
以把本地硬盘上的文件存放到服务器上,或将服务器上的文件取回本地,所有的功能仅需要一次鼠标拖放的操作来实现。
在用户端可对服务器上的邮箱建立任意层次结构的文件夹,并可灵活地在文件夹间移动邮件,标出那些读过或回复过的邮件,
删除对你来说无用的文件。

在分离状态下,本地系统上的邮件状态和服务器上的邮件状态,
可能和以后再连接时不一样。此时,IMAP的同步机制解决了这个问题。
IMAP邮件的客户端软件能够记录用户在本地的操作,
当他们连上网络后会把这些操作传送给服务器,
服务器也会告诉客户端软件,当用户离线的时候服务器端发生的事件,
比如有新邮件到达等,以保持服务器和客户端的同步。

smtp

SMTP 是一种提供可靠且有效电子邮件传输的协议。 
SMTP 是建立在 FTP 文件传输服务上的一种邮件服务,
主要用于传输系统之间的邮件信息并提供来信有关的通知。

exchange

Exchange 是微软公司一套完整的电子邮件服务组件。
提供了常规的SMTP/POP协议服务外,还支持IMAP4,LDAP和NNTP协议。Exchange Server是个消息与协作系统,Exchange server
可以被用来架构应用于企业、学校的邮件系统甚至于免费的邮件系统。

http://blog.csdn.net/ladybai/article/details/50988205
http://blog.csdn.net/jxh_123/article/details/35982345
http://blog.sina.com.cn/s/blog_67e2fab50102v63d.html

3、短信
SMS短信

MMS彩信
http://blog.csdn.net/liu149339750/article/details/9040225

wap push

接收彩信
<receiver android:name=".smsreceiver"
     android:permission="android.permission.BROADCAST_WAP_PUSH">
        <intent-filter android:priority="10000">
          <action android:name= "android.provider.Telephony.WAP_PUSH_RECEIVED" />
          <data android:mimeType="application/vnd.wap.mms-message" />
        </intent-filter>
     </receiver>
接收wap push
<receiver android:name=".smsreceiver">
    <intent-filter>
        <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
        <data android:mimeType="application/vnd.wap.sic" />
    </intent-filter>
    </receiver>
对应:
mimeType 

接收短信

<receiver android:name=".smsreceiver">
        <intent-filter>
           <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
     </receiver> 

4、视频、语言通信流媒体

相关标签: 协议 android