數(shù)據(jù)鏈路層功能——封裝成幀&&差錯控制

本文內(nèi)容


??從本節(jié)開始介紹數(shù)據(jù)鏈路層的內(nèi)容,數(shù)據(jù)鏈路層屬于計算機(jī)網(wǎng)絡(luò)的低層,需要對其上層網(wǎng)絡(luò)層提供服務(wù)。本文主要介紹數(shù)據(jù)鏈路層的一些基本概念和數(shù)據(jù)鏈路層的兩個功能:封裝成幀和差錯控制衬衬。

1 數(shù)據(jù)鏈路層的基本概念

??(1) 節(jié)點(diǎn):主要是指主機(jī)、路由器改橘。
??(2) 鏈路:網(wǎng)絡(luò)中兩個節(jié)點(diǎn)之間的物理通道滋尉。
??(3) 數(shù)據(jù)鏈路:網(wǎng)絡(luò)中兩個節(jié)點(diǎn)之間的邏輯通道,把實(shí)現(xiàn)控制數(shù)據(jù)傳輸協(xié)議的硬件和軟件加到鏈路上就構(gòu)成了數(shù)據(jù)鏈路飞主。
??(4) :鏈路層的協(xié)議數(shù)據(jù)單元狮惜,封裝網(wǎng)絡(luò)層的數(shù)據(jù)報。

??數(shù)據(jù)鏈路層的功能:在物理層提供服務(wù)的基礎(chǔ)上向網(wǎng)絡(luò)層提供服務(wù)碌识,其最基本的服務(wù)是將源自網(wǎng)絡(luò)層來的數(shù)據(jù)可靠的傳輸?shù)较噜徆?jié)點(diǎn)的目標(biāo)機(jī)網(wǎng)絡(luò)層碾篡。其主要作用是加強(qiáng)物理層傳輸原始比特流的功能,將物理層提供的可能出錯的物理連接改造成邏輯上無差錯的數(shù)據(jù)鏈路丸冕,使之對網(wǎng)絡(luò)層表現(xiàn)為一條無差錯的鏈路耽梅。

功能一:為網(wǎng)絡(luò)層提供服務(wù)。無確認(rèn)無連接服務(wù)胖烛,有確認(rèn)無連接服務(wù)眼姐、有確認(rèn)有連接服務(wù)诅迷。
功能二:鏈路管理,即連接的建立众旗,維持罢杉。釋放(用于面向連接的服務(wù))。
功能三:組幀贡歧。
功能四:流量控制滩租。
功能五:差錯控制。

2 封裝成幀

??組裝成幀就是在一段數(shù)據(jù)的前后部分添加首部和尾部利朵,這樣就構(gòu)成了一個幀律想。幀是數(shù)據(jù)鏈路層的數(shù)據(jù)傳送單元。接收端再收到物理層上交的比特流后绍弟,就能根據(jù)首部和尾部的標(biāo)記技即,從收到的比特流中識別幀的開始和結(jié)束。

??首部和尾部包含很多控制信息樟遣,其中一個重要作用就是:幀定界(確定幀的界限)而叼。
??幀同步:接收方應(yīng)當(dāng)能夠從接收到的二進(jìn)制比特流中區(qū)分出幀的起始和終止。
??幀長:幀的數(shù)據(jù)部分長度加上幀首部和幀尾部的長度豹悬。
??最大傳送單元(MUT葵陵,Maximum Transfer Unit):每一種鏈路層都規(guī)定了所能傳送幀的數(shù)據(jù)部分長度上限。
??組幀的四種方式:字符計數(shù)法瞻佛、字符填充法脱篙、零比特填充法、違規(guī)編碼法涤久。
??透明傳輸:指不管所傳數(shù)據(jù)是什么樣的比特組合涡尘,都應(yīng)當(dāng)能夠在鏈路上傳送。因此响迂,鏈路層就看不見有什么妨礙數(shù)據(jù)傳輸?shù)臇|西考抄。
??當(dāng)所傳的數(shù)據(jù)中的比特組恰巧與某一個控制信息完全一樣時,就必須采取適當(dāng)?shù)拇胧┱嵬菇邮辗讲粫⑦@樣的錯誤認(rèn)為是某種控制信息川梅。這樣才能保證數(shù)據(jù)鏈路層的傳輸是透明的。

例如如果傳送的比特流中數(shù)據(jù)部分的數(shù)據(jù)恰好和幀尾部相同然遏,那么在傳輸過程碰到該部分?jǐn)?shù)據(jù)時贫途,接收端可能誤認(rèn)為到這里傳輸結(jié)束了,那直接丟棄之后的數(shù)據(jù)了待侵,這就會導(dǎo)致數(shù)據(jù)傳輸不完整丢早,所以就要采取適當(dāng)?shù)拇胧词褂羞@些問題也要保證數(shù)據(jù)能正確的傳輸,保證鏈路層對任何數(shù)據(jù)都能傳送怨酝,在數(shù)據(jù)看來傀缩,鏈路層沒有東西妨礙自己傳送或者說鏈路層對數(shù)據(jù)是透明的。

??2.1 字符計數(shù)法

??字符計數(shù)法:幀首部使用一個計數(shù)字段(第一個字節(jié))來表明幀的長度农猬。在接收時根據(jù)幀首部的字?jǐn)?shù)計數(shù)就可以知道一個幀的長度赡艰。



??缺點(diǎn):如果其中某個幀的計數(shù)錯誤,那么會導(dǎo)致之后傳輸?shù)臄?shù)據(jù)全部錯誤斤葱。

對于上圖慷垮,如果第1幀的計數(shù)在傳輸過程中發(fā)生錯誤又5變成了4,那么接收端在接收到4個字符就認(rèn)為該幀數(shù)據(jù)接收完畢了揍堕,開始接收下一幀料身,認(rèn)為下一幀的字?jǐn)?shù)計數(shù)是4,下一幀的數(shù)據(jù)也會出錯.......最終導(dǎo)致數(shù)據(jù)錯誤鹤啡。

??2.2 字符填充法

??當(dāng)數(shù)據(jù)時由可打印的ASCII碼組成的文本文件時惯驼,幀定界可以使用特殊的幀定界符蹲嚣〉莨澹控制字符SOH(Start Of Header)放在一幀的最前面,表示幀的首部開始隙畜。另一個控制符EOT(End Of Transmission)表示幀結(jié)束抖部。SOH和EOT是控制符的名稱,它們的二進(jìn)制編碼分別是0000 0001和0000 0100议惰。

當(dāng)使用ASCII編碼時慎颗,一共有128個不同的ASCII碼,其中可打印的有95個言询,有33個是不可打印的俯萎,,SOH和EOT就是不可打印的編碼运杭,所以可以用來作為控制符夫啊。


??當(dāng)傳送到幀是用文本文件組成的幀時(文本文件中的字符都是從鍵盤上輸入的),其數(shù)據(jù)部分顯然不會出現(xiàn)像SOH或EOT這樣的幀定界控制符辆憔,可見不管從鍵盤上輸入什么字符都可以放在幀上傳輸過去撇眯,因此這樣的傳輸就是透明傳輸。
??但是當(dāng)數(shù)據(jù)部分是非ASCII碼的文本文件時(如二進(jìn)制代碼的計算機(jī)程序或圖像等)虱咧,數(shù)據(jù)中的某個字節(jié)的二進(jìn)制代碼恰好和SOH或EOT這樣的控制字符一樣熊榛。這樣接收端就會錯誤的找到幀的邊界,把部分幀收下腕巡,丟棄部分?jǐn)?shù)據(jù)玄坦。

??為了解決透明傳輸問題,在發(fā)送端的數(shù)據(jù)鏈路層中出現(xiàn)控制字符SOH或EOT的前面插入一個轉(zhuǎn)義字符“ESC”(其二進(jìn)制編碼為0001 1011)绘沉。而在接收端的數(shù)據(jù)鏈路層在把數(shù)據(jù)送往網(wǎng)絡(luò)層之前刪除這個插入的轉(zhuǎn)入字符煎楣。

如果轉(zhuǎn)義字符也在數(shù)據(jù)中云挟,同樣需要在轉(zhuǎn)義字符前再插入一個轉(zhuǎn)義字符。當(dāng)接收端接收到連續(xù)的兩個轉(zhuǎn)義字符時转质,就刪除其中前面的一格個园欣。


??2.3 零比特填充法

零比特填充法幀的控制信息的首部和尾部是相同的。

??零比特填充法:在發(fā)送端休蟹,掃描整個信息字段沸枯,只要有連續(xù)的5個1,就立即填入1個0赂弓。在接收端收到一個幀時绑榴,先找到標(biāo)志字段確定邊界,再用硬件對比特流進(jìn)行掃描盈魁。發(fā)現(xiàn)連續(xù)5個1時翔怎,就把后面的0刪除。杨耙。

??零比特填充保證了透明傳輸赤套,在傳送的比特流中可以傳送任意比特組合,而不會引起對幀邊界的判斷錯誤珊膜。

??2.4 違規(guī)編碼法

??在曼徹斯特編碼中容握,一個碼元可以用前高后低表示1,前低后高表示0车柠,只有這兩種情況剔氏,不存在前高后高和前低后低這兩種情況。所以可以使用這兩種不存在的情況作為定界幀的起始和終止竹祷。


??由于字節(jié)計數(shù)法中的count字段的脆弱性(其值若有差錯將導(dǎo)致災(zāi)難性后果)及字符填充實(shí)現(xiàn)上的復(fù)雜性和不兼容性谈跛,目前普遍使用的是比特填充違規(guī)編碼法

3 差錯控制

??差錯的由來:現(xiàn)實(shí)中的通信鏈路都不會是理想的塑陵,由于噪聲的存在感憾,比特在傳輸?shù)倪^程可能會產(chǎn)生差錯。
??噪聲分為全局性和局部性猿妈。

(1) 全局性噪聲是由于線路電氣特性所產(chǎn)生的隨機(jī)噪聲(熱噪聲)吹菱,是信道固有的,隨機(jī)存在的彭则△⑺ⅲ可以通過提高信噪比來減少或避免干擾。
(2) 局部性噪聲是外界特定的短暫原因所造成的沖擊噪聲俯抖,是產(chǎn)生差錯的主要原因输瓜。可以利用編碼技術(shù)來解決。

??在數(shù)據(jù)傳輸過程中尤揣,差錯可以分為位錯和幀錯搔啊。

注:發(fā)送的幀為[#1]-[#2]-[#3]。

??差錯控制方法:檢錯編碼和糾錯編碼 北戏。

這里的差錯控制是針對的是比特錯负芋,幀錯后面再說。

?? 3.1 奇偶校驗(yàn)碼

??奇偶檢驗(yàn)碼分為奇檢驗(yàn)碼和偶檢驗(yàn)碼嗜愈。由n-1位信息元和在數(shù)據(jù)信息前的1位校驗(yàn)元組成旧蛾。

(1) 奇檢驗(yàn)碼:將數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)據(jù),數(shù)據(jù)中的“1”的個數(shù)加上檢驗(yàn)元的“1”的個數(shù)為奇數(shù)蠕嫁,如果接收端的1的個數(shù)是偶數(shù)锨天,說明一定發(fā)生了錯誤。
(2) 偶檢驗(yàn)碼:將數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)剃毒,數(shù)據(jù)中的“1”的個數(shù)加上檢驗(yàn)元的“1”的個數(shù)為偶數(shù)病袄。如果接收端的1的個數(shù)是奇數(shù),說明一定發(fā)生了錯誤赘阀。

??奇偶檢驗(yàn)碼的特點(diǎn):
??(1) 奇偶檢驗(yàn)碼可以檢測比特錯益缠,但是不能檢測到是哪個比特出現(xiàn)差錯。

??例如纤壁,如果一個字符S的ASCII編碼從底到高一次為1100101左刽,采用奇校驗(yàn),那么發(fā)送端發(fā)送的就是11100101(加上校驗(yàn)元酌媒,1的個數(shù)是奇數(shù)),經(jīng)過傳輸后迄靠,如果接收端收到的字符秒咨,如果是11100111,1的個數(shù)變成了6個掌挚,說明一定發(fā)生了錯誤雨席,但是不能檢測是哪個比特出現(xiàn)了錯誤。

??(2) 奇偶校驗(yàn)碼只能檢測出奇數(shù)個比特錯誤吠式,檢錯能力為50%陡厘。

??對于上例,如果接收端接收的數(shù)據(jù)是11010101特占,即發(fā)生了2位比特錯誤糙置,但是2個位錯正好相抵消,即一個由0變?yōu)?是目,另一個由1變成0谤饭,數(shù)據(jù)中的1個數(shù)仍然是5,所以同樣不能檢測出錯誤。同理揉抵,只有發(fā)生奇數(shù)個比特錯誤時亡容,才可以檢測出來。

?? 3.2 循環(huán)冗余碼CRC

??冗余編碼:在數(shù)據(jù)發(fā)送前冤今,先按某種關(guān)系附加上一定的冗余位闺兢,構(gòu)成一個符合某一規(guī)則的碼字后再發(fā)送。當(dāng)要發(fā)送的有效數(shù)據(jù)變化時戏罢,相應(yīng)的冗余位也隨之變化列敲,使碼字遵從不變的規(guī)則。接收端根據(jù)收到的碼字是否仍符合原規(guī)則帖汞,從而判斷是否出錯戴而。
??循環(huán)冗余檢驗(yàn)原理:在發(fā)送端,假設(shè)要發(fā)送k個比特翩蘸,CRC運(yùn)算就是在這k個比特后添加供查錯檢驗(yàn)的n位冗余碼所意,n位冗余碼又稱為幀檢驗(yàn)序列FCS(Frame Check Sequence),然后構(gòu)成一個幀發(fā)送出去催首,一共發(fā)送(k + n)個位扶踊。這n位冗余碼可以通過發(fā)送的數(shù)據(jù)和一個數(shù)相除得來,這個數(shù)是收發(fā)雙發(fā)事先約定好的數(shù)郎任。接收端收到發(fā)送端發(fā)送的(k + n)位比特后秧耗,需要將這些比特位和FCS相除,如果余數(shù)是0舶治,表示沒有差錯就接收分井,反之,則丟棄霉猛。
??舉例說明:如果客戶端要發(fā)送的數(shù)據(jù)是M = 101001尺锚,除數(shù)多項(xiàng)式P = 1101。

(1) 先確定n的大小惜浅。由于1101 = 1 * 23 + 1 * 22 + 0 * 21 + 1 * 21瘫辩,所以該多項(xiàng)式是3階,即(n = 3)坛悉,也就是如果多項(xiàng)式是N位伐厌,階就是N-1位,同樣如果除數(shù)多項(xiàng)式為11000裸影,那么階數(shù)就是4挣轨,n的值就是4。

(2) 計算n為冗余碼(FCS)空民。n位冗余碼是M 與 P的余數(shù)刃唐,先用n位的0代替冗余碼添加到M之后即被除數(shù)為101001000羞迷,然后在于P相除,所得的余數(shù)就是冗余碼画饥。

(3) 發(fā)送端發(fā)送的數(shù)據(jù)就是101001001衔瓮。

(4) 如果接收端接收到的數(shù)據(jù)是101001001,那么同樣除以P抖甘,看余數(shù)是否為0热鞍。如果是0,表示數(shù)據(jù)沒有發(fā)生錯誤衔彻,則接受薇宠,反之則丟棄。

??FCS的生成以及接收端CRC檢驗(yàn)都是由硬件實(shí)現(xiàn)的艰额,處理很迅速澄港,因此不會延誤數(shù)據(jù)的傳輸。
??在數(shù)據(jù)鏈路層僅僅使用循環(huán)冗余檢驗(yàn)CRC差錯檢測技術(shù)柄沮,只能做到對幀的無差錯接收回梧,即凡是接收端數(shù)據(jù)鏈路層接受的幀,都可以以非非常接近1的概率認(rèn)為這些幀在傳輸過程中沒有產(chǎn)生差錯祖搓。接收端丟棄的幀雖然曾經(jīng)接收到了狱意,但最終還是因?yàn)橛胁铄e被丟棄。所以通痴罚可以認(rèn)為:凡是接收端數(shù)據(jù)鏈路層接收的幀均為無差錯详囤。

注:鏈路層使用CRC檢驗(yàn),能夠?qū)崿F(xiàn)無比特差錯的傳輸镐作,只接受沒有錯誤的信息藏姐,丟棄錯誤的數(shù)據(jù),但這并不是可靠傳輸滑肉。可靠傳輸是發(fā)送端發(fā)送什么包各,接收端就收到什么

?? 3.3 海明碼

??海明碼可以發(fā)現(xiàn)雙比特錯靶庙,糾正單比特錯
??工作流程:

(1) 確定校驗(yàn)碼位數(shù)r娃属。
(2) 確定檢驗(yàn)碼和數(shù)據(jù)的位置六荒。
(3) 求出校驗(yàn)碼的值。
(4) 檢錯并糾錯矾端。

??(1) 確定校驗(yàn)碼的位數(shù)r

??海明不等式:2r ≥ k + r +1????????r為冗余信息位掏击,k為信息位。

??加入要發(fā)送的數(shù)據(jù)D = 101101秩铆,數(shù)據(jù)位數(shù)k = 6砚亭,帶入海明不等式灯变,滿足不等式的r最小值為4。即D = 101101的海明碼應(yīng)該有10(6 + 4)位捅膘。其中6位是數(shù)據(jù)位添祸,4位是檢驗(yàn)碼位。

??(2) 確定校驗(yàn)碼和數(shù)據(jù)的位置
??假設(shè)4為檢驗(yàn)碼分配為P1寻仗、P2刃泌、P3、P4署尤;數(shù)據(jù)從左到右分別為D1耙替、D2....D6
??檢驗(yàn)碼要放在2的n次冪的位置,即1曹体、2俗扇、4、8這四個位置箕别。

??(3) 求出檢驗(yàn)碼的值


這里因?yàn)樽畲蟮奈粩?shù)就是10铜幽,10最少需要4個二進(jìn)制位表示,所以所有數(shù)據(jù)都是用4個二進(jìn)制位表示究孕。

??對于每一個校驗(yàn)碼都可以檢驗(yàn)一個或多個數(shù)字啥酱。

對于第一個檢驗(yàn)碼P1,它負(fù)責(zé)檢驗(yàn)所有二進(jìn)制第4位(最后一位)是1的數(shù)據(jù)位厨诸,即數(shù)據(jù)位1镶殷、3、5微酬、7和9绘趋。P1的值需要和這些數(shù)據(jù)位的數(shù)異或運(yùn)算,需要最后的結(jié)果是0來確定P1的值颗管。所以P1^ 1 ^ 0 ^ 1 ^ 0 = 0陷遮,得P1 = 0。

??對于第二個檢驗(yàn)碼P2垦江,它負(fù)責(zé)校驗(yàn)所有二進(jìn)制位第3位是1的數(shù)據(jù)位帽馋,即數(shù)據(jù)位2、3比吭、6绽族、7、10衩藤,P2的值計算方法和P1相同吧慢,即P2 ^ 1 ^ 1 ^ 1 ^ 1 = 0,得P2 = 0赏表。同理可以計算出其余的檢驗(yàn)碼的值检诗。

??所以求出數(shù)據(jù)的海明碼位0010011101匈仗。

??(4) 檢錯并糾錯
??假設(shè)在數(shù)據(jù)的傳輸過程中第5位出錯,因此接收到的數(shù)據(jù)位就是0010111101逢慌。接收端接收到數(shù)據(jù)后悠轩,會進(jìn)行檢錯,分別計算檢驗(yàn)碼與檢驗(yàn)的位的異或的值涕癣。

P1和數(shù)據(jù)位3哗蜈、5、7坠韩、9的值作異或運(yùn)算:0 ^ 1 ^ 1 ^ 1 ^ 0 = 1;
P2和數(shù)據(jù)位3距潘、6、7只搁、10的值作異或運(yùn)算:0 ^ 1 ^ 1 ^ 1 ^ 1 = 0;
P3和數(shù)據(jù)位5音比、6、7的值作異或運(yùn)算:0 ^ 1 ^ 1 ^ 1= 1;
P4和數(shù)據(jù)位9氢惋、10的值作異或運(yùn)算:1 ^ 0 ^ 1 = 0;

??將上述的值逆序組成一個二進(jìn)制數(shù):0101洞翩,其所對應(yīng)的十進(jìn)制數(shù)就是5,即第5位發(fā)生了錯誤焰望,所以直接將第5位的數(shù)變?yōu)?即可實(shí)現(xiàn)糾錯的功能骚亿。

4 小結(jié)

??本文完

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市熊赖,隨后出現(xiàn)的幾起案子来屠,更是在濱河造成了極大的恐慌,老刑警劉巖震鹉,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俱笛,死亡現(xiàn)場離奇詭異,居然都是意外死亡传趾,警方通過查閱死者的電腦和手機(jī)迎膜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浆兰,“玉大人磕仅,你說我怎么就攤上這事◆こ剩” “怎么了宽涌?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蝶棋。 經(jīng)常有香客問我,道長忽妒,這世上最難降的妖魔是什么玩裙? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任兼贸,我火速辦了婚禮,結(jié)果婚禮上吃溅,老公的妹妹穿的比我還像新娘溶诞。我一直安慰自己,他們只是感情好决侈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布螺垢。 她就那樣靜靜地躺著,像睡著了一般赖歌。 火紅的嫁衣襯著肌膚如雪枉圃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天庐冯,我揣著相機(jī)與錄音孽亲,去河邊找鬼。 笑死展父,一個胖子當(dāng)著我的面吹牛返劲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播栖茉,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼篮绿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吕漂?” 一聲冷哼從身側(cè)響起亲配,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎痰娱,沒想到半個月后弃榨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梨睁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年鲸睛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坡贺。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡官辈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出遍坟,到底是詐尸還是另有隱情拳亿,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布愿伴,位于F島的核電站肺魁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏隔节。R本人自食惡果不足惜鹅经,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一寂呛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘾晃,春花似錦贷痪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至强胰,卻和暖如春舱沧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哪廓。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工狗唉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涡真。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓分俯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親哆料。 傳聞我的和親對象是個殘疾皇子缸剪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348