計(jì)算機(jī)網(wǎng)絡(luò)之基礎(chǔ)篇
什么是計(jì)算機(jī)網(wǎng)絡(luò)?
主機(jī)之間通過交換網(wǎng)絡(luò)互連,交換節(jié)點(diǎn)一般是路由器或者交換機(jī)。
什么是網(wǎng)絡(luò)協(xié)議?
為進(jìn)行網(wǎng)絡(luò)中的數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或約定。
協(xié)議的三要素是什么?
語法、語義、時(shí)序。
計(jì)算機(jī)網(wǎng)絡(luò)的結(jié)構(gòu)?
網(wǎng)絡(luò)邊緣:主機(jī)(端系統(tǒng))、網(wǎng)絡(luò)應(yīng)用
主機(jī)(端系統(tǒng)):運(yùn)行網(wǎng)絡(luò)應(yīng)用程序。
客戶/服務(wù)器(C/S)應(yīng)用模型:客戶發(fā)送請(qǐng)求,接受服務(wù)器響應(yīng)。
對(duì)等(P2P)應(yīng)用模型:不用依賴專用服務(wù)器;對(duì)等實(shí)體之間直接進(jìn)行通信。
接入網(wǎng)絡(luò),物理介質(zhì):有線或無線通信鏈路,將網(wǎng)絡(luò)邊緣接入核心網(wǎng)絡(luò)
帶寬(bps):網(wǎng)絡(luò)中指數(shù)據(jù)傳輸速率,Mb/s。
無線局域網(wǎng)(LANs):wifi。
廣域無線接入:通過電信運(yùn)營商,3G、4G。
網(wǎng)絡(luò)核心:互聯(lián)的路由器(或分組轉(zhuǎn)發(fā)設(shè)備),將數(shù)據(jù)從源主機(jī)通過網(wǎng)絡(luò)核心發(fā)送到目的主機(jī)
關(guān)鍵功能:路由+轉(zhuǎn)發(fā)。
路由:確定分組從源到目的傳輸路徑,路由算法。
轉(zhuǎn)發(fā):將分組從路由器的輸入端口交換至正確的輸出端口,本地轉(zhuǎn)發(fā)表。
數(shù)據(jù)交換?
構(gòu)建:
最簡單的就是任意兩臺(tái)主機(jī)之間建立一條鏈路:O(N^2)。
然后一個(gè)交換設(shè)備,讓每臺(tái)主機(jī)都通過鏈路連接:如果主機(jī)規(guī)模很大,交換設(shè)備端口不夠用;如果主機(jī)與交換設(shè)備過遠(yuǎn),無法保證連通性。
把交換設(shè)備連接到一起,構(gòu)造成交換網(wǎng)絡(luò),讓每臺(tái)主機(jī)與交換網(wǎng)絡(luò)中的某臺(tái)設(shè)備連到一起。
什么是交換?
動(dòng)態(tài)轉(zhuǎn)接: 數(shù)據(jù)通過交換設(shè)備從一個(gè)端口轉(zhuǎn)到另一個(gè)端口,而且可以在多組端口之間并行。
動(dòng)態(tài)分配傳輸資源:數(shù)據(jù)從源主機(jī)穿越交換網(wǎng)絡(luò)送達(dá)正確的目的主機(jī) 。
數(shù)據(jù)交換的類型?
1.電路交換—>典型的電話
選好鏈路占好資源。
資源獨(dú)占,不能被第三方共享。
電路交換網(wǎng)絡(luò)的鏈路共享:多路復(fù)用。
2.報(bào)文交換
源(應(yīng)用)發(fā)送信息整體,比如一個(gè)文件,完整的發(fā)到下一個(gè)站點(diǎn)。
3.分組交換
分組:報(bào)文分拆出來的一系列相對(duì)較小的數(shù)據(jù)包頭+數(shù)據(jù)。
需要報(bào)文的拆分和重組。
產(chǎn)生額外開銷:時(shí)間開銷必不可少,通常在計(jì)算機(jī)網(wǎng)絡(luò)中源主機(jī)和目的主機(jī)之間進(jìn)行的,拆分重組開銷不嚴(yán)重。
4.報(bào)文交換與分組交換均采用存儲(chǔ)–轉(zhuǎn)發(fā)交換方式
路由器將數(shù)據(jù)分組完整的接收過來暫存一下,再?zèng)Q定怎么轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)的鏈路可用了,再發(fā)出去。
丟包:隊(duì)列緩存容量有限,分組到達(dá)已滿隊(duì)列,到達(dá)分組被丟棄--丟包(loss)。
5.報(bào)文交換的效率高于分組交換
報(bào)文交換是串行,而分組交換很多分組之間是并行的,而且相比之下路由器需要的緩存更小。
6.分組交換VS電路交換,可支持更多用戶同時(shí)使用網(wǎng)絡(luò),網(wǎng)絡(luò)資源充分共享
大家建立連接后,一般不一直傳送數(shù)據(jù),一段時(shí)間根本不用網(wǎng)絡(luò),平均活動(dòng)時(shí)間較少。
分組交換是統(tǒng)計(jì)多路復(fù)用。
7.分組交換不是絕對(duì)優(yōu)于電路交換
分組交換更適用于突發(fā)數(shù)據(jù)傳輸網(wǎng)絡(luò)。
資源充分共享;簡單、無需呼叫建立,事先占好資源。
可能產(chǎn)生擁塞:分組延遲和丟失,需要協(xié)議處理可靠數(shù)據(jù)傳輸和擁塞控制。
網(wǎng)絡(luò)性能的評(píng)價(jià)
速率:數(shù)據(jù)傳輸速率或比特率(單位時(shí)間傳輸比特量),最重要的一個(gè)性能指標(biāo)。
帶寬:原指信號(hào)具有的頻帶寬度,單位是赫茲。在計(jì)算機(jī)網(wǎng)絡(luò)中,指數(shù)字信道所能傳送的“最高數(shù)據(jù)率”。
延遲/時(shí)延:分組在路由器緩存中排隊(duì),分組到達(dá)速率大于輸出鏈路容量時(shí)
結(jié)點(diǎn)處理延遲:差錯(cuò)檢測(cè)、確定輸出鏈路可用。
排隊(duì)延遲:等待輸出鏈路可用、取決于路由器擁塞程度。
傳輸延遲(發(fā)送一個(gè)分組需要的時(shí)間):分組長度L、鏈路帶寬R, d=L/R。
傳播延遲:物理鏈路長度、信號(hào)傳播速度。
丟包率: 丟包數(shù)/已發(fā)分組總數(shù)。
吞吐量/率:表示在發(fā)送端與接收端之間傳送數(shù)據(jù)速率(b/s),取決與端到端路徑之間的瓶頸鏈路(速率最小的鏈路)。
計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)?
從功能上描述,分層結(jié)構(gòu),每層完成本層功能,體系結(jié)構(gòu)是抽象的。
為什么分層?
結(jié)構(gòu)清晰;模塊化的分層易于系統(tǒng)更新、維護(hù);有利于標(biāo)準(zhǔn)化。
因?yàn)槊恳粚右瓿傻墓δ苁遣煌?,解決的問題是不一樣的,比如要傳遞可靠數(shù)據(jù)(傳輸層)、先要實(shí)現(xiàn)能傳遞數(shù)據(jù)(網(wǎng)絡(luò)層)、傳遞之前要保證兩臺(tái)機(jī)器之間能發(fā)數(shù)據(jù)包(數(shù)據(jù)鏈路層),所以分層的方式是將功能劃分給每一層去實(shí)現(xiàn)部分功能,下層協(xié)議為上層協(xié)議提供幫助,相互配合。
協(xié)議是控制兩個(gè)對(duì)等實(shí)體進(jìn)行通信的規(guī)則的集合,協(xié)議是“水平的”。
任一層實(shí)體使用下層服務(wù),實(shí)現(xiàn)本層功能,向上層提供服務(wù),服務(wù)是“垂直的”。
下層協(xié)議的實(shí)現(xiàn)對(duì)上層的服務(wù)用戶是透明的。
網(wǎng)卡是什么?
網(wǎng)卡:網(wǎng)絡(luò)適配器,插在(或者集成在)主板上的硬件設(shè)備,每個(gè)網(wǎng)卡都有一個(gè)全球唯一的標(biāo)識(shí),從一生產(chǎn)出來就確定了,48位,叫做MAC地址,如11:27:F5:8A:79:54。
網(wǎng)卡屬于OSI模型中的物理層和數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層以上的部分則由操作系統(tǒng)中的協(xié)議棧實(shí)現(xiàn),所以TCP/IP協(xié)議棧其實(shí)只包含了網(wǎng)絡(luò)層和傳輸層。
網(wǎng)卡是怎么工作的?
首先需要一個(gè)IP地址,用到DHCP(動(dòng)態(tài)主機(jī)配置協(xié)議,集中管理、分配IP地址)。網(wǎng)絡(luò)里有DHCP服務(wù)器,動(dòng)態(tài)的分配地址,CPU寫好報(bào)文。首先是一個(gè)應(yīng)用層的DHCP報(bào)文,然后被DUP報(bào)文封裝(目的地端口:67,源地址端口:68),之后再被IP數(shù)據(jù)報(bào)封裝(目的地址:255.255.255.255,源地址:0.0.0.0)。
網(wǎng)卡是數(shù)據(jù)鏈路層的,需要知道MAC地址才能發(fā)送到指定對(duì)方,如果不知道就發(fā)廣播。然后又把數(shù)據(jù)報(bào)封裝了一下,廣播到同一子網(wǎng)內(nèi)的所有電腦,目的地址就是FF:FF:FF:FF:FF:FF。
然后網(wǎng)卡通過網(wǎng)線把報(bào)文發(fā)到交換機(jī),交換機(jī)將報(bào)文轉(zhuǎn)發(fā)到所有連接到交換機(jī)的設(shè)備。過一會(huì),交換機(jī)轉(zhuǎn)來報(bào)文,就是DHCP服務(wù)器發(fā)來的。然后網(wǎng)卡廣播發(fā)送一個(gè)報(bào)文確定要哪個(gè)IP,之后DHCP再回一個(gè)報(bào)文,包括網(wǎng)卡的IP、網(wǎng)關(guān)路由器的IP、DNS服務(wù)器IP。
如果系統(tǒng)重啟之后,這個(gè)獲取IP的步驟需要再走一遍,除非用戶手動(dòng)的配置IP地址、網(wǎng)關(guān)、DNS,但是這樣很煩還容易出錯(cuò),所以一般情況下都是自動(dòng)的用DHCP搞定一個(gè)IP。
怎么訪問百度?
要想互聯(lián),不僅自己要有IP地址,還要知道對(duì)方的IP地址,比如訪問www.baidu.com,要先經(jīng)過DNS查詢,知道它的IP。
DNS服務(wù)器不在局域網(wǎng)內(nèi),我們將報(bào)文發(fā)送到網(wǎng)關(guān)路由器,由網(wǎng)關(guān)路由器想辦法轉(zhuǎn)給DNS服務(wù)器。那么網(wǎng)關(guān)路由器的MAC地址在哪呢?這時(shí)候需要用到ARP(地址解析協(xié)議),通過廣播查詢一個(gè)IP地址對(duì)應(yīng)的MAC地址,得到網(wǎng)關(guān)路由器的MAC地址,網(wǎng)卡只需要將DNS查詢發(fā)送給網(wǎng)關(guān)路由器即可。之后就沒網(wǎng)卡的事情了,網(wǎng)卡只能管局域網(wǎng)的事情,出了局域網(wǎng),就是路由器的事情了。
出了局域網(wǎng)之后的事情呢?
現(xiàn)在來看網(wǎng)關(guān)路由器,我還在想為什么叫網(wǎng)關(guān)呢?在網(wǎng)上看到的解釋是大家想上網(wǎng),一定得經(jīng)過這一關(guān),所有的對(duì)局域網(wǎng)之外的訪問必須得經(jīng)過網(wǎng)關(guān)。
網(wǎng)關(guān)直接和ISP(網(wǎng)絡(luò)服務(wù)供應(yīng)商,比如聯(lián)通)的網(wǎng)絡(luò)相連,得到一個(gè)外網(wǎng)地址。
NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)
網(wǎng)關(guān)路由器不僅是個(gè)路由器,還是個(gè)DHCP服務(wù)器,掌握著整個(gè)局域網(wǎng)的IP生殺大權(quán)。局域網(wǎng)內(nèi)的主機(jī)拿著內(nèi)網(wǎng)IP是無法直接上網(wǎng)的,這個(gè)地址只有局域網(wǎng)的網(wǎng)關(guān)才知道,像百度這樣的網(wǎng)站根本就不知道;即使知道了也沒用,世界上無數(shù)的路由器都會(huì)分配192.168.xxx.xxx這樣的地址,也不知道到底要找哪一個(gè)。
那怎么通過網(wǎng)關(guān)路由器上網(wǎng)呢?下面看過程:
比如某個(gè)網(wǎng)卡想訪問百度,它通過交換機(jī)給網(wǎng)關(guān)路由器發(fā)來一個(gè)數(shù)據(jù)幀,如:
以太網(wǎng)幀:
目的地:88:25:93:97:E0:C8
源地址:11:27:F5:8A:79:54
IP數(shù)據(jù)報(bào):
目的地:115.239.211.112
源地址:192.168.1.2
TCP報(bào)文:
目的地址端口:80
源地址端口:3345
HTTP報(bào)文:
GET /
Host:www.baidu.com
發(fā)過來之后,網(wǎng)關(guān)路由器這樣處理:它把數(shù)據(jù)鏈路層去掉,發(fā)現(xiàn)IP數(shù)據(jù)包中的目標(biāo)地址是115.239.211.112,可以知道這是要向外網(wǎng)發(fā)出請(qǐng)求了,網(wǎng)關(guān)路由器把源IP地址換成從ISP那里拿來的外網(wǎng)IP,再創(chuàng)建一個(gè)新的端口號(hào)將TCP數(shù)據(jù)包中的源端口也替換掉,之后數(shù)據(jù)包就換成了下面這樣:
IP數(shù)據(jù)報(bào):
目的地:115.239.211.112
源地址:61.52.247.112
TCP報(bào)文:
目的地址端口:80
源地址端口:2001
HTTP報(bào)文:
GET /
Host:www.baidu.com
總之就是網(wǎng)關(guān)路由器將源IP地址和源端口都替換了,目的就是讓外網(wǎng)認(rèn)為這是路由器發(fā)出的,他們根本不知道什么某一塊網(wǎng)卡。之后再給IP數(shù)據(jù)報(bào)封上數(shù)據(jù)鏈路層的頭,將數(shù)據(jù)包發(fā)送給服務(wù)商的網(wǎng)絡(luò),剩下的事情就不用管了。
這個(gè)替換源地址和源端口的小把戲就叫做網(wǎng)絡(luò)地址轉(zhuǎn)換,簡稱為NAT。
當(dāng)然不止一臺(tái)電腦通過網(wǎng)關(guān)路由器上網(wǎng),還有很多別的電腦,所以網(wǎng)關(guān)路由器將這些轉(zhuǎn)換關(guān)系記錄下來,形成了NAT轉(zhuǎn)換表,如下:
PS:路由器上的WAN口是用來連接外網(wǎng)的,或者說連接寬帶運(yùn)營商的;LAN口(1、2、3、4)是用來連接內(nèi)網(wǎng)中的設(shè)備的。
接著說,當(dāng)百度那邊的回復(fù)通過別的路由器轉(zhuǎn)到網(wǎng)關(guān)路由器這里,需要反過來處理:首先去掉數(shù)據(jù)鏈路層的頭,發(fā)現(xiàn)IP和TCP數(shù)據(jù)報(bào)中包含這樣的信息:目的IP:61.52.247.112,端口:2001,這時(shí)候網(wǎng)關(guān)去查表,找到了192.168.1.2:3345,就知道這是給哪一塊網(wǎng)卡的數(shù)據(jù)包了。就再次把數(shù)據(jù)報(bào)中的IP地址和端口號(hào)改了,讓網(wǎng)卡認(rèn)為這個(gè)數(shù)據(jù)包是網(wǎng)關(guān)發(fā)的。
就這樣,網(wǎng)關(guān)用一個(gè)外網(wǎng)的IP支持了局域網(wǎng)內(nèi)多個(gè)電腦的上網(wǎng)需求,并且他們根本不知道怎么回事!
NAT弊端
NAT使IP會(huì)話的保持時(shí)效變短。一個(gè)會(huì)話建立后會(huì)在NAT設(shè)備上建立一個(gè)關(guān)聯(lián)表,因?yàn)镮P和端口資源有限,通信的需求無限,所以必須在會(huì)話結(jié)束后回收資源。
NAT在實(shí)現(xiàn)將多個(gè)內(nèi)部主機(jī)發(fā)出的連接復(fù)用到一個(gè)IP上,這樣使得依賴IP進(jìn)行主機(jī)追蹤的機(jī)制失效了。NAT隱蔽了通信的一端,把簡單的事情復(fù)雜化了。
NAT工作機(jī)制依賴于修改IP頭部信息,這會(huì)妨礙一些安全協(xié)議的工作。NAT篡改了IP地址、端口和校驗(yàn)和,這會(huì)導(dǎo)致認(rèn)證協(xié)議徹底不能工作,因?yàn)檎J(rèn)證的目的就是要保證這些信息在傳輸過程中沒有發(fā)生變化。
NAT穿越
在P2P模式下,比如電驢,機(jī)器不僅僅是客戶端,同時(shí)也是一個(gè)能夠接受請(qǐng)求的服務(wù)器。但是其他人怎么能連上它呢?外網(wǎng)的人不知道它的IP地址呀。
解決方案是這樣的,網(wǎng)卡可以主動(dòng)的請(qǐng)求網(wǎng)關(guān)建立一個(gè)NAT映射,比如(192.168.1.2 : 4096) <-> (61.52.247.112: 3001),保存到NAT表中,當(dāng)有外網(wǎng)連接到來時(shí),網(wǎng)關(guān)負(fù)責(zé)把連接請(qǐng)求轉(zhuǎn)發(fā)到指定主機(jī)。這其實(shí)是UPnP。
聯(lián)系客服