TCP、UDP、HTTP、HTTPS以前的區別

網絡由下往上分爲:程序員

物理層---web

數據鏈路層---編程

網絡層 --  IP協議安全

傳輸層 --  TCP協議服務器

會話層 --網絡

表示層和應用層 --  HTTP協議併發

一、TCP/IP鏈接socket

TCP傳輸控制協議,是一種提供可靠數據傳輸的通用協議函數

手機可以使用聯網功能是由於手機底層實現了TCP/IP協議,可使手機終端機經過無線網絡創建TCP鏈接。TCP協議能夠對上層網絡提供接口,使上層網絡數據的傳輸創建在「無差異」的網絡之上。工具

創建起一個TCP鏈接須要通過「三次握手」:
 
第一次握手:客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
 
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
 
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。

握手過程當中傳送的包裏不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP鏈接一旦創建,在通訊雙方中的任何一方主動關閉鏈接以前,TCP 鏈接都將被一直保持下去。斷開鏈接時服務器和客戶端都可以主動發起斷開TCP鏈接的請求,斷開過程須要通過「四次握手」(過程就不細寫了,就是服務器和客戶端交互,最終肯定斷開)。

UDP協議
UDP 用戶數據報協議,是一個面向無鏈接的協議。採用該協議不須要兩個應用程序先創建鏈接。UDP協議不提供差錯恢復,不能提供數據重傳,所以該協議傳輸數據安全性差。
(1)、TCP面向鏈接(如打電話要先撥號創建鏈接);UDP是無鏈接的,即發送數據以前不須要創建鏈接
(2)、TCP提供可靠的服務。也就是說,經過TCP鏈接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付
二、HTTP鏈接
 
HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網經常使用的協議之一,HTTP協議是創建在TCP協議之上的一種應用。
 
HTTP鏈接最顯著的特色是客戶端發送的每次請求都須要服務器回送響應,在請求結束後,會主動釋放鏈接。從創建鏈接到關閉鏈接的過程稱爲「一次鏈接」。
 
1)在HTTP 1.0中,客戶端的每次請求都要求創建一次單獨的鏈接,在處理完本次請求後,就自動釋放鏈接。
2)在HTTP 1.1中則能夠在一次鏈接中處理多個請求,而且多個請求能夠重疊進行,不須要等待一個請求結束後再發送下一個請求。
 
因爲HTTP在每次請求結束後都會主動釋放鏈接,所以HTTP鏈接是一種「短鏈接」,要保持客戶端程序的在線狀態,須要不斷地向服務器發起鏈接請求。一般的作法是即時不須要得到任何數據,客戶端也保持每隔一段固定的時間向服務器發送一次「保持鏈接」的請求,服務器在收到該請求後對客戶端進行回覆,代表知道客戶端「在線」。若服務器長時間沒法收到客戶端的請求,則認爲客戶端「下線」,若客戶端長時間沒法收到服務器的回覆,則認爲網絡已經斷開。
 
 三、SOCKET原理
 
 3.1套接字(socket)概念
 
    套接字(socket)是通訊的基石,是支持TCP/IP協議的網絡通訊的基本操做單元。它是網絡通訊過程當中端點的抽象表示,包含進行網絡通訊必須的五種信息:鏈接使用的協議,本地主機的IP地址,本地進程的協議端口,遠地主機的IP地址,遠地進程的協議端口。
 
    應用層經過傳輸層進行數據通訊時,TCP會遇到同時爲多個應用程序進程提供併發服務的問題。多個TCP鏈接或多個應用程序進程可能須要經過同一個 TCP協議端口傳輸數據。爲了區別不一樣的應用程序進程和鏈接,許多計算機操做系統爲應用程序與TCP/IP協議交互提供了套接字(Socket)接口。應用層能夠和傳輸層經過Socket接口,區分來自不一樣應用程序進程或網絡鏈接的通訊,實現數據傳輸的併發服務。
 
3.2 創建socket鏈接
 
 創建Socket鏈接至少須要一對套接字,其中一個運行於客戶端,稱爲ClientSocket ,另外一個運行於服務器端,稱爲ServerSocket 。
 
套接字之間的鏈接過程分爲三個步驟:服務器監聽,客戶端請求,鏈接確認。
 
服務器監聽:服務器端套接字並不定位具體的客戶端套接字,而是處於等待鏈接的狀態,實時監控網絡狀態,等待客戶端的鏈接請求。
 
客戶端請求:指客戶端的套接字提出鏈接請求,要鏈接的目標是服務器端的套接字。爲此,客戶端的套接字必須首先描述它要鏈接的服務器的套接字,指出服務器端套接字的地址和端口號,而後就向服務器端套接字提出鏈接請求。
 
鏈接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的鏈接請求時,就響應客戶端套接字的請求,創建一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式創建鏈接。而服務器端套接字繼續處於監聽狀態,繼續接收其餘客戶端套接字的鏈接請求。
 
 四、SOCKET鏈接與TCP/IP鏈接
 
建立Socket鏈接時,能夠指定使用的傳輸層協議,Socket能夠支持不一樣的傳輸層協議(TCP或UDP),當使用TCP協議進行鏈接時,該Socket鏈接就是一個TCP鏈接。
 
 socket則是對TCP/IP協議的封裝和應用(程序員層面上)。也能夠說,TPC/IP協議是傳輸層協議,主要解決數據 如何在網絡中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。關於TCP/IP和HTTP協議的關係,網絡有一段比較容易理解的介紹:
 
「咱們在傳輸數據時,能夠只使用(傳輸層)TCP/IP協議,可是那樣的話,如 果沒有應用層,便沒法識別數據內容,若是想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有不少,好比HTTP、FTP、TELNET等,也 能夠本身定義應用層協議。WEB使用HTTP協議做應用層協議,以封裝HTTP文本信息,而後使用TCP/IP作傳輸層協議將它發到網絡上。」
 
咱們平時說的最多的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等等。網絡有一段關於socket和TCP/IP協議關係的說法比較容易理解:
 
「TCP/IP只是一個協議棧,就像操做系統的運行機制同樣,必需要具體實現,同時還要提供對外的操做接口。這個就像操做系統會提供標準的編程接口,好比win32編程接口同樣,TCP/IP也要提供可供程序員作網絡開發所用的接口,這就是Socket編程接口。」 
實際上,傳輸層的TCP是基於網絡層的IP協議的,而應用層的HTTP協議又是基於傳輸層的TCP協議的,而Socket自己不算是協議,就像上面所說,它只是提供了一個針對TCP或者UDP編程的接口。socket是對端口通訊開發的工具,它要更底層一些.
 
五、Socket鏈接與HTTP鏈接
 
因爲一般狀況下Socket鏈接就是TCP鏈接,所以Socket鏈接一旦創建,通訊雙方便可開始相互發送數據內容,直到雙方鏈接斷開。但在實際網絡應用中,客戶端到服務器之間的通訊每每須要穿越多箇中間節點,例如 路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的鏈接而致使 Socket 鏈接斷連,所以須要經過輪詢告訴網絡,該鏈接處於活躍狀態。
 
 而HTTP鏈接使用的是「請求—響應」的方式,不只在請求時須要先創建鏈接,並且須要客戶端向服務器發出請求後,服務器端才能回覆數據。
 
不少狀況下,須要服務器端主動向客戶端推送數據,保持客戶端與服務器數據的實時與同步。此時若雙方創建的是Socket鏈接,服務器就能夠直接將數據傳送給客戶端;若雙方創建的是HTTP鏈接,則服務器須要等到客戶端發送一次請求後才能將數據傳回給客戶端,所以,客戶端定時向服務器端發送鏈接請求,不只能夠保持在線,同時也是在「詢問」服務器是否有新的數據,若是有就將數據傳給客戶端。
 
http協議是應用層的協義 
 
有個比較形象的描述:HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通訊的能力。 術語TCP/IP表明傳輸控制協議/網際協議,指的是一系列協議。「IP」表明網際協議,TCP和UDP使用該協議從一個網絡傳送數據包到另外一個網絡。把 IP想像成一種高速公路,它容許其它協議在上面行駛並找到到其它電腦的出口。 TCP和UDP是高速公路上的「卡車」,它們攜帶的貨物就是像HTTP,文件傳輸協議FTP這樣的協議等。 
 
兩個計算機之間的交流無非是兩個端口之間的數據通訊,具體的數據會以什麼樣的形式展示`是以不一樣的應用層協議來定義的`如HTTP`FTP`...
https
HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL。 它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP數據傳輸。https:URL代表它使用了HTTP,但HTTPS存在不一樣於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。
https協議須要到ca申請證書,通常免費證書不多,須要交費。http是超文本傳輸協議,信息是明文傳輸,https 則是具備安全性的ssl加密傳輸協議http和https使用的是徹底不一樣的鏈接方式用的端口也不同,前者是80,後者是443。
(3)、TCP面向字節流,其實是TCP把數據當作一連串無結構的字節流;UDP是面向報文的 UDP沒有擁塞控制,所以網絡出現擁塞不會使源主機的發送速率下降(對實時應用頗有用,如IP電話,實時視頻會議等)
(4)、每一條TCP鏈接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通訊
(5)、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節
(6)、TCP的邏輯通訊信道是全雙工的可靠信道,UDP則是不可靠信道

TCP,UDP區別

TCP與UDP基本區別  

1.基於鏈接與無鏈接  

2.TCP要求系統資源較多,UDP較少;   

3.UDP程序結構較簡單   

4.流模式(TCP)與數據報模式(UDP);   

5.TCP保證數據正確性,UDP可能丟包   

6.TCP保證數據順序,UDP不保證 

  

UDP應用場景:   

1.面向數據報方式  

2.網絡數據大多爲短消息   

3.擁有大量Client  

4.對數據安全性無特殊要求  

5.網絡負擔很是重,但對響應速度要求高  

 

具體編程時的區別   

 1.socket()的參數不一樣    

2.UDP Server不須要調用listen和accept    

3.UDP收發數據用sendto/recvfrom函數    

4.TCP:地址信息在connect/accept時肯定    

5.UDP:在sendto/recvfrom函數中每次均 需指定地址信息    

6.UDP:shutdown函數無效  

 

編程區別    

  一般咱們在說到網絡編程時默認是指TCP編程,即用前面提到的socket函數建立一個socket用於TCP通信,函數參數咱們一般填爲SOCK_STREAM。即socket(PF_INET, SOCK_STREAM, 0),這表示創建一個socket用於流式網絡通信。 

  SOCK_STREAM這種的特色是面向鏈接的,即每次收發數據以前必須經過connect創建鏈接,也是雙向的,即任何一方均可以收發數據,協議自己提供了一些保障機制保證它是可靠的、有序的,即每一個包按照發送的順序到達接收方。 

  而SOCK_DGRAM這種是User Datagram Protocol協議的網絡通信,它是無鏈接的,不可靠的,由於通信雙方發送數據後不知道對方是否已經收到數據,是否正常收到數據。任何一方創建一個socket之後就能夠用sendto發送數據,也能夠用recvfrom接收數據。根本不關心對方是否存在,是否發送了數據。它的特色是通信速度比較快。你們都知道TCP是要通過三次握手的,而UDP沒有。

 

基於上述不一樣,UDP和TCP編程步驟也有些不一樣,以下:

TCP: 
TCP編程的服務器端通常步驟是: 
  一、建立一個socket,用函數socket(); 
  二、設置socket屬性,用函數setsockopt(); * 可選 
  三、綁定IP地址、端口等信息到socket上,用函數bind(); 
  四、開啓監聽,用函數listen(); 
  五、接收客戶端上來的鏈接,用函數accept(); 
  六、收發數據,用函數send()和recv(),或者read()和write(); 
  七、關閉網絡鏈接; 
  八、關閉監聽; 

TCP編程的客戶端通常步驟是: 
  一、建立一個socket,用函數socket(); 
  二、設置socket屬性,用函數setsockopt();* 可選 
  三、綁定IP地址、端口等信息到socket上,用函數bind();* 可選 
  四、設置要鏈接的對方的IP地址和端口等屬性; 
  五、鏈接服務器,用函數connect(); 
  六、收發數據,用函數send()和recv(),或者read()和write(); 
  七、關閉網絡鏈接;

UDP:
與之對應的UDP編程步驟要簡單許多,分別以下: 
  UDP編程的服務器端通常步驟是: 
  一、建立一個socket,用函數socket(); 
  二、設置socket屬性,用函數setsockopt();* 可選 
  三、綁定IP地址、端口等信息到socket上,用函數bind(); 

四、循環接收數據,用函數recvfrom(); 
  五、關閉網絡鏈接; 

UDP編程的客戶端通常步驟是: 
  一、建立一個socket,用函數socket(); 
  二、設置socket屬性,用函數setsockopt();* 可選 
  三、綁定IP地址、端口等信息到socket上,用函數bind();* 可選 
  四、設置對方的IP地址和端口等屬性; 
  五、發送數據,用函數sendto(); 
  六、關閉網絡鏈接;

 

UDP補充:
   UDP不提供複雜的控制機制,利用IP提供面向無鏈接的通訊服務。而且它是將應用程序發來的數據在收到的那一刻,馬上按照原樣發送到網絡上的一種機制。即便是出現網絡擁堵的狀況下,UDP也沒法進行流量控制等避免網絡擁塞的行爲。此外,傳輸途中若是出現了丟包,UDO也不負責重發。甚至當出現包的到達順序亂掉時也沒有糾正的功能。若是須要這些細節控制,那麼不得不交給由採用UDO的應用程序去處理。換句話說,UDP將部分控制轉移到應用程序去處理,本身卻只提供做爲傳輸層協議的最基本功能。UDP有點相似於用戶說什麼聽什麼的機制,可是須要用戶充分考慮好上層協議類型並製做相應的應用程序。

TCP補充:
  TCP充分實現了數據傳輸時各類控制功能,能夠進行丟包的重發控制,還能夠對次序亂掉的分包進行順序控制。而這些在UDP中都沒有。此外,TCP做爲一種面向有鏈接的協議,只有在確認通訊對端存在時纔會發送數據,從而能夠控制通訊流量的浪費。TCP經過檢驗和、序列號、確認應答、重發控制、鏈接管理以及窗口控制等機制實現可靠性傳輸。

 

TCP,UDP,HTTP應用場景

Socket實現服務器與客戶端之間的物理鏈接,並進行數據傳輸。主要有TCP/UDP兩個協議。Socket處於網絡協議的傳輸層。

TCP:傳輸控制協議,面向鏈接的的協議,穩定可靠。當客戶和服務器彼此交換數據前,必須先在雙方之間創建一個TCP鏈接,以後才能傳輸數據。 UDP:廣播式數據傳輸,UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,可是並不能保證它們能到達目的地。因爲UDP在傳輸數據報前不用在客戶和服務器之間創建一個鏈接,且沒有超時重發等機制,故而傳輸速度很快。
優勢:1.傳輸數據爲字節級,傳輸數據可自定義,數據量小。相應的移動端開發,手機費用低
      2.傳輸數據時間短,性能高
      3.適合C/S之間信息實時交互
      4.能夠加密,數據安全性高
缺點: 1.須要對傳輸的數據進行解析,轉化爲應用級的數據
       2.對開發人員的開發水平要求高
       3.相對於Http協議傳輸,增長了開發量
 
Http請求主要有http協議,基於http協議的soap協議,常見的http數據請求方式有get和post,web服務
 
優勢:1.基於應用級的接口使用方便
      2.要求的開發水平不高,容錯性強
缺點: 1.傳輸速度慢,數據包大。
       2.如實現實時交互,服務器性能壓力大
       3.數據傳輸安全性差
相關文章
相關標籤/搜索