日本高清免费一本视频100禁_在线不卡欧美精品一区二区三区_国产一区二区好的精华液_中文综合在线_国产啊啊啊视频在线观看_大地资源网免费观看高清

IT之道-艾銻知道

您當前位置: 主頁 > 資訊動態 > 艾銻分享 >

艾銻人談網絡應用層!!!


2020-02-06 15:13 作者:admin 瀏覽量:
迎戰疫情,艾銻無限用愛與您同行
中國中小企業提供免費IT外包服務
 

 
 
這次的肺炎疫情對中國的中小企業將會是沉重的打擊,據釘釘和微信兩個辦公平臺數據統計現有2億左右的人在家遠程辦公,那么對于中小企業的員工來說不懂IT技術將會讓他們面臨的最大挑戰和困難。
 
電腦不亮了怎么辦?系統藍屏如何處理?辦公室的電腦在家如何連接?網絡應該如何設置?VPN如何搭建?數據如何對接?服務器如何登錄?數據安全如何保證?數據如何存儲?視頻會議如何搭建?業務系統如何開啟等等一系列的問題,都會困擾著并非技術出身的您。
 
 
 
好消息是當您看到這篇文章的時候,就不用再為上述的問題而苦惱,您只需撥打艾銻無限的全國免費熱線電話:400 650 7820,就會有我們的遠程工程師為您解決遇到的問題,他們可以遠程幫您處理遇到的一些IT技術難題。
 
如遇到免費熱線占線,您還可以撥打我們的24小時值班經理電話:15601064618或技術經理的電話:13041036957,我們會在第一時間接聽您的來電,為您提供適合的解決方案,讓您無論在家還是在企業都能無憂辦公。
 
那艾銻無限具體能為您的企業提供哪些服務呢?
 
艾銻無限始創于2005年,歷經15年服務了5000多家中小企業并保障了幾十萬臺設備的正常運轉,積累了豐富的企業IT緊急問題和特殊故障的解決經驗,制定了相對應的解決方案。我們為您的企業提供的IT服務分為三大版塊:
 
第一版塊是保障性IT外包服務:如電腦設備運維,辦公設備運維,網絡設備運維,服務器運維等綜合性企業IT設備運維服務。
 
第二版塊是功能性互聯網外包服務:如網站開發外包,小程序開發外包,APP開發外包,電商平臺開發外包,業務系統的開發外包和后期的運維外包服務。
 
第三版塊是增值性云服務外包:如企業郵箱上云,企業網站上云,企業存儲上云,企業APP小程序上云,企業業務系統上云,阿里云產品等后續的云運維外包服務。
 
您要了解更多服務也可以登錄艾銻無限的官網:www.bjitwx.com查看詳細說明,疫情期間,您企業遇到的任何困境只要找到艾銻無限,能免費為您提供服務的我們絕不收一分錢,我們全體艾銻人承諾此活動直到中國疫情結束,我們將這次活動稱為——春雷行動。
 
 
以下還有我們為您提供的一些技術資訊,以便可以幫助您更好的了解相關的IT知識,幫您渡過疫情中辦公遇到的困難和挑戰,艾銻無限愿和中國中小企業一起共進退,因為我們相信萬物同體,能量合一,只要我們一起齊心協力,一定會成功。再一次祝福您和您的企業,戰勝疫情,您和您的企業一定行。

艾銻人談網絡應用層!!!

網絡應用是計算機網絡存在的理由,一批早起的網絡應用主要有電子郵件、遠程訪問、文件傳輸等,但是隨著計算機網絡的發展和人類無窮無盡的需求,越來越多的網絡應用被開發出來,例如即時通訊和對等(P2P)文件共享,IP 電話、視頻會議等。
網絡應用是計算機網絡存在的理由,一批早起的網絡應用主要有電子郵件、遠程訪問、文件傳輸等,但是隨著計算機網絡的發展和人類無窮無盡的需求,越來越多的網絡應用被開發出來,例如即時通訊和對等(P2P)文件共享,IP 電話、視頻會議等。還有一些多方在線游戲被開發出來如《魔獸世界》等,可以說計算機網絡是一切應用演變出來的基礎。人要懷有一顆感恩的心,感謝這些前輩的努力,才讓我們現在的生活如此豐富多彩。但是我們作為程序員,不僅要能夠享受這些成果,還要知道為什么,這樣生活才會和諧。
 
一、應用層協議原理
研發網絡應用程序的核心是寫出能夠運行在不同的端系統和通過網絡彼此通信的程序。例如,在網絡應用程序中,有兩個互相通信的不同程序:一個是運行在用戶主機上的瀏覽器程序;另一個是運行在 Web 服務器主機上的 Web 服務器程序。
二、網絡應用程序體系結構
網絡應用程序的體系結構(application architecture)主要有兩種,一種是 客戶-服務器體系結構(client-server architecture) ,在客戶-服務器體系結構中,有一個持續打開,等待連接的主機稱為服務器,它服務于來自許多其他稱為 客戶 的主機請求。比如 Web 服務器總會等待來自瀏覽器(運行在客戶主機上)的請求。注意這種客戶-服務器體系結構中,客戶之間是不會彼此交流信息的,它們只與相應的服務器進行通信。還有一點是服務器具有固定的 IP 地址。下圖顯示了這種體系結構:
 
這種客戶-服務器體系結構存在弊端,那就是有的時候服務器的響應跟不上客戶請求速度的情況,鑒于此,這種體系結構需要經常配備數據中心(data center)用來創建更強大的服務器。例如搜索引擎(谷歌、Bing和百度)、互聯網商店(亞馬遜、e-Bay 和阿里巴巴)、基于 Web 的電子郵件(Gmail 和 雅虎)、社交網絡(臉書、Instagram、推特和微信),就是用了多個數據中心。
另外一種體系結構是 P2P體系結構(P2P architecture),相對于對數據中心有過多依賴的客戶-服務器體系結構,P2P 體系結構則直接通過兩臺相連的主機直接通信,這些主機稱為對等方。典型的 P2P 體系結構的應用包括 文件共享(BitTorrent)、下載器(迅雷)、互聯網電話和視頻會議(Skype),下圖顯示了 P2P 體系結構圖
 
P2P 體系結構最重要的一個特性就是它的自擴展性(self-scalability)。例如,在一個 P2P 文件共享的應用中,盡管每個對等方都由于請求文件產生工作負載,但每個對等方通過向其他對等方分發文件也為系統增加服務器能力。
三、進程通信
我們上面說到了兩種體系結構,一種是客戶-服務器模式,一種是P2P 對等模式。我們都知道一個計算機允許同時運行多個應用程序,在我們看起來這些應用程序好像是同時運行的,那么它們之間是如何通信的呢?不可能存在同是一個母親,兄弟倆不交流的情況吧。
用操作系統的術語來說,進行通信實際上是 進程(process)而不是程序。一個進程可以被認為是運行在端系統中的程序。當多個進程運行在相同的端系統上,它們使用進程間的通信機制相互通信。進程間的通信規則由操作系統來確定。我們暫不關心運行在同一主機上不同應用程序是如何通信的,我們主要探討的目標是不同端系統中兩個進程是如何通信的。還是分為兩種結構來探討。
1. 客戶和服務器進程
網絡應用程序由成對的進程組成,這些進程通過網絡相互發送報文。例如,在 Web 應用程序中,文件從一個對等方中的進程傳輸到另一個對等方中的進程。而在每對通信的進程中,都會有一對客戶(client) 和 服務器(server) 存在。比如我們上面提到的 Web ,對于 Web 來說,瀏覽器是一個客戶進程,而 Web 服務器是一臺服務器進程。也許你也應該能猜到,在 P2P 體系結構中,一個進程能夠扮演兩種角色,既是客戶又是服務器的情況。但是在實際通信的過程中,我們還是很容易區分的,我們通常通過下面這種方式進行區分。
在一對進程之間的通信會話場景中,發起通信(即在會話開始時發起與其他進程的聯系)的進程稱為客戶,在會話開始時等待聯系的被稱為服務器。
2. 進程與計算機網絡之間的接口
計算機是龐大且繁雜的,計算機網絡也是,應用程序不可能只有一個進程組成,它同樣是多個進程共同作用協商運行,然而,分布在多個端系統之間的進程是如何進行通信的呢?實際上,每個進程之間會有一個 套接字(socket) 的軟件接口存在,套接字是應用程序的內部接口,應用程序可以通過它發送或接收數據,可對其進行像對文件一樣的打開、讀寫和關閉等操作。套接字允許應用程序將 I/O 插入到網絡中,并與網絡中的其他應用程序進行通信。
通過一個實例來簡單類比一下套接字和網絡進程:進程可類比一座房子,而它的套接字相當于是房子的門,當一個進程想要與其他進程進行通信時,它會把報文推出門外,然后通過運輸設備把報文運輸到另外一座房子,通過門進入房子內部使用。
下圖是一個通過套接字進行通信的流程圖
 
從圖可以看到,Socket 屬于主機或者服務進程的內部接口,由應用程序開發人員進行控制,兩臺端系統之間進行通信會通過 TCP 的緩沖區經由網絡傳輸到另一個端系統的 TCP 緩沖區,Socket 從 TCP 緩沖區讀取報文供應用程序內部使用。
套接字是建立網絡應用程序的可編程接口,因此套接字也被稱為應用程序和網絡之間的 應用程序編程接口(Application Programming Interface,API)。應用程序開發人員可以控制套接字內部細節,但是無法控制運輸層的傳輸,只能對運輸層的傳輸協議進行選擇,還可以對運輸層的傳輸參數進行選擇,比如最大緩存和最大報文長度等。
3. 進程尋址
我們上面提到網絡應用程序之間會相互發送報文,那么你怎么知道你應該向哪里發送報文呢?是不是存在某種機制能夠讓你知道你能夠發到哪里?這就好比你要發送電子郵件,你寫好了內容但是你不知道發發往哪里,所以這個時候必須要有一種知道對方地址的機制,這種機制能夠辨明對方唯一的一個地址,這種地址就是 IP地址。我們會在后面的文章中詳細討論 IP 地址的內容,目前只需要知道 IP 是一個32比特的量并且能夠唯一標示互聯網中任意一臺主機的地址就可以了。
只知道 IP 地址是否就可以了呢?我們知道一臺計算機可能回運行多個網絡應用程序,那么如何確定是哪個網絡應用程序接受發送過來的報文呢?所以這時候還需要知道網絡應用程序的 端口號(port number)。例如, Web 應用程序需要用 80 端口來標示,郵件服務器程序需要使用 25 來標示。
四、應用程序如何選擇運輸服務
我們知道應用程序是屬于互聯網四層協議的 應用層 協議,并且四層協議必須彼此協助共同完成工作。好了,這時候我們只有應用層協議,我們需要發送報文,我們如何發送報文呢?這就好比你知道目的地是哪里了,你該如何到達目的地呢?是走路,公交,地鐵還是打車?
應用程序發送報文的交通工具的選擇也有很多,我們可以從 數據傳輸是否可靠、吞吐量、定時和安全性 來考慮,下面是你需要考慮的具體內容。
1. 數據傳輸是否可靠
我們之前探討過,分組在計算機網絡中會存在丟包問題,丟包問題的嚴重性跟網絡應用程序的性質有關,如果像是電子郵件、文件傳輸、遠程主機、Web 文檔傳輸的過程中出現問題,數據丟失可能會造成非常嚴重的后果。如果像是網絡游戲,多人視頻會議造成的影響可能比較小。鑒于此,數據傳輸的可靠性也是首先需要考慮的問題。因此,如果一個協議提供了這樣的確保數據交付的服務,就認為提供了 可靠數據傳輸(reliable data transfer),能夠忍受數據丟失的應用被稱為 容忍丟失的應用(loss-tolerant application)。
2. 吞吐量
在之前的文章中我們引入了吞吐量的概念,吞吐量就是在網絡應用中數據傳輸過程中,發送進程能夠向接收進程交付比特的速率。具有吞吐量要求的應用程序被稱為 帶寬敏感的應用(bandwidth-sensitive application)。帶寬敏感的應用具有特定的吞吐量要求,而 彈性應用(elastic application) 能夠根據當時可用的帶寬或多或少地利用可供使用的吞吐量。
3. 定時
定時是什么意思?定時能夠確保網絡中兩個應用程序的收發是否能夠在指定的時間內完成,這也是應用程序選擇運輸服務需要考慮的一個因素,這聽起來很自然,你網絡應用發送和接收數據包肯定要加以時間的概念,比如在游戲中,你一包數據遲遲發送不過去,對面都推塔了你還卡在半路上呢。
4. 安全性
最后,選擇運輸協議一定要能夠為應用程序提供一種或多種安全性服務。
五、因特網能夠提供的運輸服務
說完運輸服務的選型,接下來該聊一聊因特網能夠提供哪些服務了。實際上,因特網為應用程序提供了兩種運輸層的協議,即 UDP 和 TCP,下面是一些網絡應用的選擇要求,可以根據需要來選擇適合的運輸層協議。
 
下面我們就來聊一聊這兩種運輸協議的應用場景
1. TCP
TCP 服務模型的特性主要有下面幾種
(1) 面向連接的服務
在應用層數據報發送后, TCP 讓客戶端和服務器互相交換運輸層控制信息。這個握手過程就是提醒客戶端和服務器需要準備好接受數據報。握手階段后,一個 TCP 連接(TCP Connection) 就建立了。這是一條全雙工的連接,即連接雙方的進程都可以在此連接上同時進行收發報文。當應用程序結束報文發送后,必須拆除連接。
(2) 可靠的數據傳輸
通信進程能夠依靠 TCP,無差錯、按適當順序交付所有發送的數據。應用程序能夠依靠 TCP 將相同的字節流交付給接收方的套接字,沒有字節的丟失和冗余。
(3) 擁塞控制
TCP 的擁塞控制并不一定為通信進程帶來直接好處,但能為因特網帶來整體好處。當接收方和發送方之間的網絡出現擁塞時,TCP 的擁塞控制會抑制發送進程(客戶端或服務器),我們會在后面具體探討擁塞控制
2. UDP
UDP 是一種輕量級的運輸協議,它僅提供最小服務。UDP 是無連接的,因此在兩個進程通信前沒有握手過程。UDP 也不會保證報文是否傳輸到服務端,它就像是一個撒手掌柜。不僅如此,到達接收進程的報文也可能是亂序到達的。
下面是上表列出來的一些應用所選擇的協議
 
六、應用層協議
現在我們會探討一些應用層協議,首先來認識一下什么是 應用層協議,應用層協議(application-layer protocol) 定義了運行在不同端系統上的應用進程如何相互傳遞報文。
應用層協議會定義:
· 交換的報文類型,如請求報文和響應報文;
· 各種報文類型的語法,如報文中的各個字段公共詳細描述;
· 字段的語義,即包含在字段中信息的含義;
· 進程何時、如何發送報文及對報文進行響應。
七、應用層協議分類
· 域名系統(Domain Name System, DNS):用于實現網絡設備名字到 IP 地址映射的網絡服務。
· 文件傳輸協議(File Transfer Protocol,FTP):用于實現交互式文件傳輸功能。
· 郵件傳送協議(Simple Mail Transfer Protocol, SMTP):用于實現電子郵箱傳送功能。
· 超文本傳輸協議(HyperText Transfer Protocol,HTTP):用于實現 Web 服務。
· 遠程登錄協議(Telnet):用于實現遠程登錄功能。
八、Web 和 HTTP
Web(World Wide Web)即全球廣域網,也就是 URL 為 www 開頭的網絡,它是 HTTP 協議的主要載體,是建立在 Internet 上的一種網絡服務,我們一般講的 Web ,其實就是指的 HTTP 協議,HTTP 協議作為 web 程序員必須要掌握并理解的一門協議,有必要好好了解一下。
超文本傳輸協議可以進行文字分割:超文本(Hypertext)、傳輸(Transfer)、協議(Protocol),它們之間的關系如下:
 
按照范圍的大小 協議 > 傳輸 > 超文本。下面就分別對這三個名次做一個解釋。
1. 什么是超文本
在互聯網早期的時候,我們輸入的信息只能保存在本地,無法和其他電腦進行交互。我們保存的信息通常都以文本即簡單字符的形式存在,文本是一種能夠被計算機解析的有意義的二進制數據包。而隨著互聯網的高速發展,兩臺電腦之間能夠進行數據的傳輸后,人們不滿足只能在兩臺電腦之間傳輸文字,還想要傳輸圖片、音頻、視頻,甚至點擊文字或圖片能夠進行超鏈接的跳轉,那么文本的語義就被擴大了,這種語義擴大后的文本就被稱為超文本(Hypertext)。
2. 什么是傳輸
那么我們上面說到,兩臺計算機之間會形成互聯關系進行通信,我們存儲的超文本會被解析成為二進制數據包,由傳輸載體(例如同軸電纜,電話線,光纜)負責把二進制數據包由計算機終端傳輸到另一個終端的過程(對終端的詳細解釋可以參考 你說你懂互聯網,那這些你知道么?這篇文章)稱為傳輸(transfer)。
通常我們把傳輸數據包的一方稱為請求方,把接到二進制數據包的一方稱為應答方。請求方和應答方可以進行互換,請求方也可以作為應答方接受數據,應答方也可以作為請求方請求數據,它們之間的關系如下
 
如圖所示,A 和 B 是兩個不同的端系統,它們之間可以作為信息交換的載體存在,剛開始的時候是 A 作為請求方請求與 B 交換信息,B 作為響應的一方提供信息;隨著時間的推移,B 也可以作為請求方請求 A 交換信息,那么 A 也可以作為響應方響應 B 請求的信息。
3. 什么是協議
協議這個名詞不僅局限于互聯網范疇,也體現在日常生活中,比如情侶雙方約定好在哪個地點吃飯,這個約定也是一種協議,比如你應聘成功了,企業會和你簽訂勞動合同,這種雙方的雇傭關系也是一種 協議。注意自己一個人對自己的約定不能成為協議,協議的前提條件必須是多人約定。
那么網絡協議是什么呢?
網絡協議就是網絡中(包括互聯網)傳遞、管理信息的一些規范。如同人與人之間相互交流是需要遵循一定的規矩一樣,計算機之間的相互通信需要共同遵守一定的規則,這些規則就稱為網絡協議。
沒有網絡協議的互聯網是混亂的,就和人類社會一樣,人不能想怎么樣就怎么樣,你的行為約束是受到法律的約束的;那么互聯網中的端系統也不能自己想發什么發什么,也是需要受到通信協議約束的。
那么我們就可以總結一下,什么是 HTTP?可以用下面這個經典的總結回答一下: HTTP 是一個在計算機世界里專門在兩點之間傳輸文字、圖片、音頻、視頻等超文本數據的約定和規范
九、持久性連接和非持久性連接
HTTP 是可以使用持久性連接和非持久性連接的,下面我們著重探討一下這兩種方式。
1. 非持久性連接
我們首先來探討一下持久性連接的 HTTP。
你是不是很好奇,當你在瀏覽器中輸入網址后,到底發生了什么事情?你想要的內容是如何展現出來的?讓我們通過一個例子來探討一下,我們假設訪問的 URL 地址為
http://www.someSchool.edu/someDepartment/home.index,當我們輸入網址并點擊回車時,瀏覽器內部會進行如下操作:
· DNS 服務器會首先進行域名的映射,找到訪問www.someSchool.edu所在的地址,然后 HTTP 客戶端進程在 80 端口發起一個到服務器 www.someSchool.edu 的 TCP 連接(80 端口是 HTTP 的默認端口)。在客戶和服務器進程中都會有一個套接字與其相連。
· HTTP 客戶端通過它的套接字向服務器發送一個 HTTP 請求報文。該報文中包含了路徑 someDepartment/home.index 的資源,我們后面會詳細討論 HTTP 請求報文。
· HTTP 服務器通過它的套接字接受該報文,進行請求的解析工作,并從其存儲器(RAM 或磁盤)中檢索出對象 www.someSchool.edu/someDepartment/home.index,然后把檢索出來的對象進行封裝,封裝到 HTTP 響應報文中,并通過套接字向客戶進行發送。
· HTTP 服務器隨即通知 TCP 斷開 TCP 連接,實際上是需要等到客戶接受完響應報文后才會斷開 TCP 連接。
· HTTP 客戶端接受完響應報文后,TCP 連接會關閉。HTTP 客戶端從響應中提取出報文中是一個 HTML 響應文件,并檢查該 HTML 文件,然后循環檢查報文中其他內部對象。
· 檢查完成后,HTTP 客戶端會把對應的資源通過顯示器呈現給用戶。
至此,鍵入網址再按下回車的全過程就結束了。上述過程描述的是一種簡單的請求-響應全過程,真實的請求-響應情況可能要比上面描述的過程復雜很多。
上面的步驟舉例說明了非持久性連接的使用,其中每個 TCP 鏈接都在服務器發送完成后關閉。每個 TCP 連接只傳輸一個請求報文和響應報文。
2. 持久性連接的 HTTP
非持久性連接有一些缺點。第一,必須為每個請求的對象建立和維護一個全新的連接。對于每個這樣的連接來說,在客戶端和服務器中都要分配 TCP 的緩沖區和保持 TCP 變量,這給 Web 服務器帶來了嚴重的負擔。因為一臺 Web 服務器可能要同時服務于數百甚至上千個客戶請求。
在采用 HTTP 1.1 持續連接的情況下,服務器在發送響應后保持該 TCP 連接打開不關閉。在相同的客戶與服務器之間,后續的請求和響應報文能夠通過相同的連接進行傳送。一般來說,如果一跳連接經過一定的時間間隔(可配置)后仍未使用,HTTP 服務器就應該關閉其連接。
3. HTTP 報文格式
我們上面描述了一下 HTTP 的請求響應過程,流程比較簡單,但是凡事就怕認真,你這一認真,就能拓展出很多東西,比如 HTTP 報文是什么樣的,它的組成格式是什么? 下面就來探討一下
HTTP 協議主要由三大部分組成:
· 起始行(start line):描述請求或響應的基本信息;
· 頭部字段(header):使用 key-value 形式更詳細地說明報文;
· 消息正文(entity):實際傳輸的數據,它不一定是純文本,可以是圖片、視頻等二進制數據。
其中起始行和頭部字段并成為 請求頭 或者 響應頭,統稱為 Header;消息正文也叫做實體,稱為 body。HTTP 協議規定每次發送的報文必須要有 Header,但是可以沒有 body,也就是說頭信息是必須的,實體信息可以沒有。而且在 header 和 body 之間必須要有一個空行(CRLF),如果用一幅圖來表示一下的話,我覺得應該是下面這樣
 
我們使用上面的那個例子來看一下 http 的請求報文
 
如圖,這是
http://www.someSchool.edu/someDepartment/home.index 請求的請求頭,通過觀察這個 HTTP 報文我們就能夠學到很多東西,首先,我們看到報文是用普通 ASCII 文本書寫的,這樣保證人能夠可以看懂。然后,我們可以看到每一行和下一行之間都會有換行,而且最后一行(請求頭部后)再加上一個回車換行符。
每個報文的起始行都是由三個字段組成:方法、URL 字段和 HTTP 版本字段。
 
4. HTTP 請求方法
HTTP 請求方法一般分為 8 種,它們分別是:
· GET 獲取資源,GET 方法用來請求訪問已被 URI 識別的資源。指定的資源經服務器端解析后返回響應內容。也就是說,如果請求的資源是文本,那就保持原樣返回;
· POST 傳輸實體,雖然 GET 方法也可以傳輸主體信息,但是便于區分,我們一般不用 GET 傳輸實體信息,反而使用 POST 傳輸實體信息,
· PUT 傳輸文件,PUT 方法用來傳輸文件。就像 FTP 協議的文件上傳一樣,要求在請求報文的主體中包含文件內容,然后保存到請求 URI 指定的位置。但是,鑒于 HTTP 的 PUT 方法自身不帶驗證機制,任何人都可以上傳文件 , 存在安全性問題,因此一般的 W eb 網站不使用該方法。若配合 W eb 應用程序的驗證機制,或架構設計采用REST(REpresentational State Transfer,表征狀態轉移)標準的同類 Web 網站,就可能會開放使用 PUT 方法。
· HEAD 獲得響應首部,HEAD 方法和 GET 方法一樣,只是不返回報文主體部分。用于確認 URI 的有效性及資源更新的日期時間等。
· DELETE 刪除文件,DELETE 方法用來刪除文件,是與 PUT 相反的方法。DELETE 方法按請求 URI 刪除指定的資源。
· OPTIONS 詢問支持的方法,OPTIONS 方法用來查詢針對請求 URI 指定的資源支持的方法。
· TRACE 追蹤路徑,TRACE 方法是讓 Web 服務器端將之前的請求通信環回給客戶端的方法。
· CONNECT 要求用隧道協議連接代理,CONNECT 方法要求在與代理服務器通信時建立隧道,實現用隧道協議進行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接層)和 TLS(Transport Layer Security,傳輸層安全)協議把通信內容加 密后經網絡隧道傳輸。
我們一般最常用的方法也就是 GET 方法和 POST 方法,其他方法暫時了解即可。下面是 HTTP1.0 和 HTTP1.1 支持的方法清單
 
5. HTTP 請求 URL
HTTP 協議使用 URI 定位互聯網上的資源。正是因為 URI 的特定功能,在互聯網上任意位置的資源都能訪問到。URL 帶有請求對象的標識符。在上面的例子中,瀏覽器正在請求對象 /somedir/page.html 的資源。
我們再通過一個完整的域名解析一下 URL,比如
http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument 這個 URL 比較繁瑣了吧,你把這個 URL 搞懂了其他的 URL 也就不成問題了。
首先出場的是 http
 
http://告訴瀏覽器使用何種協議。對于大部分 Web 資源,通常使用 HTTP 協議或其安全版本,HTTPS 協議。另外,瀏覽器也知道如何處理其他協議。例如, mailto: 協議指示瀏覽器打開郵件客戶端;ftp:協議指示瀏覽器處理文件傳輸。
第二個出場的是 主機
 
www.example.com 既是一個域名,也代表管理該域名的機構。它指示了需要向網絡上的哪一臺主機發起請求。當然,也可以直接向主機的 IP address 地址發起請求。但直接使用 IP 地址的場景并不常見。
第三個出場的是 端口
 
我們前面說到,兩個主機之間要發起 TCP 連接需要兩個條件,主機 + 端口。它表示用于訪問 Web 服務器上資源的入口。如果訪問的該 Web 服務器使用HTTP協議的標準端口(HTTP為80,HTTPS為443)授予對其資源的訪問權限,則通常省略此部分。否則端口就是 URI 必須的部分。
上面是請求 URL 所必須包含的部分,下面就是 URL 具體請求資源路徑
第四個出場的是 路徑
 
/path/to/myfile.html 是 Web 服務器上資源的路徑。以端口后面的第一個 / 開始,到 ? 號之前結束,中間的 每一個/ 都代表了層級(上下級)關系。這個 URL 的請求資源是一個 html 頁面。
緊跟著路徑后面的是 查詢參數
 
?key1=value1&key2=value2 是提供給 Web 服務器的額外參數。如果是 GET 請求,一般帶有請求 URL 參數,如果是 POST 請求,則不會在路徑后面直接加參數。這些參數是用 & 符號分隔的鍵/值對列表。key1 = value1 是第一對,key2 = value2 是第二對參數
緊跟著參數的是錨點
 
#SomewhereInTheDocument 是資源本身的某一部分的一個錨點。錨點代表資源內的一種“書簽”,它給予瀏覽器顯示位于該“加書簽”點的內容的指示。 例如,在HTML文檔上,瀏覽器將滾動到定義錨點的那個點上;在視頻或音頻文檔上,瀏覽器將轉到錨點代表的那個時間。值得注意的是 # 號后面的部分,也稱為片段標識符,永遠不會與請求一起發送到服務器。
更多有關 HTTP1.1 的內容可以參考博主的這兩篇博文,我感覺已經把 HTTP 講清楚了:
· 看完這篇HTTP,跟面試官扯皮就沒問題了
· 你還在為 HTTP 的這些概念頭疼嗎?
十、因特網中的電子郵件
自從有了因特網,電子郵件就在因特網上流行起來。與普通郵件一樣,電子郵件是一種異步通信媒介,即人們方便的情況下就可以和他人進行郵件往來,而不必與他人進行溝通后在發送。現代電子郵件具有許多強大的特性,包括具有附件、超鏈接、HTML 格式文本和圖片的報文。下面是電子郵件系統的總體概覽
 
從圖中我們可以看到它有三個主要組成部分:用戶代理(user agent)、郵件服務器(mail server)、和簡單郵件傳輸協議(Simple Mail Transfer Protocol,SMTP)。下面我們就來描述一下郵件收發的過程。
用戶代理允許用戶閱讀、回復、轉發、保存和撰寫報文。微軟的 Outlook 和 Apple Mail 是電子郵件用戶代理的例子。當用戶編寫完郵件時,他的用戶代理向郵件服務器發送郵件,此時用戶發送的郵件會放在郵件服務器的外出消息隊列(Outgoing message queue)中,當接收方用戶想要閱讀郵件時,他的用戶代理直接從外出消息隊列中去取得該報文。
郵件服務器構成了整個郵件系統的核心。每個接收方在其中的郵件服務器上會有一個郵箱(mailbox) 存在。用戶的郵箱管理和維護發送給他的報文。一個典型的郵件發送過程是:從發送方的用戶代理開始,傳輸到發送方的郵件服務器,再傳輸到接收方的郵件服務器,然后在這里被分發到接收方的郵箱中。用接收方的用戶想要從郵箱中讀取郵件時,他的郵件服務器會對用戶進行認證。如果發送方發送的郵件無法正確交付給接收方的服務器,那么發送方的用戶代理會把郵件存儲在一個報文隊列(message queue)中,并在以后嘗試再次發送,通常每30分鐘發送一次,如果一段時間后還發送不成功,服務器就會刪除報文隊列中的郵件并以電子郵件的方式通知發送方。
SMTP 是因特網電子郵件中的主要的應用層協議。SMTP 也使用 TCP 作為運輸層協議,保證數據傳輸的可靠性。
1. SMTP 協議傳輸過程
為了描述 SMTP 的基本操作,我們觀察一下下面這種常見的情景。
 
我們假設 Alice 想給 Bob 發送一封簡單的 ASCII 報文:
· Alice 調用她的郵件代理程序并提供 Bob 的郵件地址 (例如 [email protected]),編寫郵件報文,然后指示用戶代理發送該報文
· Alice 的用戶代理把報文發送給她的郵件服務器,在那里該報文被放在消息隊列中。
· 運行在 Alice 的郵件服務器上的 SMTP 客戶端發現了報文隊列中的郵件,它就創建一個到運行在 Bob 郵件服務器上的 SMTP 服務器的 TCP 連接
· 在經過一些初始化 SMTP 握手后,SMTP 客戶端通過該 TCP 連接發送 Alice 的郵件。
· 在 Bob 的郵件服務器上,SMTP 的服務端接收該郵件,Bob 的郵件服務器將郵件放在 Bob 的郵箱中
· 在 Bob 想要看郵件時,他會調用用戶代理閱讀該郵件
上面說的郵件其實就是報文,指的就是一系列 ASCII 碼,SMTP 傳輸郵件之前,需要將二進制多媒體數據編碼為 ASCII 碼進行傳輸。
SMTP 一般不使用中間郵件服務器發送郵件,即使這兩個郵件服務器位于地球的兩端也是這樣的。TCP 連接通常直接連接 Alice 的郵件服務器和 Bob 的郵件服務器。
現在你知道了兩臺郵件服務器郵件發送的大體過程,那么,SMTP 是如何將郵件從 Alice 郵件服務器發送到 Bob 的郵件服務器的呢?主要分為下面三個階段
· 建立連接:在這一階段,SMTP 客戶請求與服務器的25端口建立一個 TCP 連接。一旦連接建立,SMTP 服務器和客戶就開始相互通告自己的域名,同時確認對方的域名。
· 郵件傳送:一旦連接建立后,就開始郵件傳輸。SMTP 依靠 TCP 能夠將郵件準確無誤地傳輸到接收方的郵件服務器中。SMTP 客戶將郵件的源地址、目的地址和郵件的具體內容傳遞給 SMTP 服務器,SMTP 服務器進行相應的響應并接收郵件。
· 連接釋放:SMTP 客戶發出退出命令,服務器在處理命令后進行響應,隨后關閉 TCP 連接。
下面我們分析一個實際的 SMTP 郵件發送過程,以下統稱為SMTP客戶(C)和 SMTP服務器(S)。客戶的主機名為 crepes.fr,服務器的主機名為 hamburger.edu。以 C: 開頭的 ASCII 碼文本就是客戶交給 TCP 套接字的那些行,以 S: 開頭的 ASCII 碼則是服務器發送給其 TCP 套接字的那些行。一旦創建了連接,就開始了如下過程
1. S: 220 hamburger.edu 
2. C: HELO crepes.fr 
3. S: 250 Hello crepes.fr, pleased to meet you 
4. C: MAIL FROM: <[email protected]
5. S: 250 [email protected] ... Sender ok 
6. C: RCPT TO: <[email protected]
7. S: 250 [email protected] ... Recipient ok 
8. C: DATA 
9. S: 354 Enter mail, end with "." on a line by itself 
10. C: Do you like ketchup? 
11. C: How about pickles? 
12. C: . 
13. S: 250 Message accepted for delivery 
14. C: QUIT 
15. S: 221 hamburger.edu closing connection 
在上述例子中,客戶從郵件服務器 crepes.fr 向郵件服務器 hamburger.edu 發送了一個報文 (" Do you like ketchup? How about pickles? ") 。作為對話的一部分,該客戶發送了 5 條命令: HELO(是 HELLO 的縮寫)、 MAMIL FROM、RCPT TO、DATA 以及 QUIT。這些命令都是自解釋的。
什么是自解釋,就是不需要再進行解釋了,命令自己就能解釋自己所要表述的功能。
上面是一個簡單的 SMTP 交換過程,包括了連接建立、郵件傳送和連接釋放三個具體過程
首先建立 TCP 連接、SMTP 調用 TCP 協議的25號端口監聽連接請求,然后客戶端發送 HELO 指令用來表明自己是發送方的身份,然后服務端作出響應。然后,客戶端發送 MAIL FROM 命令,表明客戶端的郵件地址是
上述過程中會涉及幾個類似 HTTP 的狀態碼。250 就表示 OK ,類似 HTTP 的 200。在命令成功時,服務器返回代碼250,如果失敗則返回代碼550(命令無法識別)、451(處理時出錯)、452(存儲空間不夠)、421(服務器不可用)等,354則表示開始信息輸入。
SMTP 的報文會有局限性,SMTP 的局限性表現在只能發送 ASCII 碼格式的報文,不支持中文、法文、德文等,它也不支持語音、視頻的數據。通過 MIME協議,對 SMTP 補充。MIME 使用網絡虛擬終端(NVT)標準,允許非ASCII碼數據通過SMTP傳輸。
2. SMTP 與 HTTP 的對比
HTTP 是我們學習的第一個應用層協議,SMTP 是我們學習的第二個應用層協議,那么我們就對這兩個協議進行比對。
這兩個協議都用于從一臺主機向另一臺主機傳送文件:HTTP 從 Web 服務器向 Web 客戶端(通常是瀏覽器)傳送文件,SMTP 是從一個郵件服務器向另一個郵件服務器傳送文件(即電子郵件報文)。
這兩個協議也會有幾個重要的區別
· 首先,HTTP 是一個 拉協議(pull protocol),客戶端發送請求,請求獲取服務端的資源,然后服務端進行響應,把需要下載的文件傳輸給客戶端;而 SMTP 是一個 推協議(push protocol),SMTP 的客戶端會主動把郵件推送給 SMTP 的服務端。
· 第二個區別是,SMTP 要求每個報文都采用 7 比特的 ASCII 碼格式,如果某報文包含了非 7 比特的 ASCII 自負或二進制數據,則該報文必須按照7比特 ASCII 碼進行編碼。HTTP 數據則不受這種限制。
· 第三個區別是如何處理一個既包含文本又包含圖形的文檔,HTTP 把每個對象封裝到它自己的 HTTP 響應報文中,而 SMTP 則把所有報文對象放在一個報文之中。
十一、DNS 因特網目錄服務協議
試想一個問題,我們人類可以有多少種識別自己的方式?可以通過身份證來識別,可以通過社保卡號來識別,也可以通過駕駛證來識別,盡管我們有多種識別方式,但在特定的環境下,某種識別方法可能比另一種方法更為適合。因特網上的主機和人類一樣,可以使用多種識別方式進行標識。互聯網上主機的一種標識方法是使用它的 主機名(hostname) ,如 www.facebook.com、 www.google.com 等。但是這是我們人類的記憶方式,路由器不會這么理解,路由器喜歡定長的、有層次結構的 IP地址,so,還記得 IP 是什么嗎?
IP 地址現在簡單表述一下,就是一個由 4 字節組成,并有著嚴格的層次結構。例如 121.7.106.83 這樣一個 IP 地址,其中的每個字節都可以用 . 進行分割,表示了 0 - 255 的十進制數字。(具體的 IP 我們會在后面討論)
然而,路由器喜歡的是 IP 地址進行解析,我們人類卻便于記憶的是網址,那么路由器如何把 IP 地址解析為我們熟悉的網址地址呢?這時候就需要 DNS 出現了。
 
DNS 的全稱是 Domain Name System,DNS ,它是一個由分層的 DNS 服務器(DNS server)實現的分布式數據庫;它還是一個使得主機能夠查詢分布式數據庫的應用層協議。DNS 服務器通常是運行 BIND(Berkeley Internet Name Domain) 軟件的 UNIX 機器。DNS 協議運行在 UDP 之上,使用 53 端口。
1. DNS 基本概述
與 HTTP、FTP 和 SMTP 一樣,DNS 協議也是應用層的協議,DNS 使用客戶-服務器模式運行在通信的端系統之間,在通信的端系統之間通過下面的端到端運輸協議來傳送 DNS 報文。但是 DNS 不是一個直接和用戶打交道的應用。DNS 是為因特網上的用戶應用程序以及其他軟件提供一種核心功能。
DNS 通常不是一門獨立的協議,它通常為其他應用層協議所使用,這些協議包括 HTTP、SMTP 和 FTP,將用戶提供的主機名解析為 IP 地址。
下面根據一個示例來描述一下這個 DNS 解析過程,這個和你輸入網址后,瀏覽器做了什么操作有異曲同工之處
你在瀏覽器鍵入 www.someschool.edu/index.html 時會發生什么現象?為了使用戶主機能夠將一個 HTTP 請求報文發送到 Web 服務器 www.someschool.edu ,會經歷如下操作:
· 同一臺用戶主機上運行著 DNS 應用的客戶端
· 瀏覽器從上述 URL 中抽取出主機名 www.someschool.edu ,并將這臺主機名傳給 DNS 應用的客戶端
· DNS 客戶向 DNS 服務器發送一個包含主機名的請求。
· DNS 客戶最終會收到一份回答報文,其中包含該目標主機的 IP 地址
· 一旦瀏覽器收到目標主機的 IP 地址后,它就能夠向位于該 IP 地址 80 端口的 HTTP 服務器進程發起一個 TCP 連接。
除了提供 IP 地址到主機名的轉換,DNS 還提供了下面幾種重要的服務:
· 主機別名(host aliasing),有著復雜的主機名的主機能夠擁有一個或多個其他別名,比如說一臺名為 relay1.west-coast.enterprise.com 的主機,同時會擁有 enterprise.com 和 www.enterprise.com 的兩個主機別名,在這種情況下,relay1.west-coast.enterprise.com 也稱為 規范主機名,而主機別名要比規范主機名更加容易記憶。應用程序可以調用 DNS 來獲得主機別名對應的規范主機名以及主機的 IP地址。
· 郵件服務器別名(mail server aliasing),同樣的,電子郵件的應用程序也可以調用 DNS 對提供的主機名進行解析。
· 負載分配(load distribution),DNS 也用于冗余的服務器之間進行負載分配。繁忙的站點例如 cnn.com 被冗余分布在多臺服務器上,每臺服務器運行在不同的端系統之間,每個都有著不同的 IP 地址。由于這些冗余的 Web 服務器,一個 IP 地址集合因此與同一個規范主機名聯系。DNS 數據庫中存儲著這些 IP 地址的集合。由于客戶端每次都會發起 HTTP 請求,所以 DNS 就會在所有這些冗余的 Web 服務器之間循環分配了負載。
2. DNS 工作概述
DNS 是一個復雜的系統,我們在這里只是就其運行的主要方面進行學習,下面給出一個 DNS 工作過程的總體概述
假設運行在用戶主機上的某些應用程序(如 Web 瀏覽器或郵件閱讀器) 需要將主機名轉換為 IP 地址。這些應用程序將調用 DNS 的客戶端,并指明需要被轉換的主機名。用戶主機上的 DNS 收到后,會使用 UDP 通過 53 端口向網絡上發送一個 DNS 查詢報文,經過一段時間后,用戶主機上的 DNS 會收到一個主機名對應的 DNS 回答報文。因此,從用戶主機的角度來看,DNS 就像是一個黑盒子,其內部的操作你無法看到。但是實際上,實現 DNS 這個服務的黑盒子非常復雜,它由分布于全球的大量 DNS 服務器以及定義了 DNS 服務器與查詢主機通信方式的應用層協議組成。
DNS 最早的一種簡單設計只是在因特網上使用一個 DNS 服務器。該服務器會包含所有的映射。這是一種集中式的設計,這種設計并不適用于當今的互聯網,因為互聯網有著數量巨大并且持續增長的主機,這種集中式的設計會存在以下幾個問題
· 單點故障(a single point of failure),如果 DNS 服務器崩潰,那么整個網絡隨之癱瘓。
· 通信容量(traaffic volume),單個 DNS 服務器不得不處理所有的 DNS 查詢,這種查詢級別可能是上百萬上千萬級
· 遠距離集中式數據庫(distant centralized database),單個 DNS 服務器不可能 鄰近 所有的用戶,假設在美國的 DNS 服務器不可能臨近讓澳大利亞的查詢使用,其中查詢請求勢必會經過低速和擁堵的鏈路,造成嚴重的時延。
· 維護(maintenance),維護成本巨大,而且還需要頻繁更新。
所以 DNS 不可能集中式設計,它完全沒有可擴展能力,因此采用分布式設計,所以這種設計的特點如下:
首先分布式設計首先解決的問題就是 DNS 服務器的擴展性問題,因此 DNS 使用了大量的 DNS 服務器,它們的組織模式一般是層次方式,并且分布在全世界范圍內。沒有一臺 DNS 服務器能夠擁有因特網上所有主機的映射。相反,這些映射分布在所有的 DNS 服務器上。
大致來說有三種 DNS 服務器:根 DNS 服務器、 頂級域(Top-Level Domain, TLD) DNS 服務器 和 權威 DNS 服務器 。這些服務器的層次模型如下圖所示
 
假設現在一個 DNS 客戶端想要知道 www.amazon.com 的 IP 地址,那么上面的域名服務器是如何解析的呢?首先,客戶端會先根服務器之一進行關聯,它將返回頂級域名 com 的 TLD 服務器的 IP 地址。該客戶則與這些 TLD 服務器之一聯系,它將為 amazon.com 返回權威服務器的 IP 地址。最后,該客戶與 amazom.com 權威服務器之一聯系,它為 www.amazom.com 返回其 IP 地址。
我們現在來討論一下上面域名服務器的層次系統
· 根 DNS 服務器 ,有 400 多個根域名服務器遍及全世界,這些根域名服務器由 13 個不同的組織管理。根域名服務器的清單和組織機構可以在 https://root-servers.org/ 中找到,根域名服務器提供 TLD 服務器的 IP 地址。
· 頂級域 DNS 服務器,對于每個頂級域名比如 com、org、net、edu 和 gov 和所有的國家級域名 uk、fr、ca 和 jp 都有 TLD 服務器或服務器集群。所有的頂級域列表參見 https://tld-list.com/ 。TDL 服務器提供了權威 DNS 服務器的 IP 地址。
· 權威 DNS 服務器,在因特網上具有公共可訪問的主機,如 Web 服務器和郵件服務器,這些主機的組織機構必須提供可供訪問的 DNS 記錄,這些記錄將這些主機的名字映射為 IP 地址。一個組織機構的權威 DNS 服務器收藏了這些 DNS 記錄。
一般域名服務器的層次結構主要是以上三種,除此之外,還有另一類重要的 DNS 服務器,它是 本地 DNS 服務器(local DNS server)。嚴格來說,本地 DNS 服務器并不屬于上述層次結構,但是本地 DNS 服務器又是至關重要的。每個 ISP(Internet Service Provider) 比如居民區的 ISP 或者一個機構的 ISP 都有一臺本地 DNS 服務器。當主機和 ISP 進行連接時,該 ISP 會提供一臺主機的 IP 地址,該主機會具有一臺或多臺其本地 DNS 服務器的 IP地址。通過訪問網絡連接,用戶能夠容易的確定 DNS 服務器的 IP地址。當主機發出 DNS 請求后,該請求被發往本地 DNS 服務器,它起著代理的作用,并將該請求轉發到 DNS 服務器層次系統中。
3. DNS 緩存
DNS 緩存(DNS caching) 有時也叫做 DNS 解析器緩存,它是由操作系統維護的臨時數據庫,它包含有最近的網站和其他 Internet 域的訪問記錄。也就是說, DNS 緩存只是計算機為了滿足快速的響應速度而把已加載過的資源緩存起來,再次訪問時可以直接快速引用的一項技術和手段。那么 DNS 的緩存是如何工作的呢?
DNS 緩存的工作流程:
在瀏覽器向外部發出請求之前,計算機會攔截每個請求并在 DNS 緩存數據庫中查找域名,該數據庫包含有最近的域名列表,以及 DNS 首次發出請求時 DNS 為它們計算的地址。
4. DNS 記錄和報文
共同實現 DNS 分布式數據庫的所有 DNS 服務器存儲了資源記錄(Resource Record, RR),RR 提供了主機名到 IP 地址的映射。每個 DNS 回答報文中會包含一條或多條資源記錄。RR 記錄用于回復客戶端查詢。
資源記錄是一個包含了下列字段的 4 元組:
1. (Name, Value, Type, TTL) 
RR 會有不同的類型,下面是不同類型的 RR 匯總表:
 
DNS 報文:
DNS 有兩種報文,一種是查詢報文,一種是響應報文,并且這兩種報文有著相同的格式,下面是 DNS 的報文格式
 
下面對報文格式進行解釋:
· 前 12 個報文是 首部區域,也就是說首部區域有 12 個字節,第一個字段(標識符)是一個 16 比特的數,用于標示該查詢。這個標識符會被復制到對查詢的回答報文中,以便讓客戶用它來匹配發送的請求和接受到的回答。 標志字段含有若干標志,標志字段表示為 1 比特,它用于指出報文是 0-查詢報文還是 1-響應報文。
· 問題區域包含著正在進行的查詢信息。這個區域包括:1) 名字字段,包含正在被查詢的主機名字;2) 類型字段,指出有關該名字的正被詢問的問題類型,例如主機地址是與一個名字相關聯(類型 A)還是與某個名字的郵件服務器相關聯(類型 MX)。
· 在來自 DNS 服務器的回答中,回答區域包含了對最初請求的名字的資源記錄。上面說過 DNS RR記錄是個四元組,而且元組中的 Type 會有不同的類型。在回答報文的回答區域中可以包含多條 RR,因此一個主機名能夠有多個 IP 地址。
· 權威區域 包含了其他權威服務器的記錄
· 附加區域 包含了其他有幫助的記錄。
關于具體 DNS 記錄的詳細介紹我會出一篇文章專門探討。
十二、P2P 文件分發
我們上面探討的協議 HTTP、SMTP、DNS 都采用了客戶-服務器 模式,這種模式會極大依賴總是打開的基礎設施服務器。而 P2P是客戶端與客戶端模式,對總是打開的基礎設施服務器有最小的依賴。
P2P 的全稱是 Peer-to-peer, P2P ,是一種分布式體系結構的計算機網絡。在 P2P 體系中,所有的計算機和設備都被稱為對等體,他們互相交換工作。對等網絡中的每個對等方都等于其他對等方。網絡中沒有特權對等體,也沒有主管理員設備。
 
從某種意義上說,對等網絡是計算機世界中最平等的網絡。每個對等方都相等,并且每個對等方具有與其他對等方相同的權利和義務。對等體同時是客戶端和服務器。
實際上,對等網絡中可用的每個資源都是在對等之間共享的,而無需任何中央服務器。P2P 網絡中的共享資源可以是諸如處理器使用率,磁盤存儲容量或網絡帶寬等。
1. P2P 用來做什么
P2P 的主要目標是共享資源并幫助計算機和設備協同工作,提供特定服務或執行特定任務。如前面說到的,P2P 用于共享各種計算資源,例如網絡帶寬或磁盤存儲空間。 但是,對等網絡最常見的例子是 Internet 上的文件共享。 對等網絡非常適合文件共享,因為它們允許連接到它們計算機等同時接收文件和發送文件。
BitTorrent 是 P2P 使用的主要協議。
2. P2P 網絡的作用
P2P 網絡具有一些使它們有用的特征:
· 很難完全掉線,即使其中的一個對等方掉線,其他對等方仍在運行并進行通信。 為了使 P2P(對等)網絡停止工作,你必須關閉所有對等網絡。對等網絡具有很強的可擴展性。 添加新的對等節點很容易,因為你無需在中央服務器上進行任何中央配置。
· 當涉及到文件共享時,對等網絡越大,速度越快。 在 P2P 網絡中的許多對等點上存儲相同的文件意味著當某人需要下載文件時,該文件會同時從多個位置下載。
十三、視頻流和內容分發網
1. 因特網視頻
在流式存儲視頻應用中,最基礎的媒體是預先錄制的視頻例如電影、電視節目、錄制好的體育事件或者用戶生成的視頻。這些預先錄制好的視頻會放置在服務器上,用戶按需向服務器發送請求來觀看視頻。許多因特網公司現在提供流式視頻,這些公司包括 Netflix、YouTube 、亞馬遜和優酷等。
視頻式一系列的圖像,通常會以一種恒定的速率(如每秒 24 或 30 張圖像)來展現。一幅未壓縮、數字編碼的圖像由像素陣列組成,其中每個像素又一些比特編碼來表示亮度和顏色。視頻的一個重要特征是它能夠被壓縮、因而可用比特率來權衡視頻質量。
2. HTTP 流和 DASH
在 HTTP 流中,視頻只是存儲在 HTTP 服務器中的一個文件,每個文件有特定的 URL。當用戶想要看視頻時,客戶與服務器創建一個 TCP 連接并發送該 URL 的 HTTP GET 請求。服務器則以底層網絡協議和流量條件允許的盡可能快的速率,在一個 HTTP 響應中發送該文件視頻。
盡管 HTTP 流在實踐中已經得到廣泛部署,但是它由嚴重缺陷,即所有客戶接收到相同編碼的視頻,但是對于客戶而言,帶寬時動態變化的,在不同的時間,帶寬大小有很大不同。這種情況導致了一種新型 HTTP 流的研發,它常常被稱為 經 HTTP 的動態適應性流(Dynamic Adaptive Streaming over HTTP, DASH)。在 DASH 中,視頻編碼為幾個不同的版本,每個版本對應不同的比特率。
DASH 允許客戶使用不同的以太網接入速率流失播放具有不同編碼速率的視頻。使用 3G 連接的客戶能夠接受一個低比特率的版本,使用光纖能夠接受高比特率的版本。
使用 DASH 后,每個視頻版本存儲在 HTTP 中,每個版本都有一個不同的 URL。HTTP 服務器也會有一個 告示文件(manifest file),為每個版本提供了一個 URL 及其比特率。
3. 內容分發網
現如今,許多因特網視頻公司日復一日地向數以百萬計的用戶按需分發每秒數兆比特的流。對于一個因特網視頻公司,或許提供流式視頻服務最為直接的方法是建立一個單一的超大規模的數據中心。在數據中心內部存儲所有視頻,然后把視頻返回到全世界范圍內的客戶。這種方式存在三個問題:
· 如果客戶遠離數據中心,服務器到客戶的分組將跨越許多通信鏈路并可能通過很多 ISP,造成通信延遲
· 流式視頻可能經過相同的鏈路發送了許多次,造成帶寬和資源浪費。
· 單點問題,如果單一結點故障,這可能是災難性的。
為了應對向分布于去啊按時接的用戶分發巨量視頻數據的挑戰,幾乎所有主要的視頻流公司都利用 內容分發網(Content Distribution Network, CDN)。 CDN 管理分布在多個地理位置上的服務器,在它的服務器上存儲視頻副本,并且所有試圖將每個用戶請求定向到一個提供最好用戶體驗的 CDN 位置。那么服務器如何選址呢?事實上有兩種服務器安置原則
深入,它的主要目標是靠近用戶,通過減少端用戶和 CDN 集群之間鏈路和路由器的數量,從而改善了用戶感受的時延和吞吐量。
邀請做客,這個原則是通過在少量(例如 10 個)關鍵位置建造大集群來邀請 ISP 來做客,與深入設計原則相比,邀請做客設計通常產生較低的維護和管理開銷。
CDN 可以是專用 CDN(private CDN), 即它由內容提供商自己所擁有;另一種 CDN 是 第三方 CDN(third-party CDN),它代表多個內容提供商分發內容。
4. CDN 分發過程
上面我們探討了一下 CDN 的選址過程,那么 CDN 是如何工作的呢?
當用戶主機中的一個瀏覽器指令檢索一個特定的視頻(由 URL 標識)時,CDN 必須能夠截獲請求,來進行下面的操作:
· 確定此時適用于該客戶的 CDN 服務器集群
· 將客戶的請求重定向到集群中的某臺服務器上
大多數 CDN 利用 DNS 協議來截獲和重定向請求。
下面是 CDN 的具體工作流程:
假設一個內容提供商 NetCinema ,雇用了第三方 CDN 公司 KingCDN 來向它的客戶分發視頻。在 NetCinema 的 Web 網頁上,它的每個視頻都被指派了一個 URL,該 URL 包括了字符串 video 以及視頻本身的標識符。下面要訪問 http://video.netcinema.com/6Y7B23V ,它的工作過程如下
 
· 用戶訪問位于 NetCinema 的 Web 網頁
· 當用戶點擊鏈接 http://video.netcinema.com/6Y7B23V 時,該用戶主機發送了對于 video.netcinema.com 的 DNS 請求
· 用戶本地 DNS 服務器(LDNS, Local DNS) 將該 DNS 請求中繼到一臺用于 NetCinema 的權威 DNS 服務器,該服務器觀察到主機名 video.netcinema.com 中的字符串 video。為了將該 DNS 請求移交給 KingCDN,NetCinema 權威 DNS 服務器并不返回一個 IP 地址,而是向 LDNS 返回一個 KingCDN 域的主機名,如 a1105.kingcdn.com
· 從此時起,DNS 請求就會進入 KingCDN 專用 DNS 基礎設施,用戶的 LDNS 則發送第二個請求,此時是對 a1105.kingcdn.com 的 DNS 請求,KingCDN 的 DNS 系統最終向 LDNS 返回 KingCDN 內容服務器的 IP 地址。所以正是這里,在 KingCDN 的 DNS 系統中,指定了 CDN 服務器,客戶將能夠從這臺服務器接收它的內容
· LDNS 向用戶主機轉發內容服務 CDN 節點的 IP 地址
· 一旦客戶收到 KingCDN 內容服務器的 IP 地址,它與具有該 IP 地址的服務器創建一條 TCP 連接,并且發出對該視頻的 HTTP GET 請求。如果使用了 DASH,服務器將首先向客戶發送具有 URL 列表的告示文件,每個 URL 對應視頻的每個版本,并且客戶將動態的選擇來自不同版本的塊。
5. CDN 的集群選擇策略
任何 CDN 的部署,其核心是 集群選擇策略(cluster selection strategy), 即動態的將客戶定向到 CDN 中某個服務器集群或數據中心的機制。一種簡單的策略是指派客戶到 地理上最為臨近(geographically closest) 的集群。這種選擇策略忽略了時延和可用帶寬隨因特網路徑時間而變化,總是為特定的客戶指派相同的集群;還有一種選擇策略是 實時測量(real-time measurement),該機制是基于集群和客戶之間的時延和丟包性能執行周期性檢查。

相關文章

IT外包服務
二維碼 關閉
主站蜘蛛池模板: 美国一级欧美三级_久热精品免费视频_真实的国产乱ⅹxxx66v_免费精品国产自产拍在线观看图片_a中文在线_年轻的少妇做a_午夜影院0606_99成人精品 | 最近免费中文字幕在线视频2_国产又粗又猛又黄又爽无遮挡_在线播放国产不卡免费视频_国产精品久久久久影视_国产女厕所盗摄老师厕所嘘嘘_国产AV夜夜欢一区二区三区_99国产精品一区二区_国产精品亚洲精品久久精品 | 国产成人无码av一区二区在线观看_91久久爽久久爽爽久久片_天天天天天干_97超超碰_精品无码久久久久国产_欧美不卡中文字幕一区二区_国产伦精品一区二区三区妓女_日本高清免费视频 | 久久婷婷人人澡人人爽人人喊_亚洲中文欧美日韩在线观看_一本一道波多野结衣一区_青青视频一区_国产精品视频免费一区_在线免费亚洲_国精产品一区一区三区在线观看_日日噜噜夜夜狠狠久久丁香五月 | 欧美日本中文字幕_小峰色戒网站_狠狠的干性视频_国产精品麻豆视频_本道久久综合无码中文字幕_国产一区二区美女_青青网站_亚洲视频在线a | 欧美图片小说_欧洲日韩在线观看_妞干网免费_国产精品视频一区在线观看_精品黄色录像_精品少妇人妻av一区二区_大香伊蕉在人线国产av_国产精品亚洲欧美卡通动漫 | 成年人黄色一级片_99精品国产在热久久_蜜桃在线播放_国产台湾无码av片在线观看_日本aaa大片_国产成人久久AV一区二区_国产成人精品一区二区视频免费_国产69精品久久久久99尤 | 亚洲第一成年人视频_麻豆网站在线_狠狠鲁视频_亚洲人成人影院在线观看_萍萍的性荡生活2_欧美一级日韩一级无毒不卡_国产精品久久精品99国产百盛_蜜臀av性久久久久蜜臀aⅴ四虎 | 不卡视频一二三区_爱逼爱操综合网_一区二区在线免费播放_久久伊人av_久久九九国产精品怡红院_男女一边摸一边做爽爽的免费阅读_久久精品无码专区免费青青_91精品啪 | 红杏国产成人精品视频_欧美超碰在线观看_免费日韩一区_国产一二三精品无码不卡日本_www.亚洲精品.com_国产精品久久久久久久岛一牛影视_国产精品人妻一区夜夜爱_人人人人爱 | 美女网站免费福利视频_内射无码专区久久亚洲_五月色丁香综缴合_第四色狠狠_久久久久久一级毛片_99精品国产一区二区三区A片_男女上下猛烈啪啪免费看_www.色网 | 精品一区二区久久久久无码_福利一区二区_日韩精品动漫一区二区三区_中文字幕痴汉一色桃子视频_免费视频久久久久_丰满少妇高潮惨叫久久久一_波多野结衣1区_国产成人理论在线观看视频 | 热の无码热の有码热の综合_日本高清高色_日韩免费一级a毛片在线播放一级_好吊色国产_国产片免费福利片永久_91网页视频入口在线观看_精品在线欧美一区二区_狠狠躁夜夜躁av蜜臀少妇 | 国产第二区_久久成人影院精品99_一区二区在线观看av_国产精品青青草_精品视频—区二区三区免费_国产一区二区三区av在线_337p欧美顶级日本大片_男人又大又硬又粗视频 | 俺去俺来也在线www色官_久久久久久久国产a∨_九色综合婷婷_亚洲成人久久一区_久久一区免费_我半夜摸妺妺的奶摸到高潮_AV天堂中AV世界中文在线播放_日黄的免费视频 | 日本50岁熟妇XXXX_成人爽视频_神马久草_欧美日韩黄色一级片_亚洲精品一线二线三线无人区_黄色成人影院在线观看_亚洲欧美激情精品一区二区_扒开末成年粉嫩的小缝图片 | 欧美精品欧美精品系列c_国产a一级毛片_少妇人妻系列无码专视频区_韩日av网站_色婷婷久久久久swag精品_JULIA无码中文字幕一区_日日骚视频_能在线看的av | 护士被强女千到高潮视频_国产果冻豆传媒麻婆_狠狠五月深爱婷婷网_黄色大片入口_亚洲熟妇无码AV另类VR影视_日本成人手机在线_日韩高清不卡一区二区_人人做人人妻人人精 | 偷看洗澡一二三区美女_blacked欧美黑粗硬大_国产在线无码视频一区_日本一道综合一本88在线_波多野结衣视频在线观看_9色国产深夜内射_在线观看国产一区_67pao国产在线观看 | 久久精品青青大伊人av_在线日本看片免费人成视久网_日本色呦呦_一级黄色视频久久网_久久资源免费视频_久久狼人综合_午夜影院在线免费_出差被绝伦上司侵犯中文字幕 | 欧美人与动牲交A免费观看_一本色道综合久久亚洲精品_变态孕交videosgratis孕妇_国模无码视频一区二区三区_无码精品人妻一区二区三刘亦菲_一级片视频播放_一级成人毛片_FUCK东北老女人HD对话 | 日韩女优一区二区三区_久久久久亚洲AV片无码V_日本国产一区_久久精品国产国产精品四凭_成av免费大片黄在线观看_日韩天堂一区_福利网站视频_国产精品人人妻人人爽久久 | 亚洲免费一级视频_女人一级片_一本一本久久a久久精品国产_久久精品一本久久99精品_国产精品久久久久久福利一牛影视_天堂影院麻豆_午夜理论无码片在线观看免费_久久爱成人网 | 奇米777官网_免费99精品国产自在在线_国产精品WWW夜色视频_国产美女无遮挡免费_9999视频_特级做爰片毛片免费看小说_国产白浆二区二区精品视频_欧美成人黑人xx视频免费观看 | 国产九九免费_91精品久久久久久久久入口_久久国产精品成人免费_国产美熟女乱又伦av果冻传媒_精品国产精品三级精品av网址_中国娇小与黑人巨大交_中国毛片一级片_鲁一鲁AV2019在线 | 欧美性战a久久久久久_欧美性爱一区三区_大地免费资源观看_精品1区2区3区4区_国产在线榴莲视频导航_97久久精品人人槡人妻人人玩_一级红色毛片_国产AV无码专区亚洲版 | 中日韩精品无码一区二区三区_国产精品福利视频一区_国产成人一区二区视频免费_国产精品麻豆视频国产馆_日本国产一区二区三区在线观看_free国产粉嫩熟妇xxxhd_国产精品无码久久综合_激情影院内射美女 | 中文天堂在线WWW最新版官网_国产精品性爱_高清一区在线观看_国产精品国产三级国产专区50_91精品视频在线免费观看_亚州av在线_丁香伊人网_国产精品美女一区 | 亚洲超碰人人_国产在线视频欧美一区二区三区_天天av导航_日韩精品一区二区三区在线视频_日本激情在线视频_免费看a的网站_日韩午夜一区二区三区_视色视频 | 久久精品aⅴ无码中文字字幕重口_特级黄色网_国产在线一二区_免费黄色一区二区_性欧美18~19sex高清播放_久久精品一区_精品国产乱码久久久软件使用方法_国产h片在线观看 | 亚洲欲色欲色xxxxx在线观看_亚洲国产视频精品_国产精品亚洲视频_久久精品男女_国产国产成年年人免_亚洲精品无码久久久久久_影视免费观看_一边吃奶一边摸做爽视频 | 免费在线全程观看_视频一区二区国产无限在线观看_国产原厂视频在线观看_MM1313亚洲精品无码久久_91人妻人人澡人人爽人人精品_亚洲熟妇色XXXXⅩ欧美_国产视频一区二区三区在线_日本艳妓BBW高潮一19 | 国产一区二区影视_不卡一区在线_西西人体大胆啪啪实拍_一级黄色aaaa_国产中文字幕在线看_欧美一区=区_中文字幕亚洲高清_国产原创三级 | 欧美顶级毛片在线播放_日韩五区_国产一级午夜_avhd101素人diy入口_成人免费一级片_超碰香蕉在线_无码人妻一区二区免费视频_51国产午夜免费福利视频 | 中文字幕在线观看一区二区_日本极品少妇videossexhd_欧美中文一区_亚洲成人www_国产精品一级无遮挡毛片_香蕉av久久一区二区三区_VideOS性饥渴_国产精品萝li | 亚洲精品久久久久无码AV片软件_日本国产欧美大码a视频_欧美一区二区三区视频在线_久久国产精品偷_日本午夜精品视频_日日干夜夜撸_www.久色_欧美视频完全免费看 | 亚洲色图在线免费观看_久亚洲一线产区二线产区三线产_国产免费久久久久久无码_龙珠z中文版普通话_国产又色又爽又黄又免费_japanese日本护士高潮_午夜久久视频_精灵宝可梦旅途中文版免费观看 | 国内一区二区三区在线观看_亚洲中文字幕av无码专区_久久中文字幕无码A片不卡男同_18成禁人视频免费网站_亚洲欧洲精品专线_精品亚洲国产专区在线观看_欧美疯狂xxxxbbbb牲交_伊人色综合一区二区三区 | 久久亚洲免费视频_韩国一级黄色录像_国产极品美女到高潮_妺妺窝人体色WWW视频_日韩精品真人荷官无码_日韩AV无码一网二网三网_91亚洲精品久久久久图片蜜桃_segui88久久综合9999 | 老赵揉着粉嫩的双乳小说_在线观看无码AV免费不卡软件_日日爽视频_久久蜜臀_免费大黄网站在线观_久热精品在线中文字幕播放_欧美一级理论性理论a_色婷婷综合久久久久中文一区二区 | 久久婷婷人人澡人人爽人人喊_亚洲中文欧美日韩在线观看_一本一道波多野结衣一区_青青视频一区_国产精品视频免费一区_在线免费亚洲_国精产品一区一区三区在线观看_日日噜噜夜夜狠狠久久丁香五月 |