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