組播之PIM(3)

一抖剿、PIM DM


PIM DM的工作機制包括擴散、剪枝识窿、嫁接斩郎、狀態(tài)刷新及斷言機制。

擴散喻频、剪枝是生成SPT的主要方法缩宜,而嫁接和狀態(tài)刷新是對擴散剪枝機制的改進增強;

1甥温、擴散

當一臺路由器收到組播報文后锻煌,先執(zhí)行RPF檢查,通過檢查后的報文向所有其他有PIM鄰居或有IGMP接收者的接口復制轉(zhuǎn)發(fā)姻蚓;(除RPF接口外炼幔,其他有PIM鄰居的接口都是下游接口)

只有路由器組播表項下游接口非空,報文就會繼續(xù)擴散下去史简,如果沒有其他鄰居或不再有IGMP接收者乃秀,則丟棄報文并不再繼續(xù)擴散;

2圆兵、剪枝和剪枝定時器

當報文擴散到末端路由器后跺讯,由于其沒有PIM鄰居或沒有IGMP接收者,組播表項下游接口列表為空殉农,路由器會向上游鄰居發(fā)送剪枝報文刀脏,通知上游鄰居不要再繼續(xù)將組播報文轉(zhuǎn)發(fā)下來;

上游鄰居收到剪枝報文后超凳,會將收到剪枝報文的接口從其組播表項下游接口列表中剪除愈污,如果路由器的下游接口都被剪除耀态,會觸發(fā)路由器繼續(xù)向上游發(fā)送剪枝,而如果下游接口仍有其他接口暂雹,則不再繼續(xù)剪枝首装,剪枝行為終止;

發(fā)生剪枝后杭跪,報文不再繼續(xù)向剪枝接口擴散仙逻,剪枝計時器(210s)超時后,被剪掉的接口會重新出現(xiàn)在下游接口列表中涧尿,組播數(shù)據(jù)報文會再次向該接口擴散系奉,下游路由器再次向上游鄰居發(fā)送剪枝報文,如此反復姑廉;

剪枝延遲定時器及剪枝否決機制

剪枝延遲計時器的作用是在下游接口有多個鄰居的場景下缺亮,阻止下游接口被某個下游鄰居立即剪掉而設計的;

如果下游接口僅有一個PIM鄰居且從其收到剪枝報文桥言,則收到后下游接口立即被剪掉瞬内;

但如果下游接口有多個鄰居存在,則要在3s超時后接口才被剪除限书;

Override是在共享網(wǎng)段上當前路由器看到另外一臺路由器發(fā)送剪除自己上游RPF鄰居的剪枝報文而設置的計時器虫蝶,在Override期間2.5s,當前路由器如果聽到其他路由器的join響應報文倦西,則會立即終止Override計時器能真,否則發(fā)送自己的join報文;

3扰柠、 嫁接

被剪枝的接口下游出現(xiàn)新加入的接收者粉铐,被剪枝的接口會在剪枝定時器超時恢復轉(zhuǎn)發(fā),這個時間需要210s卤档,接收者需要等待210s后才能收到組播數(shù)據(jù)蝙泼,引入嫁接機制可以優(yōu)化接收者收到組播報文的時間;

嫁接是下游路由器主動向上游RPF路由器發(fā)送Graft報文劝枣,要求上游路由器主動把被剪除的接口添加到下游接口列表汤踏,整個過程是可靠的;

發(fā)生剪枝的路由器下游新加入接收者舔腾,下游接口列表變?yōu)榉强障海|發(fā)路由器向上游RPF鄰居發(fā)送Graft報文;(如果一直沒有收到Graft-Ack稳诚,3s后會發(fā)生重傳)

上游RPF鄰居被剪枝的接口收到嫁接報文后哗脖,立即變?yōu)檗D(zhuǎn)發(fā)狀態(tài),同時單播回應Graft-Ack報文,如果當前路由器下游接口非空才避,會繼續(xù)向上游RPF鄰居發(fā)送嫁接報文橱夭,直至有組播流的路由器;

4桑逝、狀態(tài)刷新

有了主動嫁接機制棘劣,就不再需要已剪枝接口剪枝定時器超時后恢復轉(zhuǎn)發(fā)了,通過狀態(tài)刷新來周期刷新剪枝定時器不讓其因定時器超時恢復轉(zhuǎn)發(fā)肢娘;

離組播源最近的第一跳路由器會以60s為間隔周期產(chǎn)生狀態(tài)刷新報文并向全網(wǎng)擴散呈础,擴散方式同組播報文擴散方式舆驶,狀態(tài)刷新報文SR僅刷新相應表項的下游接口橱健,如果該接口已被剪除則刷新剪枝定時器,使其一直處于剪枝狀態(tài)沙廉;

當組播源不再活躍時拘荡,第一跳路由器將不再產(chǎn)生狀態(tài)刷新報文;

5撬陵、斷言機制和斷言計時器

組播報文經(jīng)多臺路由器轉(zhuǎn)發(fā)到同一下游網(wǎng)段珊皿,相同的組播報文被轉(zhuǎn)發(fā)了多份,這會加重網(wǎng)絡負擔,同時接收者會收到重復的多份報文巨税;

斷言機制通過比較R3蟋定、R4到組播源的信息,在二者間選舉出一臺路由器負責轉(zhuǎn)發(fā)組播數(shù)據(jù)到當前網(wǎng)段草添;

組播轉(zhuǎn)發(fā)路由器的下游接口發(fā)送出組播數(shù)據(jù)的同時有收到同樣的組播數(shù)據(jù)驶兜,觸發(fā)各自發(fā)送Assert報文,報文中攜帶了自身到組播源的路由協(xié)議優(yōu)先級和度量值远寸;

先比較單播路由協(xié)議優(yōu)先級抄淑,值越小越優(yōu);

如果路由協(xié)議優(yōu)先級相同驰后,比較到組播源的成本值肆资,值越小越優(yōu);

如果到組播源的成本值也一致灶芝,Assert報文的源IP地址大的成為Winner郑原;

非Winner路由器自動剪除自己的下游接口關(guān)聯(lián)斷言計時器(180s),同時發(fā)送一份剪枝報文給Winner夜涕,后續(xù)過程參考剪枝否決機制颤专;

Assert計時器超時后180s,下游接口恢復轉(zhuǎn)發(fā)钠乏,因此斷言機制周期性發(fā)生栖秕;

Assert Cannel報文? ? (將Assert報文攜帶的metric值置為無窮大)

如果Winner上游RPF接口Down掉或RPF接口改變?yōu)楫斍皵嘌詢?yōu)勝的接口,會觸發(fā)接口發(fā)送Assert Cannel消息(Assert報文中將metric置為無窮大)晓避,非Winner下游接口立即恢復轉(zhuǎn)發(fā)并發(fā)送Assert報文簇捍,避免非winner的下游接口等待Assert計時器超時只壳,最大180s才能恢復轉(zhuǎn)發(fā);

二暑塑、PIM SM

PIM SM多部署在組播成員分布稀疏分散吼句、規(guī)模相對較大的網(wǎng)絡環(huán)境中;

不同于DM主動擴散組播數(shù)據(jù)到接收者的網(wǎng)絡事格,SM使用PULL的方式來建組播樹惕艳,接收者需要主動向樹根建樹,才能接收組播報文驹愚;

PIM SM中远搪,組播網(wǎng)絡上的接收者和組播源彼此并不知道對方是否存在及所在位置,所以需要RP Rendezvous Point作為網(wǎng)絡的核心逢捺,接收者所在路由器以RP為樹根構(gòu)建共享樹RPT谁鳍,RP以組播源為樹根構(gòu)建最短路徑樹SPT;

PIM SM建組播分發(fā)樹較DM復雜劫瞳,包括三個階段:

階段一倘潜、接收者所在路由器向RP發(fā)(*,G)join建共享樹RPT志于;

階段二涮因、RP收到注冊報文后,向組播源發(fā)(S伺绽,G)join建最短路徑樹SPT养泡;

階段三、收到組播數(shù)據(jù)的接收者所在路由器向組播源發(fā)(S憔恳,G)建SPT樹(可選瓤荔,默認開啟);

SPT和RPT比較

SPT以組播源為樹根,連接組播源和組播接收者,路徑最優(yōu)筛婉,但是每個組播源和組就需要一個(S奉瘤,G)表項,占用內(nèi)存;

RPT以RP為樹根,連接組播接收者,存在次優(yōu)路徑引入延遲的問題郎逃,但是一條(*,G)表項可以轉(zhuǎn)發(fā)所有來自不同源的組播報文挺份,內(nèi)存開銷相對較少褒翰;

RP的作用及不足

RP用于匯聚組播接收者的加入/剪枝請求和組播源的組播數(shù)據(jù);

當組播源活躍時,組播源所在路由器向已知的RP發(fā)起注冊优训;

當接收者出現(xiàn)時朵你,接收者所在路由器向RP發(fā)送建樹請求;

組播數(shù)據(jù)經(jīng)RP在SPT和RPT間轉(zhuǎn)發(fā)揣非;

RP是PIM SM的核心抡医、瓶頸,易有單點故障早敬;

路由器間通告RP會使網(wǎng)絡增加負荷忌傻,配置維護的復雜性相應增加;

RP未必處于源和接收者路由器的最優(yōu)路徑上搞监,會引入額外的延遲水孩;

靜態(tài)RP

靜態(tài)RP為每臺路由器手工添加RP和組的對應關(guān)系,適用在簡單拓撲或小型網(wǎng)絡中部署腺逛;

當網(wǎng)絡拓撲發(fā)生變化時荷愕,不能及時更新RP和組播組的對應關(guān)系衡怀;

如果沒有指定ACL棍矛,靜態(tài)RP為所有組播組224.0.0.0/4服務,如果指定了ACL抛杨,靜態(tài)RP只為該ACL所許可的組播組服務够委;

如果沒有指定ACL,只能配置一個靜態(tài)RP怖现,指定ACL后可以配置最多50個靜態(tài)RP茁帽,但同一個ACL不能對應到多個靜態(tài)RP;

缺省動態(tài)RP比靜態(tài)RP優(yōu)先級高屈嗤,指定preferred關(guān)鍵字后潘拨,靜態(tài)RP生效;

如果存在多個靜態(tài)RP為某個組服務的情況饶号,則選擇IP地址最大的RP為該組服務铁追;

動態(tài)RP

動態(tài)RP的好處是當網(wǎng)絡拓撲發(fā)生變化的時候茫船,RP和組播組的對應關(guān)系會自動調(diào)整琅束,保證網(wǎng)絡的冗余性;

PIMv2使用BSR作為動態(tài)RP協(xié)議算谈,通過BSR定義組播組和RP的映射并快速的分發(fā)到域內(nèi)PIM路由器涩禀,如果當前RP不可達,可以使用備份RP然眼;

BSR協(xié)議定義了兩種角色的設備艾船,C-RP和C-BSR,二者都可以定義多臺,以提供冗余備份能力;

1屿岂、C-BSR? ? Candidate-BSR

在一個PIM-SM域內(nèi)礁蔗,可能存在多臺設備配置為C-BSR,但在同一時刻只能有一臺設備成為BSR雁社;

BSR的選舉是通過PIMv2的Bootstrap報文選舉出來的浴井,報文攜帶BSR優(yōu)先級、BSR地址霉撵;

如下圖磺浙,BSR優(yōu)先級是0,BSR地址是10.1.2.2徒坡,RP-set= (10.1.2.2撕氧,224.0.0.0/4);

Hash掩碼越大選擇RP時的顆粒度越小喇完,在多個RP間分擔的效果就越好伦泥,把組范圍和Hash掩碼執(zhí)行與運算,得出更小的地址段锦溪,對于組地址掩碼相同不脯、C-RP優(yōu)先級相同的每個組地址段可隨機在多個RP間選擇,華為Hash掩碼默認30位刻诊,Hash掩碼為0則沒有分擔能力防楷;

BSR選舉規(guī)則:

(1)比較BSR優(yōu)先級,數(shù)值越大越優(yōu)先则涯;

(2)若優(yōu)先級一樣复局,BSR IP地址大的優(yōu)先;

任何一臺C-BSR路由器初始狀態(tài)都是C-BSR狀態(tài)粟判,啟動BSR計時器130s亿昏;

若BSR計時器超時前收到一份更優(yōu)的BSR報文,轉(zhuǎn)發(fā)給所有其他PIM鄰居档礁,刷新BSR計時器角钩,并把收到BSR報文中的RP-set復制到本地RP-Info中;

若BSR計時器超時后未聽到任何其他更優(yōu)的C-BSR報文事秀,當前C-BSR成為BSR彤断,逐跳泛洪自身報文;

BSR周期產(chǎn)生BSR報文易迹,如果從另外一臺路由器收到優(yōu)先級更高的BSR報文宰衙,只轉(zhuǎn)發(fā)已知最優(yōu)BSR的報文,自身進入C-BSR狀態(tài)不再產(chǎn)生自己的BSR報文睹欲,否則丟掉BSR報文供炼;

若超過130s一屋,仍未收到BSR報文,本地已有的BSR信息及RP映射關(guān)系將由于老化而被清除袋哼;

2冀墨、C-RP? ? Candidate-RP

C-RP可以有多個,每個C-RP定義自己的一個接口IP地址和組播組地址范圍的對應關(guān)系涛贯;

每一個IP地址和組播組地址范圍的對應關(guān)系叫做RP映射诽嘉;

多個C-RP的目的是為了增加網(wǎng)絡的健壯性;

C-RP的PIMv2路由器收到泛洪過來的BSR報文后弟翘,了解到BSR地址后虫腋,每個C-RP都會以單播形式把C-RP上定義的RP映射發(fā)給BSR路由器,BSR路由器將收集到的RP映射放到周期性的BSR報文中通告稀余;

RP選舉規(guī)則:

(1)為組計算RP悦冀,組地址掩碼最長的RP優(yōu)先;? ?

(2)C-RP優(yōu)先級睛琳,數(shù)值越小越優(yōu)先盒蟆;

(3)Hash計算數(shù)值大的優(yōu)先;

(4)C-RP地址大的優(yōu)先师骗;

C-RP以60s周期向BSR單播發(fā)送RP-Advertisement历等,以免C-RP信息在BSR上超時;

RP-Advertisement報文中攜帶C-RP優(yōu)先級丧凤、C-RP地址募闲、組播組地址范圍步脓;

3愿待、普通PIMv2路由器

任何PIMv2路由器收到組地址224.0.0.13的BSR報文后,先執(zhí)行RPF檢查靴患,只有通過RPF檢查的BSR報文才能被接收仍侥,并繼續(xù)轉(zhuǎn)發(fā)給其他PIM鄰居;RPF檢查指接收路由器對BSR報文中的BSR地址檢查鸳君,使BSR為樹根农渊,向遠離BSR的路徑上通告,避免BSR報文環(huán)路或颊;


RPT構(gòu)建

(1)接收者向接收者所在路由器發(fā)送IGMP成員報告砸紊,告知路由器想要加入的組播組;

(2)接收者所在路由器生成(*囱挑,G)表項醉顽,并通過RPF檢查向RP方向發(fā)送(*,G)join平挑,逐跳生成(*游添,G)表項系草,直到RP;

(3)只要接收者存在唆涝,RPT就會一直存在找都。接收者所在路由器每隔60s向上游發(fā)送(*,G)join報文廊酣,收到報文的接口刷新接口計時器210s能耻,如果接口計時器超時都沒有收到(*,G)join報文亡驰,會從下游接口列表中移除嚎京;

下游接口計時器根據(jù)(*,G)join報文攜帶的Holdtime決定隐解;

如果接收者所在網(wǎng)段有多臺路由器鞍帝,僅DR向RP發(fā)送(*,G)join報文煞茫;

SM路由器向上游發(fā)送join報文的條件:

(1)組播接收者加入帕涌;

(2)收到下游join報文;

SM路由器向上游發(fā)送剪枝prune報文的條件续徽,下游接口為空:

(1)組播接收者離開蚓曼;

(2)從下游收到剪枝prune報文;

(3)下游接口計時器超時钦扭,未收到(*纫版,G)join報文;

SPT構(gòu)建

(1)組播源所在路由器收到組播數(shù)據(jù)后生成(S客情,G)表項其弊,收到組播數(shù)據(jù)的接口為上游接口,下游接口只有注冊隧道接口膀斋;

(2)PIM Register作為隧道協(xié)議直接封裝原始組播數(shù)據(jù)梭伐,隧道源IP地址是DR接口地址,目標地址是RP地址仰担,發(fā)給RP糊识;

(3)當RP收到Register報文并解封裝后,根據(jù)組播源和組地址摔蓝,檢查本地是否存在對應(*赂苗,G)表項;

如果不存在(*贮尉,G)表項拌滋,RP創(chuàng)建(S,G)表項绘盟,下游接口為空鸠真,立即向源端DR發(fā)送Register-stop報文悯仙,抑制其繼續(xù)通過注冊隧道發(fā)送組播數(shù)據(jù);(一旦收到出現(xiàn)接收者后吠卷,立即向組播源發(fā)送(S锡垄,G)join報文,構(gòu)建SPT)祭隔;

如果存在(*货岭,G)表項,RP沿著RPT將組播數(shù)據(jù)轉(zhuǎn)發(fā)給接收者疾渴,同時向組播源方向發(fā)送(S千贯,G)join報文,逐跳生成(S搞坝,G)表項搔谴,構(gòu)建SPT;

RP從SPT和注冊隧道收到兩份組播數(shù)據(jù)后桩撮,立即向遠端DR發(fā)送Register-Stop報文敦第,告知源端DR不要繼續(xù)通過注冊隧道發(fā)送組播數(shù)據(jù);

(4)源端DR收到Register-stop報文后店量,啟動注冊抑制計時器60s芜果,不再發(fā)送注冊報文,只要組播源一直活躍融师,注冊抑制計時器超時后右钾,源端DR重新開始發(fā)送注冊報文;

為降低RP系統(tǒng)開銷旱爆,DR在每次抑制計時器超時前5s向RP發(fā)送Register-null空注冊報文舀射,報文中僅包含組播源和組地址信息,不含組播數(shù)據(jù)疼鸟,RP在存在對應SPT或?qū)?后控,G)下游接口為空的情況下,都會響應Register-stop報文空镜,來抑制源端DR通過注冊隧道轉(zhuǎn)發(fā)組播數(shù)據(jù);

SPT切換

華為SM實現(xiàn)中捌朴,當組播數(shù)據(jù)沿RPT向下游轉(zhuǎn)發(fā)時吴攒,會觸發(fā)每一跳設備創(chuàng)建和(*,G)一致的(S砂蔽,G)表項洼怔,有一致的上下游接口對應關(guān)系,但該(S左驾,G)表項不置SPT位镣隶,僅置ACT位极谊,表示有數(shù)據(jù)經(jīng)過該表項;不置SPT位的(S安岂,G)表項不能指導數(shù)據(jù)轉(zhuǎn)發(fā)轻猖,這么設計優(yōu)點是可以在發(fā)送SPT剪枝或建樹時,減少不必要的建表項延遲域那;

(1)成員端DR對收到的所有組播組流量進行周期性檢測咙边,若速率超過設定的閥值,立即開始SPT切換次员;

缺省速率為0败许,成員端DR收到組播數(shù)據(jù)后會立即進行SPT切換;

(2)成員端DR向組播源方向發(fā)送(S淑蔚,G)join報文市殷,逐跳生成(S,G)表項刹衫;

組播表中已存在(S被丧,G)表項,置SWT位绪妹,表示SPT切換中甥桂;

(3)組播數(shù)據(jù)經(jīng)SPT轉(zhuǎn)發(fā),置SWT位的(S邮旷,G)表項置SPT位黄选,(S,G)表項開始指導組播數(shù)據(jù)轉(zhuǎn)發(fā)婶肩;

SPT置位的(S办陷,G)表項和(*,G)表項上游接口不一致時律歼,立即向RP方向發(fā)送置R位(表示RPT)的(S民镜,G)剪枝報文,只要下游接口列表為空险毁,上游路由器逐跳向RP剪枝制圈,RP下游接口列表也為空,繼續(xù)向組播源發(fā)送(S畔况,G)剪枝鲸鹦,直至源端DR;

三跷跪、PIM SSM

IGMP SSM Mapping

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末馋嗜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吵瞻,更是在濱河造成了極大的恐慌葛菇,老刑警劉巖甘磨,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異眯停,居然都是意外死亡济舆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門庵朝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吗冤,“玉大人,你說我怎么就攤上這事九府∽滴粒” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵侄旬,是天一觀的道長肺蔚。 經(jīng)常有香客問我,道長儡羔,這世上最難降的妖魔是什么宣羊? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮汰蜘,結(jié)果婚禮上仇冯,老公的妹妹穿的比我還像新娘。我一直安慰自己族操,他們只是感情好苛坚,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著色难,像睡著了一般泼舱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枷莉,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天娇昙,我揣著相機與錄音,去河邊找鬼笤妙。 笑死冒掌,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的危喉。 我是一名探鬼主播宋渔,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辜限!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起严蓖,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤薄嫡,失蹤者是張志新(化名)和其女友劉穎氧急,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毫深,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡吩坝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了哑蔫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钉寝。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闸迷,靈堂內(nèi)的尸體忽然破棺而出嵌纲,到底是詐尸還是另有隱情,我是刑警寧澤腥沽,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布逮走,位于F島的核電站,受9級特大地震影響今阳,放射性物質(zhì)發(fā)生泄漏师溅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一盾舌、第九天 我趴在偏房一處隱蔽的房頂上張望墓臭。 院中可真熱鬧,春花似錦妖谴、人聲如沸窿锉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榆综。三九已至,卻和暖如春铸史,著一層夾襖步出監(jiān)牢的瞬間鼻疮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工琳轿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留判沟,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓崭篡,卻偏偏與公主長得像挪哄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子琉闪,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348