摘要:很多人都知道協議是基于協議創造出來的采用文本方式傳輸非二進制傳輸的應用層協議,協議是傳輸層協議,主要解決數據如何在網絡中傳輸,而應用層協議,主要解決如何包裝和規范數據。你也可以自己定義應用層協議,只不過所有配套的東西都要自己重新造輪子。
從問題切入能幫我們更好地理解晦澀難懂的概念。很多人都知道http協議是基于Tcp協議創造出來的采用文本方式傳輸(非二進制傳輸)的應用層協議,TPC/IP協議是傳輸層協議,主要解決數據如何在網絡中傳輸,而應用層協議,主要解決如何包裝和規范數據。那不經過應用層協議就不能傳遞數據了嗎,當然可以只使用(傳輸層)TCP/IP協議,但那就像你寫了一堆字,卻不按語法來寫,別人即使看到你的文章,卻完全不知道你想表達什么,應用層協議就相當于語言中的語法。
應用層協議有很多,比如HTTP(超文本傳輸協議)、FTP(文件傳輸協議)、TELNET(遠程登錄協議)、SMTP(郵件傳輸協議)等。現代瀏覽器默認都支持http協議,也有專門為http協議定制的http服務器。你也可以自己定義應用層協議,只不過所有配套的東西都要自己重新造輪子。
在TCP/IP協議中,要提供可靠的連接服務,需要采用三次握手建立一個可靠連接,為什么建立可靠連接需要三次握手?客戶端發起,服務端響應,不是兩次握手就可以建立連接了嗎?假設沒有第三次握手,客戶端發出連接請求A,由于網絡原因,服務端并沒有收到A,于是客戶端又發送了連接請求B,并建立了連接,完成通信,斷開連接。這時候,服務端突然又收到了A,于是看作是一次新的連接請求,進行第二次握手,由于不存在第三次握手,所以這時已經建立了TCP連接。但實際上客戶端并沒有發起連接,所以不會傳遞數據,服務端卻一直在等待客戶端發數據過來,那么這條連接就會變成一條死連接,造成很大的資源浪費。所以第三次握手的必要性:防止已失效的請求報文段突然又傳送到了服務端而造成連接的誤判。
斷開一個TCP連接時,需要客戶端和服務端總共發送4個包以確認連接的斷開,即四次揮手確認斷開一個連接。為什么是四次揮手呢,客戶端發起,服務端響應,再加一次前面說到的確認,三次就可以完成了呀。
TCP協議是全雙工協議,就是說雙方都可以同時向對方發送或接收數據。當有一方要關閉連接時,會發送指令告知對方,我要關閉連接了。這時對方會回一個ACK,此時一個方向的連接關閉(此時2次揮手了)。但是另一個方向仍然可以繼續傳輸數據,等到發送完了所有的數據后,會發送一個FIN段來關閉此方向上的連接,接收方發送ACK確認關閉連接(此時4次揮手了)。
最后看一下通信領域常見的全雙工、半雙工、單工概念:
TCP協議可以提供全雙工的數據流傳輸服務,亦即接收的時候可以發送,發送的時候也可以接收,每個連接都相當于兩根并行且雙向傳輸的信號線。
http 1.0是半雙工協議,遵循請求-響應模式,就是數據可以在客戶端和服務端兩個方向上傳輸,但是不能同時傳輸。它意味著在同一時刻,只有一個方向上的數據傳送,每個連接都相當于只有一根可以雙向傳輸的信號線。
http1.1也是半雙工協議,依然遵循請求-響應模式,但引入了管道機制,建立了長連接和多路復用,可先后發送多個http請求,不用等待回復,回復按順序一個一個回復。但是客戶端在未收到之前所發出所有請求的響應之前,將會阻塞后面的請求(排隊等待),比如谷歌瀏覽器最多同時允許同域名下6個并發請求,如果該6個請求一直沒有響應,將會引起后續所有請求的阻塞。
http2.0(未普及)是全雙工協議,依然遵循請求-響應模式,但客戶端發送多個請求和服務端給出多個響應的順序不受限制,這樣既避免了堵塞,又能更快獲取響應。在復用同一個TCP連接時,服務器同時(或先后)收到了A、B兩個請求,先回應A請求,但由于處理過程非常耗時,于是就發送A請求已經處理好的部分, 接著回應B請求,完成后,再發送A請求剩下的部分。
長連接,指建立一個TCP連接后,可以連續發送多個數據包,在TCP連接保持期間,如果沒有數據包發送,需要雙方發檢測包以維持此連接,一般需要自己做在線維持。 建立連接后,在斷開之前,后續每次交互數據包不需要再經過三次握手四次揮手過程。常見頭信息中Connection:keep-alive
短連接,是指通信雙方有數據交互時,就建立一個TCP連接,數據發送完成后,則斷開此TCP連接,每次交互數據都需要經過握手和揮手的繁瑣過程,一般銀行都使用短連接。常見頭信息中Connection:close
<完>
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105877.html
摘要:很多人都知道協議是基于協議創造出來的采用文本方式傳輸非二進制傳輸的應用層協議,協議是傳輸層協議,主要解決數據如何在網絡中傳輸,而應用層協議,主要解決如何包裝和規范數據。你也可以自己定義應用層協議,只不過所有配套的東西都要自己重新造輪子。 從問題切入能幫我們更好地理解晦澀難懂的概念。很多人都知道http協議是基于Tcp協議創造出來的采用文本方式傳輸(非二進制傳輸)的應用層協議,TPC/I...
摘要:三次握手和四次揮手的問題在面試中是最為常見的考點之一。上面有一個非常特殊的狀態,它是主動關閉的一方在回復完對方的揮手后進入的一個長期狀態,這個狀態標準的持續時間是分鐘,分鐘后才會進入到狀態,釋放套接字資源。 showImg(https://segmentfault.com/img/remote/1460000018918991); TCP三次握手和四次揮手的問題在面試中是最為常見的考點...
摘要:建立連接次握手次握手的目的同步連接雙方的序列號和確認號交換窗口大小信息。客戶端狀態建立連接三次握手服務端狀態第一次握手建立連接。計算規則為序列號為應答碼對方上次的首次發送時為系統隨機生成對方的無數據傳輸時或者報文數據的長度 閱讀時間:8min閱讀目標: 掌握TCP連接過程 學會計算seq、ack碼 TCP 協議是HTTP協議的重要基礎,充分理解TCP協議的連接及端口,有助于我們深...
閱讀 3129·2021-11-08 13:18
閱讀 2276·2019-08-30 15:55
閱讀 3601·2019-08-30 15:44
閱讀 3063·2019-08-30 13:07
閱讀 2773·2019-08-29 17:20
閱讀 1942·2019-08-29 13:03
閱讀 3403·2019-08-26 10:32
閱讀 3218·2019-08-26 10:15