HTTP協(xié)議—— 簡(jiǎn)單認(rèn)識(shí)TCP/IP協(xié)議
TCP/IP協(xié)議入門(一)--阮一峰
互聯(lián)網(wǎng)協(xié)議入門(二)
TCP三次握手
第一次握手:客戶端嘗試連接服務(wù)器,向服務(wù)器發(fā)送syn包(同步序列編號(hào)Synchronize Sequence Numbers)咒吐,syn=j,客戶端進(jìn)入SYN_SEND狀態(tài)等待服務(wù)器確認(rèn)
第二次握手:服務(wù)器接收客戶端syn包并確認(rèn)(ack=j+1)荷腊,同時(shí)向客戶端發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包崭参,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)
第三次握手:第三次握手:客戶端收到服務(wù)器的SYN+ACK包请琳,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢层坠,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手
TCP四次揮手
TCP的連接的拆除需要發(fā)送四個(gè)包刁笙,因此稱為四次揮手(four-way handshake)破花∏ぃ客戶端或服務(wù)器均可主動(dòng)發(fā)起揮手動(dòng)作,在socket編程中座每,任何一方執(zhí)行close()操作即可產(chǎn)生揮手操作前鹅。
其實(shí)有個(gè)問題,為什么連接的時(shí)候是三次握手峭梳,關(guān)閉的時(shí)候卻是四次揮手舰绘?
因?yàn)楫?dāng)Server端收到Client端的SYN連接請(qǐng)求報(bào)文后,可以直接發(fā)送SYN+ACK報(bào)文葱椭。其中ACK報(bào)文是用來應(yīng)答的捂寿,SYN報(bào)文是用來同步的。但是關(guān)閉連接時(shí)孵运,當(dāng)Server端收到FIN報(bào)文時(shí)秦陋,很可能并不會(huì)立即關(guān)閉SOCKET,所以只能先回復(fù)一個(gè)ACK報(bào)文治笨,告訴Client端驳概,”你發(fā)的FIN報(bào)文我收到了”。只有等到我Server端所有的報(bào)文都發(fā)送完了大磺,我才能發(fā)送FIN報(bào)文抡句,因此不能一起發(fā)送探膊。故需要四步握手杠愧。