點(diǎn)贊關(guān)注啊终,不再迷路,你的支持對(duì)我意義重大傲须!
?? Hi蓝牲,我是丑丑。本文「計(jì)算機(jī)網(wǎng)絡(luò)」| 導(dǎo)讀 —— 跬步千里泰讽,始于足下 已收錄例衍,這里有 Android 進(jìn)階成長(zhǎng)路線筆記 & 博客昔期,歡迎跟著彭丑丑一起成長(zhǎng)。(聯(lián)系方式在 GitHub)
前言
- DNS 往往是網(wǎng)絡(luò)請(qǐng)求的第一步佛玄,在計(jì)算機(jī)網(wǎng)絡(luò)面試中硼一,DNS 也是除 HTTP、TCP 之外較重點(diǎn)考察的知識(shí)梦抢,其重要性可想而知欠动。
- 在這篇文章里,我將梳理圖解 DNS & HTTPDNS 的原理知識(shí)惑申。如果能幫上忙具伍,請(qǐng)務(wù)必點(diǎn)贊加關(guān)注,這真的對(duì)我非常重要圈驼。
目錄
1. DNS 原理
1.1 DNS 簡(jiǎn)介
域名(Domain Name人芽,Domain) 是一個(gè)在互聯(lián)網(wǎng)上標(biāo)識(shí)主機(jī)或主機(jī)組的名稱,相當(dāng)于 IP 地址的別名绩脆,相對(duì)于晦澀難記的 IP 地址萤厅,域名更顯得易于記憶。
域名系統(tǒng)(Domain Name System靴迫,DNS) 則是將域名解析 IP 地址的一項(xiàng)互聯(lián)網(wǎng)基礎(chǔ)服務(wù)惕味,提供該服務(wù)的服務(wù)器稱為 域名服務(wù)器(Domain Name Server)。
1.2 DNS 解析過(guò)程
互聯(lián)網(wǎng)上的域名系統(tǒng)是一個(gè)分布式的系統(tǒng)玉锌,結(jié)構(gòu)上是一個(gè)四層的樹(shù)狀層次結(jié)構(gòu)名挥,如下圖所示:
本地域名服務(wù)器(Local Name Server,local DNS):如果通過(guò) DHCP 配置主守,local DNS 由互聯(lián)網(wǎng)服務(wù)提供商(ISP禀倔,如聯(lián)通、電信)提供参淫;
根域名服務(wù)器(Root Name Server):當(dāng) local DNS 查詢不到解析結(jié)果時(shí)救湖,第一步會(huì)向它進(jìn)行查詢,并獲取頂級(jí)域名服務(wù)器的IP地址涎才。全球一共有 13 個(gè)根域名服務(wù)器(除了它們的鏡像)鞋既,它們并不直接用于域名解析,僅用于指出可查詢的頂級(jí)域名服務(wù)器耍铜。這個(gè)網(wǎng)站記錄了現(xiàn)有的 13 個(gè)根域名服務(wù)器:https://www.internic.net/domain/named.root邑闺;
頂級(jí)域名服務(wù)器(Top-level Name Server):負(fù)責(zé)管理在該頂級(jí)域名服務(wù)器下注冊(cè)的二級(jí)域名,例如.com 頂級(jí)域名服務(wù)器业扒,而 baidu.com 權(quán)威服務(wù)器是注冊(cè)在 .com 的權(quán)威域名服務(wù)器检吆;
權(quán)威域名服務(wù)器(Authoritative Name Server):在特定區(qū)域內(nèi)具有唯一性,負(fù)責(zé)維護(hù)該區(qū)域內(nèi)的域名與 IP 地址的映射關(guān)系程储。在 DNS 應(yīng)答報(bào)文中蹭沛,標(biāo)志位 AA 標(biāo)識(shí)本次 DNS 記錄是否來(lái)自權(quán)威域名服務(wù)器臂寝,否則可能來(lái)自緩存。
DNS 解析分為 遞歸查詢 和 迭代查詢 兩種方式摊灭。其中咆贬,客戶端與 Local DNS 之間一般采用遞歸查詢,而 DNS 服務(wù)器之間一般采用迭代查詢帚呼。
提示:如果 DNS 服務(wù)器之間使用遞歸查詢掏缎,對(duì)根域名服務(wù)器的負(fù)擔(dān)就太重了,而如果客戶端與本地域名服務(wù)器之間使用迭代查詢煤杀,DNS 服務(wù)對(duì)于客戶端就顯得不透明了眷蜈。
- 遞歸查詢:
所謂遞歸查詢,與我們經(jīng)常提及的遞歸函數(shù)的思想是一致的沈自,即:如果 DNS 服務(wù)器查不到該域名酌儒,那么它將重新以客戶端的身份向其他 DNS 服務(wù)器發(fā)送查詢請(qǐng)求報(bào)文,客戶端只要等待最終結(jié)果即可枯途。用偽代碼呈現(xiàn)可能比較好理解忌怎,類似這樣:
fun dns(client: String, server: String, domain: String): String {
if (server 查詢 domain 成功) {
return "ip"
}
// server 以客戶端身份遞歸查詢
return dns(server, "其他 DNS 服務(wù)器", domain)
}
- 迭代查詢:
所謂迭代查詢,即:如果 DNS 服務(wù)器查不到該域名酪夷,它不會(huì)替客戶端完成后續(xù)的查詢工作榴啸,而是回復(fù)下一步應(yīng)當(dāng)向哪一個(gè)域名服務(wù)器進(jìn)行查詢,隨后客戶端重新向這個(gè)新的 DNS 服務(wù)器發(fā)送查詢請(qǐng)求晚岭。用偽代碼呈現(xiàn)可能比較好理解鸥印,類似這樣:
fun dns(client: String, server: String, domain: String): String {
while (true) {
if (server 查詢 domain 成功) {
return "ip"
} else {
// client 繼續(xù)以客戶端身份迭代查詢
server = "其他 DNS 服務(wù)器"
}
}
}
下面以查詢www.baidu.com
為例,闡述一次 DNS 解析過(guò)程:
0腥例、首先檢查 DNS 緩存辅甥,下一節(jié)我們會(huì)講,如果緩存老化或未命中燎竖,客戶端需要向 local DNS 發(fā)送查詢請(qǐng)求報(bào)文
1、客戶端向 local DNS 發(fā)送查詢報(bào)文
query www.baidu.com
要销,local DNS 首先檢查自身緩存构回,如果存在記錄則直接返回結(jié)果,查詢結(jié)束疏咐;如果緩存老化或未命中纤掸,則:2、local DNS 向根域名服務(wù)器發(fā)送查詢報(bào)文
query www.baidu.com
浑塞,返回 .com 頂級(jí)域名服務(wù)器的地址(如果查無(wú)記錄)3借跪、local DNS 向 .com 頂級(jí)域名服務(wù)器發(fā)送查詢報(bào)文
query www.baidu.com
,返回baidu.com
所在的權(quán)威域名服務(wù)器的地址(如果查無(wú)記錄)4酌壕、local DNS 向 baidu.com 權(quán)威域名服務(wù)器發(fā)送查詢報(bào)文
query www.baidu.com
掏愁,得到 ip 地址歇由,存入自身緩存并返回給客戶端
1.3 DNS 報(bào)文
由于下一節(jié)我們將實(shí)戰(zhàn)抓取 DNS 包,所以這一節(jié)我們先介紹 DNS 報(bào)文格式果港。DNS 協(xié)議定義了三種報(bào)文沦泌,查詢報(bào)文 & 應(yīng)答報(bào)文 & 更新報(bào)文,它們的總體上結(jié)構(gòu)是一致的辛掠。
-
報(bào)文首部(Header)
- 1谢谦、事務(wù) ID(Transaction ID):用來(lái)關(guān)聯(lián) DNS 查詢與應(yīng)答,DNS客戶端每次發(fā)送查詢請(qǐng)求都會(huì)使用不同的 ID萝衩,而服務(wù)器在響應(yīng)中重復(fù)這個(gè) ID
- 2回挽、標(biāo)志(Flags):報(bào)文的標(biāo)志字段,詳見(jiàn)下圖
- 3猩谊、問(wèn)題數(shù)(Question Count):指定問(wèn)題部分條目數(shù)
- 4千劈、回答資源記錄數(shù)(Answer Resource Record count):指定應(yīng)答部分中回答資源條目數(shù)
- 5、權(quán)威資源記錄數(shù)(Authority Resource Record count):指定權(quán)威資源記錄數(shù)
- 6预柒、附加資源記錄數(shù)(Additional Resource Record count):指定附加資源記錄數(shù)
- 問(wèn)題(Question)
問(wèn)題用于表達(dá)具體查詢的問(wèn)題队塘,問(wèn)題個(gè)數(shù)與報(bào)文首部中的 問(wèn)題數(shù)(Question Count)字段一致。需要注意的是宜鸯,按照 DNS 查詢的目的憔古,DNS 解析可以分為 正向解析 和 反向解析 兩種,正向解析將域名解析為 IP 地址淋袖,而反向解析則恰恰相反鸿市,用于將 IP 地址解析域名。問(wèn)題條目中 查詢類型 是比較重要的字段即碗,這里僅列出 5 個(gè)比較常用的類型:
QTYPE | 描述 |
---|---|
A(1) | 將域名解析為 IPv4 地址 |
NS(2) | 查詢域名服務(wù) |
CNAME(5) | 規(guī)范名稱 |
PTR(12) | IP 地址解析為域名 |
AAAA(28) | 將域名解析為 IPv6 地址 |
NS 和 CNAME 不好理解焰情,這里解釋下:
CNAME(Canonical NAME) 是規(guī)范名稱或別名,用于將一個(gè)域名指向另一個(gè)域名剥懒。具體方法是:將一個(gè)域名作為 A 記錄 指向 IP 地址内舟,而其他域名作為別名指向 A 記錄的域名,此時(shí)如果需要更改 IP 地址初橘,就不需要更改每個(gè)域名的映射了验游,只需要修改 A 記錄 ,而 CNAME 記錄將自動(dòng)指向新的 IP 地址保檐。在 第 1.4 節(jié) DNS 解析實(shí)戰(zhàn) 中你將直接看到 CNAME 的應(yīng)用耕蝉。
NS(Name Server) :域名服務(wù)器記錄,用來(lái)指定該域名由哪個(gè) DNS 服務(wù)器來(lái)進(jìn)行解析
- 資源記錄(Resource Record)
回答資源記錄夜只、權(quán)威資源記錄和附加資源記錄的格式相同垒在,其中 TTL(Time to Live,單位秒) 表示資源記錄的生存時(shí)間扔亥,也就是允許緩存的時(shí)間场躯。0 表示該記錄只能用于當(dāng)前響應(yīng)谈为,不允許被緩存。
1.4 DNS 報(bào)文的傳輸協(xié)議
DNS 協(xié)議在傳輸層同時(shí)使用 TCP 和 UDP 協(xié)議推盛,占用的是 53 端口峦阁,那么在什么情況下使用這兩種協(xié)議?
- 在區(qū)域傳輸時(shí)使用 TCP 協(xié)議
主輔域名服務(wù)器在進(jìn)行區(qū)域傳送時(shí)(主輔域名服務(wù)器用于平衡負(fù)載)耘成,需要傳送的數(shù)據(jù)比簡(jiǎn)單的查詢 & 應(yīng)答報(bào)文的數(shù)據(jù)量要大得多了榔昔。使用 UDP 傳輸不可靠,所以采用應(yīng)用于傳輸大量數(shù)據(jù)瘪菌,可靠性更高的 TCP 協(xié)議撒会。
- 在域名解析時(shí)使用 UDP 協(xié)議
為了得到一個(gè)域名的 IP 地址,往往會(huì)向多個(gè)域名服務(wù)器查詢师妙,如果使用 TCP 協(xié)議诵肛,那么每次請(qǐng)求都會(huì)存在三次握手連接時(shí)延,這樣使 DNS 服務(wù)變得很慢默穴。
需要注意的是怔檩,DNS 協(xié)議規(guī)定 UDP 報(bào)文段的最大長(zhǎng)度為 512 字節(jié),如果 DNS 報(bào)文段過(guò)長(zhǎng)時(shí)會(huì)被截?cái)啵ù藭r(shí) DNS 報(bào)文頭中標(biāo)志位 TC(Truncation)置為 1)蓄诽,多余的數(shù)據(jù)會(huì)直接丟棄薛训。這是因?yàn)?UDP 是無(wú)連接的,無(wú)法確定哪幾個(gè) UDP 包是屬于同一個(gè) DNS 報(bào)文段的仑氛。
1.5 DNS 解析實(shí)戰(zhàn)
計(jì)算機(jī)網(wǎng)絡(luò)是在實(shí)踐中發(fā)展起來(lái)的學(xué)科乙埃,僅停留在學(xué)習(xí)理論知識(shí)的層面是不夠的,下面我們將在實(shí)踐中學(xué)習(xí) DNS 解析锯岖。在這里介袜,我們是用 WireShark 抓取查詢www.baidu.com
的 DNS 請(qǐng)求,具體步驟如下:
- 步驟一:設(shè)置 WireShark 過(guò)濾條件
在過(guò)濾條件欄輸入條件:icmp || dns
出吹,如下圖:
- 步驟二:終端 ping www.baidu.com
在終端輸入ping www.baidu.com
遇伞,如下圖:
- 步驟三:查看 DNS 查詢 & 應(yīng)答報(bào)文
返回 WireShark,查看抓取的消息捶牢,可以看到兩條 DNS 報(bào)文消息赃额,一條為查詢報(bào)文,另一條為應(yīng)答報(bào)文叫确,如下圖:
現(xiàn)在我們具體查看這兩條 DNS 報(bào)文消息,有了上一節(jié)的鋪墊芍锦,相信閱讀這兩段報(bào)文已經(jīng)很簡(jiǎn)單了竹勉。先看 DNS 協(xié)議的報(bào)文段部分,下層協(xié)議的報(bào)文段后面講:
- 查詢報(bào)文:
在這個(gè)報(bào)文里提出了一個(gè)問(wèn)題娄琉,即:查詢 www.baidu.com 的 IPv4 地址(A 記錄)次乓,標(biāo)記位指出以下信息:這是一個(gè)查詢報(bào)文吓歇;這是一次正向解析;報(bào)文未截?cái)嗥毖灰蠓?wù)器執(zhí)行遞歸查詢城看;
- 應(yīng)答報(bào)文:
- 傳輸層 & 網(wǎng)絡(luò)層:
從圖中還驗(yàn)證了 DNS 在進(jìn)行域名解析時(shí)使用 UDP 協(xié)議,端口號(hào)為 53杏慰,與上一小節(jié)的分析一致测柠。另外,還可以看出 IP 包的第一跳是發(fā)送給局域網(wǎng)路由器缘滥,而不是直接發(fā)送給 local DNS 服務(wù)器轰胁,這也合理。
1.6 DNS 緩存
一次完整的 DNS 查詢過(guò)程需要訪問(wèn)多臺(tái) DNS 服務(wù)器才能得到最終的結(jié)果朝扼,這肯定會(huì)帶來(lái)一定的時(shí)延赃阀。為了改善時(shí)延,DNS 服務(wù)并不是每次請(qǐng)求都要去訪問(wèn) DNS 服務(wù)器擎颖,而是訪問(wèn)過(guò)一次后將 DNS 記錄緩存在本地榛斯。具體來(lái)說(shuō),DNS 服務(wù)是一個(gè)多級(jí)的緩存:
瀏覽器緩存 -> 操作系統(tǒng)緩存 -> 路由器緩存 -> local DNS 緩存 -> DNS 查詢
緩存并不是永久有效的搂捧,前面提到過(guò) DNS 應(yīng)答報(bào)文中的 TTL(Time to Live)值驮俗,它決定了 DNS 記錄在緩存中的有效時(shí)間。需要注意的是异旧,TTL 只是一個(gè)參考值意述,實(shí)際使用的緩存有效時(shí)間不一定等于該值,甚至是固定值吮蛹。這也引發(fā) DNS 緩存也存在一些“副作用”荤崇,我后文再說(shuō)。
2. DNS 存在的問(wèn)題
經(jīng)過(guò)上一節(jié)的 DNS 理論知識(shí)學(xué)習(xí)和實(shí)踐探索潮针,相信大家對(duì) DNS 已經(jīng)建立起了一定的認(rèn)識(shí)术荤。那么,DNS 是一個(gè)完備的服務(wù)嗎每篷,在實(shí)踐中它有存在什么問(wèn)題呢瓣戚?這一節(jié)我們來(lái)討論這個(gè)問(wèn)題。
2.1 DNS 查詢時(shí)延
從第一節(jié)的分析可以看出焦读,一次完整的 DNS 查詢過(guò)程需要訪問(wèn)多臺(tái) DNS 服務(wù)器才能得到最終的結(jié)果子库,這肯定會(huì)帶來(lái)一定的時(shí)延。從實(shí)踐來(lái)看矗晃,這個(gè)時(shí)間還不容小覷仑嗅。
提示: 有贊技術(shù)團(tuán)隊(duì)指出,DNS 解析時(shí)延的波動(dòng)較大,好的情況幾毫秒仓技、十幾毫秒就完成了鸵贬,差的時(shí)候,可能需要花很多時(shí)間:《有贊webview加速平臺(tái)探索與建設(shè)》 —— 有贊移動(dòng)組
2.2 緩存一致性
DNS 緩存的存在雖然減少了時(shí)延脖捻,卻是以犧牲一致性(consistency)為代價(jià)的阔逼。具體來(lái)說(shuō):Local DNS 是分地區(qū)、分運(yùn)營(yíng)商的地沮,在域名解析緩存的處理上嗜浮,實(shí)現(xiàn)策略就不統(tǒng)一了。有時(shí)候 Local DNS 的解析結(jié)果 可能不是最近诉濒、最優(yōu)的節(jié)點(diǎn)周伦,有的時(shí)候并不會(huì)遵從 TTL 的限制,而是設(shè)置一個(gè)固定時(shí)間未荒。這就會(huì)導(dǎo)致域名指向新的 IP 地址后专挪,一些客戶端依然訪問(wèn)了緩存中 舊的 IP 地址。
除了運(yùn)營(yíng)商的緩存策略外片排,緩存投毒也是降低 DNS 可用性的原因寨腔。攻擊者可以通過(guò) DNS 劫持,利用 DNS 的緩存機(jī)制不對(duì)應(yīng)答數(shù)據(jù)做檢查的漏洞率寡,誘騙 DNS 服務(wù)器緩存較大 TTL 的虛假 DNS 記錄迫卢,從而長(zhǎng)期欺騙客戶端。
2.3 DNS 劫持(中間人攻擊)
由于 DNS 缺乏 加密冶共、認(rèn)證乾蛤、完整性保護(hù)的安全機(jī)制,容易引發(fā)網(wǎng)絡(luò)完全問(wèn)題捅僵。最常見(jiàn)的域名劫持攻擊是針對(duì) DNS 報(bào)文首部的 事務(wù) ID 進(jìn)行欺騙家卖,由于事務(wù) ID 在查詢報(bào)文和應(yīng)答報(bào)文中是匹配的,因此偽裝 DNS 服務(wù)器可以提前將事務(wù) ID 相同的偽造報(bào)文發(fā)送到客戶端庙楚,以實(shí)現(xiàn)域名劫持(前提是合法的報(bào)文還未到達(dá))上荡,把目標(biāo)網(wǎng)站域名解析到錯(cuò)誤的 IP 地址。
提示: 獲取事務(wù) ID 的方法主要采用 網(wǎng)絡(luò)監(jiān)聽(tīng)與序列號(hào)猜測(cè)馒闷,具體可翻閱《計(jì)算機(jī)網(wǎng)路安全原理》 (第 8 章)—— 吳禮發(fā) 著
2.4 調(diào)度不精準(zhǔn)問(wèn)題
由于存在緩存酪捡、轉(zhuǎn)發(fā)、NAT 等問(wèn)題纳账,權(quán)威的 DNS 服務(wù)器可能會(huì)誤判客戶端所在的位置和運(yùn)營(yíng)商逛薇,從而導(dǎo)致解析出跨運(yùn)營(yíng)商訪問(wèn)的 IP 地址,用戶的訪問(wèn)速度降低疏虫。
3. HTTPDNS 原理
雖然 DNS 存在不少問(wèn)題金刁,但也不能因噎廢食放棄整套域名系統(tǒng)帅涂,解決方案無(wú)非是不走尋常路,換一種方式獲取 IP 地址 —— HTTPDNS尤蛮。
3.1 HTTPDNS 簡(jiǎn)介
與傳統(tǒng)的 DNS 解析不同,HTTPDNS 是自己搭建基于 HTTP 協(xié)議的服務(wù)器斯议,當(dāng)客戶端需要 DNS 解析的時(shí)候产捞,不再向 local 發(fā)送 DNS 查詢報(bào)文,而是直接通過(guò)請(qǐng)求直接訪問(wèn) HTTPDNS 接口哼御。而服務(wù)端則根據(jù)客戶端的位置和所屬運(yùn)營(yíng)商坯临,返回就近的 IP 地址。
當(dāng)然了恋昼,基于容災(zāi)考慮看靠,當(dāng)出現(xiàn) HTTPDNS 不可用時(shí)會(huì)觸發(fā)降級(jí)策略,使用運(yùn)營(yíng)商 LocalDNS 進(jìn)行域名解析液肌。
3.2 HTTPDNS 優(yōu)勢(shì)
相對(duì)與 DNS挟炬,HTTPDNS 的主要優(yōu)點(diǎn)如下:
降低時(shí)延
縮短了查詢鏈路,不像 DNS 查詢那樣需要訪問(wèn)多臺(tái) DNS 服務(wù)器才能得到最終的結(jié)果嗦哆;域名防劫持
域名解析請(qǐng)求直接發(fā)送至HTTPDNS服務(wù)器谤祖,繞過(guò)運(yùn)營(yíng)商 Local DNS,避免域名劫持問(wèn)題老速;調(diào)度精準(zhǔn)
由于 DNS 服務(wù)器端獲取的是真實(shí)客戶端 IP 而非 Local DNS 的 IP粥喜,能夠精確基于客戶端位置、運(yùn)營(yíng)商信息橘券,獲得最精準(zhǔn)的解析結(jié)果额湘,讓客戶端就近接入業(yè)務(wù)節(jié)點(diǎn)快速生效
域名解析結(jié)果變更時(shí),HTTPDNS 服務(wù)沒(méi)有傳統(tǒng)DNS 服務(wù)多級(jí)緩存的影響旁舰,域名更新能夠更快地覆蓋到全量客戶端锋华。
3.3 HTTPDNS 正向效益
目前,騰訊鬓梅、阿里和百度都有自己的 HTTPDNS 解決方案供置,筆者收集了他們公示的使用效益,具體如下:
-
騰訊
-
百度
- 官方博客:iOS劫持率由0.12%降低到0.0002%,Android劫持率由0.25%降低到0.05%活孩,第二點(diǎn)的收益不明顯物遇,原因在于Feed業(yè)務(wù)主要目標(biāo)群體在國(guó)內(nèi),百度在國(guó)內(nèi)節(jié)點(diǎn)布局相對(duì)豐富,服務(wù)整體質(zhì)量也較高询兴;
阿里
未查及...
4. 總結(jié)
應(yīng)試方面乃沙,建議重點(diǎn)掌握四層 DNS 解析過(guò)程 & HTTPDNS 原理、理解知曉 DNS 存在的問(wèn)題诗舰、DNS 報(bào)文格式重點(diǎn)理解 TTL警儒、幾種查詢類型。
參考資料
- 《域名系統(tǒng)》 —— 維基百科
- 《How DNS Works》 —— Microsoft 文檔
- 《計(jì)算機(jī)網(wǎng)路安全原理》 (第 8 章)—— 吳禮發(fā) 著
- 《TCP-IP 協(xié)議及其應(yīng)用》 (第 8 章)—— 林成浴 著
- 《全局精確流量調(diào)度新思路 - HttpDNS 服務(wù)詳解》 —— 廖偉健 著
- 《百度 App 網(wǎng)絡(luò)深度優(yōu)化系列《一》DNS優(yōu)化》 —— 蔡銳 著
- 《趣談網(wǎng)絡(luò)協(xié)議》 (第 18眶根、19 講)—— 劉超 講蜀铲,極客時(shí)間 出品
- 《萬(wàn)字長(zhǎng)文!搞定逃不脫的 DNS 面試題》 (第 2 節(jié)) —— 我是程序員小賤 著
- 《為什么 DNS 使用 UDP 而不是 TCP属百?》 (車小胖的回答)—— 知乎問(wèn)答
- [《TCP/IP詳解·卷1 —— 協(xié)議》] —— [美]Kevin R.Fall记劝、W.Richard Stevens 著
- 《What really happens when you navigate to a URL》 (第 2 節(jié)) —— Igor Ostrovsky 著
實(shí)用資源
創(chuàng)作不易,你的「三連」是丑丑最大的動(dòng)力族扰,我們下次見(jiàn)厌丑!