您的當前位置: 首頁(yè) > 產(chǎn)品中心
簡(jiǎn)介
程序員天天都在寫(xiě)代碼,網(wǎng)絡(luò )網(wǎng)絡(luò )關(guān)注的分類(lèi)范圍分類(lèi)都是更高層次的封裝,今天我們換個(gè)思路,包括讓程序那些事來(lái)帶你看一看隱藏在表象之下的按照網(wǎng)絡(luò )和他們的性能分析。
本文主要涉及5個(gè)模塊,連接分別是網(wǎng)絡(luò )網(wǎng)絡(luò )網(wǎng)絡(luò )七層協(xié)議,延遲與帶寬,分類(lèi)范圍分類(lèi)IP,包括TCP,按照UDP。連接
OSI網(wǎng)絡(luò )七層協(xié)議(′_`)
在講網(wǎng)絡(luò )之前(qian),網(wǎng)絡(luò )網(wǎng)絡(luò )一定要提??到OSI網(wǎng)絡(luò )七層協(xié)議。分類(lèi)(lei)范圍分類(lèi)
OSI是包括Open System Interconnect的縮寫(xiě),意為開(kāi)放式系統互聯(lián)。按照
上圖是連接大家非常??非常熟悉的OSI七層ヽ(′▽?zhuān)?ノ網(wǎng)絡(luò )模??型,和對應的TCP/IP模型。
應用層的功能是文件傳輸,電子郵件和文件服務(wù)等。使用的協(xié)議主要是HTTP,SMTP和FTP。
表示層的功能是數據格式化,代碼轉??換和數據加密。
會(huì )話(huà)層的ヽ(′ー`)ノ功能是解除或者建立與(yu)其他節點(diǎn)的聯(lián)系。
傳輸層的功能是提供端對端的接口,使用的協(xié)議主要是(?????)TCP和UDP。
網(wǎng)絡(luò )層的功能是為數據包選擇路由,使用的協(xié)議是IP。
數據鏈路層的功能是傳輸有地址的幀,和檢查數據錯誤。
物理層的功能是(╯‵□′)╯以二進(jìn)制數據在物理媒介上傳輸數據。
延遲與帶寬
最近電信業(yè)務(wù)員老是給我打電話(huà),說(shuō)是要把家里的電信寬帶從100M升級到500M,每天只需要一塊錢(qián)。一塊錢(qián)雖然少,但也是血汗錢(qián)。那么辦還是不辦呢?升級到500M對性能和延時(shí)提升有多大(da)幫助呢?
2020年可以稱(chēng)為中國5G的元年。先不管華為,??中信在5G基站和協(xié)議制定方面的能力。直觀(guān)的感覺(jué)5G手機開(kāi)始多了,手機營(yíng)業(yè)廳也在賣(mài)力的讓你升級??到5G套餐,??那么辦還是不辦?
在回答這兩個(gè)問(wèn)題之前,我們學(xué)習兩個(gè)名(ming)詞:
延遲: 分組從信息源發(fā)送到目的地所需的時(shí)間。
帶寬: 邏輯或物理通信路徑最大的吞吐量。
如果你訪(fǎng)問(wèn)一個(gè)┐(′?`)┌網(wǎng)站,比如www.fl(′▽?zhuān)?)ydean.com,我們看一下數據是怎么從服務(wù)器到達你的電腦的。
首先數據從服務(wù)器通過(guò)以太網(wǎng)(以太網(wǎng)是??一種計算機局域網(wǎng)技術(shù))傳輸到ISP。
ISP是啥呢?ISP就是互聯(lián)網(wǎng)服??務(wù)提供商(In(???)ternet Service Provid??er)??,通過(guò)ISP你才能夠把服務(wù)器接入互??聯(lián)網(wǎng)。
互聯(lián)網(wǎng)就(jiu)是通過(guò)主干網(wǎng)的互聯(lián)網(wǎng)服務(wù)提供商(ISP)??之間的相互連接構成的。
所以ISP就是一個(gè)……大代理。
好了,數據傳到為我家提供服務(wù)的ISP了,然后通過(guò)光纖或者電纜線(xiàn)傳到了我家的WiFi,然后通過(guò)WiFi的無(wú)線(xiàn)信號,被我的電腦接收。
延時(shí)的構成
討論分析了數據的傳輸線(xiàn)路,接下來(lái)我們看一下,延時(shí)會(huì )跟哪些原因有關(guān)呢?
首先肯定是信號傳輸的距離,距離越長(cháng),傳輸速率越慢,需要的時(shí)間就越長(cháng)。
數據上了鏈路之后,處理分組首部、檢查?位錯誤及確定分組目標也需要???時(shí)間。
現在主網(wǎng)絡(luò )的傳輸介質(zhì)基本上都是光纖了,光在光纖中傳播,并不是直線(xiàn)進(jìn)行的,并且也有(you)折射率的影響,所以速??度比光在真空中傳播要慢一點(diǎn)。
比如說(shuō)信號圍繞赤道轉一圈,只需要大概200ms。已經(jīng)很快了。
200ms確實(shí)很快了,但是對于某些實(shí)時(shí)性要求特別高的應用場(chǎng)景,我們可以使用CDN技術(shù)(Content Delivery Network,內容分發(fā)網(wǎng)絡(luò )),把內容部署在全球網(wǎng)絡(luò )中,然后從最近的地方去取數??據。從而大大減少傳輸延時(shí)。
200ms夠快了,但是為什么我??們仍然會(huì )感覺(jué)到網(wǎng)速慢呢?
大家都聽(tīng)過(guò)木桶原理吧,木桶能夠裝的水,決定于最短的那塊木板。同樣的對??于網(wǎng)絡(luò )延時(shí)來(lái)說(shuō),提升速度不在于你在主干網(wǎng)上ヽ(′?`)ノ采用了多么先進(jìn)的技術(shù),因為提升的再多或者再差也是毫米級的。
真正決定網(wǎng)速的在于最后一公里,也就是你電纜線(xiàn)的傳輸速率,你的wifi的傳輸速率,還有你電腦的處理速率等。
能接入更高帶寬固然好,特別是傳輸大塊數據時(shí)更是如ヽ(′▽?zhuān)?ノ此,比如在線(xiàn)聽(tīng)音樂(lè )、看視頻,或者下載大文件??墒?,日常上網(wǎng)瀏覽需要的是從數十臺主機獲取較小的資源,這時(shí)候往返時(shí)間就成了瓶頸。
IP協(xié)議
IP,即 Internet Protocol(因特網(wǎng)協(xié)議),負責聯(lián)網(wǎng)主機之間的路由選擇和尋址。
各種物理網(wǎng)絡(luò )在鏈路層所傳輸的基本單元為幀(MA??C幀),其幀格式(shi)隨物理網(wǎng)絡(luò )而異,各物理網(wǎng)絡(luò )的物理地址(MAC地??址)也隨物理網(wǎng)絡(luò )而異。Ip協(xié)議的作用就是向傳輸層(TCP層)提(′?_?`)供統一的IP包,即將各種不同類(lèi)型的MAC幀轉換為統一的IP包,并將MAC幀的物理地址變換為全網(wǎng)統一的邏輯地址(IP地址)。
IP數據包
數據包(data packet)是什么?
數據包也是分組交換的一種形式,就是把所傳送的數據分段打成包,再傳送出去.
每個(gè)數據包都有報頭和報文這兩個(gè)部分,報頭中有目的地址等必要內容,使每個(gè)(ge)數據包不經(jīng)過(guò)同樣的路徑都能準確地到達目的地。在目的地重新組合還原成原來(lái)發(fā)送的數據.
我們看下IP數據包的構成。
注意上面的Total Length部分占用了2個(gè)字節,所以IP數據包的最大長(cháng)度就是2^16-1=65535字節。
分片和重組
鏈路層具有最大傳輸單元MTU這個(gè)特性,它限制了數據幀的最大長(cháng)度,不同的網(wǎng)絡(luò )類(lèi)型都有一個(gè)上限值.如果IP層有ヽ(′ー`)ノ數據包要傳,而且數據包的長(cháng)度超過(guò)了MTU,那么IP層就要對數據包進(jìn)??行分片操作,使每一片的長(cháng)度都小于或等于M(′?_?`)TU。
分片后的IP數據包,只有到達目的地才能重新組裝。重新組裝由目的地的IP層來(lái)完成,其目的是使分片和重新組裝過(guò)程對傳輸層(TCP和UDP)是透明的。
MSS與MTU
而一般以太網(wǎng)MTU都為1500, 所以在(′▽?zhuān)?以太網(wǎng)中, 往往TCP MSS為1460。
TCP
TCP,即 Transmission Control Protocol(傳輸控制協(xié)議),負責在不可靠的傳輸信道之上提供可靠的抽象層, 向應用層隱藏了大多數網(wǎng)絡(luò )通信的復雜細節,比??如丟包重發(fā)、按序發(fā)送、擁塞控制及避免、數據完整,等等??。
TCP三次握手
一般來(lái)說(shuō),使用TCP協(xié)議,如果client和server要達成一致建立連??接的話(huà),需要三次交互。
- SYN ACK服務(wù)器給x 加1,并選擇自己的一個(gè)隨機序列號y,追加自己的標志和選項,然后返回響應。
- ACK客戶(hù)端給x 和y 加1 并發(fā)送握手期間??的最后一個(gè)ACK 分組。
擁塞崩潰
如果幾個(gè)IP分組同時(shí)到達路由器,并期望經(jīng)同一個(gè)輸出端口轉發(fā).
顯然,不是所有分組可以同時(shí)接受處理,必須有一個(gè)服務(wù)順序,中間節點(diǎn)上的緩存為等候服務(wù)的分組提供一定保護。
然而,如果此狀況具(′?ω?`)有一定的持續性,當緩存空間被耗盡時(shí)??,路由器只有丟棄分組。
在這種持續過(guò)載的狀態(tài)下,網(wǎng)絡(luò )性能會(huì )急劇下降.
流量控制
流量控制ヽ(′?`)ノ是一種預防發(fā)送端過(guò)多向接收端發(fā)送數據的機制。否則,接收端可能因為忙碌、負載重或緩沖區既定而無(wú)法處理。
為實(shí)現(xian)流量控制,TCP連???接的每一方都要通告自己的接收窗口receive window(rwnd),其中包含能夠保存數據的緩沖區空間大小信息。
最初的TCP規范分配給通告窗口大小的字段是16位的,這相當于設定了發(fā)送端和接收端窗??口的最(′ω`)大值((′▽?zhuān)?65535字節)。結果,在這個(gè)限制內經(jīng)常無(wú)法獲得最優(yōu)性(′-ι_-`)能。
為解決這個(gè)問(wèn)題,ヾ(′?`)?RFC1323提供了TC??P窗口縮放(TCP Window Scaling)選項,可以把接收窗口大小由65535字節提高到1G字節。
那么現在問(wèn)題來(lái)了,rwnd只是一個(gè)接收端的初始窗口大小,如果有多個(gè)sender都在向receiver發(fā)??送數據包的話(huà)(′?`),怎么才能保證receiver端的接收性能呢ヽ(′ー`)ノ?
為了解決這個(gè)問(wèn)題(╬?益?),TCP引入了慢啟動(dòng)的概念。
當sender和receiver已經(jīng)建立好了TCP三次握手之后??。就可以開(kāi)始發(fā)送數據包了。
這里引(′?`*)入了一個(gè)擁堵窗口Congest??ion wind(′?`)ow??(cwnd)的概念。
cwnd是server端目前可以接受的最大的窗口大小。
建立連接之后第一次發(fā)送的cwnd是一個(gè)初始值,這個(gè)初始值最開(kāi)始是1個(gè)network se??gment,在1999年 RFC 2581將其更新為4個(gè)network segments。在2013年, RFC 6928 將這個(gè)值擴大到了10個(gè)network(′?`) segments。
我們以10個(gè)networヽ(′ー`)ノk segments為例,看下cwnd的膨脹(╯°□°)╯︵ ┻━┻過(guò)程:
一般來(lái)說(shuō)cwnd??是倍數增加的,收到ack之后,c??wnd會(huì )從10,20,40這樣往上增加。一直到server端拒絕ack為止。
那么回到我們之前講到的一個(gè)結論,帶寬其實(shí)不是那么重要(O_O)。
為什么呢?考慮在HTTP1.1中,client需要等待server的返回才能夠進(jìn)行下一次請求。如果你的請求的文件比較小,那么cwnd還沒(méi)有漲到足夠大的時(shí)候,請求就已經(jīng)結束了。這個(gè)時(shí)候最主ˉ\_(ツ)_/ˉ要的時(shí)間花費是請求ヽ(′ー`)ノ的來(lái)回時(shí)間,而不在于帶寬大小。
當然,如果在HTTP2中,因為建立的是長(cháng)連接,慢啟動(dòng)可能就不存在了(不確定,大家有不同的意見(jiàn)可以提出)。
UDP
UDP(′Д` )( User Datagram Protocol,用戶(hù)數據報??協(xié)議。
UDP 的主要功能和亮點(diǎn)并不在于它引入了什么特性,而在于它忽略的那些??特性:不保證消息交付,不保證交付順序,不跟蹤連接狀態(tài),不需要擁塞控制。
我們先來(lái)看一下UDP的數據包:
NAT
大家都知道IPV4地址是有限的,很快IPV4地址就快用完了,那怎么解決這個(gè)問(wèn)題呢?
當然,一個(gè)永久解決的辦法是IPV6,不過(guò)IPV6推出這么多年了,好像還沒(méi)有真正的普及。
不使用IPV6的話(huà)還有什么解決辦法呢?
這個(gè)辦法就是NAT(Network Address Translators)。
NAT的原理是將局域網(wǎng)的IP和端口和NAT設備的IP和端口做個(gè)映射。ヽ(′?`)ノ
NAT內部(′_ゝ`)維護著(zhù)一張轉換表。這樣就可以通過(guò)一個(gè)NAT的IP地址和不同的端口來(lái)連接眾多的局域網(wǎng)服務(wù)器。
那么??NAT有什么問(wèn)題呢?
NAT??的問(wèn)題(ti)在于,內部客戶(hù)端不知道自己外網(wǎng)IP地址,只知道內網(wǎng)IP地址。
如果是在UDP協(xié)議中,因為UDP是無(wú)狀態(tài)的,所以需要NAT來(lái)重寫(xiě)每個(gè)UDP分組中的源端口、地址,以及IP分組中的源IP地址。
如果客戶(hù)端是在應用程序內部將自己的IP地址告訴服務(wù)器,并想跟服務(wù)器建立ヽ(′?`)ノ連接,那么肯定是建立不了的。因為找不到客戶(hù)端的公網(wǎng)IP。
即使找到了公網(wǎng)IP,任何到達NAT設備外網(wǎng)IP的分組還必須有一個(gè)目標端口,而且NAT轉換表中也要有一個(gè)條目可以將其轉(◎_◎;)換為內部主機的IP?????地址和(he)端口號。否則就??可能出現下圖的連接失敗的問(wèn)題。
怎么解決呢?
第一種方式是使用STUN服務(wù)器。
STUN服務(wù)器是IP地址已知的服務(wù)器,客戶(hù)端要通信之前,先去STUN服務(wù)器上面查詢(xún)一下自己的外(wai)網(wǎng)IP和端口,然后再使用這個(gè)外網(wǎng)IP和端口進(jìn)行通??信。
但有時(shí)UDP包會(huì )被防火墻或者其他的應用程序所阻擋。這個(gè)時(shí)候就可以使用中繼器技術(shù)Traversal Using Relays around NAT (TURN) 。
雙方都將數?據發(fā)送到中繼器server,由中繼器server來(lái)負責轉發(fā)數據。注意,這里已經(jīng)不是P??2P(′?_?`)了。
最(zui)后,我們有一個(gè)集大成者的協(xié)議叫做ICE(Intera??ctive Connectivity Establishment ):
它實(shí)際上就是直連,STUN和TU(′ω`*)RN的綜合體,能直連的時(shí)候就直連,不能直連就用STUN,不能用STUN就ヽ(′▽?zhuān)?ノ用TURN。
版權聲明:本文內容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻,該文觀(guān)(guan)點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權,不(bu)承擔相關(guān)法律責任。如發(fā)現本站有涉嫌抄襲侵權/違法違規的內容, 請發(fā)送郵件至 [email protected] 舉報,一經(jīng)查實(shí),本站將立刻刪除。
