1、先來一個講TCP、UDP和HTTP關係的html
一、TCP/IP是個協議組,可分爲三個層次:網絡層、傳輸層和應用層。web
在網絡層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。算法
在傳輸層中有TCP協議與UDP協議。瀏覽器
在應用層有FTP、HTTP、TELNET、SMTP、DNS等協議。安全
所以,HTTP自己就是一個協議,是從Web服務器傳輸超文本到本地瀏覽器的傳送協議。服務器
二、HTTP協議是創建在請求/響應模型上的。首先由客戶創建一條與服務器的TCP連接,併發送一個請求到服務器,請求中包含請求方法、URI、協議版本以及相關的MIME樣式的消息。服務器響應一個狀態行,包含消息的協議版本、一個成功和失敗碼以及相關的MIME式樣的消息。網絡
HTTP/1.0爲每一次HTTP的請求/響應創建一條新的TCP連接,所以一個包含HTML內容和圖片的頁面將須要創建屢次的短時間的TCP連接。一次TCP連接的創建將須要3次握手。session
另外,爲了得到適當的傳輸速度,則須要TCP花費額外的迴路連接時間(RTT)。每一次連接的創建須要這種常常性的開銷,而其並不帶有實際有用的數據,只是保證連接的可靠性,所以HTTP/1.1提出了可持續連接的實現方法。HTTP/1.1將只創建一次TCP的連接而重複地使用它傳輸一系列的請求/響應消息,所以減小了連接創建的次數和常常性的連接開併發
銷。app
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數據包,而後對方主機確認收到數據包,若是數據包是否到達的消息及時反饋回來,那麼網絡就是通的。
2、 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不保證。