tcp(傳輸控制協議)
tcp是面向連線的,在通訊前需要首先建立連線,通訊結束時需要釋放連線。
tcp特點
tcp提供可靠交付服務:tcp傳送的資料無重複,無丟失,無錯誤,與傳送端順序一致tcp的識別符號tcp有7種識別符號,用於表示tcp報文的性質。它們的值只能為0或1tcp是面向位元組流的:tcp以位元組為單位
tcp提供全雙工通訊:tcp的兩端既可作為傳送端也可作為接收端
一條tcp連線的兩端只能有兩個端點:tcp只能提供點到點的通訊
這裡主要介紹常見的幾種識別符號
*urg=1
當urg=1時,表示本資料報的資料部分包涵緊急資訊,此時緊急指標有效ack=1
ack被置為1後確認號字段才有效rst=1此外,tcp規定,在連線建立後傳送的所有報文段都必須把ack置1
當該值為1時,表示當前tcp連線出現嚴重問題,必須釋放重新連線syn=1
syn在建立連線時使用fin=1當syn=1,ack=0時,表示當前報文段是乙個連線請求報文
當syn=1,ack=1時,表示當前報文段是乙個同意建立連線的應答報文
fin=1,表示此報文段是乙個釋放連線的請求報文起初,服務端和客戶端都為closed狀態,在通訊開始前,客戶端和服務端都要建立各自的傳輸控制塊(tcb)。
伺服器建立完tcb後便進入listen狀態,此時準備接受客戶端傳送來的鏈結請求。
第一次握手
客戶端向服務端傳送請求連線報文,該報文段的頭部中syn=1,ack=0,seq=x。請求傳送後,客戶端便進入syn-sent狀態。
syn=1, ack=0表示該報文為請求連線報文第二次握手服務端收到連線請求報文後,如果同意連線,則會傳送乙個應答:syn=1, ack=1, seq=y,ack=x+1,該應答報文傳送完成後,服務端便進入syn-rcvd狀態seq=x,表示本次tcp通訊的位元組流的初始序號
tcp規定syn=1的報文段不能有資料部分,但是要消耗掉乙個序號
syn=1, ack=1,表示該報文為同意連線的應答報文第三次握手當客戶端接收到同意連線的應答報文時,還需向服務端傳送乙個確認報文段,表示:服務端傳送過來的同意連線的應答報文已成功接收到。seq=y,表示服務端作為傳送者時,傳送位元組流的初始序號
ack=x+1,表示服務端希望下乙個資料報傳送序號是從x+1開始的位元組流
該報文段的頭部為:ack=1,seq=x+1,ack=y+1答案是不行客戶端傳送完這個報文段後,便進入了established狀態,服務端收到這個應答報文後,也進入established狀態,此時整個連線建立完成。
三次握手的目的是:防止實效的請求連線報文段被服務端接收,從而產生錯誤
如果連線只建立兩次握手,客戶端並無大的改變,仍然需要獲得服務端的應答報文後進入established狀態,而此時,服務端在接收到請求連線報文後就進入established狀態;
如果網路堵塞,客戶端傳送的請求連線報文遲遲無法到達服務端,客戶端請求超時就會重新傳送連線請求,此時,如果服務端正確的接受了該次連線請求,並正確應答,雙發便開始通訊,接收通訊時釋放連線;
如果此時那個實效的連線請求到達了服務端,由於只有兩次握手,服務端接收到請求連線報文後就進入established狀態,等待客戶端傳送資料,或者主動傳送資料,但是此時,客戶端早已進入closed狀態,服務端就會一直等待下去,造成服務端連線資源的浪費。
tcp連線是雙向的,其釋放連線需要四步 。
在四次揮手中,前兩次揮手用於斷開乙個方向的連線,後兩次揮手用於斷開另乙個方向的連線
第一次揮手
fin=1; 表示該報文段是乙個鏈結釋放請求第二次揮手b收到a的連線釋放請求後,會通知相應的應用程式,告訴它a向b方向的鏈結已經釋放,此時b進入close-wait狀態,並向a傳送鏈結釋放的應答,其報文頭包含:ack=1,seq=v,ack=u+1seq=u; 表示a向b傳送的最後乙個位元組序號為u-1
ack=1;除tcp鏈結請求報文外,tcp通訊過程中所有的資料報的ack都為1,表示應答第二次揮手完成後,a到b方向的鏈結已經釋放,b不會再接受資料,a也不會再向b傳送資料;但是b向a方向的鏈結仍然存在,b可以繼續向a傳送資料seq=v;表示b向a傳送的最後乙個位元組序號為v-1
ack=u+1;表示希望收到從第u+1個位元組開始的報文段,並已經成功接收前u個位元組
a收到該應答,便進入fin-wait-2狀態,等待b傳送連線釋放請求
* 第三次揮手*
報文頭中的識別符號含義同上第四次揮手a收到釋放請求報文後,向b傳送確認應答,此時,a進入time-wait狀態,該狀態會持續2msl時間,若該時間段內,b沒有重新傳送請求的話,a便進入closed狀態,撤銷tcb。當b受到確認應答後,也進入closed狀態,撤銷tcb目的: 為了確保b收到a的確認應答
如果當a傳送完確認應答之後,直接進入closed狀態,如果該應答丟失,b等待超時,就會重新傳送鏈結釋放請求,但是此時a已經關閉,不會作出任何響應,因此b永遠無法正確關閉。
計算機基礎知識 計算機基礎知識彙總
計算機專業的那六大件 組成原理,作業系統,資料庫,編譯原理,計算機網路,資料結構,其次還得加上分布式的基礎知識,因為現在的系統都變成分布式的了。如果你是做應用層開發的,那幾門課程中的有些內容和日常工作關聯度不大,我挑那些最重要的來說一說,也算是乙個最小集合吧!1,計算機組成原理 如果你不是做作業系統...
計算機基礎知識 關於計算機的基礎知識
一 計算機發展 世界計算機 1 第一台計算機 eniac,1946年,美國研製的世界上第一台計算機,開闢了計算機技術的新紀元。2 計算機之父 馮 諾依曼參與eniac研究,提出計算機的二進位制 五大組成部分 程式控制。3 計算機發展階段 第一代電子管計算機 1946 1958年。第二代電晶體計算機 ...
計算機基礎知識
計算機5大組成單元 輸入單元 輸出單元 cpu內部的控制單元 算術邏輯單元 記憶體。單有cpu是無法運作計算機的,所以計算機還需要其他的介面裝置才能夠實際執行。很顯然,主機板是必不可少的,因為主機板負責把所有的裝置連線起來,讓所有的裝置能夠進行協調通訊。而主機板上面最重要的元件就是主板晶元組了!這個...