本文希望以簡單易懂的形式解釋下這個問題,其具體的發(fā)包數(shù)據(jù)、過程等還請自行Google。純屬個人觀點,如有不妥,還請各位看官指教。
TCP協(xié)議是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,采用全雙工通信。
那為什么需要三次握手呢?請看如下的過程:
- A向B發(fā)起建立連接請求:A——>B;
- B收到A的發(fā)送信號,并且向A發(fā)送確認(rèn)信息:B——>A;
- A收到B的確認(rèn)信號,并向B發(fā)送確認(rèn)信號:A——>B。
三次握手大概就是這么個過程。
通過第一次握手,B知道A能夠發(fā)送數(shù)據(jù)。通過第二次握手,A知道B能發(fā)送數(shù)據(jù)。結(jié)合第一次握手和第二次握手,A知道B能接收數(shù)據(jù)。結(jié)合第三次握手,B知道A能夠接收數(shù)據(jù)。
至此,完成了握手過程,A知道B能收能發(fā),B知道A能收能發(fā),通信連接至此建立。三次連接是保證可靠的最小握手次數(shù),再多次握手也不能提高通信成功的概率,反而浪費(fèi)資源。
那為什么需要四次揮手呢?請看如下過程:
- A向B發(fā)起請求,表示A沒有數(shù)據(jù)要發(fā)送了:A——>B;
- B向A發(fā)送信號,確認(rèn)A的斷開請求請求:B——>A;
- B向A發(fā)送信號,請求斷開連接,表示B沒有數(shù)據(jù)要發(fā)送了:B——>A;
- A向B發(fā)送確認(rèn)信號,同意斷開:A——>B。
B收到確認(rèn)信號,斷開連接,而A在一段時間內(nèi)沒收到B的信號,表明B已經(jīng)斷開了,于是A也斷開了連接。至此,完成揮手過程。
可能有捧油會問,為什么2、3次揮手不能合在一次揮手中?那是因為此時A雖然不再發(fā)送數(shù)據(jù)了,但是還可以接收數(shù)據(jù),B可能還有數(shù)據(jù)要發(fā)送給A,所以兩次揮手不能合并為一次。
揮手次數(shù)比握手多一次,是因為握手過程,通信只需要處理連接。而揮手過程,通信需要處理數(shù)據(jù)+連接。
以上純屬個人觀點,如有不妥,還請各位看官指教。