1 物理層
物理層工作會將收到的每一個字節(jié),都復(fù)制到其他端口上去。這就是第一層物理層聯(lián)通方案。
物理層主要是最原始的數(shù)據(jù)比特流傳輸。
2 第二層(數(shù)據(jù)鏈路層)
數(shù)據(jù)鏈路層(約定俗成說的是MAC層僚楞,Medium Access Control媒體訪問控制)要解決以下三個問題:
1、 這個包是發(fā)給誰的枉层?誰應(yīng)該接收泉褐?(ARP尋址協(xié)議)
2、大家都在發(fā)包鸟蜡,誰先發(fā)膜赃、誰后發(fā)?會不會發(fā)生混亂揉忘?(多路訪問規(guī)則跳座,以太網(wǎng)使用的是隨機(jī)接入?yún)f(xié)議)
3、 發(fā)送時出現(xiàn)了錯誤泣矛,怎么辦疲眷?(CRC循環(huán)冗余檢測或者XOR異或算法)
數(shù)據(jù)鏈路層發(fā)送的數(shù)據(jù)叫幀,網(wǎng)絡(luò)層叫包您朽,傳輸層叫段
2.1 ARP
在一個局域網(wǎng)里面狂丝,當(dāng)知道了 IP 地址,不知道 MAC 怎么哗总。廣而告之几颜,發(fā)送一個廣播包,誰是這個 IP 誰來回答讯屈。
為了避免每次都用 ARP 請求蛋哭,機(jī)器本地也會進(jìn)行 ARP 緩存,當(dāng)然機(jī)器會不斷地上線下線涮母,IP 也可能會變谆趾,所以 ARP 的 MAC 地址緩存過一段時間就會過期。
2.2 沖突域叛本、廣播域
- 沖突域
沖突域就是連接在同一導(dǎo)線上的所有工作站的集合沪蓬,或者說是同一物理網(wǎng)段上所有節(jié)點(diǎn)的集合,或以太網(wǎng)上競爭同一帶寬的節(jié)點(diǎn)集合炮赦。 - 廣播域
廣播是一種信息的傳播方式,指網(wǎng)絡(luò)中的某一設(shè)備同時向網(wǎng)絡(luò)中所有的其它設(shè)備發(fā)送數(shù)據(jù)样勃,這個數(shù)據(jù)所能廣播到的范圍即為廣播域(Broadcast Domain)吠勘。即網(wǎng)絡(luò)中能接收任一設(shè)備發(fā)出的廣播幀的所有設(shè)備的集合性芬。
2.3 集線器、二層交換機(jī)
- 集線器
1.一個廣播域剧防,一個沖突域植锉。
2.傳輸數(shù)據(jù)的過程中易產(chǎn)生沖突,帶寬利用率不高峭拘。 - 交換機(jī)
1.在劃分vlan的前提下可以實(shí)現(xiàn)多個廣播域俊庇,每個接口都是一個單獨(dú)的沖突域
2.通過自我學(xué)習(xí)的方法可以構(gòu)建出CAM表,并基于CAM進(jìn)行轉(zhuǎn)發(fā)數(shù)據(jù)鸡挠。
3.支持生成樹算法辉饱。可以構(gòu)建出物理有環(huán)拣展,邏輯無環(huán)的網(wǎng)絡(luò)彭沼,網(wǎng)絡(luò)冗余和數(shù)據(jù)傳輸效率都甩Hub好幾條街。SW是目前組網(wǎng)的基本設(shè)備之一备埃。 - CAM表
所謂“cam表”就是指二層交換機(jī)上運(yùn)行的Cisco IOS在內(nèi)存中維護(hù)的一張表姓惑,CAM表是交換機(jī)在二層轉(zhuǎn)發(fā)數(shù)據(jù)要查找的表,表中有MAC地址按脚,對應(yīng)的端口號于毙,端口所屬的VLAN。交換機(jī)的每一個二層端口都有MAC地址自動學(xué)習(xí)的功能辅搬,當(dāng)交換機(jī)收到PC發(fā)來的一個幀唯沮,就會查看幀中的源MAC地址,并查找CAM表伞辛,如果有就什么也不做烂翰,開始轉(zhuǎn)發(fā)數(shù)據(jù)。如果沒有就存入CAM表蚤氏,以便當(dāng)其他人向這個MAC地址上發(fā)送數(shù)據(jù)時甘耿,可以決定向哪個端口轉(zhuǎn)發(fā)數(shù)據(jù)。
3 第三層(網(wǎng)絡(luò)層)
IP竿滨、ICMP
3.1 IP
按照傳統(tǒng)的將IP地址分為5類佳恬,每個類別下網(wǎng)絡(luò)號和主機(jī)號如下表所示。此時我們會發(fā)現(xiàn)A類于游、B類一個網(wǎng)段下主機(jī)數(shù)太多了毁葱,而C類又太少了。
3.1.1 無類型域間選路(CIDR)
于是有了一個折中的方式叫做無類型域間選路(classless Inter-Domain Routing)贰剥。它將32位IP地址一分為2倾剿,前面是網(wǎng)絡(luò)號,后面是主機(jī)號。比如10.100.122.2/24前痘,表示前24位表示網(wǎng)絡(luò)號凛捏,后8位表示主機(jī)號。
IP地址除了分類芹缔,還有幾個常用的概念需要理解:
- 廣播地址:廣播地址(Broadcast Address)是專門用于同時向網(wǎng)絡(luò)中所有工作站進(jìn)行發(fā)送的一個地址坯癣。在使用TCP/IP 協(xié)議的網(wǎng)絡(luò)中,主機(jī)標(biāo)識段host ID 為全1 的IP 地址為廣播地址最欠,廣播的分組傳送給host ID段所涉及的所有計算機(jī)示罗。
- 子網(wǎng)掩碼:用來指明一個IP地址的哪些位標(biāo)識的是主機(jī)所在的子網(wǎng)击吱,以及哪些位標(biāo)識的是主機(jī)的位掩碼呀忧。將子網(wǎng)掩碼和 IP 地址按位計算 AND,就可得到網(wǎng)絡(luò)號先誉。
3.2 ICMP(互聯(lián)網(wǎng)控制報文協(xié)議)
當(dāng)網(wǎng)絡(luò)不通時吵取,有哪些辦法來調(diào)試禽额?(ping、traceroute)
ICMP是(Internet Control Message Protocol)Internet控制報文協(xié)議皮官。它是TCP/IP協(xié)議簇的一個子協(xié)議脯倒,用于在IP主機(jī)、路由器之間傳遞控制消息捺氢≡宥控制消息是指網(wǎng)絡(luò)通不通、主機(jī)是否可達(dá)摄乒、路由是否可用等網(wǎng)絡(luò)本身的消息悠反。這些控制消息雖然并不傳輸用戶數(shù)據(jù),但是對于用戶數(shù)據(jù)的傳遞起著重要的作用馍佑。
ICMP是IP協(xié)議的一個附屬協(xié)議斋否,一般認(rèn)為屬于網(wǎng)絡(luò)層協(xié)議。ICMP報文是封裝在IP包里面的拭荤,因?yàn)樗鹬鴤刹榈淖饔靡鸪簦瑐鬏斨噶畹臅r候肯定也得有源地址和目標(biāo)地址等信息。但它只是偵查兵舅世,所以不能攜帶大量信息旦委,只能輕裝上陣。
- ICMP報文類型
ICMP報文類型有很多種雏亚,最常用的主動請求類型為8缨硝,主動請求的應(yīng)答為0,具體如下表所示:
類型代碼 | 類型描述 |
---|---|
0 | 響應(yīng)應(yīng)答(ECHO-REPLY) |
3 | 不可到達(dá) |
4 | 源抑制 |
5 | 重定向 |
8 | 響應(yīng)請求(ECHO-REQUEST) |
11 | 超時 |
12 | 參數(shù)失靈 |
13 | 時間戳請求 |
14 | 時間戳應(yīng)答 |
一般分兩個大類罢低,查詢報文類型和差錯報文類型查辩。
3.2.1 查詢報文
常用的ping就是查詢報文,是一種主動請求并且獲得主動應(yīng)答的ICMP協(xié)議。ping發(fā)的包也是符合ICMP協(xié)議格式的宜岛,只不過在后面又增加了自己的格式匀钧。
對于ping的主動請求,進(jìn)行網(wǎng)絡(luò)抓包谬返,稱為ICMP ECHO REQUEST。同理主動請求的回復(fù)日杈,稱為ICMP ECHO REPLY遣铝。比起原生的ICMP,多了兩個字段:
- 標(biāo)識符
不同的偵查兵派出去作用不同莉擒,需要有標(biāo)識符才能區(qū)分 - 序號
派出去的偵查兵酿炸,都需要編號,看能回來幾個
ping還會存儲發(fā)送請求的時間值來計算往返時間涨冀。
3.2.2 差錯報文
常用的偵查兵除了出去探路的(查詢)填硕,還有回來報錯的。常用的幾個差錯報文類型有:終點(diǎn)不可達(dá)3鹿鳖,源抑制4扁眯,超時11,重定向?yàn)?翅帜。
終點(diǎn)不可達(dá)分為:
- 0 網(wǎng)絡(luò)不可達(dá)
- 1 主機(jī)不可達(dá)
- 2 協(xié)議不可達(dá)
- 3 端口不可達(dá)
- 4需要分片但設(shè)置了不分片位
traceroute可以使用ICMP規(guī)則姻檀,故意制造一些產(chǎn)生錯誤的場景。traceroute常用的兩招是:
- 設(shè)置TTL(time to live)涝滴,來追蹤去往目的地時沿途經(jīng)過的路由器绣版。如果設(shè)置成1,如果去往目的地的中間路由器不止一個歼疮,那么碰到第一個路由器就會犧牲返回一個ICMP包杂抽,內(nèi)容是時間超時。接下來設(shè)置成2韩脏,那么就知道第二個路由器有多遠(yuǎn)缩麸,如此反復(fù)直到到達(dá)目的主機(jī)。(怎么知道UDP有沒有到達(dá)目的主機(jī)呢骤素,traceroute會故意發(fā)送一份UDP數(shù)據(jù)報給目的主機(jī)匙睹,但會選擇一個不可能的UDP端口號比如大于30000,當(dāng)數(shù)據(jù)報到達(dá)時济竹,目的主機(jī)的UDP模塊會產(chǎn)生一份端口不可達(dá)錯誤的ICMP報文返回痕檬,如果數(shù)據(jù)報沒有到達(dá),則可能還是超時)
- 確定MTU(最大傳輸單元)送浊,故意設(shè)置不分片梦谜,當(dāng)每次收到ICMP不能分片差錯時就減小分組的長度,直到到達(dá)目的主機(jī)。
3.3 NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)
NAT(Network Address Translation)唁桩,當(dāng)在專用網(wǎng)內(nèi)部的一些主機(jī)本來已經(jīng)分配到了本地IP地址(即僅在本專用網(wǎng)內(nèi)使用的專用地址)闭树,但現(xiàn)在又想和因特網(wǎng)上的主機(jī)通信(并不需要加密)時,可使用NAT方法荒澡。
這種方法需要在專用網(wǎng)連接到Internet的路由器上安裝NAT軟件报辱。裝有NAT軟件的路由器叫做NAT路由器,它至少有一個有效的外部全球IP地址单山。這樣碍现,所有使用本地地址的主機(jī)在和外界通信時,都要在NAT路由器上將其本地地址轉(zhuǎn)換成全球IP地址米奸,才能和Internet連接昼接。
NAT時不光會替換ip地址,也會替換端口號悴晰;每個網(wǎng)關(guān)應(yīng)該都維護(hù)了一張端口主機(jī)映射表慢睡,這樣便能準(zhǔn)確尋址私網(wǎng)主機(jī)。
4 傳輸層
TCP铡溪、UDP首先不同的特異性就是前者面向連接漂辐,后者無連接。所謂的建立連接棕硫,是為了在客戶端和服務(wù)端維護(hù)連接者吁,而建立一定的數(shù)據(jù)結(jié)構(gòu)來維護(hù)雙方交互的狀態(tài),用這樣的數(shù)據(jù)結(jié)構(gòu)來保證所謂的面向連接特性饲帅。
4.1 UDP
三大使用場景:
- 需要資源少复凳,網(wǎng)絡(luò)情況好的內(nèi)網(wǎng),對于丟包不敏感
- 不需要一對一溝通灶泵,建立連接育八,而是可以廣播的應(yīng)用。 比如DHCP就是基于UDP協(xié)議的赦邻,DHCP就是一種廣播的形式髓棋。
- 需要處理速度快,時延低惶洲,可以容忍少數(shù)丟包按声,但是要求即便網(wǎng)絡(luò)擁塞,也必須毫不退縮一往無前的發(fā)送恬吕。比如流媒體協(xié)議签则、實(shí)時游戲等。一般采用自定義的可靠的UDP協(xié)議铐料。
4.2 TCP
- TCP提供可靠交付渐裂。通過TCP連接傳輸?shù)臄?shù)據(jù)豺旬,無差錯】不丟失、不重復(fù)柒凉、按序到達(dá)族阅。
- TCP是面向字節(jié)流。發(fā)送的時候是發(fā)一個流膝捞,沒頭沒尾坦刀。IP包則是一個個的IP包,之所以變成流是TCP狀態(tài)維護(hù)做的事情蔬咬。UDP則繼承IP的特性求泰,基于數(shù)據(jù)報,一個一個的發(fā)计盒,一個一個的收。
- TCP擁有擁塞控制芽丹。通過滑動窗口來控制自己的行為北启。而UDP則是應(yīng)用讓發(fā)就發(fā)。
- TCP是有狀態(tài)的服務(wù)拔第。精確記著發(fā)送了沒有咕村,接收到?jīng)]有,發(fā)送到哪個了蚊俺,應(yīng)該接收哪個了懈涛。
5 應(yīng)用層
5.1 HTTP
Accept-Charset:客戶端可以接受的字符集
Content-Type:正文格式
If-Modified-Since:只有當(dāng)所請求的內(nèi)容在指定的日期之后又經(jīng)過修改才返回
Retry-After:客戶端應(yīng)該多久后再次嘗試
Content-Type:返回格式
5.2 HTTP協(xié)議的演變
HTTP1.1在應(yīng)用層以純文本的形式進(jìn)行通信。每次通信都要帶完整的HTTP頭泳猬,而且不考慮pipeline模式的話批钠,每次的過程總是一去一回。因此實(shí)時性得封、并發(fā)性都存在問題埋心。具體描述如下:
http1.0的隊(duì)首阻塞
對于同一個tcp連接,所有的HTTP1.0請求放入隊(duì)列中忙上,只有前一個請求的響應(yīng)收到了拷呆,才能處理發(fā)送下一個請求。http1.0隊(duì)首阻塞主要發(fā)生在客戶端疫粥。
http1.1的隊(duì)首阻塞
對于同一個tcp連接茬斧,http1.1允許一次發(fā)送多個http1.1請求,也就是說梗逮,不必等前一個響應(yīng)收到项秉,就可以發(fā)送下一個請求。但http1.1規(guī)定慷彤,服務(wù)器端的響應(yīng)的發(fā)送要根據(jù)請求被接收的順序排隊(duì)伙狐。也就是說先收到的請求的響應(yīng)也要先發(fā)送涮毫。這樣造成的問題是,如果最先收到的請求處理時間長的話贷屎,響應(yīng)生成也慢罢防,就會阻塞已經(jīng)生成的響應(yīng)的發(fā)送。也會造成隊(duì)首阻塞唉侄。http1.1的隊(duì)首阻塞發(fā)生在服務(wù)器端咒吐。
為解決隊(duì)首阻塞問題,HTTP2.0會對HTTP的頭進(jìn)行一定的壓縮属划,將原來每次都要攜帶的大量key value在兩端建立一個索引表恬叹,對相同的頭只發(fā)送索引表中的索引。
另外同眯,HTTP2.0協(xié)議將一個TCP連接中绽昼,切分為多個流,每個流都有自己的ID须蜗,而且流可以是客戶端發(fā)送往服務(wù)端硅确,也可以是服務(wù)端發(fā)往客戶端。它其實(shí)只是一個虛擬的通道明肮。流還可以賦予不同的優(yōu)先級菱农。
HTTP2.0協(xié)議還將所有的傳輸信息分割為更小的消息和幀,并對它們采用二進(jìn)制格式編碼柿估。常見的幀有Header幀循未,用于傳輸Header內(nèi)容并開啟一個新的流。再就是Data幀秫舌,用來傳輸正文實(shí)體的妖。多個Data幀屬于同一個流。
通過這兩種機(jī)制足陨,HTTP2.0的客戶端可以將多個請求分到不同的流中羔味,然后將請求內(nèi)容拆成幀,進(jìn)行二進(jìn)制傳輸钠右。這些幀可以打散亂序發(fā)送赋元,然后根據(jù)每個幀首部的流標(biāo)識符重新組裝,并且可以根據(jù)優(yōu)先級飒房,決定優(yōu)先處理哪個流的數(shù)據(jù)搁凸。
總結(jié):http2解決隊(duì)首阻塞
http2無論客戶端還是服務(wù)器端都不需要排隊(duì),在同一個tcp連接上狠毯,有多個stream护糖,由各個stream發(fā)送和接收http請求,各個stream相互獨(dú)立嚼松,互不阻塞嫡良。
只要tcp沒有人在用锰扶,那么就可以發(fā)送已經(jīng)生成的request或者response的數(shù)據(jù),在兩端都不用等寝受,從而徹底解決了http協(xié)議層面的隊(duì)首阻塞問題坷牛。
5.3 QUIC(Quick UDP Internet Connection)
HTTP2.0大大增加了并發(fā)性,但因?yàn)槭腔赥CP協(xié)議很澄,TCP協(xié)議在處理包時時有嚴(yán)格順序的京闰。當(dāng)其中一個數(shù)據(jù)包遇到問題,TCP連接需要等待這個包完成重傳之后才能繼續(xù)進(jìn)行甩苛。雖通過多個stream蹂楣,使得邏輯上一個TCP連接上的并行內(nèi)容,進(jìn)行多路數(shù)據(jù)的傳輸讯蒲,然而這中間并沒有關(guān)聯(lián)的數(shù)據(jù)痊土。一前一后,前面stream2的幀沒有到墨林,那么stream1的幀也會因此阻塞赁酝。
Google提出的QUIC協(xié)議很好的解決了這個問題。
5.3.1 自定義連接機(jī)制
一條TCP連接是四元組標(biāo)識的萌丈,分別是源IP、源端口雷则、目的IP辆雾、目的端口。一旦某個元素發(fā)生變化月劈,就需要斷開重連度迂。當(dāng)手機(jī)信號不穩(wěn)定、wifi信號發(fā)生改變猜揪、移動網(wǎng)絡(luò)發(fā)生切換惭墓,都會導(dǎo)致再次的三次握手的重連。
但基于UDP而姐,QUIC在自己的邏輯里面維護(hù)連接的機(jī)制腊凶,不再以四元組標(biāo)識,而是以一個64位的隨機(jī)數(shù)作為ID來標(biāo)識拴念,而且UDP是無連接的钧萍,所以當(dāng)IP或者端口變化時,只要ID不變則無需重連
5.3.2 自定義重傳機(jī)制
TCP為了保證可靠性政鼠,通過使用序號和應(yīng)答機(jī)制风瘦,來解決順序問題和丟包問題。任何一個包發(fā)送出去公般,都得在一定的時間得到應(yīng)答否則視為超時万搔。TCP的超時是通過采樣往返時間RTT(round-trip time)不斷調(diào)整的胡桨。
其實(shí)在TCP里面超時的采樣存在不準(zhǔn)確的問題,比如發(fā)送一個序號為100的包瞬雹,無返回昧谊。過一陣再發(fā)一個100,返回得到ACK101.往返時間就是ACK到達(dá)減去一個序號100的包的發(fā)送時間挖炬,減去第一個100序號的包揽浙,超時時間算長了,減去后一個100序號的包意敛,時間就算短了馅巷。
QUIC里也有序列號但是是遞增的,一個序列號的包只發(fā)一次草姻,比如發(fā)一個包钓猬,序號為100,無返回再發(fā)送時序號就是101.如果返回的ACK是100撩独,就是對第一個包的響應(yīng)敞曹。ACK101就是對第二個包的響應(yīng)。RTT計算相對準(zhǔn)確综膀。
但QUIC里怎么知道序號包100和包101是同樣的內(nèi)容呢澳迫,QUIC定義了一個offset的概念,QUIC既然也是面向連接的剧劝,那也就像TCP一樣橄登,是個數(shù)據(jù)流。發(fā)送的數(shù)據(jù)在這個數(shù)據(jù)流里面有個偏移量offset讥此,可以通過offset查看數(shù)據(jù)發(fā)送到了哪里拢锹。這樣只要這個offset寶沒有來就得重發(fā)。如果來了就進(jìn)行拼接萄喳,還是能拼成一個流卒稳。
5.3.3 無阻塞的多路復(fù)用
一個QUIC連接可以創(chuàng)建多個stream,因?yàn)镼UIC是 基于UDP的他巨,一個連接的多個stream之間沒有依賴充坑。假如stream2丟失了一個UDP包,后面跟著stream3的一個udp包染突,雖然stream2的包需要重傳匪傍,但stream3的包無需等待。
5.3.4 自定義流量控制
TCP流量控制是通過滑動窗口協(xié)議觉痛。在TCP協(xié)議中役衡,接收端的窗口起始點(diǎn)是下一個要接收并且ACK的包,即便后來的包都到了薪棒,放在緩存里手蝎,窗口也不能右移榕莺,因?yàn)門CP的ACK機(jī)制是基于序列號的累計應(yīng)答,一旦ACK了一個序列號棵介,就說明前面的都到了钉鸯,所以只要前面的沒到,后面到了的也不能ACK邮辽。因此導(dǎo)致后面的到了唠雕,也可能超時重傳浪費(fèi)帶寬。
QUIC的ACK是基于offset的吨述,每個offset的包來了岩睁,進(jìn)了緩存,就可以應(yīng)答揣云,應(yīng)答后不會重發(fā)捕儒。中間的空檔會等待到來或者重發(fā),窗口的起始位置為當(dāng)前收到的最大offset邓夕,從這個offset到當(dāng)前stream所能容納的最大緩存刘莹,是真正的窗口大小。因此這樣更加準(zhǔn)確焚刚。
5.4 HTTPS
其中SSL/TLS是一種介與于傳輸層(比如TCP/IP)和應(yīng)用層(比如HTTP)的協(xié)議点弯。它通過"握手協(xié)議(Handshake Protocol)"和"傳輸協(xié)議(Record Protocol)"來解決傳輸安全的問題。SSL/TLS是一個可選層矿咕,沒有它抢肛,使用HTTP也可以通信,它存在的目的就是為了解決安全問題痴腌,這也就是HTTPS相對于HTTP的精髓所在雌团。
5.4.1 對稱加密和非對稱加密優(yōu)缺點(diǎn)
對稱加密燃领,秘鑰相同士聪,那么秘鑰傳輸時風(fēng)險比較大。非對稱加密各自擁有對方的公鑰猛蔽,然后用自己的私鑰解密剥悟,但性能存在問題。
5.4.2 CA
每個人都可以創(chuàng)建自己的私鑰曼库,然后根據(jù)私鑰創(chuàng)建公鑰区岗。但怎么才能證明這個公鑰是有效的呢?此時需要權(quán)威機(jī)構(gòu)CA的介入毁枯。CA的做法是將公鑰進(jìn)行哈希摘要算法慈缔,然后用CA私鑰對其進(jìn)行加密伴隨公鑰一起發(fā)出去(統(tǒng)稱為證書)≈致辏客戶端收到后藐鹤,用CA公鑰(各大CA機(jī)構(gòu)的公鑰是默認(rèn)安裝在操作系統(tǒng)里的)進(jìn)行解密瓤檐,然后對公鑰進(jìn)行哈希,比對哈希值是否一致娱节。
CA的公鑰則需要更牛的CA簽名挠蛉,層層往上遞推,直到全球皆知的著名root CA肄满。通過層層授信背書的方式谴古,保證非對稱加密模式的正常運(yùn)轉(zhuǎn)。
5.4.3 HTTPS工作模式
由于非對稱性能不如對稱加密稠歉,那么可以考慮將兩者結(jié)合起來掰担。比如公鑰私鑰用于傳輸對稱加密的秘鑰,而真正雙方大量數(shù)據(jù)通信都是通過對稱加密進(jìn)行的轧抗。
5.5 DNS
DNS(Domain Name System)將域名和IP地址相互映射的一個分布式數(shù)據(jù)庫恩敌。DNS服務(wù)器必須設(shè)置成高可用、高并發(fā)和分布式横媚。
- 根DNS:返回頂級域DNS服務(wù)器的IP地址
- 頂級域DNS服務(wù)器:返回權(quán)威DNS服務(wù)器的IP地址
- 權(quán)威DNS服務(wù)器:返回相應(yīng)主機(jī)的IP地址
5.5.1 DNS解析流程
注意每次都會先讀緩存DNS纠炮,一般為etc/hosts文件
5.5.2 負(fù)載均衡
DNS除了映射為IP地址,還可以做另外一件事就是負(fù)載均衡灯蝴。
- 內(nèi)部負(fù)載均衡:域名解析時恢口,通過配置策略,這次返回第一個IP穷躁,下次返回第二個IP
- 全局負(fù)載均衡: 為保證應(yīng)用高可用耕肩,服務(wù)器會部署在多個機(jī)房有多個IP,當(dāng)某個服務(wù)器掛掉问潭,那么從DNS地址簿里刪掉這個IP猿诸,就可以實(shí)現(xiàn)高可用。然后DNS還可以控制每次返回離用戶最近的服務(wù)器IP狡忙,這樣訪問速度就會超快梳虽。
5.5.3 GSLB全局負(fù)載均衡器(Global Server Load Balance)
對于復(fù)雜的應(yīng)用,尤其是跨運(yùn)營商灾茁、跨地域的大型應(yīng)用窜觉,則需要更復(fù)雜的全局負(fù)載均衡機(jī)制,因此需要專門的設(shè)備或者服務(wù)器來做這件事北专,這就是全局負(fù)載均衡器禀挫。
在yourcompany.com的DNS服務(wù)器中,一般是通過配置CNAME的方式拓颓,給object.yourcompany.com起一個別名语婴,例如object.vip.yourcompany.com,然后告訴本地DNS服務(wù)器,讓其請求GSLB來解析域名砰左,然后GSLB再解析域名的過程中画拾,通過自己的策略實(shí)現(xiàn)負(fù)載均衡。
以上圖為例菜职,畫了兩層GSLB青抛,是因?yàn)榉诌\(yùn)營商和地域。希望不同運(yùn)營商的用戶酬核,可以訪問相同運(yùn)營商機(jī)房中的資源蜜另,這樣可以不跨運(yùn)營商訪問,有利于提高吞吐量嫡意,減少時延举瑰。
- 第一層GSLB,通過查看請求它的本地DNS服務(wù)器所在的運(yùn)營商蔬螟,就知道用戶所在運(yùn)營商是移動此迅。通過CNAME方式,通過另一個別名object.yd.yourcompany.com旧巾,告訴本地DNS請求第二層的GSLB耸序。
- 第二層GSLB,通過查看請求它本地DNS服務(wù)器所在地址鲁猩,就知道用戶的地理位置坎怪,然后將距離用戶位置比較近的Region里面,六個內(nèi)部負(fù)載均衡(SLB廓握,Server Load Balance)地址搅窿,返回給本地的DNS服務(wù)器。
- 本地DNS服務(wù)器將結(jié)果返回給本地的DNS解析器
- 本地DNS解析器將結(jié)果緩存隙券,返回給客戶端
- 客戶端開始訪問屬于相同運(yùn)營商距離最近的Region1的對象存儲男应,當(dāng)然客戶端得到了6個IP地址,它可以通過負(fù)載均衡的方式娱仔,隨機(jī)或者輪詢一個訪問沐飘。對象存儲一般會有三個備份,從而可以實(shí)現(xiàn)對存儲讀寫的負(fù)載均衡拟枚。
5.5.4 HTTPDNS
由于DNS緩存失效薪铜、運(yùn)營商自定義緩存众弓、出口NAT轉(zhuǎn)換導(dǎo)致無法識別運(yùn)營商恩溅、域名更新等問題會導(dǎo)致DNS失效。這里引入了HTTPDNS谓娃,不走傳統(tǒng)的DNS解析脚乡,自己搭建基于HTTP協(xié)議的DNS服務(wù)器集群,分布在多個地點(diǎn)和運(yùn)營商,當(dāng)客戶端需要DNS解析時奶稠,直接通過HTTP協(xié)議進(jìn)行請求這個服務(wù)器集群俯艰,得到就近的地址。
(HTTPDNS暫時不做過多的篇幅锌订,后續(xù)有空再補(bǔ)充)