最近去了解TCP協(xié)議,發(fā)現(xiàn)這是一個特別值得深思的協(xié)議。在本篇博客中,不會長篇大論的給大家介紹TCP協(xié)議特點、包頭格式以及TCP的連接和斷開等基本原理,而是會帶大家深入理解為什么要這么設(shè)計,如果不這么設(shè)計,會產(chǎn)生什么后果,希望能幫助大家對TCP協(xié)議的理解。TCP彌補了IP盡力而為服務(wù)的不足,實現(xiàn)了面向連接、高可靠性、報文按序到達、端到端流量控制。
面向連接
一提到TCP是面向連接的協(xié)議,必然是介紹其的3次握手和4次揮手,為了說明為什么需要三次握手和四次揮手,我們還是拿兩個圖來說明連接建立和斷開的過程。
為什么要三次握手呢?若兩次握手怎樣。假設(shè)客戶端發(fā)起連接請求(SYN=1,seq=client_isn),服務(wù)器端收到請求后返回消息(SYN=1,seq=server_isn,ack=client+1)連接建立。
現(xiàn)在說明為什么兩次握手不可以。若客戶端發(fā)送連接請求request1(SYN=1,seq=client_isn),這時這個請求由于網(wǎng)絡(luò)阻塞沒有及時到達服務(wù)器端,而客戶端一段時間后又發(fā)送了一個連接請求request2 (SYN=1,seq=client_isn),該request2建立了連接完成了本次通信,然后斷開連接。此時客戶端發(fā)送的第一個連接請求request1到達了服務(wù)器端,此時服務(wù)器端發(fā)現(xiàn)是一個連接請求,服務(wù)端并不知道這是由于網(wǎng)絡(luò)阻塞