TCP、HTTP

TCP

  TCP((Transmission Control Protocol)傳輸控制協議,是一個面向鏈接的協議。TCP是主機對主機層的傳輸控制協議,提供可靠的鏈接服務,採用三次握手確認創建一個鏈接。html

TCP位碼即標誌位

  1. SYN(synchronous創建聯機)瀏覽器

  2. ACK(acknowledgement 確認)服務器

  3. PSH(push傳送)網絡

  4. FIN(finish結束)post

  5. RST(reset重置)性能

  6. URG(urgent緊急)測試

  7. Sequence number(順序號碼)編碼

  8. Acknowledge number(確認號碼)設計

三次握手過程:

  第一次握手:host1發送一個TCP標誌位SYN=一、ACK=0的數據包給host2,並隨機會產生一個Sequence number=3233.當host2接收到這個數據後,host2由SYN=1可知客戶端是想要創建鏈接
  第二次握手:host2要對客戶端的聯機請求進行確認,向host1發送應答號ACK=一、SYN=一、確認號Acknowledge number=3234(3233+1),此值是host1的序列號加1,還會產生一個隨機的序列號Sequence number=36457,這樣就告訴host1能夠進行鏈接;
  第三次握手:host1收到數據後檢查Acknowledge number是不是3233+1的值,以及ACK的值是否爲1,若爲1,host1會發送ACK=一、確認號碼Acknowledge number=36457,告訴host2,你的請求鏈接被確認,鏈接能夠創建。代理

四次揮手過程:

  第一次揮手:當傳輸的數據到達尾部時,host1向host2發送FIN=1標誌位;可理解成,host1向host2說,我這邊的數據傳送完成了,我準備斷開了鏈接;
  第二次揮手:因TCP的鏈接是全雙工的雙向鏈接,關閉也是要從兩邊關閉;當host2收到host1發來的FIN=1的標誌位後,host2不會馬上向host1發送FIND=1的請求關閉信息,而是先向host1發送一個ACK=1的應答信息,表示:你請求關閉的請求我已經收到,但我可能還有數據沒有完成傳送,你再等下,等我數據傳輸完成了我就告訴你;
  第三次揮手:host2數據傳輸完成,向host1發送FIN=1,host1收到請求關閉鏈接的請求後,host1就明白host2的數據已傳輸完成,如今能夠斷開鏈接了,
  第四次揮手:host1收到FIND=1後,host1仍是怕因爲網絡不穩定的緣由,怕host2不知道他要斷開鏈接,因而向host2發送ACK=1確認信息進行確認,把本身設置成TIME_WAIT狀態並啓動定時器(若是host2沒有收到ACK,host2端TCP的定時器到達後,會要求host1從新發送ACK),當host2收到ACK後,host2就斷開鏈接;當host1等待2MLS(2倍報文最大生存時間)後,沒有收到host2的重傳請求後,他就知道host2已收到了ACK,因此host1此時才關閉本身的鏈接。這一點我以爲設計得很是巧妙!

HTTP

  TCP協議對應於傳輸層,而HTTP協議對應於應用層。Http協議是創建在TCP協議基礎之上的,當瀏覽器須要從服務器獲取網頁數據的時候,會發出一次Http請求。Http會經過TCP創建起一個到服務器的鏈接通道,當本次請求須要的數據完畢後,Http會當即將TCP鏈接斷開,這個過程是很短的。
  因此Http鏈接是一種短鏈接,是一種無狀態的鏈接。所謂的無狀態,是指瀏覽器每次向服務器發起請求的時候,不是經過一個鏈接,而是每次都創建一個新的鏈接。每次請求結束後,鏈接就關閉,相關的內容就釋放了,因此記不住任何狀態,成爲無狀態鏈接。

HTTP之請求消息Request:

  請求行以一個方法符號開頭,以空格分開,後面跟着請求的URI和協議的版本。

Get請求例子:

  第一部分:請求行,用來講明請求類型,要訪問的資源以及所使用的HTTP版本.GET說明請求類型爲GET,[/562f25980001b1b106000338.jpg]爲要訪問的資源,該行的最後一部分說明使用的是HTTP1.1版本。
  第二部分:請求頭部,緊接着請求行(即第一行)以後的部分,用來講明服務器要使用的附加信息
  第三部分:空行,請求頭部後面的空行是必須的,即便第四部分的請求數據爲空,也必須有空行。
  第四部分:請求數據也叫主體,能夠添加任意的其餘數據。

POST請求例子

  第一部分:請求行,第一行明瞭是post請求,以及http1.1版本。
  第二部分:請求頭部,第二行至第六行。
  第三部分:空行,第七行的空行。
  第四部分:請求數據,第八行。

HTTP之響應消息Response:

  HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。
  第一部分:狀態行,由HTTP協議版本號, 狀態碼, 狀態消息 三部分組成。
  第一行爲狀態行,(HTTP/1.1)代表HTTP版本爲1.1版本,狀態碼爲200,狀態消息爲(ok)
  第二部分:消息報頭,用來講明客戶端要使用的一些附加信息
  第二行和第三行爲消息報頭,Date:生成響應的日期和時間;Content-Type:指定了MIME類型的HTML(text/html),編碼類型是UTF-8
  第三部分:空行,消息報頭後面的空行是必須的
  第四部分:響應正文,服務器返回給客戶端的文本信息。空行後面的html部分爲響應正文。

HTTP之狀態碼:

  狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:
  1xx:指示信息--表示請求已接收,繼續處理
  2xx:成功--表示請求已被成功接收、理解、接受
  3xx:重定向--要完成請求必須進行更進一步的操做
  4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現
  5xx:服務器端錯誤--服務器未能實現合法的請求

常見狀態碼:

  200 OK                        //客戶端請求成功
  400 Bad Request               //客戶端請求有語法錯誤,不能被服務器所理解
  401 Unauthorized              //請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用
  403 Forbidden                 //服務器收到請求,可是拒絕提供服務
  404 Not Found                 //請求資源不存在,eg:輸入了錯誤的URL
  500 Internal Server Error     //服務器發生不可預期的錯誤
  503 Server Unavailable        //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常

HTTP請求方法:

  根據HTTP標準,HTTP請求可使用多種請求方法。
  HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
  HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
  GET     請求指定的頁面信息,並返回實體主體。
  HEAD     相似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
  POST     向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會致使新的資源的創建和/或已有資源的修改。
  PUT     從客戶端向服務器傳送的數據取代指定的文檔的內容。
  DELETE      請求服務器刪除指定的頁面。  CONNECT     HTTP/1.1協議中預留給可以將鏈接改成管道方式的代理服務器。  OPTIONS     容許客戶端查看服務器的性能。  TRACE     回顯服務器收到的請求,主要用於測試或診斷。

相關文章
相關標籤/搜索