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