第一次握手:客戶端發送SYN包(syn=x)到服務器,並進入SYN_SEND狀態,等待服務器確認;(報文段中不包含應用層數據)服務器
第二次握手:服務器收到SYN包,必須確認客戶的SYN(ack=x+1),同時本身也發送一個SYN包(syn=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;(報文段中不包含應用層數據)cdn
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。(能夠在報文段負載中攜帶客戶到服務器的數據)blog
理想狀態下,TCP鏈接一旦創建,在通訊雙方中的任何一方主動關閉鏈接以前,TCP 鏈接都將被一直保持下去。it
第一次揮手:主動關閉方發送一個FIN,並進入FIN_WAIT_1狀態。此階段關閉主動方到被動關閉方的數據傳送,代表本身再也不向被動方傳送數據(固然,在FIN包以前發送出去的數據,若是沒有收到對應的ACK確認報文,主動關閉方依然會重發這些數據),可是,此時主動關閉方還能夠接受數據。io
第二次揮手:被動關閉方收到FIN包後,發送一個ACK給對方,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號),被動關閉方進入CLOSN_WAIT狀態,接收到ACK的主動關閉方進入FIN_WAIT_2狀態。class
第三次揮手:被動關閉方發送一個FIN,並進入LAST_ACK狀態。用來關閉被動關閉方到主動關閉方的數據傳送,代表再也不發送數據。lazyload
第四次揮手:主動關閉方收到FIN後,發送一個ACK給被動關閉方,確認序號爲收到序號+1,並進入TIME_WAIT狀態(等待的時間與具體實現有關),通過等待,鏈接正式關閉,至此,完成四次揮手。im