TCP、UDP、HTTP與HTTPS都是通信協(xié)議,在這里首先先介紹一下什么是通信協(xié)議。
什么是通信協(xié)議?
通信協(xié)議(communications protocol)是指雙方實體完成通信或服務所必須遵循的規(guī)則和約定。通過通信信道和設備互連起來的多個不同地理位置的數(shù)據(jù)通信系統(tǒng),要使其能協(xié)同工作實現(xiàn)信息交換和資源共享,它們之間必須具有共同的語言。交流什么、怎樣交流及何時交流,都必須遵循某種互相都能接受的規(guī)則。這個規(guī)則就是通信協(xié)議。
什么是TCP?
TCP是Transmission Control Protocol的縮寫,也就是傳輸控制協(xié)議。它是一種面向連接的、可靠的、基于字節(jié)流的[傳輸層]通信協(xié)議。主要解決數(shù)據(jù)如何在網(wǎng)絡中如何傳輸?shù)?,是一種長連接。建立一個TCP連接需要有三次握手,而終止一個TCP連接需要有4次握手,這是由TCP的半關閉(half-close)造成的。TCP包頭的最小長度為20字節(jié)。
建立連接的三次握手
第一次握手:客戶端發(fā)送syn包(syn=j)到服務器,并進入SYN_SEND狀態(tài),等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務器進入ESTABLISHED狀態(tài),完成三次握手。
握手過程中傳送的包里不包含數(shù)據(jù),三次握手完畢后,客戶端與服務器才正式開始傳送數(shù)據(jù)。
TCP一旦連接起來,在客戶端和服務端任何一方主動關閉連接之前,TCP連接都將被一直保持下去。
斷開連接時,服務器和客戶端都可以主動發(fā)起斷開TCP連接的請求。
簡單來說,第一次握手就是客戶端向服務器問我可以發(fā)送數(shù)據(jù)嗎;第二次握手就是服務器回答說可以;第三次握手就是客戶端向服務器說那我要開始發(fā)送數(shù)據(jù)了,此時客戶端和服務器都準備好傳輸數(shù)據(jù)了,三次握手就完成了。
斷開連接的四次握手
(1) 某個應用進程首先調(diào)用close,稱該端執(zhí)行“主動關閉”(active close)。該端的TCP于是發(fā)送一個FIN分節(jié),表示數(shù)據(jù)發(fā)送完畢。
(2) 接收到這個FIN的對端執(zhí)行 “被動關閉”(passive close),這個FIN由TCP確認。
注意:FIN的接收也作為一個文件結束符(end-of-file)傳遞給接收端應用進程,放在已排隊等候該應用進程接收的任何其他數(shù)據(jù)之后,因為,F(xiàn)IN的接收意味著接收端應用進程在相應連接上再無額外數(shù)據(jù)可接收。
(3) 一段時間后,接收到這個文件結束符的應用進程將調(diào)用close關閉它的套接字。這導致它的TCP也發(fā)送一個FIN。
(4) 接收這個最終FIN的原發(fā)送端TCP(即執(zhí)行主動關閉的那一端)確認這個FIN。
既然每個方向都需要一個FIN和一個ACK,因此通常需要4個分節(jié)。
什么是UDP?
UDP是User Datagram Protocol的縮寫,也就是用戶數(shù)據(jù)報協(xié)議。它與TCP相對應,是一種面向無連接的、不可靠的數(shù)據(jù)報傳輸協(xié)議,即不與對方建立連接,就直接就把數(shù)據(jù)包發(fā)送過去,因此缺乏可靠性。由于缺乏可靠性,UDP應用一般必須允許一定量的丟包、出錯和復制。
UDP簡單總結起來就是下面的幾點:
(1) UDP是一個非連接的協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡上。在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應用程序生成數(shù)據(jù)的速度、計算機的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。
(2) 由于傳輸數(shù)據(jù)不建立連接,因此也就不需要維護連接狀態(tài),包括收發(fā)狀態(tài)等,因此一臺服務機可同時向多個客戶機傳輸相同的消息。
(3) UDP信息包的標題很短,只有8個字節(jié),相對于TCP的20個字節(jié)信息包的額外開銷很小。
(4) 吞吐量不受擁擠控制算法的調(diào)節(jié),只受應用軟件生成數(shù)據(jù)的速率、傳輸帶寬、源端和終端主機性能的限制。
(5)UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持復雜的鏈接狀態(tài)表(這里面有許多參數(shù))。
(6)UDP是面向報文的。發(fā)送方的UDP對應用程序交下來的報文,在添加首部后就向下交付給IP層。既不拆分,也不合并,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。
我們經(jīng)常使用“ping”命令來測試兩臺主機之間TCP/IP通信是否正常,其實“ping”命令的原理就是向對方主機發(fā)送UDP數(shù)據(jù)包,然后對方主機確認收到數(shù)據(jù)包,如果數(shù)據(jù)包是否到達的消息及時反饋回來,那么網(wǎng)絡就是通的。
TCP與UDP的區(qū)別
(1)TCP是需要連接的傳輸協(xié)議(長連接),UDP是不需要連接的傳輸協(xié)議;
(2)TCP對系統(tǒng)資源要求較多,UDP要求較少;
(3)TCP的程序結構較復雜,UDP程序結構較簡單;
(4)TCP是流模式,UDP是數(shù)據(jù)報模式 ;
(5)TCP保證數(shù)據(jù)正確性,UDP可能丟包,TCP保證數(shù)據(jù)順序,UDP不保證。
什么是HTTP?
HTTP是HyperText Transfer Protocol的縮寫,也就是超文本傳輸協(xié)議。HTTP是Web聯(lián)網(wǎng)的基礎,也是手機聯(lián)網(wǎng)常用的協(xié)議之一,HTTP協(xié)議是建立在TCP協(xié)議之上的一種應用。HTTP連接最顯著的特點是客戶端發(fā)送的每次請求都需要服務器回送響應,在請求結束后,會主動釋放連接。從建立連接到關閉連接的過程稱為“一次連接”。
HTTP協(xié)議的主要特點可概括如下:
1.支持客戶/服務器模式。
2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規(guī)定了客戶與服務器聯(lián)系的類型不同。由于HTTP協(xié)議簡單,使得HTTP服務器的程序規(guī)模小,因而通信速度很快。
3.靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對象。正在傳輸?shù)念愋陀蒀ontent-Type加以標記。
4.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節(jié)省傳輸時間。
5.無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對于事務處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
HTTP協(xié)議之Get和Post
Http協(xié)議定義了很多與服務器交互的方法,最基本的有4種,分別是GET,POST,PUT,DELETE. 一個URL地址用于描述一個網(wǎng)絡上的資源,而HTTP中的GET, POST, PUT, DELETE就對應著對這個資源的查,改,增,刪4個操作。 我們最常見的就是GET和POST了。GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息.
GET和POST的區(qū)別
GET提交的數(shù)據(jù)會放在URL之后,以問號(?)分割URL和傳輸數(shù)據(jù),參數(shù)之間以符號&相連,如EditPosts.aspx?name=test1&id=123456.? POST方法是把提交的數(shù)據(jù)放在HTTP包的Body中。
GET提交的數(shù)據(jù)大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的數(shù)據(jù)沒有限制。
GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值,也就是說Get是通過地址欄來傳值,而Post是通過提交表單來傳值。
GET方式提交數(shù)據(jù),會帶來安全問題,比如一個登錄頁面,通過GET方式提交數(shù)據(jù)時,用戶名和密碼將出現(xiàn)在URL上,如果頁面可以被緩存或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該用戶的賬號和密碼,相比之下POST更安全。
什么是HTTPS?
HTTP是Secure Hypertext Transfer Protocol的縮寫,也就是安全超文本傳輸協(xié)議。它是一個安全通信通道,它基于HTTP開發(fā),用于在客戶計算機和服務器之間交換信息。它使用安全套接字層(SSL)進行信息交換,簡單來說它是HTTP的安全版。
HTTP與HTTPS的區(qū)別
一、HTTPS協(xié)議需要到CA申請證書,一般免費證書很少,需要交費。
二、HTTP是超文本傳輸協(xié)議信息是明文傳輸,HTTPS則是具有安全性的ssl加密傳輸協(xié)議。
三、HTTP和HTTPS使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
四、HTTP的連接很簡單,是無狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構建的可進行加密傳輸、身份認證的網(wǎng)絡協(xié)議,比HTTP協(xié)議安全。
五、在OSI 網(wǎng)絡模型中,HTTP和HTTPS都工作于應用層。
Socket
Socket是為了實現(xiàn)通信過程而建立成來的通信管道,其真實的代表是客戶端和服務器端的一個通信進程,雙方進程通過Socket進行通信,而通信的規(guī)則采用指定的協(xié)議。Socket只是一種連接模式,不是協(xié)議,TCP、UDP,簡單的說(雖然不準確)是兩個最基本的協(xié)議,很多其它協(xié)議都是基于這兩個協(xié)議如,HTTP就是基于TCP的,.用Socket可以創(chuàng)建TCP連接,也可以創(chuàng)建UDP連接,這意味著,用Socket可以創(chuàng)建任何協(xié)議的連接,因為其它協(xié)議都是基于此的。
實際上,傳輸層的TCP是基于網(wǎng)絡層的IP協(xié)議的,而應用層的HTTP協(xié)議又是基于傳輸層的TCP協(xié)議的,而Socket本身不算是協(xié)議,就像上面所說,它只是提供了一個針對TCP或者UDP編程的接口。
TCP/IP
TCP/IP是一個協(xié)議組,分為網(wǎng)絡層、傳輸層、應用層。
在網(wǎng)絡層有IP協(xié)議、ICMP協(xié)議、ARP協(xié)議、RARP協(xié)議和BOOTP協(xié)議。
在傳輸層有TCP協(xié)議和UDP協(xié)議。
在應用層有FTP、HTTP、TELNET、SMTP、DNS等協(xié)議。