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

2021-07-25 07:47:50 字數 1441 閱讀 8086

首先說說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時意味將沒有資料再發來,但是還是可以繼續傳送資料。

python 傳送http請求

測試用cgi,名字為test.py,放在apache的cgi bin目錄下 usr bin python import cgi def main print content type text html n form cgi.fieldstorage if form.has key servicec...

PHP 傳送HTTP請求

file get contents版本 傳送post請求 param string url 請求位址 param array post data post鍵值對資料 return string function send post url,post data 使用如下 post data array...

後台傳送Http請求

get方式傳送請求 建立http請求 指定請求型別 接收伺服器響應結果 post傳送請求 傳送請求 指定請求型別 將要post給伺服器的資料寫入請求建立的流中 接收伺服器響應結果 httpwebrequest不能直接通過new來建立,只能通過webrequest.create url 的方式來獲得。...