一、三次握手
1寄悯、客戶端處于closed狀態(tài)句狼,服務(wù)端處于listen狀態(tài);
第一次握手:客戶端給服務(wù)端發(fā)送一個SYN報(bào)文热某,并指明客戶端的初始化序列號ISN(c)腻菇。此時(shí)客戶端處于SYN_Send狀態(tài)胳螟;
第二次握手:服務(wù)端收到客戶端的SYN報(bào)文之后,會以自己的SYN報(bào)文作為應(yīng)答筹吐,并且也是指定了自己的初始化序列號ISN(s)糖耸,同時(shí)會把客戶端的ISN(c)+1作為ACK的值,表示自己已經(jīng)收到了客戶端的SYN丘薛,此時(shí)服務(wù)端處于SYN_Revd狀態(tài)嘉竟;
第三次握手:客戶端收到SYN報(bào)文之后,會發(fā)送一個ACK報(bào)文洋侨,當(dāng)然也是一樣把服務(wù)端的ISN(s)+1作為ACK的值舍扰,表示已經(jīng)收到了服務(wù)端的SYN報(bào)文,此時(shí)客戶端處于establised狀態(tài)希坚。
服務(wù)端收到ACK報(bào)文之后边苹,也處于establised狀態(tài),此時(shí)裁僧,雙方已建立起了連接个束。
三次握手的作用:
1、確認(rèn)雙方的接收能力聊疲、發(fā)送能力是否正常茬底;
2、指定自己的初始化序列號获洲,為后面的可靠傳送做準(zhǔn)備阱表;
3、如果是https協(xié)議贡珊,三次握手的這個過程還會進(jìn)行數(shù)字證書的驗(yàn)證以及加密密鑰的生成等捶枢;
4、為了防止攻擊飞崖,ISN是動態(tài)生成的烂叔。
半連接隊(duì)列:
服務(wù)端第一次收到客戶端的SYN之后,就會處于SYN_REVD狀態(tài)固歪,此時(shí)雙方還沒有完全建立其連接蒜鸡,服務(wù)端會把此種狀態(tài)下的請求連接放在一個隊(duì)列里,這種就是半連接隊(duì)列
全連接隊(duì)列:
三次握手已經(jīng)完成牢裳,這種狀態(tài)下的請求連接放在全連接隊(duì)列里逢防;
第三次握手的時(shí)候是可以攜帶數(shù)據(jù)的
二、四次揮手
剛開始的時(shí)候蒲讯,客戶端和服務(wù)端都處于establised狀態(tài)忘朝,假如是客戶端先發(fā)起關(guān)閉請求,則:
第一次揮手:客戶端發(fā)送一個FIN報(bào)文判帮,報(bào)文中會指定一個序列號局嘁,此時(shí)客戶端處于FIN_WAIT1狀態(tài)溉箕;
第二次揮手:服務(wù)端收到FIN之后,會發(fā)送一個ACK報(bào)文悦昵,且把客戶端的序列號值+1作為ACK報(bào)文的序列號值肴茄,表明已經(jīng)收到了客戶端的報(bào)文了,此時(shí)服務(wù)端處于CLOSE_WAIT狀態(tài)但指;
第三次揮手:如果服務(wù)端也想斷開連接了寡痰,就和客戶端一樣,發(fā)給客戶端一個FIN報(bào)文棋凳,且指定一個序列號拦坠,此時(shí)服務(wù)端處于LAST_ACK狀態(tài);
第四次揮手:客戶端收到服務(wù)端發(fā)過來的FIN報(bào)文之后剩岳,一樣發(fā)送一個ACK確認(rèn)報(bào)文作為應(yīng)答贞滨,且把服務(wù)端的序列號值+1作為自己的ACK報(bào)文的序列號值,此時(shí)客戶端處于TIME_WAIT狀態(tài)卢肃,需要過一陣子以確保服務(wù)端收到自己的ACK報(bào)文之后才會進(jìn)入CLOSED狀態(tài);
服務(wù)端收到客戶端發(fā)過來的ACK確認(rèn)包之后就處于關(guān)閉連接了才顿,處于CLOSED狀態(tài)莫湘。
第四次揮手時(shí),客戶端會有一個TIME_WAIT狀態(tài)郑气,要確保服務(wù)端已經(jīng)收到了客戶端的ACK報(bào)文幅垮,如果沒有收到,服務(wù)端會重新發(fā)送FIN報(bào)文給客戶端尾组,客戶端再次收到FIN報(bào)文之后忙芒,就知道之前的ACK報(bào)文丟失了,然后再次發(fā)送ACK報(bào)文給服務(wù)端