嘛。。。沒什么可說的Orz既然上次開了SQL的坑,這次就說說計(jì)算機(jī)網(wǎng)絡(luò)好了(之前的坑快去填啊喂?。㎡rz那么名字也延續(xù)上次的嗯?!胺独蠞駨牟粫?huì)計(jì)算機(jī)網(wǎng)絡(luò)”,參考書籍是James F. Kurose和Keith W. Ross的《計(jì)算機(jī)網(wǎng)絡(luò):自頂向下方法》。
說到網(wǎng)絡(luò)就不得不說TCP/IP協(xié)議,即傳輸控制協(xié)議(Transmission Control Protocol)和網(wǎng)際協(xié)議(Internet Protocol)。我們也知道TCP/IP協(xié)議分為五層,那么就一層一層說吧。
一、應(yīng)用層
應(yīng)用層,顧名思義,和網(wǎng)絡(luò)應(yīng)用的原理與實(shí)現(xiàn)有關(guān)。我們在這一章中主要會(huì)了解Web、電子郵件、DNS和對(duì)等郵件分發(fā)等網(wǎng)絡(luò)應(yīng)用。同時(shí),我們也會(huì)接觸一些TCP/UDP的網(wǎng)絡(luò)應(yīng)用開發(fā)與運(yùn)行。Socket這個(gè)詞你可能并不陌生,它就可以用來實(shí)現(xiàn)一些客戶端——服務(wù)端應(yīng)用程序。
1.1原理
1.1.1 網(wǎng)絡(luò)應(yīng)用程序體系結(jié)構(gòu)
主要分兩種:客戶端——服務(wù)端體系結(jié)構(gòu)(client-server architecture)和P2P體系結(jié)構(gòu)(Peer to Peer architecture)。
客戶端——服務(wù)端體系結(jié)構(gòu)中,用于產(chǎn)生請求(request)的被稱為客戶端(client),用于處理請求,產(chǎn)生響應(yīng)(response)的被稱為服務(wù)端。例如用戶在瀏覽器中點(diǎn)擊了一個(gè)鏈接,即向服務(wù)器請求了一個(gè)頁面;web服務(wù)器接收到請求后,返回所請求的對(duì)象作為相應(yīng)。
客戶端——服務(wù)端體系結(jié)構(gòu)有兩個(gè)特點(diǎn):
- 客戶端之間不直接通信;
- 服務(wù)端具有固定、周知的地址(被稱為IP地址)。
按照常識(shí),如果客戶端請求過多,服務(wù)端必然不堪重負(fù)。因此,一些壓力比較大的網(wǎng)絡(luò)服務(wù)常常在全球各地建立數(shù)據(jù)中心,既分散了壓力,又加快了不同地區(qū)的訪問速度。
而P2P體系結(jié)構(gòu)對(duì)于數(shù)據(jù)中心的專用服務(wù)器依賴很小,或者說沒有依賴;相反,應(yīng)用程序在間斷連接的主機(jī)對(duì)之間直接通信。這些主機(jī)對(duì)之前被稱為對(duì)等方。這些對(duì)等方也不為服務(wù)提供商所有,而是臺(tái)式機(jī)、筆記本、手機(jī)等個(gè)人設(shè)備。P2P體系結(jié)構(gòu)最顯著的優(yōu)點(diǎn)就是它的自擴(kuò)展性(self-scalability),即在一個(gè)P2P文件共享服務(wù)中,每個(gè)對(duì)等方都由于請求產(chǎn)生工作量, 但是每個(gè)對(duì)等方也向其他對(duì)等方分發(fā)文件,從而提高了整個(gè)系統(tǒng)的服務(wù)能力。
而P2P體系結(jié)構(gòu)也面臨三大挑戰(zhàn):
- ISP友好:由于ISP的本地優(yōu)化,下載速度一般比上傳速度要小得多,從而影響了系統(tǒng)整體性能;
- 安全性:由于P2P的高度分布性,P2P應(yīng)用會(huì)給安全帶來挑戰(zhàn);
- 激勵(lì):如何說服用戶為P2P應(yīng)用提供存儲(chǔ)、帶寬、計(jì)算等資源。
1.1.2 進(jìn)程通信
我們都知道,在操作系統(tǒng)中,進(jìn)行通信的實(shí)際上是進(jìn)程(process)。兩個(gè)不同端系統(tǒng)上的進(jìn)程通過報(bào)文(message)相互通信。
對(duì)于每一對(duì)通信進(jìn)程,我們通常將這兩個(gè)進(jìn)程之一標(biāo)示為客戶端(client),而另一個(gè)標(biāo)示為服務(wù)端(server)。對(duì)于P2P文件共享系統(tǒng)中,一個(gè)進(jìn)程可以既上傳文件,又下載文件;但是對(duì)于某一個(gè)通信場景,仍可以將一個(gè)進(jìn)程表示為客戶端,一個(gè)進(jìn)程標(biāo)示為服務(wù)端,定義如下:
- 在給定的一對(duì)進(jìn)程之間的通信會(huì)話場景中,發(fā)起通信的進(jìn)程被標(biāo)識(shí)為客戶端,在會(huì)話開始時(shí)等待聯(lián)系的進(jìn)程是服務(wù)端
進(jìn)程之間通過socket作為API發(fā)送或者接收報(bào)文,通過IP地址和端口號(hào)來尋址。IP地址來確定主機(jī),而端口號(hào)用來標(biāo)識(shí)不同的服務(wù)。如web服務(wù)器用80端口,郵件服務(wù)器進(jìn)程用25端口,ssh服務(wù)用22端口等等。
1.1.3 可供應(yīng)用程序使用的運(yùn)輸服務(wù)
對(duì)于服務(wù)來說,必然面對(duì)各種各樣的需求。衡量一個(gè)需求通常有以下幾個(gè)維度:
- 可靠數(shù)據(jù)傳輸
例如電子郵件、文件傳輸、遠(yuǎn)程主機(jī)訪問等應(yīng)用,數(shù)據(jù)丟失可能導(dǎo)致災(zāi)難性的后果。確保數(shù)據(jù)正確、完全的傳輸?shù)臄?shù)據(jù)交付服務(wù)被稱為可靠數(shù)據(jù)傳輸。
相對(duì)的,也存在容忍丟失的應(yīng)用,如民用交談式音頻/視頻等。 - 吞吐量
在一些網(wǎng)絡(luò)應(yīng)用,如流媒體播放、大規(guī)模分布式計(jì)算中,如果處理不好的話,網(wǎng)絡(luò)帶寬可能成為影響整體系統(tǒng)性能的短板。具有數(shù)據(jù)吞吐量要求的應(yīng)用被稱為帶寬敏感的應(yīng)用。而彈性應(yīng)用能根據(jù)情況或多或少地利用可供使用的吞吐量,如電子郵件、文件傳輸、web傳送等。 - 定時(shí)
運(yùn)輸層協(xié)議也能提供定時(shí)保證。在一些線上交互場景,如網(wǎng)絡(luò)游戲、網(wǎng)絡(luò)電話會(huì)議等場合,若不能保證報(bào)文在一定時(shí)間內(nèi)(如100ms)到達(dá),則可能出現(xiàn)卡頓的情況。 - 安全性
主要指防止在傳送過程中被第三方抓包兒導(dǎo)致的信息泄漏??刹扇〖用艿却胧?。
1.1.4 因特網(wǎng)提供的的運(yùn)輸服務(wù)
主要是TCP和UDP兩種。
TCP服務(wù)模型包括面向連接的服務(wù)和可靠數(shù)據(jù)傳輸服務(wù)。
- 面向連接的服務(wù):在應(yīng)用層報(bào)文開始流動(dòng)之前,TCP讓客戶端和服務(wù)端互相交換運(yùn)輸曾控制信息,即“握手”。在這個(gè)階段后,一個(gè)TCP連接就在兩個(gè)進(jìn)程的socket之前建立了。TCP連接是全雙工的,連接雙方的進(jìn)程可以在此連接上同時(shí)進(jìn)行報(bào)文的收發(fā)。應(yīng)用程序結(jié)束報(bào)文連接后,必須拆除該連接;
- 可靠的數(shù)據(jù)傳輸服務(wù):通信進(jìn)程能夠通過TCP,無差錯(cuò),按適當(dāng)順序交付所有發(fā)送的數(shù)據(jù)。
TCP協(xié)議還具有擁塞控制機(jī)制。
為了解決傳送過程中的安全問題,SSL(Secure Socket Layer)技術(shù)將TCP“升級(jí)”,有自己的API,但是SSL不是同TCP、UDP同一層次的傳輸協(xié)議,而是對(duì)TCP的“加強(qiáng)”。
UDP是一種不提供不必要服務(wù)的輕量級(jí)運(yùn)輸協(xié)議。UDP是無連接的,沒沒有握手過程。UDP協(xié)議提供一種不可靠數(shù)據(jù)傳送服務(wù),即不保證報(bào)文到達(dá)接收進(jìn)程,也不保證到達(dá)順序。
UDP協(xié)議也不具有擁塞控制機(jī)制。
然而,目前任何一種協(xié)議都無法提供定時(shí)或帶寬保證。
1.1.5 應(yīng)用層協(xié)議
應(yīng)用層協(xié)議主要解決報(bào)文的結(jié)構(gòu)的定義,例如:
- 交換的報(bào)文類型,例如請求報(bào)文和響應(yīng)報(bào)文;
- 各種報(bào)文類型的語法,即報(bào)文中字段及其描述方式;
- 字段的定義;
- 一個(gè)進(jìn)程何時(shí)以及如何發(fā)送報(bào)文,對(duì)報(bào)文進(jìn)行響應(yīng)的規(guī)則。