http、tcp、udp、OAUTH2.0网络协议区别

时间:2023-03-09 00:55:22
http、tcp、udp、OAUTH2.0网络协议区别

               

一、先来一个讲TCP、UDP和HTTP关系的

1、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。

在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。

在传输层中有TCP协议与UDP协议。

在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。

因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。

2、HTTP协议是建立在请求/响应模型上的。首先由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,请求中包含请求方法、URI、协议版本以及相关的MIME样式的消息。服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息。

HTTP/1.0为每一次HTTP的请求/响应建立一条新的TCP链接,因此一个包含HTML内容和图片的页面将需要建立多次的短期的TCP链接。一次TCP链接的建立将需要3次握手。

另外,为了获得适当的传输速度,则需要TCP花费额外的回路链接时间(RTT)。每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数据,只是保证链接的可靠性,因此HTTP/1.1提出了可持续链接的实现方法。HTTP/1.1将只建立一次TCP的链接而重复地使用它传输一系列的请求/响应消息,因此减少了链接建立的次数和经常性的链接开

销。

3,UDP(User Data Protocol,用户数据报协议)

(1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。

(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。

(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。

(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。

(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。

我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

二、       Oauth的概念

Oauth的官方简介是:

An open protocol to allow secure API authorization in a simple andstandard method from web, mobile and desktop applications.

随着大量开放平台的出现,建立在开放平台之上的各种第三方应用也在大量冒出,出对安全性和统一标准的要求,于是出现了oauth协议

简单来说,OAUTH是一种开放的协议,他能为桌面程序或者基于BS的web应用提供一种简单的标准方式去访问需要用户授权的API(ApplicationProgramming Interface)服务,而且任何第三方都可以使用OAUTH认证服务。在为第三方提供服务的过程中,他还能起到保护用户账号安全的作用。

1,Oauth的发展过程

2007年发布了OAuthCore 1.0

(此版本的协议存在严重的安全漏洞,详情介绍可参考:Explaining the OAuth Session Fixation Attack

2009年6月发布了OAuthCore 1.0 Revision A

修复了前一版本的安全漏洞,并成为RFC5849,我们现在使用的OAuth版本多半都是以此版本为基础。

2010年4月发布了OAuth2.0,是OAuth协议的下一版本,但与OAuth 1.0版本互不兼容。

2,Oauth的作用

在上面的给出Oauth的定义中其实就已经说明白了它的作用,但有点抽象,就拿我最近做的一个小应用来举例吧。如果我们想要做关于新浪微博的第三方应用,那么我们就可以用到微博提供给我们的一系列API,但应用这些API是需要我么先去授权验证的,这里就用到了Oauth了。而且作为第三方开发者,我们并没有得到用户的实质性的私密信息,所以说他还保护了用户账号安全。

我们在应用Oauth的时候常常会拿他和OpenID作比较,那我们怎么去理解他们之间的区别呢?

其实OAuth的关注点在于授权,而OpenID则侧重于证明鉴定,简单来说,我们可以认为OAuth为我们解决“用户能(想)做什么”,是“WHAT”的问题,而OpenID则为我们验证“用户是谁”,是解决“WHO”的问题。

3, Oauth1.0与Oauth2.0的区别

①auth1.0与Oauth2.0是相互不兼容的,所以他们为我们提供了不同的授权方式:

2.0的用户授权过程有3步:

A)用户到授权服务器,请求授权,然后返回授权码(AuthorizationCode)

B)客户端由授权码到授权服务器换取访问令牌(access token)

C)用访问令牌去访问得到授权的资源、

总结:获取授权码(Authorization Code)—>换取访问令牌(access_token)—>访问资源:

1.0的授权分4步,

A)客户端到授权服务器请求一个授权令牌(requesttoken&secret)

B)引导用户到授权服务器请求授权

C)用访问令牌到授权服务器换取访问令牌(accesstoken&secret)

D)用访问令牌去访问得到授权的资源

总结:请求授权令牌(request token&secret)—>换取访问令牌(access token&secret)—>访问资源

②1.0协议每个token都有一个加密,2.0则不需要。这样来看1.0似乎更加安全,但是2.0要求使用https协议,安全性也更高一筹。

③2.0充分考虑了客户端的各种子态,因而提供了多种途径获取访问令牌,有:授权码、

客户端私有证书、资源拥有者密码证书、刷新令牌等方式,而且验证过程更为简洁。

相比之下 1.0只有一个用户授权流程。

而虽然HTTP本身是一个协议,但其最终还是基于TCP的。不过,目前,有人正在研究基于TCP+UDP混合的HTTP协议。

而TCP与UDP的区别:

1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;

5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。