tcp與udp都屬于網(wǎng)絡(luò)通信傳輸層的傳輸協(xié)議
TCP
舉個(gè)例子:幫助理解tcp的原理流程,比如說打電話
場景:A(發(fā)送端),B(接收端),A跟B在微信上聊天,突然A想打電話給B,想語音跟B說。
三次握手過程:
-
一次握手:
A發(fā)送信息給B:我想打電話跟你說(SYN(SEQ=x)報(bào)文),那么A就進(jìn)入了等待B回應(yīng)狀態(tài)(SYN_SEND 狀態(tài)) -
二次握手:
B收到了A發(fā)來請求打電話的信息(SYN 報(bào)文),然后B給A回信息:好,你打過來吧(SYN (SEQ=y)ACK(ACK=x+1)報(bào)文),那么B進(jìn)入了等待A打電話過來來的狀態(tài)(SYN_RECV 狀態(tài)) -
三次握手:
A得到B的同意打電話回應(yīng)(SYN 報(bào)文)后,A撥通了電話(ACK(ACK=y+1)報(bào)文),A就進(jìn)入了跟B聊天的狀態(tài)(Established狀態(tài))
三次握手過程
四次揮手:
-
一次揮手:
A跟B聊的差不多了,于是說我要掛了(釋放數(shù)據(jù)報(bào)文首部,F(xiàn)IN=1,序列號為seq=u),然后A進(jìn)入了等待回應(yīng)掛斷狀態(tài)(FIN-WAIT-1,終止等待1) -
二次揮手:
B收到了A說要掛斷的信息,于是B說:好(ACK=1,ack=u+1,序列號seq=v),這時(shí)B就看A是否真的掛斷了等待過程中(CLOSE-WAIT(關(guān)閉等待)狀態(tài)),但是B還一直在bb(即客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送了,但是服務(wù)器若發(fā)送數(shù)據(jù),客戶端依然要接受),這段時(shí)間的狀態(tài)就是CLOSE-WAIT狀態(tài)持續(xù)的時(shí)間 -
三次揮手:
A收到B的確認(rèn)信息:好(ACK=1,ack=u+1,序列號seq=v)之后,A就進(jìn)入了在聽B還在bb的狀態(tài)(FIN-WAIT-2(終止等待2)狀態(tài)),在等B一直bb(數(shù)據(jù)傳遞)完后,B就進(jìn)入了A掛掉的狀態(tài)(LAST_ACK(最后確認(rèn))狀態(tài)) -
四次揮手:
A在聽B完畢后,A不說話(發(fā)出確認(rèn)要關(guān)閉)等待B先掛斷(尊重問題哈哈哈),這時(shí)A就進(jìn)入了等待關(guān)閉狀態(tài)(TIME_WAIT(時(shí)間等待)狀態(tài),等待時(shí)間:2MSL),此時(shí)B明白了,就掛斷了電話(服務(wù)端close,服務(wù)端結(jié)束TCP連接的時(shí)間要比客戶端早一些)
四次揮手過程