最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

高效管理http連接的方法

 更新時(shí)間:2017年12月19日 10:07:45   作者:kingszelda  
下面小編就為大家分享一篇高效管理http連接的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

1.Http連接基礎(chǔ)

Http協(xié)議承載了互聯(lián)網(wǎng)上的主要流量,然而說到傳輸,還要回歸到最基本的網(wǎng)絡(luò)分層模型TCP/IP。TCP/IP是全球計(jì)算機(jī)及網(wǎng)絡(luò)設(shè)備都在使用的一種常用的分組交互網(wǎng)絡(luò)分層協(xié)議集。客戶端可以打開一條TCP/IP連接,與世界上的任何服務(wù)器進(jìn)行數(shù)據(jù)交換,并且交換的數(shù)據(jù)永遠(yuǎn)不會(huì)丟失,受損或失序。

下面是常見的TCP/IP分層協(xié)議,分為安全與非安全版本。

由圖可知,HTTP的整個(gè)傳輸過程可以描述為“HTTP over TCP over IP”。TCP是可靠地傳輸協(xié)議,就好像一條管道,從TCP連接一段填入的字節(jié)會(huì)從另外一端以原有的順序,正確的傳送出來。

TCP層與IP層都有自己的協(xié)議,他們對(duì)數(shù)據(jù)的關(guān)注點(diǎn)不同??偟膩碚f,TCP段包含了目的端口與源端口,用來建立程序之間的連接。IP段包含了目的IP與源IP,用來進(jìn)行網(wǎng)絡(luò)尋址,最終建立機(jī)器之間的連接。而一條TCP連接正是根據(jù)這四點(diǎn)唯一對(duì)應(yīng)的:

<源IP地址,源端口號(hào),目的IP地址,目的端口號(hào)>

不同的連接不可以擁有完全相同的四個(gè)屬性。對(duì)于一般功能而言,自己發(fā)起的連接中源端口號(hào)是隨機(jī)生成的。

2.http連接性能

由于http數(shù)據(jù)是通過TCP傳輸?shù)?,http連接的性能很大程度上取決于TCP通道的性能。我們先分析一個(gè)正常的http事務(wù)。

客戶端如果拿到的是域名,則需要先從DNS服務(wù)器中解析獲得服務(wù)器IP地址,這個(gè)過程稱為“DNS查詢”,需要花費(fèi)一定的時(shí)間。

客戶端與服務(wù)器進(jìn)行三次握手建立連接。

建立連接后,客戶端會(huì)發(fā)送有真正含義的請(qǐng)求報(bào)文。

服務(wù)器接收到請(qǐng)求后開始處理。

服務(wù)器處理完畢后,發(fā)送響應(yīng)給客戶端。

客戶端收到響應(yīng)后,與服務(wù)器進(jìn)行四次揮手,斷開連接。

從上面的流程可以看出來,真正的有業(yè)務(wù)意義的階段是“請(qǐng)求-處理-響應(yīng)”,其他階段時(shí)間消耗都是與業(yè)務(wù)無關(guān)的。因此可以從這上面思考如何優(yōu)化TCP性能。

3.TCP連接性能聚焦

TCP連接的性能通常從下面5個(gè)方面考慮:

TCP建立握手

捎帶確認(rèn)的TCP延遲確認(rèn)算法

TCP慢啟動(dòng)的擁塞控制

數(shù)據(jù)聚集的Nagle算法

TIME_WAIT時(shí)延與端口耗盡

3.1 TCP建立握手

從上面的圖中可以看出,一次正常的交互需要經(jīng)過DNS查詢、握手、揮手等與數(shù)據(jù)傳輸無關(guān)的操作。如果每次傳輸?shù)臄?shù)據(jù)都很少,那么這種操作所占用的比例就會(huì)增加,這將大大降低HTTP的性能。由于HTTP是建立在TCP連接的基礎(chǔ)上的,所以握手的過程是對(duì)HTTP不可見的,HTTP只能看到建立連接發(fā)生了時(shí)延。三次握手的過程這里不做贅述,感興趣的請(qǐng)查閱相關(guān)資料。

三次握手簡(jiǎn)單來說是建立連接前的三次交互來確認(rèn)連接可以建立,有SYN,ACK+SYN,ACK三次報(bào)文通信。對(duì)于一些小的HTTP事務(wù),比如握手后告知頁面304了,這種事務(wù)中在TCP建立上可能會(huì)法費(fèi)一半甚至更多的時(shí)間。

解決方案:我們可以通過重用TCP連接來減少這種性能上的損失,比如持久連接。

3.2 延遲確認(rèn)

因特網(wǎng)是無法保證數(shù)據(jù)可靠傳輸?shù)?,因?yàn)樵诰W(wǎng)絡(luò)路由超負(fù)荷的情況下,允許丟棄任意網(wǎng)絡(luò)分組。所以,TCP實(shí)現(xiàn)了一套自己的確認(rèn)機(jī)制來保障數(shù)據(jù)可靠傳輸。

每個(gè)TCP段都有一個(gè)序號(hào)和數(shù)據(jù)校驗(yàn)和,接受者在接受完整之后會(huì)向發(fā)送者送回確認(rèn)分組,這樣保證了這個(gè)分組的可靠傳輸。如果發(fā)送者在一定時(shí)間窗口內(nèi)沒有接收到響應(yīng)的確認(rèn)分組,則認(rèn)為這個(gè)分組已經(jīng)丟失,對(duì)該分組進(jìn)行重發(fā)。

由于確認(rèn)報(bào)文很小,所以TCP允許在發(fā)往相同方向的數(shù)據(jù)分組中對(duì)其進(jìn)行“捎帶”,就是這種捎帶出了問題。TCP將返回確認(rèn)信息與輸出信息集合在一起,可以有效的利用網(wǎng)絡(luò)連接。因此為了找到相同方向的數(shù)據(jù)分組來進(jìn)行捎帶,很多TCP棧實(shí)現(xiàn)了一種“延時(shí)確認(rèn)”的算法。這種算法將確認(rèn)信息放入緩沖區(qū),在一定的時(shí)間窗口內(nèi)(一般是100-200毫秒)找不到輸出分組,則對(duì)確認(rèn)數(shù)據(jù)進(jìn)行單獨(dú)發(fā)送。

如果請(qǐng)求響應(yīng)并沒有較多的數(shù)據(jù)傳輸過程,則滿足捎帶確認(rèn)的可能性就很低。通常,延遲確認(rèn)算法會(huì)引入相當(dāng)大的時(shí)延。

解決方案:根據(jù)操作系統(tǒng)的不容,可以調(diào)整或禁止延遲確認(rèn)算法。

3.3 慢啟動(dòng)與擁塞控制

TCP傳輸過程有慢啟動(dòng)與擁塞控制的概念。

TCP在建立連接開始的時(shí)候,會(huì)進(jìn)行慢啟動(dòng),數(shù)據(jù)窗口會(huì)逐漸指數(shù)變大,在達(dá)到閾值后會(huì)線性增長(zhǎng)。當(dāng)發(fā)生某次超時(shí)之后,會(huì)迅速減小窗口到最小,重新開始慢啟動(dòng),通知減小之前的閾值。

在這種機(jī)制的保障下,一個(gè)TCP連接是會(huì)進(jìn)行自我調(diào)整的,因此一個(gè)新的連接的傳輸效率是不如老連接的。

解決方案:我們通過重用連接,可以使得傳輸效率提升,比如持久連接。

3.4 Nagle算法與TCP_NODELAY

Nagle算法與延時(shí)確認(rèn)算法有些類似。不過Nagle算法關(guān)注的是發(fā)送方,為了保證不大量發(fā)送小的數(shù)據(jù)報(bào)文造成3.1的問題。該算法鼓勵(lì)每次發(fā)送大的數(shù)據(jù)組,如果數(shù)據(jù)分組不夠大,則放在緩存區(qū)等待與其他數(shù)據(jù)分組結(jié)合起來達(dá)到上限后一起發(fā)送,或者其他分組被確認(rèn)后發(fā)送。

而對(duì)于一些小的數(shù)據(jù)分組而言,可能很多個(gè)也無法攢夠一次發(fā)送的數(shù)量。當(dāng)這時(shí)接收端也采用延時(shí)確認(rèn)算法之后,事情就變得恐怖了。對(duì)于發(fā)送端而言,很多小的數(shù)據(jù)分組沒有成功發(fā)送,因?yàn)榈谝粋€(gè)分組發(fā)送之后,服務(wù)端進(jìn)行了延時(shí)確認(rèn)200ms,在這段時(shí)間過去之后發(fā)送端的第二個(gè)分組才會(huì)被發(fā)送,這樣的排隊(duì)阻塞簡(jiǎn)直是噩夢(mèng)。

解決方案:可以在協(xié)議棧中設(shè)置TCP_NODELAY來禁用Nagle算法。

3.5 TIME_WAIT時(shí)延與端口耗盡

當(dāng)一個(gè)TCP連接完成四次揮手關(guān)閉之后,會(huì)進(jìn)入TIME_WAIT狀態(tài),在等待2MSL之后會(huì)釋放該TCP連接。因?yàn)門CP的分組可能不是按照順序到達(dá)的,我們假設(shè)一個(gè)分組在網(wǎng)絡(luò)中最多存貨1MSL,則2MSL之后基本上就可以認(rèn)為確實(shí)結(jié)束了。如果在2MSL之間服務(wù)端沒有接收到LAST_ACK發(fā)送的FIN對(duì)應(yīng)的響應(yīng),則TIME_WAIT會(huì)再次發(fā)送ACK。

之前有說過,一個(gè)TCP可以通過下面四個(gè)屬性來確認(rèn)。

<源IP地址,源端口號(hào),目的IP地址,目的端口號(hào)>

而對(duì)于一個(gè)服務(wù)來說,之后源端口是不確定的,因?yàn)槊看卧炊丝诙际请S機(jī)生成的。但是源端口是有數(shù)量限制的,比如60000個(gè)端口,MSL是60秒。則連接速率就被限制在60000/120=500次/秒。如果不進(jìn)行相關(guān)的優(yōu)化,操作系統(tǒng)就無法發(fā)起更多的連接。

解決方案:可以增加請(qǐng)求端機(jī)器,通過負(fù)載均衡的方法降低端口耗盡的可能性,或者在服務(wù)端使用幾個(gè)虛擬IP增加連接的組合。 

4 總結(jié)

HTTP建立在TCP的基礎(chǔ)上,如果我們?cè)诠ぷ髦邪l(fā)現(xiàn)HTTP建立連接的效率很低,可以考慮從上面的五個(gè)角度分析是否達(dá)到了相關(guān)的瓶頸,并通過推薦方案解決問題。

以上這篇高效管理http連接的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關(guān)文章

  • 12種最常用的網(wǎng)頁編程語言簡(jiǎn)介(值得收藏)

    12種最常用的網(wǎng)頁編程語言簡(jiǎn)介(值得收藏)

    隨著網(wǎng)站的越來越普及,與Web相關(guān)的開發(fā)技術(shù)持續(xù)熱門,從開始簡(jiǎn)單的html到復(fù)雜的web開發(fā)語言asp、asp.net、php、jsp等等,在此,我就借助SEO馬龍博客的平臺(tái)跟大家簡(jiǎn)單的介紹一下常見的12種網(wǎng)頁編程語言
    2017-01-01
  • VSCode 安裝 Copilot 詳細(xì)過程和實(shí)例代碼(最新推薦)

    VSCode 安裝 Copilot 詳細(xì)過程和實(shí)例代碼(最新推薦)

    Copilot 作為一款 AI 輔助編程工具,可以極大地提高開發(fā)效率,讓編程變得更加輕松愉快,在實(shí)際開發(fā)過程中,我們要注意審查和測(cè)試生成的代碼,確保其符合項(xiàng)目需求和標(biāo)準(zhǔn),這篇文章主要介紹了VSCode 安裝 Copilot 詳細(xì)過程和實(shí)例,需要的朋友可以參考下
    2024-05-05
  • VSCode中通過launch.json文件打斷點(diǎn)DeBug調(diào)試代碼詳細(xì)圖文教程

    VSCode中通過launch.json文件打斷點(diǎn)DeBug調(diào)試代碼詳細(xì)圖文教程

    在VSCode中l(wèi)aunch.json是用于配置調(diào)試器的文件,它定義了調(diào)試會(huì)話的各種設(shè)置,下面這篇文章主要給大家介紹了關(guān)于VSCode中通過launch.json文件打斷點(diǎn)DeBug調(diào)試代碼的詳細(xì)圖文教程,需要的朋友可以參考下
    2024-08-08
  • Git pull(拉取)及push(上傳)相關(guān)命令介紹

    Git pull(拉取)及push(上傳)相關(guān)命令介紹

    這篇文章主要介紹了Git pull(拉取),push(上傳)相關(guān)命令,git是一個(gè)非常好用的分布式版本管理工具,Git是去中心化,每一個(gè)分支都是一個(gè)中心,并且支持本地倉庫存儲(chǔ),像如今很多大公司都用git做版本控制。有興趣的話來學(xué)習(xí)一下
    2020-07-07
  • Git 教程之基本操作詳解

    Git 教程之基本操作詳解

    本文主要主要介紹Git 基本操作,這里整理了詳細(xì)的基本操作資料,包括基本命令使用方法,有需要的朋友可以參考下
    2016-09-09
  • 算法系列15天速成 第一天 七大經(jīng)典排序【上】

    算法系列15天速成 第一天 七大經(jīng)典排序【上】

    今天是開篇,得要吹一下算法,算法就好比程序開發(fā)中的利劍,所到之處,刀起頭落
    2013-11-11
  • IDEA導(dǎo)入Git項(xiàng)目的方法

    IDEA導(dǎo)入Git項(xiàng)目的方法

    這篇文章主要介紹了IDEA導(dǎo)入Git項(xiàng)目的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • vscode?debug設(shè)置參數(shù)與環(huán)境變量圖文詳解

    vscode?debug設(shè)置參數(shù)與環(huán)境變量圖文詳解

    這篇文章主要給大家介紹了關(guān)于vscode?debug設(shè)置參數(shù)與環(huán)境變量的相關(guān)資料,文中通過圖文以及代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Git 2.27.0詳細(xì)安裝步驟詳解

    Git 2.27.0詳細(xì)安裝步驟詳解

    這篇文章主要介紹了Git 2.27.0詳細(xì)安裝步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 編程人員閱讀代碼的一些小技巧分享

    編程人員閱讀代碼的一些小技巧分享

    閱讀別人的代碼作為研發(fā)人員是一件經(jīng)常要做的事情。一個(gè)是學(xué)習(xí)新的編程語言的時(shí)候通過閱讀別人的代碼是個(gè)最佳的學(xué)習(xí)方法,另外是積累編程經(jīng)驗(yàn)。
    2011-01-01

最新評(píng)論

宝坻区| 江油市| 宿松县| 陇西县| 磴口县| 漠河县| 龙南县| 桂东县| 东港市| 商南县| 莒南县| 卓资县| 永修县| 通辽市| 昌邑市| 交口县| 彭阳县| 潢川县| 江都市| 潢川县| 高青县| 方山县| 穆棱市| 即墨市| 城口县| 高雄县| 安阳县| 红河县| 和政县| 西城区| 肇州县| 泰宁县| 许昌市| 乐陵市| 门头沟区| 通榆县| 井冈山市| 突泉县| 巴塘县| 清镇市| 平安县|