《計(jì)算機(jī)網(wǎng)絡(luò)自頂向下》學(xué)習(xí)與總結(jié)之---運(yùn)輸層

在計(jì)算機(jī)網(wǎng)絡(luò)通信中數(shù)據(jù)的流向經(jīng)過(guò)各個(gè)層的處理外邓,由應(yīng)用層送數(shù)據(jù)時(shí)(例如HTTP發(fā)送請(qǐng)求)會(huì)向下層傳送數(shù)據(jù)包戚篙,由上向下每一層都會(huì)附加自己的頭部消息痊土,最后經(jīng)過(guò)路由器塞帐,路由器并不處理運(yùn)輸層及其之上的數(shù)據(jù)包单旁,只負(fù)責(zé)網(wǎng)絡(luò)層及其以下的數(shù)據(jù)包沪羔,然后路由器根據(jù)數(shù)據(jù)包的頭部信息將其轉(zhuǎn)發(fā)到對(duì)應(yīng)區(qū)域的路由器直至達(dá)到對(duì)端的主機(jī),然后由下到上將數(shù)據(jù)包的頭部信息進(jìn)行逐一分解

主機(jī)端將數(shù)據(jù)報(bào)首部寫(xiě)上相應(yīng)的IP和MAC地址象浑,然后傳送到相應(yīng)的MAC地址的路由器中蔫饰,路由器接收數(shù)據(jù)報(bào)后將舊的MAC地址丟棄寫(xiě)上新的MAC地址,經(jīng)過(guò)好幾個(gè)路由跳將其送到目的主機(jī)

在計(jì)算機(jī)網(wǎng)絡(luò)通信運(yùn)輸層扮演的角色就是保證數(shù)據(jù)包的可靠性愉豺,即數(shù)據(jù)包的完整性及數(shù)據(jù)的發(fā)送順序性

網(wǎng)絡(luò)層與運(yùn)輸層的關(guān)系與差異

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

在五層模型中網(wǎng)絡(luò)層位于運(yùn)輸層之下篓吁,它提供的是不同鏈路的主機(jī)與主機(jī)之間交付數(shù)據(jù)的IP服務(wù),IP是不可靠的服務(wù)蚪拦,即不保證數(shù)據(jù)的完整性和有序性杖剪,只負(fù)責(zé)主機(jī)和主機(jī)之間的數(shù)據(jù)傳輸,在網(wǎng)絡(luò)層傳輸?shù)臄?shù)據(jù)稱之為數(shù)據(jù)報(bào)驰贷。IP地址是網(wǎng)絡(luò)層主機(jī)的唯一標(biāo)識(shí)盛嘿,網(wǎng)絡(luò)層能夠跨越不同的數(shù)據(jù)鏈路,在不同的數(shù)據(jù)鏈路之間實(shí)現(xiàn)IP數(shù)據(jù)包的傳遞括袒,這一跨越數(shù)據(jù)鏈路的過(guò)程主要依靠路由控制實(shí)現(xiàn)次兆,而路由控制通過(guò)對(duì)IP的多跳路由將數(shù)據(jù)包跳到相應(yīng)被轉(zhuǎn)發(fā)的路徑,經(jīng)過(guò)多次路由跳到達(dá)目的地锹锰,這個(gè)過(guò)程又要依賴路由器的路由表芥炭,它記錄了下一步IP數(shù)據(jù)該轉(zhuǎn)發(fā)給哪個(gè)路由器
多跳路由

這里是網(wǎng)絡(luò)層多跳路由實(shí)現(xiàn)在不同鏈路的傳遞類比漫畫(huà):由于火車不能直達(dá)只能中途換乘,通過(guò)詢問(wèn)每個(gè)站的乘務(wù)員得到換乘路線恃慧,這里乘客就是IP數(shù)據(jù)包园蝠,乘務(wù)員就是路由器,火車就是數(shù)據(jù)鏈路
運(yùn)輸層

運(yùn)輸層主要負(fù)責(zé)從網(wǎng)絡(luò)層接收?qǐng)?bào)文段實(shí)現(xiàn)不同主機(jī)上的進(jìn)程之間的通信痢士。
在發(fā)送端彪薛,它將應(yīng)用程序進(jìn)程接收的報(bào)文轉(zhuǎn)換成運(yùn)輸層分組,運(yùn)輸層分組簡(jiǎn)稱報(bào)文段良瞧,實(shí)現(xiàn)方法是將應(yīng)用報(bào)文切分成小塊并加上運(yùn)輸層首部就生成了運(yùn)輸層報(bào)文段陪汽。然后將報(bào)文段傳遞給網(wǎng)絡(luò)層。
在接收端褥蚯,網(wǎng)絡(luò)層將數(shù)據(jù)包提取運(yùn)輸層報(bào)文段挚冤,將其交給運(yùn)輸層,運(yùn)輸層再將其發(fā)送給應(yīng)用進(jìn)程使用赞庶。
在運(yùn)輸層主要依賴的兩種協(xié)議分別是UDP和TCP,兩種協(xié)議的最基本任務(wù)就是將主機(jī)端的IP交付服務(wù)擴(kuò)展為進(jìn)程間的交付服務(wù)训挡,這種擴(kuò)展就是運(yùn)輸層的多路復(fù)用和多路分解

多路復(fù)用和多路分解

  • 套接字:一個(gè)進(jìn)程有一個(gè)或者多個(gè)套接字用于接收和發(fā)送數(shù)據(jù)包

  • 多路復(fù)用:多路復(fù)用主要是收集各個(gè)進(jìn)程的套接字中產(chǎn)生的數(shù)據(jù)塊澳骤,并且為每個(gè)數(shù)據(jù)塊加上首部信息形成報(bào)文段,然后將其傳遞到網(wǎng)絡(luò)層中澜薄。

  • 多路分解:多路分解主要是負(fù)責(zé)將運(yùn)輸層的數(shù)據(jù)交付到正確的進(jìn)程套接字中

無(wú)連接運(yùn)輸:UDP

UDP是面向無(wú)連接为肮,不可靠的運(yùn)輸協(xié)議,除了最基本的多路復(fù)用肤京、多路分解及差錯(cuò)檢測(cè)外颊艳,幾乎沒(méi)有對(duì)IP數(shù)據(jù)包增加別的東西。UDP從應(yīng)用程序得到數(shù)據(jù)后忘分,附加上多路復(fù)用和多路分解的源端口號(hào)和目的端口號(hào)后形成報(bào)文段交給網(wǎng)絡(luò)層棋枕,網(wǎng)絡(luò)再將其封裝到IP數(shù)據(jù)報(bào)中,將其發(fā)送給接收的主機(jī)妒峦,達(dá)到主機(jī)后UDP使用報(bào)文段中的端口號(hào)將其交付給相應(yīng)的應(yīng)用進(jìn)程重斑,使用UDP的過(guò)程沒(méi)有經(jīng)過(guò)任何的握手,因此UDP是無(wú)連接的肯骇。DNS就是典型的UDP協(xié)議的應(yīng)用窥浪,還有實(shí)時(shí)視頻,網(wǎng)絡(luò)語(yǔ)言電話等流式多媒體音頻應(yīng)用也是使用UDP,原因在于UDP性能較高笛丙,并且這類應(yīng)用能容忍少量的數(shù)據(jù)包丟失漾脂。

面向連接運(yùn)輸:TCP

TCP是面向連接的可靠的傳輸協(xié)議,即保證數(shù)據(jù)不會(huì)受到損壞或者丟失胚鸯,并且能按照發(fā)送順序交付符相,它主要通過(guò)三次握手、重傳控制蠢琳、擁塞控制、滑動(dòng)窗口等機(jī)制保證數(shù)據(jù)傳輸?shù)目煽啃?/p>

三次握手

理解三次握手先需要明白TCP報(bào)文段各個(gè)字段的含義:
  • 源端口和目的端口:寫(xiě)入源和發(fā)送目的地的應(yīng)用程序端口號(hào)
  • 序號(hào)(Seq):TCP連接中傳送的字節(jié)流中的字節(jié)都是按照順序去編號(hào)的镜豹,報(bào)文段中Seq是這個(gè)報(bào)文段的字節(jié)流的首個(gè)字節(jié)編號(hào)
  • 數(shù)據(jù)偏移:首部長(zhǎng)度實(shí)際上指示了數(shù)據(jù)區(qū)在報(bào)文段中的起始偏移值
  • 確認(rèn)號(hào)(ack):期望收到下一個(gè)報(bào)文的數(shù)據(jù)流的首個(gè)字節(jié)編號(hào)傲须。
  • 窗口:告知接收端的緩存大小,以此控制發(fā)送端的發(fā)送速率趟脂,達(dá)到控制流量的效果
  • 檢驗(yàn)和:奇偶檢驗(yàn)和泰讽,校驗(yàn)包是否有誤
  • TCP flags每一個(gè)標(biāo)志位表示一個(gè)控制功能:
    1. URG: 緊急指針標(biāo)志 1->有效 0->忽略
    2. ACK:確認(rèn)號(hào)標(biāo)志 1->有效 0->報(bào)文不含確認(rèn)號(hào)信息,忽略確認(rèn)號(hào)
    3. PSH:push標(biāo)志 1->push標(biāo)志有效昔期,表面接收方接收后應(yīng)對(duì)盡快交給應(yīng)用程序 0->忽略
    4. RST:重置連接標(biāo)志
    5. SYN:同步序號(hào)已卸,用于建立連接過(guò)程,syn=1->建立請(qǐng)求或接受請(qǐng)求:syn=1并且ack=0時(shí)建立連接請(qǐng)求,SYN=1并且ACK=1時(shí)雙方接受連接(這里畫(huà)重點(diǎn)硼一,下面TCP三次握手會(huì)多次使用)
    6. FIN:釋放連接 1->發(fā)送方已經(jīng)沒(méi)有數(shù)據(jù)可發(fā)送累澡,關(guān)閉本方數(shù)據(jù)流 0->連接仍然存在

TCP連接的建立時(shí),雙方需要經(jīng)過(guò)三次握手般贼,具體過(guò)程如下:

(1)第一次握手:Client進(jìn)入SYN_SENT狀態(tài)愧哟,發(fā)送一個(gè)的報(bào)文段中SYN=1表示請(qǐng)求建立連接奥吩,seq=x表示本次發(fā)送的字節(jié)流中首個(gè)字節(jié)的編號(hào),第一次握手是不攜帶數(shù)據(jù)的蕊梧,所以服務(wù)端下次肯定會(huì)響應(yīng)ack=x+1

(2)第二次握手:Server端在收到SYN幀之后霞赫,會(huì)進(jìn)入SYN_RCVD狀態(tài),同時(shí)響應(yīng)報(bào)文段中 ack=x+1表示希望下次收到x+1的首字節(jié)編號(hào)的報(bào)文段,服務(wù)端的報(bào)文段中字節(jié)流中首個(gè)字節(jié)的編號(hào) seq=y,ACK=1表示本次響應(yīng)是有效應(yīng)答,本次為響應(yīng)連接請(qǐng)求所以SYN=1

(3)第三次握手:Client在收到Server的第二次握手SYN+ACK確認(rèn)幀之后肥矢,首先將自己的狀態(tài)會(huì)從SYN_SENT變成ESTABLISHED端衰,表示自己方向的連接通道已經(jīng)建立成功,Client可以發(fā)送數(shù)據(jù)給Server端了甘改。然后旅东,Client響應(yīng)報(bào)文段中第一次握手發(fā)送報(bào)文段已經(jīng)消耗了一個(gè)字節(jié)所以 seq=x+1,第二次握手中客戶端已經(jīng)收到了y編號(hào)的字節(jié)下次希望接收y+1的首字節(jié)編號(hào)的報(bào)文段所以ack=y+1,ACK=1表示有效應(yīng)答

(4)Server端在收到Client的ACK幀之后,會(huì)從SYN_RCVD狀態(tài)會(huì)進(jìn)入ESTABLISHED狀態(tài)楼誓,至此玉锌,Server方向的通道連接建立成功,Server可以發(fā)送數(shù)據(jù)給Client疟羹,TCP的全雙工連接建立完成主守。

報(bào)文段的長(zhǎng)度MSS

MSS報(bào)文段的最大消息長(zhǎng)度,在三次握手時(shí)兩端會(huì)將自己能接收的MSS寫(xiě)進(jìn)TCP報(bào)文段首部中榄融,兩者之間選擇最小的参淫,建立連接后傳輸?shù)臄?shù)據(jù)會(huì)以MSS進(jìn)行分割發(fā)送

重傳控制

正常情況接收端會(huì)按照發(fā)送端發(fā)送報(bào)文段的序列號(hào)和數(shù)據(jù)長(zhǎng)度,響應(yīng)ack的報(bào)文段愧杯,確認(rèn)應(yīng)答號(hào)(ack)=系列號(hào)(seq)+數(shù)據(jù)長(zhǎng)度(MSS)

但是難免消息丟失的情況發(fā)生涎才,發(fā)送端在特定是時(shí)間間隔每天收到接收端的響應(yīng)將會(huì)對(duì)消息進(jìn)行重傳,消息丟失有以下兩種情況:

對(duì)于消息丟失有以下幾種措施
1力九、超時(shí)重傳與超時(shí)間隔加倍

發(fā)送端在特定時(shí)間內(nèi)沒(méi)有收到接收端響應(yīng)則會(huì)進(jìn)行重發(fā)耍铜,這個(gè)特定時(shí)間在不同的網(wǎng)絡(luò)環(huán)境會(huì)有所不同,如果發(fā)送端重發(fā)了報(bào)文段跌前,依舊沒(méi)有收到響應(yīng)棕兼,接收端會(huì)將超時(shí)時(shí)間加倍,每一次重傳都會(huì)將超時(shí)間加倍抵乓,直至超過(guò)一定的次數(shù)還未收到響應(yīng)就會(huì)將連接斷開(kāi)

2伴挚、高速重傳

在重傳的過(guò)程中接收到會(huì)多次接收到相同的報(bào)文段,接收端會(huì)根據(jù)序列號(hào)判斷是否需要接收該報(bào)文段灾炭,避免重發(fā)接收導(dǎo)致的丟棄動(dòng)作

流量控制

窗口控制

TCP發(fā)送端每發(fā)一個(gè)報(bào)文段茎芋,就要等待確認(rèn)接收端的響應(yīng),這樣的效率比較低下蜈出,為了解決這個(gè)問(wèn)題引進(jìn)了窗口的概念田弥。在窗口大小內(nèi),發(fā)送端無(wú)須等待確認(rèn)接收端的響應(yīng)

窗口不能越大越好铡原,如果不根據(jù)兩端的接收能力的對(duì)比會(huì)出現(xiàn)下面的情況
接收端和發(fā)送端可以在TCP報(bào)文段的首部將自己的接收能力填到窗口的選項(xiàng)中皱蹦,再?gòu)膬烧咧羞x擇一個(gè)小的
滑動(dòng)窗口

滑動(dòng)窗口內(nèi)的數(shù)據(jù)都是未被響應(yīng)的數(shù)據(jù)煤杀,滑動(dòng)窗口以外是為發(fā)送或者已被響應(yīng)的數(shù)據(jù),下面是具體滑動(dòng)窗口的控制詳細(xì)圖:
窗口控制下的重傳機(jī)制

假設(shè)發(fā)送端發(fā)送了1,2,3這三個(gè)報(bào)文段沪哺,接收端響應(yīng)時(shí)1,2的響應(yīng)報(bào)文段都丟失了沈自,而3響應(yīng)到達(dá)了發(fā)送端,那么也發(fā)送端知道接收已經(jīng)積累了1,2,3的報(bào)文段辜妓,就無(wú)須重發(fā)1,2的報(bào)文段了枯途,這種方式叫累計(jì)確認(rèn)或累計(jì)應(yīng)答。

擁塞控制

慢啟動(dòng)

有了窗口籍滴,收發(fā)主機(jī)之間可以連續(xù)發(fā)送大量的數(shù)據(jù)酪夷,但是有些時(shí)候網(wǎng)絡(luò)會(huì)成為收發(fā)數(shù)據(jù)的瓶頸,因?yàn)楦鞣N原因網(wǎng)絡(luò)不好而出現(xiàn)擁塞孽惰,這時(shí)如果還大量的發(fā)送數(shù)據(jù)可能會(huì)造成網(wǎng)絡(luò)癱瘓晚岭,TCP使用慢啟動(dòng)去控制發(fā)送數(shù)量

在建立連接后擁塞窗口cwnd的值被設(shè)置為1,代表著每次只能發(fā)一個(gè)報(bào)文段勋功,每次成收到一次確認(rèn)應(yīng)答后坦报,cwnd都會(huì)加1,每次發(fā)送報(bào)文段時(shí)將會(huì)與接收端的滑動(dòng)窗口大小做比較,選擇較小的作為發(fā)送窗口狂鞋。隨著包的往返片择,窗口將會(huì)以1,2,4,8...成倍的增加

窗口大小以指數(shù)增加,這樣很有可能會(huì)造成網(wǎng)絡(luò)的擁塞
如果我們讓窗口以1,2,3,4,5...這樣的方式增加的話能避免窗口過(guò)快增長(zhǎng)骚揍,但是這樣又太慢了字管,達(dá)不到快速高效:
為了解決這個(gè)過(guò)慢或過(guò)快的問(wèn)題,我們可以把第一種方法和第二種方法結(jié)合起來(lái)信不。也就是說(shuō)嘲叔,我們剛開(kāi)始可以以指數(shù)的速度增長(zhǎng),增長(zhǎng)到閾值ssthresh 抽活。當(dāng)增長(zhǎng)到閾值時(shí)借跪,我們就不在以指數(shù)增長(zhǎng)了,而是一個(gè)一個(gè)線性增長(zhǎng)酌壕。所以最終的策略是:前期指數(shù)增長(zhǎng),到達(dá)閾值之后歇由,就以一個(gè)一個(gè)線性的速度來(lái)增長(zhǎng)卵牍。

但是由于TCP連接開(kāi)始時(shí)是沒(méi)有設(shè)置閾值的,擁塞窗口只會(huì)以指數(shù)增長(zhǎng)沦泌,直到當(dāng)遇到超時(shí)重傳時(shí)糊昙,就將閾值設(shè)置為擁塞窗口的一半,然后擁塞窗口再初始化為1谢谦,這樣再次發(fā)送報(bào)文段時(shí)就會(huì)先以指數(shù)增長(zhǎng)然后再以線性增長(zhǎng)释牺,由于高速重傳機(jī)制萝衩,當(dāng)報(bào)文段丟失時(shí)重復(fù)的應(yīng)答需要三次才會(huì)觸發(fā)發(fā)送端的數(shù)據(jù)重發(fā),慢啟動(dòng)閾值就會(huì)被設(shè)置為當(dāng)前發(fā)送窗口的一半没咙,緊接著發(fā)送窗口就被設(shè)置為當(dāng)前慢啟動(dòng)閾值+3猩谊,這一過(guò)程如下圖所示

TCP以這種方式,讓通信開(kāi)始時(shí)網(wǎng)絡(luò)吞吐量能逐漸上升祭刚,遇到網(wǎng)絡(luò)擁塞時(shí)又能逐漸下降牌捷,而后又逐漸上升,TCP吞吐量能逐漸占據(jù)寬帶

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涡驮,一起剝皮案震驚了整個(gè)濱河市暗甥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捉捅,老刑警劉巖撤防,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異棒口,居然都是意外死亡寄月,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)陌凳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)剥懒,“玉大人,你說(shuō)我怎么就攤上這事合敦〕蹰伲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵充岛,是天一觀的道長(zhǎng)保檐。 經(jīng)常有香客問(wèn)我,道長(zhǎng)崔梗,這世上最難降的妖魔是什么夜只? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蒜魄,結(jié)果婚禮上扔亥,老公的妹妹穿的比我還像新娘。我一直安慰自己谈为,他們只是感情好旅挤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著伞鲫,像睡著了一般粘茄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天柒瓣,我揣著相機(jī)與錄音儒搭,去河邊找鬼。 笑死芙贫,一個(gè)胖子當(dāng)著我的面吹牛搂鲫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屹培,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼默穴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了褪秀?” 一聲冷哼從身側(cè)響起蓄诽,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎媒吗,沒(méi)想到半個(gè)月后仑氛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闸英,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年锯岖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甫何。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡出吹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辙喂,到底是詐尸還是另有隱情捶牢,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布巍耗,位于F島的核電站秋麸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏炬太。R本人自食惡果不足惜灸蟆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亲族。 院中可真熱鬧炒考,春花似錦、人聲如沸霎迫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)女气。三九已至,卻和暖如春测柠,著一層夾襖步出監(jiān)牢的瞬間炼鞠,已是汗流浹背缘滥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谒主,地道東北人朝扼。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像霎肯,于是被迫代替她去往敵國(guó)和親擎颖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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