TCP運(yùn)輸管理分為三個(gè)階段
建立連接
數(shù)據(jù)傳送
斷開連接
TCP的建立連接過程是采用CS模式的糟红,假設(shè)C是客戶端發(fā)起請求,S是服務(wù)端等待連接
S端的TCP進(jìn)程被動(dòng)的打開等待連接柒爸,C端的TCP進(jìn)程主動(dòng)打開事扭,發(fā)送請求
首先S的TCP服務(wù)器進(jìn)程先創(chuàng)建傳輸控制塊TCB,然后就處于LISTEN狀態(tài)今野;C的TCP客戶進(jìn)程也創(chuàng)建傳輸控制塊TCB罐农,然后向S發(fā)送請求涵亏。
SYN是TCP首部的碼元比特中的一個(gè)位,用來連接建立是的同步序號(hào)气筋,ACK是在連接時(shí)的確認(rèn)號(hào)裆悄,就是說沒有連接的時(shí)候ACK=0臂聋,當(dāng)建立連接后所有的ACK=1;當(dāng)SYN=1而ACK=0的時(shí)候表示是一個(gè)連接請求艾君。
第一次握手:首先C發(fā)送請求報(bào)文肄方,首部中的SYN=1,同時(shí)為自己選擇一個(gè)初始序號(hào)seq=x虹茶,SYN報(bào)文段不能攜帶數(shù)據(jù),但是消耗一個(gè)序列號(hào)董济,TCP客戶進(jìn)程進(jìn)入SYN-SENT(同步已發(fā)送)狀態(tài)要门。
第二次握手:S收到請求后,如果同意建立連接封豪,則向S發(fā)送確認(rèn)炒瘟,也就是響應(yīng)報(bào)文,這個(gè)時(shí)候需要SYN=1疮装,ACK=1斩个,確認(rèn)號(hào)是seq=x+1,同時(shí)也為自己選擇一個(gè)初始序號(hào)seq=y做个;這個(gè)報(bào)文也不攜帶數(shù)據(jù)滚局,但是消耗一個(gè)序列號(hào),TCP服務(wù)器進(jìn)程進(jìn)入SYN-RCVD(同步收到)狀態(tài)太闺。
第三次握手:TCP客戶進(jìn)程收到S的確認(rèn)后嘁圈,還要向S發(fā)送確認(rèn),確認(rèn)報(bào)文段的ACK=1钞澳,確認(rèn)號(hào)ack=y+1涨缚;而自己的確認(rèn)號(hào)seq=x+1;這個(gè)報(bào)文段可以攜帶數(shù)據(jù),但是如果不攜帶的話兰吟,下一個(gè)數(shù)據(jù)報(bào)的序號(hào)仍然是seq=x+1;這是TCP連接建立讽膏,C進(jìn)入ESTABLISHED(已建立連接)狀態(tài)拄丰,同時(shí)在S收到A的確認(rèn)后也進(jìn)入ESTABLISHED(已建立連接)狀態(tài)料按。
為什么要采用三次握手而不是兩次?
如果C向S放松一個(gè)請求連接報(bào)文载矿,如果這個(gè)請求報(bào)文在網(wǎng)絡(luò)中停滯了闷盔,所以超過了超時(shí)等待后,C會(huì)向S再次發(fā)送一個(gè)請求報(bào)文牡整,假設(shè)當(dāng)本次連接釋放后溺拱,停滯的請求到達(dá)了S,S則誤以為又是一次新的連接請求沐扳,于是發(fā)送一個(gè)響應(yīng)句占,若不采用三次握手,而是兩次杨拐,這個(gè)時(shí)候S就認(rèn)為已經(jīng)建立了連接凹炸,但是C并沒有數(shù)據(jù)要發(fā)送,所以白白浪費(fèi)了S的資源。