首先syn這個標誌位是用於發起tcp連線的,所以第一次握手,a-》b的時候syn=1,同時第二次握手b-》a的時候,因為要接受其tcp連線,所以其syn也=1.
也就是前兩次握手 syn都=1
然後就可以討論下seq(資料序號)和ack(確認序號)這兩個概念
seq是指 當前 資料報在整個資料報中的位置
ack是指 希望下個資料發過來的首資料的位置
比如0-700的資料接收完了,下乙個想接受的是701開始的資料,所以這時候ack就為701
然後再詳細說下tcp3次握手中他們的變化
首先是第一次握手a-》b,因為是第一次握手,所以 當前資料報 在 整個資料報的位置為 0
所以此時seq=0
又因為對方沒有傳過任何資料,所以期望對方傳的資料報首位也是在0的
所以此時ack也=0
然後是第二次握手b-》a,因為這是b第一次傳送資料,所以傳送的資料和上面第一次傳送資料中所期望的一樣,首位資料位為 0
所以此時seq=0
又因為a已經發過一次seq=0的資料了,所以b期望a傳送接下來的資訊是從位置1開始的
所以此時ack=1
然後是第三次握手a-》b,如上面第二次b所期待的一樣,這次傳送的資訊是從第1位開始的 所以
seq=1
又同時上次b傳送過0位置開始的資料報了,所以期待下次的傳送資料的位置是1
所以ack=1
到這裡 tcp的3次握手就完成了
但為什麼tcp的連線需要的是3次握手呢?
因為本質上,雙方都需要確定乙個資訊:對方能收到我的訊息
所以三次握手就分別有任務了
第一次握手,a傳送給b,a想要知道b能不能收到自己的訊息,所以這時候需要b乙個回覆,這就是第二次握手的意義——讓a知道了b能收到他的訊息
第二次握手,b傳送給a,是為了回應a告訴他自己(b)可以收到a的訊息
但與此同時,b也要確認a能收到自己傳送的訊息,所以需要乙個回覆,這就是第三次握手的意義
第三次握手,a傳送給b,這時候發過去b一但收到,雙方都知道自己和對方的通訊莫得問題了,於是就可以開始傳資料了
所以一般下乙個資料報就是含有資料的資料報了
這時候再說下tcp的4次揮手
因為一般來說 tcp連線在不斷傳輸資料,一但有其中一方要發起斷開連線,雙方也都有要確認的事——
對方都沒有資料需要傳了
同時需要知道一點,tcp中是利用fin 這個終止標誌位(就如發起連線時的syn一樣)來標識乙個斷開連線的請求的
這時候就可以開始說4次揮手的過程了
首先是其中一方,稱為主動方,主動發起了斷開連線的請求a-》b,
這是第一次揮手,其fin=1,seq=x,ack=y(代表任意)
這時候有可能被動方還有資料要傳送,所以下一次揮手不能直接傳送fin=1來斷開連線,這也是和握手之間的區別
但是同時第二次揮手也要發出「我知道你要斷開連線了,讓我先傳了這個資料報」
所以第二次揮手,b-》a,此時因為b還有資料要傳,傳的開始的位置是第一次揮手中ack的值,所以此時seq=y
同時,所以ack要等於第一次揮手其資料報位置seq+1的值,也就是x+1
然後就開始了第三次揮手,這時候終於傳完了資料,b-》a再發了乙個資料,並且fin標識=1,代表b也完事了,同時發乙個檔期資料位置seq=z ,這時候這個z是第二次揮手時候資料報位置y加上第二次揮手傳輸資料的長度=z,因為不知道資料長度,所以這裡也只能用z來表示。同時ack=第一次揮手的時候,a的當前資料報位置x,因為b已經知道a要斷連了,所以不期待更新的資料報了,所以ack也就只到x為止了。
然後就是a-》b的第四次揮手,讓b知道a也收到了你的fin結束訊息,a也不期待有下乙個新的b資料報了,所以ack也不動了,設定為了第三次揮手時b傳送的資料報位置z了,同時自己的seq也還是x,沒有新的資料所以不變了
這就是對tcp3次握手和4次揮手的理解
TCP 3次握手和4次揮手
3次握手 3次握手指的是tcp 建立連線 階段 1.client service syn sequence number a 2.client service syn ack sequence number b acknowledge number a 1 3.client service ack ...
TCP3次握手與4次揮手
3次握手過程狀態 listen 這個也是非常容易理解的乙個狀態,表示伺服器端的某個socket處於監聽狀態,可以接受連線了。syn sent 當客戶端socket執行connect連線時,它首先傳送syn報文,因此也隨即它會進入到了syn sent狀態,並等待服務端的傳送三次握手中的第2個報文。sy...
TCP 3次握手4次揮手 複習
學習自 握手syn syn ack ack未連線佇列 服務端維護乙個未連線佇列,當客戶端發來ack時,伺服器會入佇列乙個相應的標識,那個標識是已接收ack狀態,然後會發syn ack,當客戶端再次傳送ack後,出佇列那個相應的標識,正式建立連線 為何要3次握手?假如客戶端傳送syn,但是莫名滯留了,...