網(wǎng)絡(luò)連接與傳輸建立過程
Socket連接
Socket 以服務(wù)器 ip 和端口號創(chuàng)建一個 Socket 套接子,對TCP/IP協(xié)議進(jìn)行封裝(socket本身并不是協(xié)議,而是建立在 Http應(yīng)用層 與 TCP/UDP 傳輸層中間的橋梁);
Socket 對 TCP/IP 封裝后,并攜帶當(dāng)前客戶端的 ip 與端口號到服務(wù)器去請求連接,通過 TCP 的三次握手建立連接;
連接成功后,在服務(wù)端會單獨生成一個Socket對應(yīng)這個連接成功的客戶端,以后的通訊均以此 Socket 來進(jìn)行通訊,只要這個socket存在,就是一次鏈接
TCP 建立連接的三次握手
TCP 斷開連接的四次握手
- 客戶端向服務(wù)端發(fā)送結(jié)束請求,請求服務(wù)端關(guān)閉數(shù)據(jù)傳輸
- 服務(wù)端關(guān)閉數(shù)據(jù)傳輸后,響應(yīng)客戶端
- 服務(wù)端告訴客戶端,關(guān)閉數(shù)據(jù)傳輸
- 客戶端關(guān)閉傳輸后告訴服務(wù)端,可以斷開連接了
最后,服務(wù)端斷開連接,接著客戶端斷開連接
TCP短連接
- HTTP/1.0中,默認(rèn)使用的是短連接
client向server發(fā)起連接請求塞耕,server接到請求舌菜,然后雙方建立連接纷妆。client向server 發(fā)送消息场梆,server回應(yīng)client墅冷,然后一次讀寫就完成了,這時候雙方任何一個都可以發(fā)起close操作或油,不過一般都是client先發(fā)起 close操作寞忿。為什么呢,一般的server不會回復(fù)完client后立即關(guān)閉連接的顶岸,當(dāng)然不排除有特殊的情況腔彰。從上面的描述看,短連接一般只會在 client/server間傳遞一次讀寫操作
短連接的優(yōu)點是:管理起來比較簡單辖佣,存在的連接都是有用的連接霹抛,不需要額外的控制手段
短連接的操作步驟是:
建立連接——數(shù)據(jù)傳輸——關(guān)閉連接...建立連接——數(shù)據(jù)傳輸——關(guān)閉連接
TCP長連接
- HTTP/1.1起,默認(rèn)使用長連接卷谈,用以保持連接特性杯拐。使用長連接的HTTP協(xié)議,會在響應(yīng)頭有加入這行代碼:
Connection:keep-alive
client向server發(fā)起連接世蔗,server接受client連接藕施,雙方建立連接。Client與server完成一次讀寫之后凸郑,它們之間的連接并不會主動關(guān)閉裳食,后續(xù)的讀寫操作會繼續(xù)使用這個連接。
首先說一下TCP/IP詳解上講到的TCP避搅ぃ活功能诲祸,保活功能主要為服務(wù)器應(yīng)用提供而昨,服務(wù)器應(yīng)用希望知道客戶主機是否崩潰救氯,從而可以代表客戶使用資源。如果客戶已經(jīng)消失歌憨,使得服務(wù)器上保留一個半開放的連接着憨,而服務(wù)器又在等待來自客戶端的數(shù)據(jù),則服務(wù)器將應(yīng)遠(yuǎn)等待客戶端的數(shù)據(jù)务嫡,奔锥叮活功能就是試圖在服務(wù) 器端檢測到這種半開放的連接。
如果一個給定的連接在兩小時內(nèi)沒有任何的動作心铃,則服務(wù)器就向客戶發(fā)一個探測報文段准谚,客戶主機必須處于以下4個狀態(tài)之一:
- 客戶主機依然正常運行,并從服務(wù)器可達(dá)去扣≈危客戶的TCP響應(yīng)正常,而服務(wù)器也知道對方是正常的,服務(wù)器在兩小時后將彼纛恚活定時器復(fù)位哲戚。
- 客戶主機已經(jīng)崩潰,并且關(guān)閉或者正在重新啟動艾岂。在任何一種情況下顺少,客戶的TCP都沒有響應(yīng)。服務(wù)端將不能收到對探測的響應(yīng)澳盐,并在75秒后超時。服務(wù)器總共發(fā)送10個這樣的探測 令宿,每個間隔75秒叼耙。如果服務(wù)器沒有收到一個響應(yīng),它就認(rèn)為客戶主機已經(jīng)關(guān)閉并終止連接粒没。
- 客戶主機崩潰并已經(jīng)重新啟動筛婉。服務(wù)器將收到一個對其保活探測的響應(yīng)癞松,這個響應(yīng)是一個復(fù)位爽撒,使得服務(wù)器終止這個連接。
- 客戶機正常運行响蓉,但是服務(wù)器不可達(dá)硕勿,這種情況與2類似,TCP能發(fā)現(xiàn)的就是沒有收到探查的響應(yīng)枫甲。
長連接的操作步驟是:
建立連接——數(shù)據(jù)傳輸...(保持連接)...數(shù)據(jù)傳輸——關(guān)閉連接