網(wǎng)絡(luò)協(xié)議小筆記

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類又太少了。


IP地址分為5類.png

image.png

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)地址等信息。但它只是偵查兵舅世,所以不能攜帶大量信息旦委,只能輕裝上陣。

image.png

  • 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,多了兩個字段:

  1. 標(biāo)識符
    不同的偵查兵派出去作用不同莉擒,需要有標(biāo)識符才能區(qū)分
  2. 序號
    派出去的偵查兵酿炸,都需要編號,看能回來幾個

ping還會存儲發(fā)送請求的時間值來計算往返時間涨冀。


ping協(xié)議的工作過程.png

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常用的兩招是:

  1. 設(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á),則可能還是超時)
  2. 確定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

UDP頭格式.png

三大使用場景:

  • 需要資源少复凳,網(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頭格式.png
  1. TCP提供可靠交付渐裂。通過TCP連接傳輸?shù)臄?shù)據(jù)豺旬,無差錯】不丟失、不重復(fù)柒凉、按序到達(dá)族阅。
  2. TCP是面向字節(jié)流。發(fā)送的時候是發(fā)一個流膝捞,沒頭沒尾坦刀。IP包則是一個個的IP包,之所以變成流是TCP狀態(tài)維護(hù)做的事情蔬咬。UDP則繼承IP的特性求泰,基于數(shù)據(jù)報,一個一個的發(fā)计盒,一個一個的收。
  3. TCP擁有擁塞控制芽丹。通過滑動窗口來控制自己的行為北启。而UDP則是應(yīng)用讓發(fā)就發(fā)。
  4. TCP是有狀態(tài)的服務(wù)拔第。精確記著發(fā)送了沒有咕村,接收到?jīng)]有,發(fā)送到哪個了蚊俺,應(yīng)該接收哪個了懈涛。
三次握手.png
四次揮手.png

5 應(yīng)用層

5.1 HTTP

HTTP1.1請求構(gòu)建.png

Accept-Charset:客戶端可以接受的字符集
Content-Type:正文格式
If-Modified-Since:只有當(dāng)所請求的內(nèi)容在指定的日期之后又經(jīng)過修改才返回

HTTP1.1返回構(gòu)建.png

Retry-After:客戶端應(yīng)該多久后再次嘗試
Content-Type:返回格式

HTTP請求架構(gòu)圖.png

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ù)器端咒吐。

HTTP1.1請求返回流程.png

為解決隊(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ì)首阻塞問題坷牛。

HTTP2請求返回流程.png

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)行拼接萄喳,還是能拼成一個流卒稳。


image.png

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)確焚刚。

image.png

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)行的轧抗。


HTTPS協(xié)議總體思路.png

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地址
DNS架構(gòu).png

5.5.1 DNS解析流程

注意每次都會先讀緩存DNS纠炮,一般為etc/hosts文件


image.png

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解析全流程.png

以上圖為例菜职,畫了兩層GSLB青抛,是因?yàn)榉诌\(yùn)營商和地域。希望不同運(yùn)營商的用戶酬核,可以訪問相同運(yùn)營商機(jī)房中的資源蜜另,這樣可以不跨運(yùn)營商訪問,有利于提高吞吐量嫡意,減少時延举瑰。

  1. 第一層GSLB,通過查看請求它的本地DNS服務(wù)器所在的運(yùn)營商蔬螟,就知道用戶所在運(yùn)營商是移動此迅。通過CNAME方式,通過另一個別名object.yd.yourcompany.com旧巾,告訴本地DNS請求第二層的GSLB耸序。
  2. 第二層GSLB,通過查看請求它本地DNS服務(wù)器所在地址鲁猩,就知道用戶的地理位置坎怪,然后將距離用戶位置比較近的Region里面,六個內(nèi)部負(fù)載均衡(SLB廓握,Server Load Balance)地址搅窿,返回給本地的DNS服務(wù)器。
  3. 本地DNS服務(wù)器將結(jié)果返回給本地的DNS解析器
  4. 本地DNS解析器將結(jié)果緩存隙券,返回給客戶端
  5. 客戶端開始訪問屬于相同運(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ǔ)充)

相關(guān)閱讀

1. 五分鐘讀懂TCP 協(xié)議——TCP協(xié)議簡介

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末竹握,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子辆飘,更是在濱河造成了極大的恐慌啦辐,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜈项,死亡現(xiàn)場離奇詭異芹关,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)紧卒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進(jìn)店門侥衬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人跑芳,你說我怎么就攤上這事轴总。” “怎么了博个?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵肘习,是天一觀的道長。 經(jīng)常有香客問我坡倔,道長漂佩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任罪塔,我火速辦了婚禮投蝉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘征堪。我一直安慰自己瘩缆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布佃蚜。 她就那樣靜靜地躺著庸娱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谐算。 梳的紋絲不亂的頭發(fā)上熟尉,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天,我揣著相機(jī)與錄音洲脂,去河邊找鬼斤儿。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的往果。 我是一名探鬼主播疆液,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼陕贮!你這毒婦竟也來了堕油?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤肮之,失蹤者是張志新(化名)和其女友劉穎馍迄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體局骤,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡攀圈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了峦甩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赘来。...
    茶點(diǎn)故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凯傲,靈堂內(nèi)的尸體忽然破棺而出犬辰,到底是詐尸還是另有隱情,我是刑警寧澤冰单,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布幌缝,位于F島的核電站,受9級特大地震影響诫欠,放射性物質(zhì)發(fā)生泄漏涵卵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一荒叼、第九天 我趴在偏房一處隱蔽的房頂上張望轿偎。 院中可真熱鬧,春花似錦被廓、人聲如沸坏晦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昆婿。三九已至,卻和暖如春蜓斧,著一層夾襖步出監(jiān)牢的瞬間仓蛆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工法精, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留多律,地道東北人。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓搂蜓,卻偏偏與公主長得像狼荞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子帮碰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評論 2 350

推薦閱讀更多精彩內(nèi)容