三次握手,四次挥手的过程??为什么三握??
為什么80%的碼農都做不了架構師?>>> ??
第一次握手:建立連接時發送SYN會選擇一個初始序號(ISN),每個連接的ISN都是不同的??蛻舳税l送數據包(SYN=1,seq=x)到服務器,并進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到數據包包,必須確認客戶的SYN(ACK=1,ack=x+1),同時自己也發送一個SYN包(SYN=1,seq=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK=1(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP 連接都將被一直保持下去。
第一次揮手:主動斷開連接一方向被動斷開連接發送FIN數據包,FIN=1,seq=x,告訴被動斷開連接一方“我要跟你斷開連接了,我不會再給你發送數據了”,這是主動斷開連接方式可以接受數據的,如果一直沒有收到被動連接方的確認包,則可以重新發送這個包。此時,主動斷開連接方處于FIN_WAIT_1狀態
第二次揮手:被動連接方接收到FIN包以后,發送確認包ACK=1,ack=x+1(FIN和SYN一樣占用一個序列號),這個動作是告訴主動斷開連接方我知道你要斷開了,但是我還有數據沒有發送完,等發送完了所有的數據就進行第三次揮手,此時被動斷開連接方處于CLOSE_WAIT狀態,主動斷開連接方處于FIN_WAIT_2狀態
第三次揮手:被動斷開連接方發送FIN=1,seq=y+1包,用來停止向主動斷開連接方發送數據,也就是告訴主動斷開連接方,我的數據也發完了,我也不給你發數據了,此時被動斷開連接方處于LAST_ACK狀態,主動斷開連接方處于TIME_WAIT 狀態 第四次揮手:等過了一定時間(2MSL(報文段最大生存時間):為了保證最后ACK報文能夠到達B,防止已失效連接請求報文段出現在此連接中)過后,主動斷開連接方發送確認包ACK=1, ack=y+2,至此,四次揮手已經完成。
**TCP的三次握手過程?**為什么會采用三次握手,若采用二次握手可以嗎? 答:建立連接的過程是利用客戶服務器模式,假設主機A為客戶端,主機B為服務器端。 (1)TCP的三次握手過程:主機A向B發送連接請求;主機B對收到的主機A的報文段進行確認;主機A再次對主機B的確認進行確認。 (2)采用三次握手是為了防止失效的連接請求報文段突然又傳送到主機B,因而產生錯誤。失效的連接請求報文段是指:主機A發出的連接請求沒有收到主機B的確認,于是經過一段時間后,主機A又重新向主機B發送連接請求,且建立成功,順序完成數據傳輸??紤]這樣一種特殊情況,主機A第一次發送的連接請求并沒有丟失,而是因為網絡節點導致延遲達到主機B,主機B以為是主機A又發起的新連接,于是主機B同意連接,并向主機A發回確認,但是此時主機A根本不會理會,主機B就一直在等待主機A發送數據,導致主機B的資源浪費。 (3)采用兩次握手不行,原因就是上面說的實效的連接請求的特殊情況。
轉載于:https://my.oschina.net/134596/blog/1647016
總結
以上是生活随笔為你收集整理的三次握手,四次挥手的过程??为什么三握??的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: plsql中文乱码问题(显示问号)
- 下一篇: 事件绑定、事件监听、事件委托