關(guān)于TCP,UDP,HTTP,HTTPS,SOCKET的學(xué)習(xí)筆記整理(供個(gè)人加深印象)

1:物理層:其實(shí)就是轉(zhuǎn)換一些電子信號(hào)為0和1組成的比特流的形式鸠匀;沒(méi)有物理層比特流就無(wú)法在物理介質(zhì)中傳輸疙筹;

2:數(shù)據(jù)鏈路層:它定義了通過(guò)通信介質(zhì)鏈接的設(shè)備之間進(jìn)行數(shù)據(jù)傳輸?shù)囊?guī)范瓶逃;數(shù)據(jù)鏈路層數(shù)據(jù)不在以0和1的形式存在了,而是被分割成幀的概念;

它有兩個(gè)重要的概念:

a:MAC地址:它是被燒錄到網(wǎng)卡中的48比特的一串?dāng)?shù)字养匈,在世界范圍內(nèi)是唯一的,它用來(lái)區(qū)分節(jié)點(diǎn)都伪,一旦指定了Mac地址就不會(huì)不知道往哪個(gè)設(shè)備傳輸?shù)那闆r呕乎。

b:分組交換:就是將數(shù)據(jù)較大的分成若干小的的數(shù)據(jù),然后依次發(fā)送陨晶。這樣做的原因是不同的數(shù)據(jù)鏈數(shù)層有不同的MTU最大的傳輸單元猬仁。

拓展:交換機(jī)這一設(shè)備就是出現(xiàn)在數(shù)據(jù)鏈路層,它有不同的端口先誉,可以連接不同的設(shè)備湿刽;它根據(jù)每個(gè)針中的Mac地址來(lái)決定給哪個(gè)端口發(fā)數(shù)據(jù),要參照轉(zhuǎn)發(fā)表褐耳。

強(qiáng)調(diào)的是:數(shù)據(jù)鏈路層的定義:它是定義了同一種通信介質(zhì)兩端的節(jié)點(diǎn)進(jìn)行數(shù)據(jù)傳輸?shù)囊?guī)范诈闺;它存在的意義就是如果沒(méi)有數(shù)據(jù)鏈路層,那數(shù)據(jù)只能以數(shù)據(jù)流的形式存在于通信介質(zhì)中铃芦,而不知道該往哪發(fā)送雅镊,過(guò)長(zhǎng)的數(shù)據(jù)流可能無(wú)法發(fā)送。

3:網(wǎng)絡(luò)層 :它對(duì)應(yīng)的是IP協(xié)議刃滓,它主要的作用是實(shí)現(xiàn)終端節(jié)點(diǎn)的通信仁烹;當(dāng)然網(wǎng)絡(luò)層中還有ARP(獲取MAC地址)和ICMP協(xié)議(數(shù)據(jù)發(fā)送異常通知)等等

數(shù)據(jù)鏈路層是實(shí)現(xiàn)在同一種數(shù)據(jù)鏈路下的包傳遞,而網(wǎng)絡(luò)層則是實(shí)現(xiàn)不同的數(shù)據(jù)鏈路層的包傳遞:wifi 以太網(wǎng)就是不同的數(shù)據(jù)鏈路注盈;

它有三大的模塊:1:IP尋址晃危,2:路由 3:IP分包

IP尋址:一種適用于網(wǎng)絡(luò)層的通訊對(duì)端信息的地址;舉例:下班回家老客,公司和家就是兩個(gè)對(duì)端僚饭,我需要轉(zhuǎn)3,8號(hào)地鐵它們就是數(shù)據(jù)鏈路層胧砰,地鐵轉(zhuǎn)線的節(jié)點(diǎn)就是MAC地址鳍鸵;

IP地址有32位正整數(shù)構(gòu)成,外在形式分為四個(gè)部分尉间;功能上分為兩大部分:網(wǎng)絡(luò)標(biāo)識(shí)和主機(jī)標(biāo)識(shí)偿乖;

路由:將分組的數(shù)據(jù)發(fā)送到目標(biāo)地址的功能击罪,路由控制器中保存著一張表,可以在表中查找下一個(gè)路由器的地址贪薪;

分包重組:數(shù)據(jù)鏈數(shù)層有最大的MTU媳禁,那IP協(xié)議也有分片和重組,分片有發(fā)送端主機(jī)和路由器負(fù)責(zé)画切,重組則有接收端負(fù)責(zé)竣稽,由于分片會(huì)加重路由器的負(fù)擔(dān),所以主機(jī)就獲取整個(gè)路徑中的所有的數(shù)據(jù)鏈路的最小MTU霍弹,那傳輸過(guò)程中每一個(gè)路由器都不會(huì)再分片操作了毫别;

IP的拓展:

DNS解析:由于通信雙方的IP地址是一串的數(shù)字,不方便記憶典格,所以就誕生了域名幫助我們記憶岛宦。域名是一種為了識(shí)別主機(jī)名稱和機(jī)構(gòu)名的具有分層的名稱,比如在域名 neu.edu.cn中耍缴,neu是主機(jī)名砾肺,edu 和 cn 是不同層次下的機(jī)構(gòu)名。域名和IP地址都可以唯一對(duì)應(yīng)一臺(tái)主機(jī)私恬,DNS協(xié)議就是轉(zhuǎn)換IP地址為容易識(shí)別記憶的域名债沮。

ARP協(xié)議:獲取Mac地址的協(xié)議:MAC 和 IP 地址雖然看上去功能類似(都是用于唯一區(qū)分主機(jī))炼吴,但是兩者缺一不可本鸣。如果只有 IP 地址,雖然可以跳過(guò) ARP硅蹦,直接在數(shù)據(jù)鏈路上發(fā)一個(gè)廣播荣德,但是這僅適用于通信雙方處于同一個(gè)數(shù)據(jù)鏈路下的情況。如果雙方處于不同的數(shù)據(jù)鏈路童芹,數(shù)據(jù)報(bào)無(wú)法穿透中間的路由器涮瞻。(借鑒別人的話)

NAT NAPT一種將局域網(wǎng)的私有地址轉(zhuǎn)換成全局的IP地址的技術(shù)

它為了解決不同網(wǎng)段內(nèi)同一個(gè)IP地址時(shí)怎么通信的問(wèn)題。

4:傳輸層:TCP UDP協(xié)議

TCP:它是面向有連接的協(xié)議假褪,也就是說(shuō)使用TCP協(xié)議是發(fā)送方和接收方必須建立連接署咽,一般情況下三次建立連接,四次斷開(kāi)連接生音;

建立連接后由于TCP有數(shù)據(jù)重傳和流量控制等功能宁否,TCP能夠正確的處理丟包的問(wèn)題保證接收方能收到數(shù)據(jù),但是他的規(guī)范比較多缀遍,效率不及UDP慕匠,所以實(shí)時(shí)的視頻音頻傳輸不太適合;

UDP:面向無(wú)連接的協(xié)議域醇,它只管發(fā)送數(shù)據(jù)而不管對(duì)方接受與否台谊,這種特性反而適合多播蓉媳,視頻播放,及時(shí)個(gè)別的丟包也不會(huì)影響整體的效果锅铅;

傳輸層主要是實(shí)現(xiàn)應(yīng)用程序之間的通信酪呻,所以傳輸層新增了三個(gè)要素:目標(biāo)端口,源端口盐须,協(xié)議號(hào)号杠,加上IP協(xié)議兩大關(guān)鍵的要素:源IP地址,目標(biāo)IP地址丰歌,這五個(gè)要素能識(shí)別一個(gè)通信姨蟋;

協(xié)議號(hào)則是區(qū)分 TCP UDP的;

TCP:三次的握手立帖;為什么三次呢眼溶??晓勇?堂飞?

資料說(shuō)要時(shí)刻記住網(wǎng)絡(luò)是不穩(wěn)定的,數(shù)據(jù)包是可能丟失的绑咱,假設(shè)沒(méi)有第三次確認(rèn)绰筛,客戶端向服務(wù)端發(fā)送了 SYN,請(qǐng)求建立連接描融。由于延遲铝噩,服務(wù)端沒(méi)有及時(shí)收到這個(gè)包。于是客戶端重新發(fā)送一個(gè) SYN 包窿克】ビ梗回憶一下介紹 TCP 首部時(shí)提到的序列號(hào),這兩個(gè)包的序列號(hào)顯然是相同的年叮。

假設(shè)服務(wù)端接收到了第二個(gè) SYN 包具被,建立了通信,一段時(shí)間后通信結(jié)束只损,連接被關(guān)閉一姿。這時(shí)候最初被發(fā)送的 SYN 包剛剛抵達(dá)服務(wù)端,服務(wù)端又會(huì)發(fā)送一次 ACK 確認(rèn)跃惫。由于兩次握手就建立了連接叮叹,此時(shí)的服務(wù)端就會(huì)建立一個(gè)新的連接,然而客戶端覺(jué)得自己并沒(méi)有請(qǐng)求建立連接辈挂,所以就不會(huì)向服務(wù)端發(fā)送數(shù)據(jù)衬横。從而導(dǎo)致服務(wù)端建立了一個(gè)空的連接,白白浪費(fèi)資源终蒂。三次握手情況下客戶端會(huì)收到一個(gè)重復(fù)的ack蜂林,它會(huì)拋棄它不會(huì)建立連接遥诉。不進(jìn)行第三次的握手。

三次握手其實(shí)解決的是第二次握手?jǐn)?shù)據(jù)包丟失的問(wèn)題噪叙,如果第三步的確認(rèn)包丟失了怎么辦呢矮锈?

TCP處理丟包的一般辦法是服務(wù)端會(huì)重傳數(shù)據(jù)包給客戶端,直到收到ACK為止睁蕾,這種做法會(huì)導(dǎo)致SYN的泛紅攻擊苞笨,比如多個(gè)偽造的IP地址在服務(wù)端返回ACK確認(rèn)后故意不發(fā)ACK過(guò)去,從而使得服務(wù)器不斷的重發(fā)ACK子眶,導(dǎo)致服務(wù)器處于半連接的狀態(tài)瀑凝,最后消耗過(guò)多的CPU和內(nèi)存資源導(dǎo)致死機(jī);

正確的處理做法其實(shí)是服務(wù)端發(fā)送RST報(bào)文臭杰,進(jìn)入close的狀態(tài)粤咪,這表示連接的信息被初始化,原有的TCP的通道不能繼續(xù)的進(jìn)行渴杆,如果客戶端想重新建立連接必須從第一步開(kāi)始寥枝;

四次揮手的最后一步確認(rèn)關(guān)閉丟失怎辦呢?磁奖?囊拜?

實(shí)際上呢客戶端在第三步收到FIN包呢會(huì)設(shè)置一個(gè)計(jì)時(shí)器,等待一段相當(dāng)長(zhǎng)的時(shí)間比搭,如果客戶端的ACK包丟失冠跷,服務(wù)端會(huì)重發(fā)FIN并重設(shè)計(jì)時(shí)器,假設(shè)在計(jì)時(shí)器失效前FIN包都沒(méi)有到達(dá)客戶端敢辩,那客戶端就進(jìn)入了close的狀態(tài)蔽莱,那從而導(dǎo)致服務(wù)端永遠(yuǎn)也無(wú)法收到ACK確認(rèn)也就無(wú)法關(guān)閉了弟疆。

其實(shí)TCP區(qū)別于UDP最大的就是前者有數(shù)據(jù)丟包重發(fā)和流量控制戚长;

TCP窗口的概念:

按照之前的理論,在數(shù)據(jù)包發(fā)出后怠苔,直至 ACK 確認(rèn)返回以前同廉,發(fā)送端都無(wú)法發(fā)送數(shù)據(jù),而且包的往返時(shí)間越長(zhǎng)柑司,網(wǎng)絡(luò)利用效率和通信性能就越低迫肖。前兩張圖片形象的解釋了這一點(diǎn)。

為了解決這個(gè)問(wèn)題攒驰,TCP 使用了“窗口”這個(gè)概念蟆湖。窗口具有大小,它表示無(wú)需等待確認(rèn)應(yīng)答就可以繼續(xù)發(fā)送數(shù)據(jù)包的最大數(shù)量玻粪。引入窗口概念后隅津,數(shù)據(jù)要緩存一下不能立即的丟棄以備重發(fā)诬垂;

如果出現(xiàn)丟包那就是TCP最擅長(zhǎng)處理的問(wèn)題了,比如窗口為4 ACK 收到1001 4001那我們完全的可以相信中間的兩個(gè)也成功的接收了伦仍,不然ACK不會(huì)相加结窘,如果沒(méi)有窗口那就需要重傳中間的兩個(gè)包了,也就是那空間換時(shí)間充蓝。

流量控制:也就是設(shè)置窗口中的大小隧枫,如果窗口過(guò)大那會(huì)導(dǎo)致癱瘓,那程序會(huì)在啟動(dòng)的時(shí)候通過(guò)慢啟動(dòng)的算法算出窗口大小谓苟,對(duì)發(fā)送數(shù)據(jù)進(jìn)行流量的控制官脓。

HTTP:最頂層的應(yīng)用層協(xié)議,瀏覽器訪問(wèn)網(wǎng)頁(yè)就是直接使用了HTTP涝焙,使用HTTP協(xié)議時(shí)客戶端需要先跟服務(wù)端的80端口建立tcp連接确买,然后在這個(gè)連接的基礎(chǔ)上進(jìn)行請(qǐng)求和應(yīng)答以及數(shù)據(jù)的交換。

http分1.0 1.1的版本纱皆,前者呢需要每次請(qǐng)求和應(yīng)答都要建立TCP的連接湾趾,后者不需要;

由html協(xié)議加載出來(lái)的網(wǎng)頁(yè)派草,通常是有html的語(yǔ)言來(lái)描述的搀缠,它是一段純文本,它算是表現(xiàn)層了近迁;

Get Post請(qǐng)求:

GET 請(qǐng)求通常用于查詢艺普、獲取數(shù)據(jù),而 POST 請(qǐng)求則用于發(fā)送數(shù)據(jù)鉴竭,除了用途上的區(qū)別歧譬,它們還有以下這些不同:

GET 請(qǐng)求可以被緩存,可以被收藏為書(shū)簽搏存,但 POST 不行瑰步。

GET 請(qǐng)求會(huì)保留在瀏覽器的歷史記錄中,POST 不會(huì)璧眠。

GET 請(qǐng)求的長(zhǎng)度有限制(不同的瀏覽器不一樣缩焦,大約在幾 Kb 左右),URL 的數(shù)據(jù)類型只能是 ASCII 字符责静,POST 請(qǐng)求沒(méi)有限制袁滥。

GET 請(qǐng)求的參數(shù)在 URL 中,因此絕不能用 GET 請(qǐng)求傳輸敏感數(shù)據(jù)灾螃。POST 請(qǐng)求數(shù)據(jù)則寫在 HTTP 的請(qǐng)求頭中题翻,安全性略高于 GET 請(qǐng)求。

HTTP是一種無(wú)狀態(tài)的連接腰鬼∏对客戶端每次讀取web的信息都會(huì)被認(rèn)為是一個(gè)新的會(huì)話靴拱;但是有時(shí)我們需要長(zhǎng)久的保存一些信息,這些就有cookie session來(lái)做了猾普;

cookie保存在客戶端袜炕,session呢保存在服務(wù)端

HTTPS則相對(duì)HTTP是安全的,它充分利用了對(duì)稱和非對(duì)稱的加密初家。

socket:它不是協(xié)議偎窘,它是TCP/IP協(xié)議中的應(yīng)用層和傳輸層之間的抽象,是它們的一個(gè)封裝溜在,是一個(gè)調(diào)用的API陌知,通過(guò)socket我們可以使用TCP .IP。系統(tǒng)提供的一種網(wǎng)絡(luò)通信的辦法掖肋;

socket描述了一個(gè)端口port對(duì)仆葡,一個(gè)IP對(duì),它簡(jiǎn)化了程序員的操作指導(dǎo)對(duì)方的IP志笼,端口沿盅,就可以給對(duì)方發(fā)消息,所以socket一定是包含了雙方 客戶端和服務(wù)端纫溃。

Socket原理

套接字(socket)是通信的基石腰涧,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。它是網(wǎng)絡(luò)通信過(guò)程中端點(diǎn)的抽象表示紊浩,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議窖铡,本地主機(jī)的IP地址,本地進(jìn)程的協(xié)議端口坊谁,遠(yuǎn)地主機(jī)的IP地址费彼,遠(yuǎn)地進(jìn)程的協(xié)議端口。

應(yīng)用層通過(guò)傳輸層進(jìn)行數(shù)據(jù)通信時(shí)口芍,TCP會(huì)遇到同時(shí)為多個(gè)應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問(wèn)題箍铲。多個(gè)TCP連接或多個(gè)應(yīng)用程序進(jìn)程可能需要通過(guò)同一個(gè) TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接阶界,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了套接字(Socket)接口虹钮。應(yīng)用層可以和傳輸層通過(guò)Socket接口,區(qū)分來(lái)自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信膘融,實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)。

Socket連接

建立Socket連接至少需要一對(duì)套接字祭玉,其中一個(gè)運(yùn)行于客戶端氧映,稱為ClientSocket,另一個(gè)運(yùn)行于服務(wù)器端脱货,稱為ServerSocket岛都。

套接字之間的連接過(guò)程分為三個(gè)步驟:

服務(wù)器監(jiān)聽(tīng):服務(wù)器端套接字并不定位具體的客戶端套接字律姨,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)臼疫,等待客戶端的連接請(qǐng)求

客戶端請(qǐng)求:指客戶端的套接字提出連接請(qǐng)求择份,要連接的目標(biāo)是服務(wù)器端的套接字。為此烫堤,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字荣赶,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求

連接確認(rèn):當(dāng)服務(wù)器端套接字監(jiān)聽(tīng)到或者說(shuō)接收到客戶端套接字的連接請(qǐng)求時(shí)鸽斟,就響應(yīng)客戶端套接字的請(qǐng)求拔创,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端富蓄,一旦客戶端確認(rèn)了此描述剩燥,雙方就正式建立連接。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽(tīng)狀態(tài)立倍,繼續(xù)接收其他客戶端套接字的連接請(qǐng)求

參考文章:

原文鏈接:http://www.reibang.com/p/06f8b9111a56

原文鏈接:http://www.reibang.com/p/dc456cf57e06

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灭红,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子口注,更是在濱河造成了極大的恐慌比伏,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疆导,死亡現(xiàn)場(chǎng)離奇詭異赁项,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)澈段,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門悠菜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人败富,你說(shuō)我怎么就攤上這事悔醋。” “怎么了兽叮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵匕得,是天一觀的道長(zhǎng)挖息。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么秽之? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蠢琳,結(jié)果婚禮上捻爷,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好蒲牧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布撇贺。 她就那樣靜靜地躺著,像睡著了一般冰抢。 火紅的嫁衣襯著肌膚如雪松嘶。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天挎扰,我揣著相機(jī)與錄音翠订,去河邊找鬼。 笑死鼓鲁,一個(gè)胖子當(dāng)著我的面吹牛蕴轨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播骇吭,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼橙弱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了燥狰?” 一聲冷哼從身側(cè)響起棘脐,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎龙致,沒(méi)想到半個(gè)月后蛀缝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡目代,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年屈梁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榛了。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡在讶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出霜大,到底是詐尸還是另有隱情构哺,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布战坤,位于F島的核電站曙强,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏途茫。R本人自食惡果不足惜碟嘴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望慈省。 院中可真熱鬧臀防,春花似錦眠菇、人聲如沸边败。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)笑窜。三九已至致燥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間排截,已是汗流浹背嫌蚤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留断傲,地道東北人脱吱。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像认罩,于是被迫代替她去往敵國(guó)和親箱蝠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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