計算機網絡TCP三次握手 四次揮手淺析

這幾天複習計算機網絡對TCP三次握手很迷惑,查了一大堆資料算是明白了緣由,就看成我第一篇博客的內容吧。web

首先TCP是面向鏈接的,三次握手是爲了創建鏈接以便傳輸數據。面試

爲何是三次握手呢?服務器

本質上是由於TCP的鏈接是雙向的,而四次握手的中間兩步又是能夠合併的。網絡

雙向保證鏈接的四次握手svg

A 請求鏈接——> B A 請求鏈接——> B計算機網絡

A <——確認收到 B A <——確認收到 請求鏈接 Bxml

A <——請求鏈接 B A 確認收到——> Bblog

A 確認收到——> B博客

三次握手的過程it

TCP三次握手圖解

三次握手圖解

第一次握手:

SYN=1 seq=x.SYN=1,ACK=0.表示爲請求鏈接報文,(這裏ACK=0省略) seq表示主機A向主機B協商從序號爲x發送數據報

這裏須要注意的是,A向B的鏈接未創建沒法傳送數據,因此該請求報文消耗序號最小,消耗1個序號

第二次握手

SYN=1,ACK=1,seq=y,ack=x+1。

SYN=1,ACK=1表示贊成創建A向B的鏈接,seq=y表示從序號爲y的報文段開始發送,

ack=x+1表示已收到序號x的報文段,指望收到x+1序號的數據,即已收到序號x。第一次的請求報文消耗了1個序號

ack=x+1確認了第一次報文的收到,並請求B向A的鏈接

第三次握手

SYN=1,ACK=1,seq=x+1,ack=y+1 。

seq=x+1表示本身從序號x+1開始發送,指望收到主機B序號y+1的數據

第三次報文確認了前兩次請求報文的收到。

四次揮手的過程

四次揮手圖解

四次揮手

第一次揮手

FIN=1表示請求關閉A向B的鏈接 seq=u 已發送u-1序號的數據報

第二次揮手

ACK=1,贊成關閉A向B的鏈接。seq=v,B向A發送的數據報序號爲v。ack=u+1已收到u序號數據報

此時A向B方向的鏈接已經關閉,中間保持一段時間單向B向A鏈接。

第三次揮手

FIN=1 seq=w

FIN=1,請求關閉B向A鏈接。seq=w,從序號爲w開始向A發送。

這裏ack=u+1是由於前兩次已經關閉了客戶向服務器這個方向的連接。

第四次揮手

ACK=1,seq=u+1,ack=w+1。

ACK=1,贊成關閉B向A鏈接。seq=u+1,由於A向B的鏈接已關閉,故這裏是u+1。ack=w+1,已收到序號w的報文段,指望收到w+1序號的報文段。

備註

更新一個問題,看人家說面試裏面的,爲何請求報文只佔1個序號?

答:此時鏈接未創建,沒法傳輸數據,只能攜帶請求信息,也是消耗序號最少的報文,消耗序號1。