web----tcp三次握手
1、首先為什么需要握手
首先我們看一下TCP報文段的結(jié)構(gòu)
TCP報文段中的窗口這16位字段部分,這里窗口的作用就是為了實現(xiàn)流量的控制,為什么會有流量的控制的引入???它是這樣來的:若是發(fā)送方發(fā)送數(shù)據(jù)的速度大于了接收方應用程序取數(shù)據(jù)的速度(假設(shè)數(shù)據(jù)傳輸過程不擁塞)那么,接收方就會出現(xiàn)失貞的現(xiàn)象,也就是把數(shù)據(jù)覆蓋了,所以數(shù)據(jù)的發(fā)送就要得到控制,就引入了窗口這16位。怎么引入的??
發(fā)送方和接收方都有一個緩存區(qū)(用來接收從網(wǎng)絡(luò)傳來的數(shù)據(jù),并提交給應用程序),對于接收方來說,它要維護兩個變量值,一個是應用程序從緩存讀出去的數(shù)據(jù)(out來表示);另一個是從網(wǎng)絡(luò)接收的數(shù)據(jù)(in來表示),那么在接收方一個緩存里面剩余的空間就是Buffer-(in - out) = window(假設(shè)Buffer表示緩存的數(shù)量個數(shù),in - out 表示應用程序沒讀的個數(shù),也就是緩存被占用的個數(shù),總的減去占用的就是可以利用的空間的個數(shù)用window來表示),那么這個window就是窗口所要寫入的值,接受方會把這個值傳遞給發(fā)送方表示我還有多少空間可以利用。
同樣發(fā)送方也會有一個緩存,同樣要維持兩個變量值:一個是已經(jīng)發(fā)送的數(shù)據(jù)個數(shù)(send);另一個是已經(jīng)得到確認的數(shù)據(jù)個數(shù)(acked),那么send - acked就表示已經(jīng)發(fā)送出去了,但是還沒有得到確認的數(shù)據(jù)的個數(shù),換句話就是正在傳輸?shù)臄?shù)據(jù)(這樣理解好點,但是有點不對),那么要讓接收方緩存數(shù)據(jù)不被覆蓋,那么正在發(fā)送的數(shù)據(jù)要小于接收方的窗口(send - acked < window)。
在簡單說一下三次握手的過程:
第一次,客戶機發(fā)送TCP短報文。
第二次,服務器發(fā)送應答,并建立緩存和變量。
第三次,客戶機發(fā)送應答,并建立緩存和變量。
注意也就是在三次握手時就建立了緩存,那么也就是說,A與B要通信,兩者之間必須先約定好一些參數(shù),比如這里的緩存,那么依據(jù)上面的理論來說,建立緩存的目的就是為了避免不可靠的傳輸數(shù)據(jù)(也就是為了避免數(shù)據(jù)被覆蓋),所以在傳輸數(shù)據(jù)之前,兩者之間先做一些約定,換句話就是在做交易時先談好地點和時間,在做交易。
那么,總的來說,所謂的鏈接就是為了分配內(nèi)存等資源,然后避免不可靠的傳輸,以免污了TCP可靠傳輸?shù)拿^!!!
2、為什么需要握手3次
TCP的三次握手最主要是防止已過期的連接再次傳到被連接的主機。 如果采用兩次的話,會出現(xiàn)下面這種情況。?比如是A機要連到B機,結(jié)果發(fā)送的連接信息由于某種原因沒有到達B機; 于是,A機又發(fā)了一次,結(jié)果這次B收到了,于是就發(fā)信息回來,兩機就連接。 傳完東西后,斷開。 結(jié)果這時候,原先沒有到達的連接信息突然又傳到了B機,于是B機發(fā)信息給A,然后B機就以為和A連上了,這個時候B機就在等待A傳東西過去。 2. 三次握手改成僅需要兩次 握手,死鎖是可能發(fā)生 考慮計算機A和B之間的通信,假定B給A發(fā)送一個連接請求分組,A收到了這個分組,并發(fā)送了確認應答分組。按照兩次握手的協(xié)定,A認為連接已經(jīng)成功地建立了,可以開始發(fā)送數(shù)據(jù)分組。可是,B在A的應答分組在傳輸中被丟失的情況下,將不知道A是否已準備好,不知道A建議什么樣的序列號,B甚至懷疑A是否收到自己的連接請求分組。在這種情況下,B認為連接還未建立成功,將忽略A發(fā)來的任何數(shù)據(jù)分組,只等待連接確認應答分組。這樣就形成了死鎖
?
TCP中的seq
TCP連接中傳送的字節(jié)流中的每個字節(jié)都按順序編號,第一個字節(jié)的編號由本地隨機產(chǎn)生
seq其實就是這個報文段中的第一個字節(jié)的數(shù)據(jù)編號。
例如,一段報文的序號字段值是 200 ,而攜帶的數(shù)據(jù)共有100字段,顯然下一個報文段(如果還有的話)的數(shù)據(jù)序號應該從300開始;
[200,300)長為100!!!
?
轉(zhuǎn)載于:https://www.cnblogs.com/yanxiaoge/p/11565944.html
總結(jié)
以上是生活随笔為你收集整理的web----tcp三次握手的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用视觉信息,为什么能把移动机器人的空间
- 下一篇: CmakeLists关于指定路径加载Op