基於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發出確認,新的連線就建立了。
為什麼需要四次揮手才能斷開連線
可能會有疑問,在tcp連線握手時為何ACK是和SYN一起傳送,但是在這裡ACK卻沒有和FIN一起傳送呢。原因是因為tcp是全雙工模式,接收到FIN時意味將沒有資料再發來,但是還是可以繼續傳送資料。