(1)從 tcp 三次握手說起 -- ** tcp 協議中的疑難雜症
(2)tcp的三次握手與四次揮手(詳解+**)
(3)tcp三次握手與四次揮手
(4)讓研發人員緊張的「故障神經線」
一、相關的變數說明
seq(序列號):佔4個位元組。用來標記資料段的順序。tcp給傳送的所有資料位元組都編上序號,第乙個位元組的序號由本地隨機生生。防止被人找到規律。是資料報本身的序列號。
ack(確認號):佔4個位元組。期待收到對方下乙個報文段的第乙個資料位元組的序號。因此ack=最後乙個位元組的seq+1
ack(確認):佔1個位元位。僅當ack=1時,確認號字段才有效。ack=0表示無效
syn(同步):連線建立時用於同步序號。
當syn=1,ack=0時:表示這是乙個連線請求報文。若同意連線,則在響應報文中使用syn=1,ack=1。
因此syn=1表示這是乙個連線請求,或者連線響應報文。只有在tcp建立連線的時候才會被置為1。當握手完成後syn置為0.
fin(終止):用來釋放乙個連線。
二、三次握手**
三次握手過程
(1)客戶端主動發起連線請求,syn=1,並且自生產生隨機序列號x。
(2)服務端收到連線請求後,開啟tcp連線,並同步告知客戶端,syn=1,ack=1、
(3)客戶端收到ack後,非同步告知服務端ack,並且可以在此次ack中攜帶資料。連線建立。
問題(1):為什麼還要第三次的ack?
原因是因為兩次握手不能保證安全問題。有可能服務端存在異常導致tcp連線並未建立成功,此時客戶端直接傳送資料過來的話,會浪費網路資源,無法保證傳輸的可靠性。
但是再增加一次握手就完全沒有必要了,因為雙方都已經確認成功了,再握手就畫蛇添足了。
四次揮手**
四次揮手過程
(1)主動關閉方傳送fin
(2)被動關閉方接收到fin後傳送該fin的ack。此時服務端不再接收客戶端發來的資料。
(3)等被動關閉方的資料報被完全傳輸完畢,被動關閉方傳送fin。
(4)主動關閉方收到被動關閉方的/fin後,傳送該fin的ack。並且在等待2msl之後完全關閉自己的連線。服務端在收到這個ack後完全關閉自己的tcp連線。否則服務端將一直重複3的操作,一直詢問客戶端是否要關閉,直到收到4的ack回覆位置。
注意2,3步驟可能合為一步。當1過程的fin請求過來的時候,服務端恰好沒有資料需要傳送給客戶端,此時直接進行3步驟即可。
(1)問題a:為什麼服務端需要等到客戶端傳送了ack之後才能關閉連線?也就是為什麼要有4步驟?
回答:因為如果3後直接關閉服務端,那麼服務端回覆的fin包可能由於網路原因無法達到客戶端,導致客戶端的tcp連線一直被占用。浪費客戶端的連線資源。
(2)問題b:為什麼客戶端要等待至少2msl之後才能關閉tcp連線?不能立即關閉麼?
回答「不能。
因為4步驟傳送ack包到服務端的過程中,可能由於網路原因,導致丟包,使得服務端沒有接收到這個ack訊息,而此時客戶端的tcp連線已經關閉,服務端就會一直請求服務端得不到響應,那麼服務端上的tcp連線就會長時間得不到釋放,浪費寶貴的連線資源。而2msl(報文生存時間)是資料報請求與響應乙個來回的時間,在這個時間段內剛好能夠滿足收到服務端的響應。
假如客戶端傳送ack'後又重啟了連線,並且使用相同的埠以及位址,那麼就有可能收到服務端重發的fin請求,對新連線造成影響(新連線的syn請求過去之後,因為服務端在一直等待ack,會認為這個syn不合法,因此重置連線)
tcp ip三次握手與四次揮手
原文 所謂三次握手 three way handshake 即建立tcp連線,就是指建立乙個tcp連線時,需要客戶端和服務端總共傳送3個包以確認連線的建立。在socket程式設計中,這一過程由客戶端執行connect來觸發。1 第一次握手 client將標誌位syn置為1,隨機產生乙個值seq j,...
TCP IP三次握手 四次揮手
一 tcp ip三次握手原理 建立連線協議 三次握手 1 客戶端向伺服器端傳送連線請求包syn syn j 等待伺服器回應 2 伺服器端收到客戶端連線請求包syn syn j 後,將客戶端的請求包syn syn j 放入到自己的未連線佇列,此時伺服器需要傳送兩個包給客戶端 1.向客戶端傳送確認自己收...
TCP IP三次握手 四次揮手
我們在使用網際網路和別的 進行通訊的時候,都要依賴tcp ip協議。甚至有時候網不太好,瀏覽器會顯示當前狀態 正在與某某 握手.當網路狀態很好的時候,就會一閃而過。本文將詳細總結筆者在學習三次握手四次揮手時的各個狀態以及過程。首先,狀態圖如下。初始時,客戶端和服務端都是closed狀態。這時,客戶端...