TCP、HTTP

TCP

TCP((Transmission Control Protocol)傳輸控制協(xié)議,是一個面向連接的協(xié)議。TCP是主機對主機層的傳輸控制協(xié)議,提供可靠的連接服務,采用三次握手確認建立一個連接。位碼即tcp標志位,有6種標示:

  1. SYN(synchronous建立聯(lián)機)
  2. ACK(acknowledgement 確認)
  3. PSH(push傳送)
  4. FIN(finish結(jié)束)
  5. RST(reset重置)
  6. URG(urgent緊急)
  7. Sequence number(順序號碼)
  8. Acknowledge number(確認號碼)

三次握手過程:
  第一次握手:host1發(fā)送一個TCP標志位SYN=1、ACK=0的數(shù)據(jù)包給host2,并隨機會產(chǎn)生一個Sequence number=3233.當host2接收到這個數(shù)據(jù)后,host2由SYN=1可知客戶端是想要建立連接;
  第二次握手:host2要對客戶端的聯(lián)機請求進行確認,向host1發(fā)送應答號ACK=1、SYN=1、確認號Acknowledge number=3234(3233+1),此值是host1的序列號加1,還會產(chǎn)生一個隨機的序列號Sequence number=36457,這樣就告訴host1可以進行連接;
  第三次握手:host1收到數(shù)據(jù)后檢查Acknowledge number是否是3233+1的值,以及ACK的值是否為1,若為1,host1會發(fā)送ACK=1、確認號碼Acknowledge number=36457,告訴host2,你的請求連接被確認,連接可以建立。

四次揮手過程:
  第一次揮手:當傳輸?shù)臄?shù)據(jù)到達尾部時,host1向host2發(fā)送FIN=1標志位;可理解成,host1向host2說,我這邊的數(shù)據(jù)傳送完成了,我準備斷開了連接;
  第二次揮手:因TCP的連接是全雙工的雙向連接,關(guān)閉也是要從兩邊關(guān)閉;當host2收到host1發(fā)來的FIN=1的標志位后,host2不會立刻向host1發(fā)送FIND=1的請求關(guān)閉信息,而是先向host1發(fā)送一個ACK=1的應答信息,表示:你請求關(guān)閉的請求我已經(jīng)收到,但我可能還有數(shù)據(jù)沒有完成傳送,你再等下,等我數(shù)據(jù)傳輸完成了我就告訴你;
  第三次揮手:host2數(shù)據(jù)傳輸完成,向host1發(fā)送FIN=1,host1收到請求關(guān)閉連接的請求后,host1就明白host2的數(shù)據(jù)已傳輸完成,現(xiàn)在可以斷開連接了,
  第四次揮手:host1收到FIND=1后,host1還是怕由于網(wǎng)絡不穩(wěn)定的原因,怕host2不知道他要斷開連接,于是向host2發(fā)送ACK=1確認信息進行確認,把自己設置成TIME_WAIT狀態(tài)并啟動定時器(如果host2沒有收到ACK,host2端TCP的定時器到達后,會要求host1重新發(fā)送ACK),當host2收到ACK后,host2就斷開連接;當host1等待2MLS(2倍報文最大生存時間)后,沒有收到host2的重傳請求后,他就知道host2已收到了ACK,所以host1此時才關(guān)閉自己的連接。這一點我覺得設計得非常巧妙!

HTTP:

TCP協(xié)議對應于傳輸層,而HTTP協(xié)議對應于應用層。Http協(xié)議是建立在TCP協(xié)議基礎之上的,當瀏覽器需要從服務器獲取網(wǎng)頁數(shù)據(jù)的時候,會發(fā)出一次Http請求。Http會通過TCP建立起一個到服務器的連接通道,當本次請求需要的數(shù)據(jù)完畢后,Http會立即將TCP連接斷開,這個過程是很短的。
  所以Http連接是一種短連接,是一種無狀態(tài)的連接。所謂的無狀態(tài),是指瀏覽器每次向服務器發(fā)起請求的時候,不是通過一個連接,而是每次都建立一個新的連接。每次請求結(jié)束后,連接就關(guān)閉,相關(guān)的內(nèi)容就釋放了,所以記不住任何狀態(tài),成為無狀態(tài)連接。
HTTP之請求消息Request:
  請求行以一個方法符號開頭,以空格分開,后面跟著請求的URI和協(xié)議的版本。

Get請求例子:
  第一部分:請求行,用來說明請求類型,要訪問的資源以及所使用的HTTP版本.GET說明請求類型為GET,[/562f25980001b1b106000338.jpg]為要訪問的資源,該行的最后一部分說明使用的是HTTP1.1版本。
  第二部分:請求頭部,緊接著請求行(即第一行)之后的部分,用來說明服務器要使用的附加信息
  第三部分:空行,請求頭部后面的空行是必須的,即使第四部分的請求數(shù)據(jù)為空,也必須有空行。
  第四部分:請求數(shù)據(jù)也叫主體,可以添加任意的其他數(shù)據(jù)。

POST請求例子
  第一部分:請求行,第一行明了是post請求,以及http1.1版本。
  第二部分:請求頭部,第二行至第六行。
  第三部分:空行,第七行的空行。
  第四部分:請求數(shù)據(jù),第八行。

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

HTTP之狀態(tài)碼:
  狀態(tài)代碼有三位數(shù)字組成,第一個數(shù)字定義了響應的類別,共分五種類別:
  1xx:指示信息--表示請求已接收,繼續(xù)處理
  2xx:成功--表示請求已被成功接收、理解、接受
  3xx:重定向--要完成請求必須進行更進一步的操作
  4xx:客戶端錯誤--請求有語法錯誤或請求無法實現(xiàn)
  5xx:服務器端錯誤--服務器未能實現(xiàn)合法的請求
常見狀態(tài)碼:
  200 OK //客戶端請求成功
  400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
  401 Unauthorized //請求未經(jīng)授權(quán),這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用
  403 Forbidden //服務器收到請求,但是拒絕提供服務
  404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
  500 Internal Server Error //服務器發(fā)生不可預期的錯誤
  503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間后可能恢復正常

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容