優化標準的協議有哪些?
傳輸層協議延遲時間組成延遲指的就是從發送源到接收源經歷的時間帶寬指的就是邏輯或物理路徑最大的吞吐量
從發送源開始到接收源,中間可能經過很多的基站或者運營商等,那么延遲到底由哪些部分組成呢?從客戶端到服務端之間歷經的過程會涉及到以下的延遲:
傳播延遲:從發送端到接收端的時間,是傳播距離與速度的關系傳輸延遲:傳輸的信息轉移到鏈路中需要的時間,是消息長度與鏈路速率的關系處理延遲:處理分組首部、檢查位錯誤以及確定分組目標所需的時間排隊延遲:到來的分組排隊等待的時間之前我們介紹過CDN的原理,就是讓用戶從最近的服務器加載內容,大幅度降低傳播分組的時間,在距離與時間的選擇當中,我們選擇縮短距離的方式來減少加載時間。
其實我們應該明白,造成用戶加載時間過慢的原因不是帶寬的問題,而是延遲的問題。比如從中國請求美國的網站,中間花的時間不是橫跨大洋或者大陸產生的,而是你當前接收的地址(一般是家或者辦公室)與最近的服務運營商之間的連接,中間可能會經過多個路由器,路由器進行網絡數據的分發,最終才會與運營商連接起來。
在linux平臺上可以使用traceroute 命令最終信息的傳輸過程,計算每一跳所需要的時間,window就通過tracert命令。
高帶寬與低延遲由于人們對視頻的需求增長迅速,所以我們提高傳輸的帶寬是非常有必要的,比如部署更多的光纖、擁塞路由之間改善鏈路、或者使用光纖波分復用(WDN)等技術來讓現有的硬件設備傳輸更多的數據。
WDN:波分復用(WDM)是將兩種或多種不同波長的光載波信號(攜帶各種信息)在發送端經復用器(亦稱合波器)匯合在一起,并耦合到光線路的同一根光纖中進行傳輸的技術;在接收端,經解復用器(亦稱分波器或稱去復用器)將各種波長的光載波分離,然后由光接收機作進一步處理以恢復原信號。這種在同一根光纖中同時傳輸兩個或眾多不同波長光信號的技術,稱為波分復用
除了提高帶寬,我們也可以利用減少延遲的方式改善,可以讓光信號傳輸的速率更接近光速,如采用折射率更低的材料、速度更快的路由器或者中繼器。上面我們就提到過其實信息分組的傳輸中,延遲是最難以解決的。
TCP的具體構成「TCP/IP協議」
我們這兩種協議并不陌生,IP協議(因特網協議),負責聯網主機之間的路由選擇與尋址;TCP協議(傳輸控制協議),負責不可靠的傳輸信道之上提供可靠的抽象層。對于信息傳輸的過程中發生的事情,如丟包、擁塞控制等隱藏,所以在優化的時候我們可能會有一些挑戰。
「三次握手」
在客戶端與服務器進行應用數據交換之前進行操作。
三次握手
在三次握手階段其實是比較耗費性能的,因此我們想要優化網絡也可以從這一方面下手,任何兩段數據想要通過TCP傳輸,那么握手就是必不可少的階段。谷歌的開發人員研究出一種TCP Fast Open的技術,通過客戶端連接時附加一個Cookie(一個TCP選項,此Cookie通常采用一種分組密碼,私鑰由服務器根據客戶端的IP地址保存)來驗證是否之前就連接過,如果成功則可以在服務器收到第三個包之前就發送數據。
「擁塞控制及預防」
流量控制流量控制是一種預防發送端向服務端發送過多數據的一種機制。如果超過了接收端的接收量,可能會造成負載重而處理不過來的情況。每一方都要向對方告知自己的接收窗口,確保能夠開辟一個數據緩沖區接收對方的信息。
慢啟動慢啟動出現的原因其實就是連接剛建立的雙發都不知道網絡中可用的帶寬是多少,必須要有一個估算的機制,而且這個機制還要隨著網絡傳輸的帶寬而進行動態變化。我們不可能一上來就完全利用連接的最大帶寬,都需要慢慢地傳輸數據信息以防止網絡擁堵。
擁塞預防當出現丟包的時候,就會認為網絡已經出現了擁塞,此時就會采取刪包的措施來緩解網絡中的某個連接或者路由器的擁塞。然后通過重置擁塞窗口,預防機制按照自己的算法逐步增大窗口,避免丟包。
「隊首阻塞」
我們都知道TCP有順序交付的特點,從一開始的確認應答機制到滑動窗口的機制,前者是只有確認前一個包才可以進行下一個包的發送,后者是允許你發送一定數量的包到接收端,但假如有一個包接收端一直收不到,那就必須停止后面包的發送,重發丟失的包。
所以這里我們就會出現假如一個包要處理很久,那么豈不是后面的都一直等待?這就是隊首阻塞問題。
http2中無論在客戶端還是在服務器端都不需要排隊,在同一個tcp連接上,有多個stream,由各個stream發送和接收http請求,各個steam相互獨立,互不阻塞。這就解決了這個問題。
「TCP優化建議」
要對TCP進行優化,必須要最大限度地利用底層協議的原理,其原理性的東西無非就是以下的幾點:
三次握手就是一次往返時間慢啟動在每個連接中都應用流量控制和擁塞控制會影響到所有連接的吞吐量吞吐量由當前擁塞窗口大小控制服務器調優
增大TCP的初始化擁塞窗口慢啟動重啟窗口縮放TCP快速打開通過進行服務器的最優調整,把主機的操作系統升級到最新版本,可以確保每個TCP連接都具有較低的延遲和較高的吞吐量。
應用程序行為調優
數據能不發就不發使用CDN讓傳輸距離變短復用TCP連接請求的影響因素就是減少請求與壓縮體積,通過減少一些不必要的數據傳輸和減少傳輸距離,能夠使應用程序的行為最優。
小結
升級服務器內核版本擁塞窗口大小為10禁用空閑后的慢啟動確保啟動窗口縮放減少傳輸冗余數據壓縮傳輸的數據服務器放到離用戶最近的地方(CDN)重用TCP連接UDP的優化由于UDP是一種簡單的協議,它的高效性正是因為它忽略了很多TCP的特性,但是由于這樣的高效性,可能也會造成麻煩。舉個例子來說,當你看視頻的時候假如沒有經過擁塞處理,可能會占用大量的帶寬,導致一些正常的TCP連接無法發送正常的數據,如網頁也可能無法打開。另一種情況也有可能造成視頻一直卡頓,無法加載。
所以我們針對這種情況必須進行有效的處理,根據RFC的文檔,主要有幾種優化方案。
控制傳輸速度對所有的流量進行擁塞控制使用與TCP相近的帶寬處理數據包丟失、重復和重排以上的優化必須是應用程序做出的優化。
03 小結上面我們討論了如何進行對傳輸層兩個協議的優化,以及中間的細節性東西,可能還有很多沒有講到,但是把主要的幾個點都大概說了一下,也對其中的幾個點有所了解。
前端與網絡的關系大家都知道,理解TCP的核心機制已經是web優化的必修課,我們在項目中一般不會深入到鏈路物理層面進行優化,但是應用層的優化我們還是可以做的。