第三次握手为什么没有序列号_图解TCP三次握手与四次分手
TCP三次握手和四次揮手不管是在開(kāi)發(fā)還是面試中都是一個(gè)非常重要的知識(shí)點(diǎn),它是我們優(yōu)化web程序性能的基礎(chǔ)。但是大部分教材都對(duì)這部分解釋的比較抽象,本文我們就利用wireshark來(lái)抓包以真正體會(huì)整個(gè)流程的細(xì)節(jié)。
三次握手
根據(jù)下面這幅圖我們來(lái)看一下TCP三次握手。p.s: 每個(gè)箭頭代表一次握手。
第一次握手
client發(fā)送一個(gè)SYN(J)包給server,然后等待server的ACK回復(fù),進(jìn)入SYN-SENT狀態(tài)。p.s: SYN為synchronize的縮寫,ACK為acknowledgment的縮寫。
第二次握手
server接收到SYN(seq=J)包后就返回一個(gè)ACK(J+1)包以及一個(gè)自己的**SYN(K)**包,然后等待client的ACK回復(fù),server進(jìn)入SYN-RECIVED狀態(tài)。
第三次握手
client接收到server發(fā)回的ACK(J+1)包后,進(jìn)入ESTABLISHED狀態(tài)。然后根據(jù)server發(fā)來(lái)的SYN(K)包,返回給等待中的server一個(gè)ACK(K+1)包。等待中的server收到ACK回復(fù),也把自己的狀態(tài)設(shè)置為ESTABLISHED。到此TCP三次握手完成,client與server可以正常進(jìn)行通信了。
為什么要進(jìn)行三次握手
我們來(lái)看一下為什么需要進(jìn)行三次握手,兩次握手難道不行么?這里我們用一個(gè)生活中的具體例子來(lái)解釋就很好理解了。我們可以將三次握手中的客戶端和服務(wù)器之間的握手過(guò)程比喻成A和B通信的過(guò)程:
- 在第一次通信過(guò)程中,A向B發(fā)送信息之后,B收到信息后可以確認(rèn)自己的收信能力和A的發(fā)信能力沒(méi)有問(wèn)題。
- 在第二次通信中,B向A發(fā)送信息之后,A可以確認(rèn)自己的發(fā)信能力和B的收信能力沒(méi)有問(wèn)題,但是B不知道自己的發(fā)信能力到底如何,所以就需要第三次通信。
- 在第三次通信中,A向B發(fā)送信息之后,B就可以確認(rèn)自己的發(fā)信能力沒(méi)有問(wèn)題。
上面分析還不夠形象,很容易忘記,下面我們利用wireshark來(lái)證明一下上面的分析過(guò)程。從下面的的輸出就可以很容易看出來(lái),必須要經(jīng)過(guò)前面的三次tcp請(qǐng)求才會(huì)有起一次http請(qǐng)求。
第一次請(qǐng)求客戶端發(fā)送一個(gè)SYN包,序列號(hào)是0。
第二次請(qǐng)求服務(wù)器會(huì)發(fā)送一個(gè)SYN和一個(gè)ACK包,序列號(hào)是0,ack號(hào)是1。
第三次本地客戶端請(qǐng)求會(huì)發(fā)送一個(gè)ACK包,序列號(hào)是1,ack號(hào)是1來(lái)回復(fù)服務(wù)器。
四次揮手
以下面這張圖為例,我們來(lái)分析一下TCP四次揮手的過(guò)程。
第一次揮手
client發(fā)送一個(gè)FIN(M)包,此時(shí)client進(jìn)入FIN-WAIT-1狀態(tài),這表明client已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送了。
第二次揮手
server收到了client發(fā)來(lái)的FIN(M)包后,向client發(fā)回一個(gè)ACK(M+1)包,此時(shí)server進(jìn)入CLOSE-WAIT狀態(tài),client進(jìn)入FIN-WAIT-2狀態(tài)。
第三次揮手
server向client發(fā)送FIN(N)包,請(qǐng)求關(guān)閉連接,同時(shí)server進(jìn)入LAST-ACK狀態(tài)。
第四次揮手
client收到server發(fā)送的FIN(N)包,進(jìn)入TIME-WAIT狀態(tài)。向server發(fā)送**ACK(N+1)**包,server收到client的ACK(N+1)包以后,進(jìn)入CLOSE狀態(tài);client等待一段時(shí)間還沒(méi)有得到回復(fù)后判斷server已正式關(guān)閉,進(jìn)入CLOSE狀態(tài)。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的第三次握手为什么没有序列号_图解TCP三次握手与四次分手的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 天正建筑lisp编程接口_编程思想|面向
- 下一篇: rstudio 保存_Rstudio学习