基於TCP發送http請求建立連接與斷開連接的過程

首先說說TCP是什麼,HTTP又是什麼?

TCP:傳輸控制協議,面向連接的,可靠地,安全的,基於字節流的傳輸層協議

HTTP:超文本傳輸協議,但是這個協議是應用層傳輸協議,它是建立在TCP之上的協議

建立連接(三次握手):

                       第一次:Client----------SYN------------->Server

                       第二次:Server---------(ACK+SYN)------------------>Client

                       第三次:Client-----------ACK------------------------>Server

斷開連接(四次揮手)

                       第一次:Client--------------FIN--------------------->Server 服務器讀通道關閉

                       第二次:Server-------------ACK--------------------->Client 客戶機寫通道關閉

                       第三次:Server-------------FIN---------------------->Client 客戶機讀通道關閉

                       第四次:Client--------------ACK--------------------->Server服務器寫通道關閉

                                                    備註:

                                                         SYN(synchronous建立聯機)

                                                         ACK(acknowledgement 確認)

                                                         FIN(finish結束)


爲什麼需要三次握手呢?

             client發出的第一個連接請求報文段並沒有丟失,而是在某個網絡某個結點長時間的滯留了,以致延誤到連接釋放以後的某個時間纔到達server。本來這是一個早已失效的報文段。但server收到此失效的連接請求報文段後,就誤認爲是client再次發出的一個新的連接請求。於是就向client發出確認報文段,同意建立連接。假設不採用“三次握手”,那麼只要server發出確認,新的連接就建立了。由於現在client並沒有發出建立連接的請求,因此不會理睬server的確認,也不會向server發送數據。但server卻以爲新的運輸連接已經建立,並一直等待client發來數據。這樣,server的很多資源就白白浪費掉了。採用“三次握手”的辦法可以防止上述現象發生。例如剛纔那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連接。”。主要目的防止server端一直等待,浪費資源。


爲什麼需要四次揮手才能斷開連接

       可能會有疑問,在tcp連接握手時爲何ACK是和SYN一起發送,但是在這裏ACK卻沒有和FIN一起發送呢。原因是因爲tcp是全雙工模式接收到FIN時意味將沒有數據再發來,但是還是可以繼續發送數據。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章