通往未來的網(wǎng)絡(luò)可編程之路:Netconf協(xié)議與YANG Model

近年來,隨著全球云計算領(lǐng)域的不斷發(fā)展與業(yè)務(wù)的不斷增長,促使網(wǎng)絡(luò)技術(shù)也不斷發(fā)展,SDN技術(shù)應(yīng)運而生个扰,從最初的基于Openflow的轉(zhuǎn)發(fā)與控制分離的核心思想,人們不斷的去擴展SDN的外延葱色,目前递宅,人們可以達成一個共識,Openflow不再是必備條件(但轉(zhuǎn)發(fā)與控制分離依然是核心條件)冬筒,網(wǎng)絡(luò)可編程能力慢慢地成為衡量一套SDN架構(gòu)的重要標準之一恐锣。

傳統(tǒng)的網(wǎng)絡(luò)設(shè)備進行可編程操作茅主,一般是基于CLI與SNMP協(xié)議去進行的舞痰,腳本也好,網(wǎng)管軟件也罷诀姚,都是在此基礎(chǔ)上去進行開發(fā)响牛,實現(xiàn)我們今天要談的廣義范圍上的網(wǎng)絡(luò)可編程能力,進而實現(xiàn)很多場景的自動化赫段。有些設(shè)備支持一些web界面的配置呀打,通過xml進行整體配置的替換,此類極少糯笙,本篇不做贅述贬丛。

? ? ? ?CLI

CLI(Command-line Interface),通過命令行的方式實現(xiàn)人機交互给涕,是網(wǎng)工必備的熟練豺憔,人們每天打開軟件ssh或者Telnet到設(shè)備,然后貼入一段配置够庙,保存生效恭应。有一天人們厭倦了這種重復(fù),通過程序自動生成配置腳本耘眨,批量登錄到設(shè)備下發(fā)配置生效昼榛,實現(xiàn)自動化,這是一種網(wǎng)絡(luò)可編程的方式剔难。說說優(yōu)點胆屿,非常符合人的思維奥喻、思路與既有的技術(shù)體系。但是說到底莺掠,這種方式更傾向于人衫嵌,而非網(wǎng)絡(luò)設(shè)備。它有著以下一些缺點:

廠商之間的命令集存在巨大差異彻秆,何止是廠商楔绞,同型號不同軟件版本可能差異都非常大。

開發(fā)人員必須熟知命令集及其使用方法唇兑,從配置層面存在安全風(fēng)險酒朵。比如手一瓢,想開端口變成了關(guān)閉端口...

對傳輸協(xié)議不強制要求(SSH與Telnet)扎附,存在生產(chǎn)安全風(fēng)險

解析與生成配置的過程及其復(fù)雜蔫耽,很多時候?qū)懙恼齽t只能是無限接近“真相”,而不是全部“真相”留夜。

沒有事務(wù)性匙铡,一次配置可能部分生效,部分不生效

沒有自動化的檢查機制碍粥,完全依賴人鳖眼。比如我想測試一下這段生成的腳本對不對,有辦法嚼摩,但是很困難钦讳,很多時候難以簡單實現(xiàn)。

沒有數(shù)據(jù)建模的思想

? ? ? CLI始終是人機交互的方式枕面,可以通過程序可以賦予網(wǎng)絡(luò)一定的可編程能力愿卒,但它畢竟不是天生面向網(wǎng)絡(luò)可編程的一種方式。在當(dāng)今云計算與SDN的浪潮之下潮秘,不適用于網(wǎng)絡(luò)中的大規(guī)模自動化部署琼开,可編程能力有限,這其中的開發(fā)難度難以為外人道也枕荞。

?SNMP

? ? ? ?SNMP(SNMP柜候,Simple Network Management Protocol),該協(xié)議能夠支持網(wǎng)絡(luò)管理系統(tǒng)买猖,用以監(jiān)測連接到網(wǎng)絡(luò)上的設(shè)備是否有任何引起管理上關(guān)注的情況改橘。它由一組網(wǎng)絡(luò)管理的標準組成,包含一個應(yīng)用層協(xié)議(application layer protocol)玉控、數(shù)據(jù)庫模式(database schema)飞主,和一組數(shù)據(jù)對象。

?維基百科里的一段內(nèi)容,我們劃下重點碌识,網(wǎng)絡(luò)管理碾篡,監(jiān)測,數(shù)據(jù)對象筏餐。它是用來管理網(wǎng)絡(luò)的开泽,能配置能采集,主要用于監(jiān)測魁瞪,它有數(shù)據(jù)建模穆律,將網(wǎng)絡(luò)設(shè)備的一些模塊、特征导俘、狀態(tài)數(shù)據(jù)結(jié)構(gòu)化峦耘。主要是用于網(wǎng)管系統(tǒng)(劃重點,多是監(jiān)控)旅薄。那我們也來說說它的缺點:

可讀性差辅髓。它偏向人機中的“機”,用起來可讀性差少梁,建模數(shù)據(jù)也可讀性低洛口,用的是一個ASN.1的超集。

安全性受限凯沪,有v1 v2c v3三個版本第焰,安全性依次提高,但是目前最通用的是v2c著洼,安全性有限樟遣。v3版本從設(shè)計上很安全而叼,但是普及性身笤。。葵陵。

無備份及恢復(fù)回滾等機制液荸。命令行我們還有show run等方式備份,但snmp脱篙。娇钱。。

極少的寫操作绊困。讀很多文搂,寫很少,多用于監(jiān)控秤朗。

能采集的數(shù)據(jù)項有限煤蹭,無法獲取整臺設(shè)備的配置。很多時候我們發(fā)現(xiàn)能用cli采集出來,但是無法用snmp采集硝皂。

性能有瓶頸常挚,采集數(shù)據(jù)上限64K,采集顆粒度過大稽物,在大型復(fù)雜網(wǎng)絡(luò)中可能是分鐘級或者更久奄毡。這個也劃下重點,我們對于顆粒度的要求也非常嚴格贝或,很多時候希望幾秒鐘采集一次端口流量吼过。大型網(wǎng)絡(luò)中,傳統(tǒng)的網(wǎng)管軟件咪奖,我覺得是...多展開一句那先,現(xiàn)在的方式是Telemetry(比如gRPC)可以實現(xiàn)微秒級,有的需要軟硬件結(jié)合才行赡艰,目前還未普及售淡,但未來一定是趨勢,至于這個未來什么時候來..

SNMP自誕生之日慷垮,極大地被應(yīng)用在了網(wǎng)絡(luò)監(jiān)控領(lǐng)域揖闸,用于獲取數(shù)據(jù)進行監(jiān)控,配置能力的缺失與復(fù)雜導(dǎo)致人們對其在網(wǎng)絡(luò)配置方面使用甚少料身。只有讀的網(wǎng)絡(luò)可編程...

? ? ? ?Netconf協(xié)議與YANG Model

? ? ??

? ? ? 面向下一代網(wǎng)絡(luò)汤纸,我們需要什么樣的網(wǎng)絡(luò)管理協(xié)議去更好地實現(xiàn)網(wǎng)絡(luò)可編程能力,提高自動化的水平芹血?

IETF于2002年在RFC3535提出了以下幾點設(shè)想(實際有33條之多贮泞,結(jié)合網(wǎng)上資料與筆者認知,寫了以下幾條):

1幔烛、有對網(wǎng)絡(luò)配置的可編程接口

2啃擦、同樣的配置可以跨廠商型號

3、需要統(tǒng)一可讀性良好的建模語言

4饿悬、完整的錯誤檢查及恢復(fù)功能

5令蛉、事務(wù)性

? ? ? 有了想法,那就去實現(xiàn)狡恬,在2006年IETF提出了Netconf協(xié)議珠叔,基于RFC3535提出的問題進行了解決。最初的Netconf只規(guī)定了協(xié)議的基本框架和操作弟劲,定義考慮RFC3535的一些問題的解決方法祷安,沒有規(guī)定統(tǒng)一的建模語言,所以早期部分廠商的設(shè)備只是支持Netconf的一些基本操作兔乞,底層沒有使用統(tǒng)一的數(shù)據(jù)建模語言汇鞭。

? ? 在2010年發(fā)布了RFC6020撇眯, 提出了YANG Model建模語言,以及和NETCONF 的結(jié)合方法虱咧。一個定義的是數(shù)據(jù)建模的語言統(tǒng)一各廠商之間的底層資源邏輯熊榛,一個定義的是對配置數(shù)據(jù)、狀態(tài)數(shù)據(jù)的操作統(tǒng)一各廠商的命令集腕巡,YANG模型創(chuàng)建的數(shù)據(jù)實例包裹在Netconf協(xié)議之中傳輸玄坦,二者相互結(jié)合,構(gòu)建了一套新的基于YANG模型的使用Netconf協(xié)議驅(qū)動的新時代的通用網(wǎng)絡(luò)可編程接口绘沉。

? ? ?在2016年之后煎楣,Netconf協(xié)議與YANG Model緊密結(jié)合并流行開來。至此我們再去看一些SDN架構(gòu)軟件層面的時候车伞,多多少少聽到了這兩個名詞择懂。

YANG 與Netconf,一個是靜另玖,一個動困曙,就好比陰陽,二者衍生出了下一個時代的網(wǎng)絡(luò)可編程世界谦去。(當(dāng)我們?nèi)タ磄ithub上慷丽,YANG的倉庫時也會發(fā)現(xiàn),它的圖標是太極鳄哭,包括它名字中與“陽”的關(guān)聯(lián)也多少透露出當(dāng)初設(shè)計者的設(shè)計思想)

? ? ? ?我們接下來就簡單講講YANG Model與Netconf協(xié)議要糊,我們先來講數(shù)據(jù)建模語言YANG,看看它是如何描述這個網(wǎng)絡(luò)世界的數(shù)字孿生妆丘。

?YANG Model

? ? ??

? ? ?在RFC6020的文檔中锄俄,開篇明義,YANG勺拣,A Data Modeling Language for the Network Configuration Protocol奶赠。是Yet Another Next Generation (Yang) Data Modeling Language的縮寫。

支持定義列表宣脉、字典车柠、甚至更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)剔氏,支持約束塑猖、枚舉、引用導(dǎo)入谈跛,版本管理羊苟、命名空間。由于篇幅感憾,我們做簡單講解蜡励,詳細信息大家可以參考:

官方文檔:https://tools.ietf.org/html/rfc6020

互聯(lián)網(wǎng)博文:http://www.reibang.com/p/ca7f5fe11fae

它可以非常簡單的用結(jié)構(gòu)化語言描述出這個網(wǎng)絡(luò)設(shè)備。比如對于一個端口的定義:

作為一個專業(yè)的運維人員,有點網(wǎng)絡(luò)基礎(chǔ)和一點點編程基礎(chǔ)就可比較清晰的了解端口的定義凉倚,它是一個list結(jié)構(gòu)的兼都,可以有多個,它的一個屬性是interface-name(同時是key稽寒,唯一扮碧,不可重復(fù)),還有speed屬性和duplex屬性杏糙,他們都是字符串慎王。

一個網(wǎng)絡(luò)設(shè)備的很多屬性都以YANG Model去描述,包括配置狀態(tài)和運行狀態(tài)宏侍。

就這樣赖淤,YANG Model用結(jié)構(gòu)化語言描述了這個網(wǎng)絡(luò)世界。有興趣額的可以看看上面的那個互聯(lián)網(wǎng)博文谅河,有非常深入的描述咱旱。

它可以很好的轉(zhuǎn)換成XML數(shù)據(jù),包裹在Netconf協(xié)議之中進行傳輸(我們后續(xù)會講解):

同時為了拉平廠商之間的差異绷耍,谷歌牽頭的Openconfig對數(shù)據(jù)模型就行了標準化莽龟,從官網(wǎng)中我們看到這樣一行標語“Vendor-neutral, model-driven network management designed by users”,由用戶設(shè)計的、跨廠商通用的锨天、模型驅(qū)動的網(wǎng)絡(luò)編程(我么先這么翻譯吧)毯盈。簡單點說它是為了讓各廠商之間的建模是相同的,大家再去配置某些數(shù)據(jù)的時候就不用一個個去翻看各廠商的私有的yang model了病袄。但是網(wǎng)絡(luò)總有私有協(xié)議搂赋,不同廠商總會為了“更好的用戶體驗”和“更好的商業(yè)戰(zhàn)略”去創(chuàng)造新的、更牛的私有協(xié)議(這真的是網(wǎng)絡(luò)廠商的原罪耙娌)脑奠。圖中是一些比較常用openconfig的yang model實現(xiàn)。

從圖中來看幅慌,我覺得還是挺多的宋欺,常用的配置比較齊全。但是實際中要看廠商是否也支持這些yang model胰伍。某科的一些高版本的設(shè)備基本都是支持的齿诞。國產(chǎn)的我暫時沒去細看。

網(wǎng)絡(luò)是不可能完全相同的骂租,能做到大同祷杈,對于一個做網(wǎng)絡(luò)運維開發(fā)的工程師來說,已經(jīng)是謝天謝地了渗饮!

openconfig可以在

https://github.com/openconfig/public/tree/master/release/models

查找但汞。私有的yang model 大家可以去各個官網(wǎng)查找宿刮。

Netconf協(xié)議

說完了yang model,我們來聊聊Netconf協(xié)議私蕾,yang model定義了網(wǎng)絡(luò)世界的數(shù)字描述僵缺,Netconf定義了對數(shù)據(jù)的獲取(get)與調(diào)整(config)踩叭。

Netconf對yang model描述的世界的數(shù)據(jù)yang data封裝操作谤饭,實現(xiàn)對網(wǎng)絡(luò)世界的管理。

yang data封裝在xml中懊纳,然后通過Netconf協(xié)議進行管理揉抵。它是一個分層思想很棒的協(xié)議,有層次的描述了這個協(xié)議的一些細節(jié)嗤疯。我們看看上圖冤今。

傳輸:Netconf是通過SSH協(xié)議傳輸,面向連接茂缚,且有安全保障戏罢。

消息:通過RPC進行對網(wǎng)絡(luò)設(shè)備的遠端調(diào)用,網(wǎng)管發(fā)出rpc請求脚囊,網(wǎng)絡(luò)設(shè)備恢復(fù)rpc-reply龟糕。

操作:這是Netconf的靈魂所在,它支持get(配置及運行數(shù)據(jù))悔耘、get-config(獲取配置數(shù)據(jù)讲岁,且一個設(shè)備可以有多個配置數(shù)據(jù),一個running衬以,一個startup缓艳,多個candidate候選)、edit-config(配置網(wǎng)絡(luò)設(shè)備的參數(shù)看峻,支持增刪改)這些常用的阶淘,還有delete-config、copy-config(復(fù)制配置到目的地互妓,目的地可以是ftp溪窒、文件或者是正在running的配置等等)、lock\unlock(對配置進行鎖定冯勉,防止多進程操作導(dǎo)致的配置沖突或者失敗等情況)等等澈蚌。

數(shù)據(jù):data就是xml包裹的yang data,如上圖我們所描述的那個端口一樣珠闰,結(jié)構(gòu)化數(shù)據(jù)易于編程惜浅。用來描述要配置或者刪除或者獲取的數(shù)據(jù)。

這就是Netconf的四個layer伏嗜,控制端與網(wǎng)絡(luò)設(shè)備端通過Netconf溝通坛悉,通過傳統(tǒng)的ssh協(xié)議,用Netconf子系統(tǒng)承绸,默認端口是830裸影。如下圖:

這個圖用原始的ssh演示了交互,但是實際上我們是通過編程去實現(xiàn)這個過程的军熏。編程的實現(xiàn)方式我后續(xù)會演示給大家轩猩。

Netconf配置網(wǎng)絡(luò)設(shè)備,交互過程大致如下:

這個圖荡澎,如此low均践,大家也可以看出來,是我自己畫的... 我對Netconf的理解如上摩幔,網(wǎng)上很多圖彤委,是從網(wǎng)絡(luò)視角去解讀的。我是從開發(fā)者的程序去解讀這個過程或衡。這個是我登錄設(shè)備所直觀感受的焦影,當(dāng)然也和官方文檔是一一對應(yīng)的。

我們可以看看一些Netconf的例子:

hello封断,建鏈斯辰。

我們看到了幾個關(guān)鍵字,Netconf的版本坡疼,支持的YANG Model彬呻,session id。同時hello中表明我們是在什么樣的命名空間下操作柄瑰,此例中是Netconf對應(yīng)版本废岂。

獲取配置

get-cofig有一個參數(shù)是source,即獲取哪里的配置數(shù)據(jù)(running狱意、startup 或者其他)湖苞。還有一個參數(shù)是filter,即在哪個yang model描述的數(shù)據(jù)模型獲取哪個數(shù)據(jù)详囤。這個對應(yīng)的是網(wǎng)絡(luò)設(shè)備當(dāng)初發(fā)送的capability中的财骨。如果成功會回復(fù)對應(yīng)的配置數(shù)據(jù)。

獲取配置或者運行數(shù)據(jù)

類似get-config藏姐,但是獲取的是running配置(個人理解)或者運行數(shù)據(jù)隆箩。可以指定filter羔杨。

復(fù)制配置

復(fù)制操作兩個參數(shù)捌臊,源與目的。成功回復(fù)的是ok標簽兜材。

編輯配置

編輯配置的時候指定編輯的數(shù)據(jù)項理澎,capability的命名空間及對應(yīng)標簽逞力,比如這個是配置dhcp的,它是有http://tail-f.com/ns/example/dhcp這個yang model所描述糠爬。

優(yōu)雅的關(guān)閉session

在ssh里來回傳輸?shù)木褪沁@種報文寇荧,我們只是把報文部分摘出來,方便大家理解执隧。

然后簡單補充一些內(nèi)容揩抡,供參考。

Netconf是基于session的镀琉,每次成功都會有一個session id峦嗤。

每次請求都有message id,只要是逐漸變大即可屋摔。

對數(shù)據(jù)配置可以鎖定烁设,獨占,通過lock操作凡壤。

Netconf是事務(wù)性的署尤,操作要么全部實現(xiàn),要么全部不實現(xiàn)亚侠。同時根據(jù)官網(wǎng)文檔曹体,這個事務(wù)性是針對N臺網(wǎng)絡(luò)設(shè)備的配置,即一次配置多態(tài)都可以支持事務(wù)性硝烂。不過我沒操作過...

Netconf支持訂閱箕别,看設(shè)備性能而言,數(shù)量級大概是5個session左右,我可以訂閱某數(shù)據(jù)項,當(dāng)發(fā)生變化的時候岖瑰,設(shè)備會告知我。

capability母截,我是這樣理解的,網(wǎng)絡(luò)設(shè)備發(fā)送的是Netconf的版本和YANG Model橄教,控制端發(fā)送的是Netconf的版本清寇,二者對的上Netconf版本才能繼續(xù)。這條是我的直觀感受护蝶。歡迎指教华烟。

get edit等操作會指定要改的數(shù)據(jù),用filter可以過濾持灰。

copy-config支持把一個配置全集從某處復(fù)制到某處盔夜,某處可以是FTP File,設(shè)備上的running、startup喂链、candidate配置返十。

Netconf還支持對配置的驗證,使用validate操作衩藤。

? ? 本文還是希望做到科普吧慢,具體細節(jié)不做贅述涛漂,大家可以去看看RFC的相關(guān)協(xié)議赏表,其實不是很長。

? ? ? 在實際中基于一些開源的軟件匈仗,比如python的ncclient瓢剿,我們可以非常方便的對網(wǎng)絡(luò)設(shè)備進行自動化配置,實現(xiàn)網(wǎng)絡(luò)可編程悠轩。這就是Netconf與YANG Model的使命所在间狂。

? ? ? 網(wǎng)絡(luò)人員閱讀格式良好的YANG Model定義,基于Netconf定義的操作火架,使用相關(guān)的編程語言對網(wǎng)絡(luò)設(shè)備進行可編程操作鉴象。通過這種方式鑄就網(wǎng)絡(luò)可編程的道路。

? ? ? 我們再去擴展的想象一下何鸡,YANG Model已經(jīng)定義了網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)結(jié)構(gòu)纺弊,我們可以通過Netconf去操作,那是不是也可以通過其他協(xié)議去操作呢骡男?

答案是肯定的淆游,實際上后續(xù)也從Netconf衍生出了很多其他的協(xié)議,比如RESTConf隔盛。如下圖犹菱,

YANG Model(public與native)定義了數(shù)據(jù)結(jié)構(gòu),之上是新的網(wǎng)管協(xié)議吮炕,Netconf腊脱、RESTCon、gRPC等等龙亲。這樣我們可以通過基于HTTP RESTful API的RESTConf對網(wǎng)絡(luò)設(shè)備操作陕凹,也可以通過基于SSH的Netconf對網(wǎng)絡(luò)設(shè)備操作,也可以通過基于HTTP2.0的gRPC對網(wǎng)絡(luò)設(shè)備操作俱笛,他們都是基于數(shù)據(jù)結(jié)構(gòu)良好的YANG Model捆姜,編寫對應(yīng)的data,封裝到xml或者json當(dāng)中對網(wǎng)絡(luò)設(shè)備編程迎膜,這就是未來的網(wǎng)絡(luò)可編程之路泥技,準確點說,是Model Driven Program磕仅,基于模型的網(wǎng)絡(luò)可編程珊豹。網(wǎng)工逐步的關(guān)注于設(shè)備的參數(shù)簸呈,而不是命令集,通過閱讀對應(yīng)的數(shù)據(jù)模型店茶,對網(wǎng)絡(luò)進行參數(shù)配置蜕便。


寫在最后,我為什么要開這個公眾號贩幻。本人上學(xué)期間學(xué)的是計算機科學(xué)與技術(shù)轿腺,步入職場后,進行的是網(wǎng)絡(luò)運維工作丛楚,想想分團隊原因可能是我研究生是網(wǎng)絡(luò)技術(shù)研究院導(dǎo)致的(手動滑稽)族壳,從最開始的網(wǎng)絡(luò)運維到后期通過工具基于CLI去簡化工作,提高效率趣些,后逐步將工具開發(fā)成BS架構(gòu)的web應(yīng)用仿荆,不斷接觸新技術(shù),后續(xù)不斷豐富新功能坏平,有幸趕上了開源技術(shù)與SDN的發(fā)展拢操,逐步轉(zhuǎn)型做了NetDevOps方面的工作,用自己的編程能力為團隊提高運維能力舶替,自己也樂于這一行行代碼的編寫中令境。隨著編寫的不斷深入,逐步發(fā)現(xiàn)坎穿,NetDevOps應(yīng)該是一個未來每個網(wǎng)工應(yīng)該具備的技能(眾人拾柴火焰高)展父,這樣才能即高屋建瓴又可快速實現(xiàn)。反觀網(wǎng)絡(luò)上的一些資料玲昧,說實話國內(nèi)非常少栖茉,國內(nèi)的氛圍也不是很強,國內(nèi)的很多軟件都是基于老的CLI后者snmp孵延,大家工作還是在用文本工具和SSH工具吕漂。于是希望自己能夠授人以漁,將自己的經(jīng)驗(坑)和技能分享給更多的網(wǎng)絡(luò)運維工程師尘应,盡自己的一點綿薄之力惶凝。小處說,你能學(xué)點東西減少自己的工作量犬钢,著眼遠處苍鲜,國內(nèi)的網(wǎng)絡(luò)運維能真正向自動化方向演進。

后續(xù)會錄一些視頻和編寫一些文章玷犹,寫一個文檔混滔,感覺真費勁,歡迎訂閱收藏點擊喜歡在看之類的。

附錄:

Netconf常見的operation

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坯屿,一起剝皮案震驚了整個濱河市油湖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌领跛,老刑警劉巖乏德,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吠昭,居然都是意外死亡喊括,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門怎诫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘾晃,“玉大人贷痪,你說我怎么就攤上這事幻妓。” “怎么了劫拢?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵肉津,是天一觀的道長。 經(jīng)常有香客問我舱沧,道長妹沙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任熟吏,我火速辦了婚禮距糖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牵寺。我一直安慰自己悍引,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布帽氓。 她就那樣靜靜地躺著趣斤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪黎休。 梳的紋絲不亂的頭發(fā)上浓领,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音势腮,去河邊找鬼联贩。 笑死,一個胖子當(dāng)著我的面吹牛捎拯,可吹牛的內(nèi)容都是我干的泪幌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼座菠!你這毒婦竟也來了狸眼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤浴滴,失蹤者是張志新(化名)和其女友劉穎拓萌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體升略,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡微王,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了品嚣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炕倘。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖翰撑,靈堂內(nèi)的尸體忽然破棺而出罩旋,到底是詐尸還是另有隱情,我是刑警寧澤眶诈,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布涨醋,位于F島的核電站,受9級特大地震影響逝撬,放射性物質(zhì)發(fā)生泄漏浴骂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一宪潮、第九天 我趴在偏房一處隱蔽的房頂上張望溯警。 院中可真熱鬧,春花似錦狡相、人聲如沸梯轻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽檩淋。三九已至,卻和暖如春萄金,著一層夾襖步出監(jiān)牢的瞬間蟀悦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工氧敢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留日戈,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓孙乖,卻偏偏與公主長得像浙炼,于是被迫代替她去往敵國和親份氧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354