Alamofire 學(xué)習(xí)(一)-網(wǎng)絡(luò)基礎(chǔ)知識(shí)準(zhǔn)備

一版述、前言

Alamofire 是用 swift 寫的一套網(wǎng)絡(luò)請(qǐng)求三方庫广料,相當(dāng)于 OC 中的 AFNetWorking钦扭。在開始學(xué)習(xí) Alamofire 之前戒劫,先來復(fù)習(xí)一下網(wǎng)絡(luò)的一些基礎(chǔ)知識(shí),這樣可以更有助于我們學(xué)習(xí)理解這個(gè)網(wǎng)絡(luò)請(qǐng)求框架奸鬓。

二焙畔、OSI 七層網(wǎng)絡(luò)架構(gòu)

1、概覽

互聯(lián)網(wǎng)協(xié)議 按照功能不同分為 OSI 七層或 tcp/ip 五層或 tcp/ip 四層串远。每一層都運(yùn)行不同的協(xié)議宏多。如下圖:

每層的對(duì)應(yīng)的功能與協(xié)議如下表格:

OSI七層網(wǎng)絡(luò)模型 TCP/IP四層概念模型 功能 對(duì)應(yīng)的協(xié)議
應(yīng)用層(Application) 應(yīng)用層 文件傳輸,電子郵件澡罚,文件服務(wù)伸但,虛擬終端 HTTP、TFTP, FTP, NFS, WAIS留搔、SMTP更胖、Telnet
表示層(Presentation) 應(yīng)用層 數(shù)據(jù)格式化,代碼轉(zhuǎn)換隔显,數(shù)據(jù)加密 Telnet, Rlogin, SNMP, Gopher
會(huì)話層(Session) 應(yīng)用層 解除或建立與其他接點(diǎn)的聯(lián)系 SMTP, DNSr
傳輸層(Transport) 傳輸層 提供端對(duì)端的接口 TCP, UDP
網(wǎng)絡(luò)層(Network) 網(wǎng)絡(luò)層 為數(shù)據(jù)包選擇路由 SMTP, DNSr
數(shù)據(jù)鏈路層(Data Link) 網(wǎng)絡(luò)接口層 傳輸有地址的幀却妨,錯(cuò)誤檢測(cè)功能 FDDI, Ethernet, Arpanet, PDN, SLIP, PPP
物理層(Physical) 網(wǎng)絡(luò)接口層 以二進(jìn)制數(shù)據(jù)形式在物理媒體上傳輸數(shù)據(jù) IEEE 802.1A, IEEE 802.2 到 IEEE 802.11

客戶端發(fā)送請(qǐng)求到接收端的過程:


發(fā)送端在層與層之間傳輸數(shù)據(jù)時(shí),每經(jīng)過一層時(shí)必定會(huì)被打上一個(gè)該層所屬的首部信息括眠。反之彪标,接收端在層與層傳輸數(shù)據(jù)時(shí),每經(jīng)過一層時(shí)會(huì)把對(duì)應(yīng)的首部消去掷豺。
這種把數(shù)據(jù)信息包裝起來的做法成為封裝捞烟。

2、具體介紹

1)物理層(Physical)

物理層就是通過光纖当船、電纜等進(jìn)行連接题画,基于電器特性發(fā)送高低電壓(電信號(hào)),高電壓對(duì)應(yīng)數(shù)字 1德频,低電壓對(duì)應(yīng)數(shù)字 0苍息,傳輸一堆 001010100 的二進(jìn)制位。

2)數(shù)據(jù)鏈路層(Data Link)

只是物理層的單純的電信號(hào) 01 是沒有意義的,必須規(guī)定電信號(hào)多少位一組档叔,每組什么意思才行桌粉,數(shù)據(jù)鏈路層就是來對(duì)電信號(hào)來做分組的。數(shù)據(jù)鏈路層在不可靠的物理介質(zhì)上提供可靠的傳輸衙四。
該層的作用包括:
物理地址尋址、數(shù)據(jù)的成幀患亿、流量控制传蹈、數(shù)據(jù)的檢錯(cuò)、重發(fā)等步藕。在這一層惦界,數(shù)據(jù)的單位稱為幀(frame)。數(shù)據(jù)鏈路層協(xié)議的代表包括:SDLC咙冗、HDLC沾歪、PPP、STP等雾消。

3)網(wǎng)絡(luò)層(Network)

網(wǎng)絡(luò)層的任務(wù)就是選擇合適的網(wǎng)間路由和交換結(jié)點(diǎn)灾搏, 確保數(shù)據(jù)及時(shí)傳送。網(wǎng)絡(luò)層將數(shù)據(jù)鏈路層提供的幀組成數(shù)據(jù)包立润,包中封裝有網(wǎng)絡(luò)層包頭狂窑,其中含有邏輯地址信息- -源站點(diǎn)和目的站點(diǎn)地址的網(wǎng)絡(luò)地址。網(wǎng)絡(luò)層主要設(shè)備是路由器桑腮。
網(wǎng)絡(luò)層還可以實(shí)現(xiàn)擁塞控制泉哈、網(wǎng)際互連等功能。在這一層破讨,數(shù)據(jù)的單位稱為數(shù)據(jù)包(packet)丛晦。網(wǎng)絡(luò)層協(xié)議的代表包括:IP、IPX提陶、RIP烫沙、OSPF 等。

4)傳輸層(Transport)

網(wǎng)絡(luò)層的 ip 幫我們區(qū)分子網(wǎng)搁骑,以太網(wǎng)層的 mac 幫我們找到主機(jī)斧吐,那么如何標(biāo)識(shí)這臺(tái)主機(jī)上的應(yīng)用程序,那就需要端口仲器,端口就是應(yīng)用程序與網(wǎng)卡關(guān)聯(lián)的編號(hào)煤率。
傳輸層功能就是建立端口到端口的通信。端口范圍 0-65535乏冀,0-1023 為系統(tǒng)占用端口蝶糯。

(1)TCP 協(xié)議:

可靠傳輸,TCP 數(shù)據(jù)包沒有長度限制辆沦,理論上可以無限長昼捍,但是為了保證網(wǎng)絡(luò)的效率识虚,通常 TCP 數(shù)據(jù)包的長度不會(huì)超過IP數(shù)據(jù)包的長度,以確保單個(gè) TCP 數(shù)據(jù)包不必再分割妒茬。

  • 源端口和目的端口:
    一個(gè) IP 地址和端口的組合稱為“套接字”“端點(diǎn)”担锤。
    所以 IP 協(xié)議中的源 IP 地址和目的地址,組成了“一對(duì)”套接字(發(fā)送端的套接字和接收端的套接字)乍钻。

  • 序號(hào):
    每一個(gè)“TCP 報(bào)文段中的第一個(gè)字節(jié)”都會(huì)被賦予一個(gè)序號(hào)(遞增)肛循。根據(jù) 控制標(biāo)志 中的 SYN 是否為 1序號(hào)表達(dá)不同的含義:
    SYN = 1:當(dāng)前為連接建立階段银择,此時(shí)的序號(hào)為初始序號(hào)(ISN)多糠。當(dāng)數(shù)據(jù)傳輸正式開始時(shí),數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)為 ISN + 1;
    SYN = 0:當(dāng)前報(bào)文段中浩考,數(shù)據(jù)部分的第一個(gè)字節(jié)的序號(hào)夹孔。

  • 確認(rèn)號(hào)(TCP返回報(bào)文使用):
    確認(rèn)號(hào)也稱 ACK 號(hào)或 ACK 字段。確認(rèn)號(hào)包含的值為:“確認(rèn)號(hào)的發(fā)送方”希望接收的下一個(gè)序列號(hào)析孽。(即最后接收成功的序列號(hào) +1)一旦連接建立成功搭伤,ACK 值一直為1。

  • 數(shù)據(jù)偏移量:
    TCP 報(bào)文段的首部長度绿淋,單位是 word(4字節(jié))闷畸。字面含義是:TCP 報(bào)文段的數(shù)據(jù)的起始處,距離 TCP 報(bào)文段的起始處 的偏移量吞滞。4 個(gè)字節(jié)最大能表示的數(shù)字是 15佑菩,所以首部最大 60 字節(jié)。

  • 保留字段:
    預(yù)留作為后續(xù)用途裁赠,必須是 0殿漠。

  • 控制標(biāo)志:
    一共有 6 個(gè)控制標(biāo)志,其中 SYN/ACK佩捞、FIN/ACK 主要用于連接的建立绞幌、斷開階段。
    URG: 當(dāng)置為 1 時(shí)一忱,表示 緊急指針 字段有效莲蜘;
    ACK: 確認(rèn) 序號(hào) 字段有效;
    PSH: 接收方應(yīng)立即把這個(gè)報(bào)文段交給應(yīng)用層帘营;
    RST: 重建連接票渠;
    SYN: 同步序號(hào),用于建立連接芬迄;
    FIN: 發(fā)送端不再發(fā)送數(shù)據(jù)问顷;

  • 窗口大小:
    允許對(duì)方發(fā)送的數(shù)據(jù)量。告訴對(duì)方自己緩沖區(qū)還能容納多少字節(jié)杜窄,用來控制對(duì)方發(fā)送數(shù)據(jù)的速度肠骆。

  • 校驗(yàn)和:
    發(fā)送端對(duì) TCP 首部、數(shù)據(jù)進(jìn)行 CRC 運(yùn)算得出的結(jié)果塞耕。接收端收到數(shù)據(jù)后蚀腿,對(duì)接收到的 TCP 報(bào)文段的首部、數(shù)據(jù)進(jìn)行CRC 運(yùn)算扫外,并跟 TCP 首部中的校驗(yàn)和進(jìn)行對(duì)比唯咬,確保數(shù)據(jù)在傳輸過程中沒有損壞。

  • 緊急指針:

僅在 URG=1 時(shí)才生效畏浆,它的值是一個(gè)偏移量,和序號(hào)字段中的值相加得到緊急數(shù)據(jù)最后一個(gè)字節(jié)的序號(hào)狞贱。

  • 可選字段:
    最常見的可選字段是 MSS(Maximum Segment Size)刻获,表示最長報(bào)文大小,通信雙方通常在連接的第一個(gè)報(bào)文段中指明這個(gè)選項(xiàng)瞎嬉。(只能出現(xiàn)在 SYN 報(bào)文中)

TCP 的三次握手和四次揮手:

(1)三次握手:


第一次握手: 建立連接時(shí)蝎毡,客戶端發(fā)送 syn 包(syn=x)到服務(wù)器,并進(jìn)入 SYN_SENT 狀態(tài)氧枣,等待服務(wù)器確認(rèn)沐兵;SYN: 同步序列編號(hào)(Synchronize Sequence Numbers)。

第二次握手: 服務(wù)器收到syn包便监,必須確認(rèn)客戶的 SYN(ack=x+1)扎谎,同時(shí)自己也發(fā)送一個(gè) SYN 包(syn=y),即 SYN+ACK 包烧董,此時(shí)服務(wù)器進(jìn)入 SYN_RECV 狀態(tài)毁靶;

第三次握手: 客戶端收到服務(wù)器的 SYN+ACK 包,向服務(wù)器發(fā)送確認(rèn)包 ACK(ack=y+1)逊移,此包發(fā)送完畢预吆,客戶端和服務(wù)器進(jìn)入 ESTABLISHEDTCP 連接成功)狀態(tài),完成三次握手胳泉。

(2)四次揮手:


1)客戶端進(jìn)程發(fā)出連接釋放報(bào)文拐叉,并且停止發(fā)送數(shù)據(jù)。釋放數(shù)據(jù)報(bào)文首部扇商,FIN=1凤瘦,其序列號(hào)為 seq=u(等于前面已經(jīng)傳送過來的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加 1 ),此時(shí)钳吟,客戶端進(jìn)入 FIN-WAIT-1(終止等待 1)狀態(tài)廷粒。 TCP 規(guī)定,FIN 報(bào)文段即使不攜帶數(shù)據(jù),也要消耗一個(gè)序號(hào)坝茎。

2)服務(wù)器收到連接釋放報(bào)文涤姊,發(fā)出確認(rèn)報(bào)文,ACK=1嗤放,ack=u+1 思喊,并且?guī)献约旱男蛄刑?hào) seq=v ,此時(shí)次酌,服務(wù)端就進(jìn)入了 CLOSE-WAIT(關(guān)閉等待)狀態(tài)恨课。TCP 服務(wù)器通知高層的應(yīng)用進(jìn)程,客戶端向服務(wù)器的方向就釋放了岳服,這時(shí)候處于半關(guān)閉狀態(tài)剂公,即客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送了,但是服務(wù)器若發(fā)送數(shù)據(jù)吊宋,客戶端依然要接受纲辽。這個(gè)狀態(tài)還要持續(xù)一段時(shí)間,也就是整個(gè) CLOSE-WAIT 狀態(tài)持續(xù)的時(shí)間璃搜。

3)客戶端收到服務(wù)器的確認(rèn)請(qǐng)求后拖吼,此時(shí),客戶端就進(jìn)入 FIN-WAIT-2 (終止等待 2 )狀態(tài)这吻,等待服務(wù)器發(fā)送連接釋放報(bào)文(在這之前還需要接受服務(wù)器發(fā)送的最后的數(shù)據(jù))吊档。

4)服務(wù)器將最后的數(shù)據(jù)發(fā)送完畢后,就向客戶端發(fā)送連接釋放報(bào)文唾糯,FIN=1怠硼,ack=u+1 ,由于在半關(guān)閉狀態(tài)趾断,服務(wù)器很可能又發(fā)送了一些數(shù)據(jù)拒名,假定此時(shí)的序列號(hào)為 seq=w ,此時(shí)芋酌,服務(wù)器就進(jìn)入了 LAST-ACK(最后確認(rèn))狀態(tài)增显,等待客戶端的確認(rèn)。

5)客戶端收到服務(wù)器的連接釋放報(bào)文后脐帝,必須發(fā)出確認(rèn)同云,ACK=1,ack=w+1 堵腹,而自己的序列號(hào)是 seq=u+1 炸站,此時(shí),客戶端就進(jìn)入了 TIME-WAIT (時(shí)間等待)狀態(tài)疚顷。注意此時(shí)TCP連接還沒有釋放旱易,必須經(jīng)過 2??MSL (最長報(bào)文段壽命)的時(shí)間后禁偎,當(dāng)客戶端撤銷相應(yīng)的 TCB 后,才進(jìn)入 CLOSED 狀態(tài)阀坏。

6)服務(wù)器只要收到了客戶端發(fā)出的確認(rèn)如暖,立即進(jìn)入 CLOSED 狀態(tài)。同樣忌堂,撤銷 TCB 后盒至,就結(jié)束了這次的 TCP 連接∈啃蓿可以看到枷遂,服務(wù)器結(jié)束 TCP 連接的時(shí)間要比客戶端早一些。

面試時(shí)經(jīng)常問的問題:

1棋嘲、為什么 TCP 建立連接需要三次握手酒唉,而非兩次?

為了實(shí)現(xiàn)可靠傳輸沸移,發(fā)送方和接收方始終需要同步( SYNchronize )序號(hào)黔州。 需要注意的是, 序號(hào)并不是從 0 開始的阔籽, 而是由發(fā)送方隨機(jī)選擇的初始序列號(hào) ( Initial Sequence Number, ISN )開始 。 由于 TCP 是一個(gè)雙向通信協(xié)議牲蜀, 通信雙方都有能力發(fā)送信息笆制, 并接收響應(yīng)。 因此涣达, 通信雙方都需要隨機(jī)產(chǎn)生一個(gè)初始的序列號(hào)在辆, 并且把這個(gè)起始值告訴對(duì)方。
過程如下圖:

2度苔、為什么 TCP 斷開連接需要四次揮手匆篓,而非兩次或三次?

(2)UDP 協(xié)議:

不可靠傳輸寇窑,”報(bào)頭”部分一共只有 8 個(gè)字節(jié)鸦概,總長度不超過65,535 字節(jié),正好放進(jìn)一個(gè) IP 數(shù)據(jù)包甩骏。

TCPUDP 的區(qū)別:
TCP 是可靠通信協(xié)議窗市, 而 UDP 是不可靠通信協(xié)議。

TCP 的可靠性含義: 接收方收到的數(shù)據(jù)是完整饮笛, 有序咨察, 無差錯(cuò)的。
UDP 不可靠性含義: 接收方接收到的數(shù)據(jù)可能存在部分丟失福青, 順序也不一定能保證摄狱。

TCP 協(xié)議為了實(shí)現(xiàn)可靠傳輸脓诡, 通信雙方需要判斷自己已經(jīng)發(fā)送的數(shù)據(jù)包是否都被接收方收到, 如果沒收到媒役, 就需要重發(fā)祝谚。 為了實(shí)現(xiàn)這個(gè)需求, 很自然地就會(huì)引出序號(hào)(sequence number) 和 確認(rèn)號(hào)(acknowledgement number) 的使用刊愚。

發(fā)送方在發(fā)送數(shù)據(jù)包(假設(shè)大小為 10 byte)時(shí)踊跟, 同時(shí)送上一個(gè)序號(hào)( 假設(shè)為 500),那么接收方收到這個(gè)數(shù)據(jù)包以后鸥诽, 就可以回復(fù)一個(gè)確認(rèn)號(hào)(510 = 500 + 10) 告訴發(fā)送方 “我已經(jīng)收到了你的數(shù)據(jù)包商玫, 你可以發(fā)送下一個(gè)數(shù)據(jù)包, 序號(hào)從 510 開始” 牡借。

這樣發(fā)送方就可以知道哪些數(shù)據(jù)被接收到拳昌,哪些數(shù)據(jù)沒被接收到, 需要重發(fā)钠龙。

5)會(huì)話層(Session)

這一層也可以稱為會(huì)晤層或?qū)υ拰泳嫣伲跁?huì)話層及以上的高層次中,數(shù)據(jù)傳送的單位不再另外命名碴里,而是統(tǒng)稱為報(bào)文沈矿。會(huì)話層不參與具體的傳輸,它提供包括訪問驗(yàn)證和會(huì)話管理在內(nèi)的建立和維護(hù)應(yīng)用之間通信的機(jī)制咬腋。如服務(wù)器驗(yàn)證用戶登錄便是由會(huì)話層完成的羹膳。

6)表示層(Presentation)

這一層主要解決擁護(hù)信息的語法表示問題。它將欲交換的數(shù)據(jù)從適合于某一用戶的抽象語法根竿,轉(zhuǎn)換為適合于 OSI 系統(tǒng)內(nèi)部使用的傳送語法陵像。即提供格式化的表示和轉(zhuǎn)換數(shù)據(jù)服務(wù)。數(shù)據(jù)的壓縮和解壓縮寇壳, 加密和解密等工作都由表示層負(fù)責(zé)醒颖。

7)應(yīng)用層(Application)

應(yīng)用層為操作系統(tǒng)或網(wǎng)絡(luò)應(yīng)用程序提供訪問網(wǎng)絡(luò)服務(wù)的接口。應(yīng)用層協(xié)議的代表包括:Telnet壳炎、FTP泞歉、HTTP、SNMP 等匿辩。

以上的總結(jié)參考了并部分摘抄了以下文章疏日,非常感謝以下作者的分享!:
1撒汉、太白金星的《網(wǎng)絡(luò)協(xié)議篇(osi七層協(xié)議)》
2沟优、上野 宣 的《圖解http》
3、Red_Code的《TCP協(xié)議詳解》
4睬辐、程序猿小卡的《TCP入門與實(shí)例講解》

5挠阁、青柚_的《TCP的三次握手與四次揮手理解及面試題(很全面)》
轉(zhuǎn)載請(qǐng)備注原文出處宾肺,不得用于商業(yè)傳播——凡幾多

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市侵俗,隨后出現(xiàn)的幾起案子锨用,更是在濱河造成了極大的恐慌,老刑警劉巖隘谣,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件增拥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡寻歧,警方通過查閱死者的電腦和手機(jī)掌栅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來码泛,“玉大人猾封,你說我怎么就攤上這事≡肷海” “怎么了晌缘?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長痢站。 經(jīng)常有香客問我磷箕,道長,這世上最難降的妖魔是什么阵难? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任嚣镜,我火速辦了婚禮翼雀,結(jié)果婚禮上郊酒,老公的妹妹穿的比我還像新娘右莱。我一直安慰自己缚够,他們只是感情好城侧,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布宠叼。 她就那樣靜靜地躺著扔仓,像睡著了一般播玖。 火紅的嫁衣襯著肌膚如雪椎工。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天蜀踏,我揣著相機(jī)與錄音维蒙,去河邊找鬼。 笑死果覆,一個(gè)胖子當(dāng)著我的面吹牛颅痊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播局待,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼斑响,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼菱属!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起舰罚,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤纽门,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后营罢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赏陵,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年饲漾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝙搔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡能颁,死狀恐怖杂瘸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伙菊,我是刑警寧澤败玉,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站镜硕,受9級(jí)特大地震影響运翼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兴枯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一血淌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧财剖,春花似錦悠夯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咪橙,卻和暖如春夕膀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背美侦。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國打工产舞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人菠剩。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓易猫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親具壮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子擦囊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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