首頁>Club>
是不是可以這樣理解:TCP連結肯定會三次握手,而http協議是建立在TCP協議之上的,所以肯定會進行三次握手?
3
回覆列表
  • 1 # 江覓

    TCP協議三次握手過程分析

    TCP(Transmission Control Protocol) 傳輸控制協議

    TCP是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立一個連線:

    位碼即tcp標誌位,有6種標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)

    Sequence number(順序號碼) Acknowledge number(確認號碼)

    第一次握手:主機A傳送位碼為syn=1,隨機產生seq number=1234567的資料包到伺服器,主機B由SYN=1知道,A要求建立聯機;

    第二次握手:主機B收到請求後要確認聯機資訊,向A傳送ack number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=7654321的包

    第三次握手:主機A收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後確認seq值與ack=1則連線建立成功。

    完成三次握手,主機A與主機B開始傳送資料。

    在TCP/IP協議中,TCP協議提供可靠的連線服務,採用三次握手建立一個連線。

    第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;

    第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也傳送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態; 第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=k+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。 完成三次握手,客戶端與伺服器開始傳送資料.

  • 2 # JohsonMuler

    TCP/IP是一種籠統的稱呼,實際上是兩種不同層次的協議。

    網路通訊拓撲結構包含8層(由於個人疏忽,這句認真講是錯誤的。更正為:OSI/RM參考模型為七層,因為過於複雜/龐大,引入了現在更為常用的TCP/IP四層模型),IP屬於網路層協議(不同於電腦Ip),TCP屬於傳輸層協議(UDP也在這層),TCP/IP 構成了現代網路通訊的基礎。

    TCP 建立連線需要"三次握手"的過程,是為了保證連線的安全可靠性(實際情況可能不一定),所以說TCP 是可靠連線。

    為什麼需要三次而不是兩次?如果是兩次會發生什麼?舉個栗子,客戶端一次請求因為各種原因(如網路延遲),隔了很長時間才傳送到伺服器,伺服器一看,咦,生意上門!馬上給個回覆:可以招呼!然後滿懷期待的等客戶端傳送資訊。而實際上客戶端早已認為這次請求已失效,根本就不想理服務端了,不再發送有效資訊給服務端。但服務端此時已確認連線建立,只能苦苦等訊息。這樣子服務端資源就被無情的佔用了,多了可能導致服務端過載之類的情況。

    回到問題。HTTP協議實際屬於應用層協議,也就是說是基於TCP 的,所以每次完整的HTTP請求都會有TCP的"三次握手"用來建立連線。另外,連線結束後也會由一端請求終止連線,也就是TCP的"四次揮手"。

    回到電腦旁。。。

    既然感覺自己用心了,那就再用點心好好補充一下。下面是HTTP一次請求的建立到終止(瀏覽器一次網頁請求)。

    三次握手:

    可以看到,在HTTP請求之前有三次TCP的連線建立過程,這就是所謂的"三次握手"。

    客戶端請求建立連線,SYN位--置1,Seq=0

    服務端收到請求,允許建立連線,併發送"通知"給客戶端,SYN位--置1、ACK位--置1,Seq=0客戶端收到服務端響應,返回訊息給服務端,ACK位--置1

    四次揮手:

    請求端(可能是客戶端也可能是伺服器,這裡是服務端發起)傳送終止訊號,FIN位(連線中斷位)--置1、ACK位(此處是應答標識,不是Ack。一個是響應標識,一個是應答碼)--置1。Seq=19815,ACK=443

    響應端收到訊號,先返回一條資訊(可以理解為:我收到你的分手訊息,但是我可能還有點事),ACK位--置1。Seq=443,Ack=19816(可以看到接收方的Seq為請求方的Ack,接收方的Ack為請求方Seq+1)

    響應端覺得自己也沒啥留戀的了!也傳送終止訊號,FIN位--置1、ACK位--置1。Seq=443、Ack=19816

    請求端收到響應端訊號,返回訊息。ACK位--置1。Seq=19816、Ack=444

    再來解釋一下前面說的(此處是應答標識,不是Ack。一個是響應標識,一個是應答碼)

    標識位(FIN、ACK)以紅色方框與箭頭標識,應答碼(Ack)以紅色圓框標識。

    這樣費大把勁說一下發現對自己的知識鞏固也是有效果的,哈哈哈哈,所以說程式設計師要寫技術部落格,作為菜鳥也要往這方面發展。

    來這個看看吧:http://www.techeffic.com:5193/article/ff808081598c94b201598c94b2410000

  • 3 # 11yueyu

    感覺之前的兩個答案說的太詳細了。。。

    http是應用層協議,TCP是傳輸層協議,上層協議是不關心下層協議的執行模式和方法的,應該這麼理解:http協議本身是不考慮三次握手的具體問題,但是用於支援http的下層協議TCP才完成3次握手的具體工作。

    關於計算機網路的推薦:computer network a top-down approach,這本書適合學習

  • 4 # 老七玉

    首先明確結果,有關係,需要3次握手。

    tcp 和 http 都是通訊協議,只是在網路的層級不一樣, http 是要對 tcp 加一層封裝。

    http 屬於應用層協議,tcp屬於傳輸層協議,訊息在傳輸時,從上層的應用層到傳輸層,到網路層,到鏈路層,資料每過一層,就新增一層封裝。

    htt

  • 5 # Java面試那些事兒

    【面試題23解析-Java Socket與TCP IP協議棧】

    【你真的懂瀏覽器嗎?來一起揭秘它背後的秘密】

  • 6 # 咖啡不加鹽0616

    三次握手和http協議沒有任何關係

    哈哈,懂行的大神先彆著急噴我,容我慢慢道來

    http協議是tcp/ip協議棧中應用層協議,而三次握手是tcp協議,也就是協議棧中的傳輸層協議,所以這兩個協議根本不在一層

    但是目前大多數的http協議都是建立在tcp三次握手建立的連結上的,實際上http協議完全可以不依靠tcp協議,只要能保證傳輸層資料穩定傳輸即可,像quic協議就是一種新的傳輸協議,其傳輸層使用的就是udp,相比於需要三次握手才能創立連線的tcp協議來說,udp不需要握手,而quic也只是在創立連線時握手一次,大大提升了效率

    總而言之,目前大多數的http協議都依託於tcp創立的連線,這並不是必須的,而只是因為tcp可以提供穩定的傳輸連線而已,如果還有不明白,推薦下載一款名叫wireshark的抓包軟體,在電腦上一抓便知

  • 7 # 愛答問題的小星星

    首先要知道的是三次握手是一個動作,它發生在傳輸層,通常是TCP協議為了建立可靠的傳輸而進行三次握手,HTTP是屬於應層協議,HTTP層應用資料的傳輸是建立在TCP協議的三次握手之上,所以要回答這個問題就要了解TCP協議,HTTP協議,三次握手等基本概念或是意義:

    相關知識:

    TCP(Transmission Control Protocol 傳輸控制協議):TCP是位於OSI的傳輸層,TCP是一種面向連線的可靠傳輸協議,傳輸層位於應用層(HTTP)和網路層之間(TCP),傳輸層主要是提供端到端的通訊服務,它是透過埠號來定址將資料包傳給指定的應用程式(像微信,酷狗音樂)。HTTP(HyperText Transfer Protoco,超文字傳輸協議):http協議位於OSI模型的應用層,是一種最常用的網際網路協議,是程式設計師最直接操作的協議,透過應用層的HTTP協議我們可以向伺服器請求我們所需要的資料,資料只有經過應用層的處理才變得有意義。三次握手:三次握手是TCP協議特有的,其目的是為了建立一種可靠的傳輸通訊機制,面向連線就是因為三次握手,不像UDP協議儘自己的所能將資料送達(有點不負責的感覺),TCP透過三次握手,序號確認,視窗大小等擁塞機制來建立可靠的資料傳輸。

    TCP的三次握手

    第一次握手(SYN=1):客戶端向服務端發起連線請求,傳送一個序號為seq=x的包傳送給伺服器,傳送完資料後,客戶端進入SYN_SEND的狀態;第二次握手(SYN=1,ACK=1):服務端對客戶端的包進行確認,ack=x+1,表明前面客戶端傳送給服務端的序號為x的包已經收到,同時發給客戶端一個序號seq=y的資料包,傳送完後服務端進入SYN_RCVD狀態。第三次握手(ACK=1):客戶端對服務端傳送的包進行確認,ack=y+1,表明序號為y的包已經成功收到,傳送完後,客戶端進入ESTABILISHED狀態;

    三次握手建立安全的通訊通道後,應用層就可以傳送資料,資料經過HTTP協議的封裝交給TCP層,TCP對HTTP層的資料進行TCP封裝,交給下一層,這樣資料就可以傳送給客戶端。

    抓包驗證

    綜上:HTTP的資料傳輸是建立在TCP的三次握手之上,而TCP和HTTP是一種通訊協議,透過三次握手來建立面向連線的可靠的通訊。

  • 8 # 程式碼飼養員天齊

    是的。正好藉此機會梳理下TCP/IP協議的資料傳輸流程:

    首先,說明一下HTTP協議和TCP協議的關係。如下圖所示:

    HTTP協議位於應用層,TCP協議位於傳輸層,二者是上下層的關係。上層資料的傳輸需要依賴於下層連線的建立,而TCP連線建立時首先進行三次握手,三次握手成功後,方可進行資料通訊,上層協議才能夠正常進行。

    如上圖所示,端到端的資料傳輸時,在上層組裝使用者資料,經過傳輸層、網路層和網路介面層的層層封裝,最終是經物理鏈路傳輸過去,然後再經過層層的解封裝,最終獲取實際的使用者資料。我們在http開發過程中一般是不會關心底層的資料傳輸的。可能當我們存在疑惑的時候會查詢一些資料,搞清楚它們之間的關係。

  • 中秋節和大豐收的關聯?
  • 你相信“人工智慧威脅論”嗎?