計(jì)算機(jī)網(wǎng)絡(luò)之運(yùn)輸層

一、基礎(chǔ)概念

  • 服務(wù)對(duì)象:進(jìn)程
  • 功能:邏輯通訊
  • 載體:報(bào)文段
  • 工作環(huán)境:端系統(tǒng)
  • 運(yùn)輸層協(xié)議
    ??TCP:為進(jìn)程提供可靠的、面向連接的服務(wù)
    ??UDP:為進(jìn)程提供不可靠的、無(wú)連接的服務(wù)

二、多路分解與多路復(fù)用

  • 多路分解:將運(yùn)輸層報(bào)文中的數(shù)據(jù)交付到正確的套接字(socket)上工作
  • 多路復(fù)用:在原主機(jī)從不用套接字中收集數(shù)據(jù)塊,并為每個(gè)數(shù)據(jù)塊封裝上首部信息,從而生成報(bào)文段,然后將報(bào)文段傳遞到網(wǎng)絡(luò)層。
  • 運(yùn)輸層多路復(fù)用要求:
    ??a. 套接字有唯一標(biāo)識(shí)符
    ??b. 每個(gè)報(bào)文段有特殊字段(源端口號(hào)字段、目的端口號(hào)字段)來(lái)指示改報(bào)文段所要交付到的套接字
  • 運(yùn)輸層分解服務(wù)實(shí)現(xiàn):
    ??在主機(jī)上的每個(gè)套接字能夠分配一個(gè)端口號(hào),當(dāng)報(bào)文段到達(dá)主機(jī)時(shí),運(yùn)輸層檢查報(bào)文段中的目的端口號(hào),并將其定向到相應(yīng)的套接字
    ??UDP套接字由一個(gè)二元組(目的IP地址,目的端口號(hào))來(lái)標(biāo)識(shí)
    ??TCP套接字由一個(gè)四元組(源IP地址,源端口號(hào),目的IP地址,目的端口號(hào))來(lái)標(biāo)識(shí)

三、可靠數(shù)據(jù)傳輸

  1. 可靠數(shù)據(jù)傳輸協(xié)議的要點(diǎn):檢驗(yàn)和、序號(hào)、定時(shí)器、肯定和否定確認(rèn)分組
機(jī)制 用途和說(shuō)明
檢驗(yàn)和 用于檢測(cè)在一個(gè)傳輸分組中的比特錯(cuò)誤
定時(shí)器 用于超時(shí)/重傳一個(gè)分組,可能該分組(或其ACK)在信道中丟失
序號(hào) 用于為從發(fā)送方流向接收放的數(shù)據(jù)分組按順序編號(hào)
確認(rèn) 接收方用于告訴發(fā)送方一個(gè)分組或一組分組已被正確接收到
否定確認(rèn) 接收方用于告訴發(fā)送方一個(gè)分組或一組分組未被正確接收到
  1. 流水線技術(shù)
    ?1) 含義:不使用停等方式運(yùn)行,允許發(fā)送方發(fā)送多個(gè)分組而無(wú)需等待確認(rèn)
    ?2) 對(duì)可靠數(shù)據(jù)傳輸協(xié)議帶來(lái)的影響:
    ??a. 必須增加序號(hào)范圍,因?yàn)槊總€(gè)輸送中的分組(不計(jì)算重傳的)必須有一個(gè)唯一的序號(hào),而且也許有多個(gè)在輸送中未確認(rèn)的報(bào)文;
    ??b. 協(xié)議的發(fā)送方和接收方兩端也許必須緩存多個(gè)分組;
    ??c. 所需序號(hào)范圍和對(duì)緩沖的要求取決于數(shù)據(jù)傳輸協(xié)議如何處理丟失。損壞及延時(shí)過(guò)大的分組。
    ?3) 解決流水線的差錯(cuò)恢復(fù)的兩種基本方法:回退N步 (GBN) 和選擇重傳 (SR)

  2. 回退N步 (GNB)
    ? 1) 定義:允許發(fā)送放發(fā)送多個(gè)分組而不需要等待確認(rèn),但在流水線中未確認(rèn)的分組數(shù)不得超過(guò)窗口長(zhǎng)度N,隨著協(xié)議運(yùn)行,該窗口的序號(hào)空間在向前滑動(dòng),所以GBN協(xié)議也被稱為滑動(dòng)窗口協(xié)議
    ? 2) 發(fā)送方采用動(dòng)作:
    ?? a. 上層的調(diào)用。發(fā)送方檢查發(fā)送窗口是否已滿,如果未滿則產(chǎn)生分組將其發(fā)送;如果已滿則緩存等待或者通過(guò)同步機(jī)制運(yùn)行上層僅當(dāng)窗口不滿時(shí)才被調(diào)用。
    ?? b. 收到一個(gè)ACK。GBN采用累積確認(rèn),表明接收方已經(jīng)收到序號(hào)n以及n以前的所有分組。
    ?? c. 超時(shí)事件。發(fā)送方重傳所有已發(fā)送但未被確認(rèn)過(guò)的分組,如果接收到一個(gè)ACK,但仍有已發(fā)送但未被確認(rèn)的分組,則定時(shí)器重新啟動(dòng)。
    ? 3) 接收方采用動(dòng)作:如果序號(hào)為n的分組被正確收到,兵器按序,則接收方為分組n發(fā)送一個(gè)ACK,并將分組中的數(shù)據(jù)交付到上層;其他情況,接收方丟棄該分組,并為最近按序接收的分組重新發(fā)送ACK。
    ? 4) 丟棄未按序分組帶來(lái)的優(yōu)缺點(diǎn)
    ?? a. 優(yōu)點(diǎn):接收緩存簡(jiǎn)單,即接收方不需要緩存失序分組
    ?? b. 缺點(diǎn):隨后對(duì)該分組的重傳也許會(huì)丟失或出錯(cuò),因此需要更多的重傳

  3. 選擇重傳(SR)
    ? 1) 定義:允許發(fā)送放發(fā)送多個(gè)分組而不需要等待確認(rèn),發(fā)送方僅重傳那些他懷疑接收方出錯(cuò)的分組而避免面不必要的重傳。
    ? 2) 發(fā)送方采用動(dòng)作:
    ?? a. 上層的調(diào)用。發(fā)送方檢查發(fā)送窗口是否已滿,如果未滿則產(chǎn)生分組將其發(fā)送;如果已滿則緩存等待或者通過(guò)同步機(jī)制運(yùn)行上層僅當(dāng)窗口不滿時(shí)才被調(diào)用。
    ?? b. 超時(shí)。每個(gè)分組都有一個(gè)自己的邏輯定時(shí)器,發(fā)生超時(shí)只能發(fā)送一個(gè)分組。
    ?? c. 收到ACK。如果ACK確認(rèn)的序號(hào)等于窗口最左端序號(hào),則窗口向右移動(dòng),否則標(biāo)記該組為已收到。
    ? 3) 接收方采用動(dòng)作
    ?? a. 序號(hào)在窗口內(nèi)。發(fā)送ACK,如果第一次接收則緩存(窗口左端如果緩存了則向上交付)
    ?? b. 序號(hào)在窗口-N內(nèi)。立刻發(fā)送ACK。
    ?? c. 其它情況。忽略分組


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

  1. TCP報(bào)文結(jié)構(gòu)


  2. TCP連接管理

  • 三次握手
    ??(1) 第一次握手:建立連接時(shí),客戶端A發(fā)送SYN包[SYN=1,seq=x]到服務(wù)器B,并進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器B確認(rèn)。
    ??(2) 第二次握手:服務(wù)器B收到SYN包,必須確認(rèn)客戶A的SYN,同時(shí)自己也發(fā)送一個(gè)SYN包,即SYN+ACK包[SYN=1,ACK=1,seq=y,ack=x+1],此時(shí)服務(wù)器B進(jìn)入SYN_RECV狀態(tài)。
    ??(3) 第三次握手:客戶端A收到服務(wù)器B的SYN+ACK包,向服務(wù)器B發(fā)送確認(rèn)包ACK[ACK=1,seq=x+1,ack=y+1],此包發(fā)送完畢,客戶端A和服務(wù)器B進(jìn)入ESTABLISHED狀態(tài),完成三次握手。 第三次握手可在報(bào)文段負(fù)載中攜帶客戶到服務(wù)器的數(shù)據(jù)。三次握手后客戶端與服務(wù)器開(kāi)始傳送數(shù)據(jù)。

  • 四次揮手
    ??(1) 首先A B端的TCP進(jìn)程都處于ESTABLISHED狀態(tài), 當(dāng)A的應(yīng)用程序傳送完報(bào)文段,就會(huì)去主動(dòng)關(guān)閉連接。A會(huì)停止發(fā)送報(bào)文段(但是還會(huì)接收),并向B發(fā)送[FIN = 1,seq=u]數(shù)據(jù),之后進(jìn)入FIN-WAIT-1狀態(tài);
    ??(2) B接收到A發(fā)送的請(qǐng)求之后,會(huì)通知應(yīng)用進(jìn)程,A已經(jīng)不再發(fā)送數(shù)據(jù),同時(shí)B會(huì)向A發(fā)送ACK確認(rèn)數(shù)據(jù)[ACK=1,seq=v,ack=u+1 ],B進(jìn)入CLOSE-WAIT狀態(tài),A接收到B發(fā)送的數(shù)據(jù)之后,A進(jìn)入FIN-WAIT-2狀態(tài);此時(shí)A到B方的連接已經(jīng)關(guān)閉了(即半連接狀態(tài))。
    ??(3) 當(dāng)B的應(yīng)用進(jìn)程發(fā)現(xiàn)自己也沒(méi)有數(shù)據(jù)需要傳送,B應(yīng)用進(jìn)程就會(huì)發(fā)出被動(dòng)關(guān)閉的請(qǐng)求,B此時(shí)向A發(fā)送[FIN=1,ACK=1,seq=w,ack=u+1]數(shù)據(jù),并且進(jìn)入LAST-ACK狀態(tài);
    ??(4) A接收到B發(fā)送的數(shù)據(jù)之后,向B發(fā)送ACK確認(rèn)數(shù)據(jù)[ACK =1,seq=u+1,ack=w+1],進(jìn)入TIME-WAIT狀態(tài),等待2MSL之后正常關(guān)閉連接進(jìn)入CLOSED狀態(tài);B接收到A發(fā)送的確認(rèn)之后進(jìn)入CLOSED狀態(tài)。B到A方的連接關(guān)閉!至此,TCP連接才真正全部關(guān)閉!

  • 為什么建立連接協(xié)議是三次握手,而關(guān)閉連接卻是四次握手呢?
    ??這是因?yàn)榉?wù)端的LISTEN狀態(tài)下的SOCKET當(dāng)收到客戶端的SYN報(bào)文的建立連接請(qǐng)求后,它可以把ACK和SYN(ACK起應(yīng)答作用,而SYN起同步作用)放在一個(gè)報(bào)文里來(lái)發(fā)送。但關(guān)閉連接時(shí),當(dāng)收到對(duì)方的FIN報(bào)文通知時(shí),它僅僅表示對(duì)方?jīng)]有數(shù)據(jù)發(fā)送給你了;但未必你所有的數(shù)據(jù)都全部發(fā)送給對(duì)方了,所以你可以未必會(huì)馬上會(huì)關(guān)閉SOCKET,也即你可能還需要發(fā)送一些數(shù)據(jù)給對(duì)方之后,再發(fā)送FIN報(bào)文給對(duì)方來(lái)表示你同意現(xiàn)在可以關(guān)閉連接了,所以它這里的ACK報(bào)文和FIN報(bào)文多數(shù)情況下都是分開(kāi)發(fā)送的。

  • 為什么TIME_WAIT狀態(tài)還需要等2MSL后才能返回到CLOSED狀態(tài)?
    ??這是因?yàn)殡m然雙方都同意關(guān)閉連接了,而且握手的4個(gè)報(bào)文也都協(xié)調(diào)和發(fā)送完畢,按理可以直接回到CLOSED狀態(tài)(就好比從SYN_SEND狀態(tài)到 ESTABLISH狀態(tài)那樣);但是因?yàn)槲覀儽仨氁傧刖W(wǎng)絡(luò)是不可靠的,你無(wú)法保證你最后發(fā)送的ACK報(bào)文會(huì)一定被對(duì)方收到,因此對(duì)方處于 LAST_ACK狀態(tài)下的SOCKET可能會(huì)因?yàn)槌瑫r(shí)未收到ACK報(bào)文,而重發(fā)FIN報(bào)文,所以這個(gè)TIME_WAIT狀態(tài)的作用就是用來(lái)重發(fā)可能丟失的 ACK報(bào)文。

  1. TCP可靠數(shù)據(jù)傳輸

(1) 上層調(diào)用
??TCP從應(yīng)用程序接收數(shù)據(jù),將數(shù)據(jù)封裝到一個(gè)報(bào)文段中,并將改報(bào)文段交給IP(每個(gè)報(bào)文段都包含一個(gè)序號(hào))
(2) 超時(shí)
??TCP通過(guò)重傳引起超時(shí)的報(bào)文段來(lái)相應(yīng)超時(shí)時(shí)間,然后TCP重啟定時(shí)器。
(3) 收到ACK
??TCP采用累計(jì)確認(rèn)策略。確認(rèn)序號(hào)表示序號(hào)前的所有字節(jié)都已經(jīng)正確且按序接收。

  • 超時(shí)間隔設(shè)定
    ??每次TCP重傳時(shí)都會(huì)將下一次的超時(shí)間隔設(shè)定為先前值的兩倍,這種修改提供了一個(gè)形式受限的擁塞控制(在擁塞的時(shí)候,如果源持續(xù)重傳分組,會(huì)使擁塞更加嚴(yán)重)

  • 快速重傳
    ??如果TCP發(fā)送方接收到對(duì)相同數(shù)據(jù)的3個(gè)冗余ACK(3個(gè)冗余ACK = 1個(gè)正常ACK + 3 個(gè)重復(fù)ACK),它把著當(dāng)作一種指示,說(shuō)明跟在這個(gè)已被確認(rèn)過(guò)3次的報(bào)文段之后的報(bào)文段已經(jīng)丟失,TCP就執(zhí)行快速重傳,即在改報(bào)文段的定時(shí)器過(guò)期之前重傳丟失的報(bào)文。

  • TCP 差錯(cuò)恢復(fù)機(jī)制
    ??雖然TCP采用累計(jì)確認(rèn),但是TCP發(fā)生超時(shí)事件時(shí)重傳至多一個(gè)報(bào)文段。此外,如果對(duì)報(bào)文段 n+1 的確認(rèn)報(bào)文在報(bào)文段 n 超時(shí)前到達(dá),TCP不會(huì)重傳報(bào)文段 n。因此,TCP的差錯(cuò)恢復(fù)機(jī)制是GBN和SR協(xié)議的混合體。

  • TCP超時(shí)重傳舉例
    ??(1) 如果主機(jī) A 向主機(jī) B 發(fā)送一個(gè)報(bào)文段,當(dāng)超時(shí)事件發(fā)生時(shí),A 會(huì)重傳相同的報(bào)文段
    ??(2) 如果主機(jī) A 向主機(jī) B 發(fā)送兩個(gè)報(bào)文段,當(dāng)超時(shí)事件發(fā)生時(shí)(沒(méi)有一個(gè)確認(rèn)報(bào)文到達(dá) A),A 只會(huì)重傳第一個(gè)報(bào)文段,并啟動(dòng)定時(shí)器,如果第二個(gè)報(bào)文段的ACK在新的超時(shí)發(fā)生前到達(dá),則第二報(bào)文段不會(huì)被重傳。
    ??(3) 如果主機(jī) A 向主機(jī) B 發(fā)送兩個(gè)報(bào)文段,如果第一個(gè)報(bào)文段的ACK在網(wǎng)絡(luò)丟失,但在超時(shí)前接收到第二個(gè)報(bào)文段的確認(rèn)報(bào)文,由于TCP采用累積確認(rèn),所以不會(huì)發(fā)生重傳。

  • 流量控制
    ??TCP的流量控制是一個(gè)速度匹配服務(wù)。通過(guò)發(fā)送方維護(hù)一個(gè)接收窗口(接收方還有多少緩存空間)的變量來(lái)提供流量控制。接收窗口大小 = 接收緩存空間大小 - 緩存中的TCP數(shù)據(jù)大小。
    ??當(dāng)主機(jī)的接收窗口為0時(shí),發(fā)送方會(huì)繼續(xù)發(fā)送只有一個(gè)字節(jié)數(shù)據(jù)的報(bào)文。

  • 為什么當(dāng)接收窗口為0時(shí),發(fā)送方仍然繼續(xù)發(fā)送報(bào)文?
    ??TCP當(dāng)且僅當(dāng)有數(shù)據(jù)或有確認(rèn)要發(fā)時(shí)才會(huì)發(fā)送報(bào)文段。
    ??A為發(fā)送方,B為接收方。假設(shè)B告知A接收窗口大小為0,且B沒(méi)任何數(shù)據(jù)發(fā)送給A。當(dāng)B上的應(yīng)用進(jìn)程將緩存清空,因?yàn)锽沒(méi)有數(shù)據(jù)或者確認(rèn)向A發(fā)送報(bào)文段,所以TCP并不會(huì)向A發(fā)送帶有接收窗口大小的新報(bào)文,導(dǎo)致A不可能知道B中有新的空間,即A被阻塞而不能再發(fā)送給數(shù)據(jù)。


五、TCP擁塞控制

  • TCP采用的方法:讓每一個(gè)發(fā)送方根據(jù)所感知到的網(wǎng)絡(luò)擁塞程度來(lái)限制其能向鏈接發(fā)送流量的速率。

  • TCP發(fā)送方如何限制它發(fā)送流量的速率?
    ??運(yùn)行在發(fā)送方的TCP擁塞控制機(jī)制跟蹤一個(gè)額外的變量——擁塞窗口,在發(fā)送方未確認(rèn)的數(shù)據(jù)量不得超過(guò)擁塞窗口與接收窗口的最小值(間接地限制發(fā)送方的發(fā)送速率)。
    ??發(fā)送速率 = 發(fā)送數(shù)據(jù)量(未確認(rèn)數(shù)據(jù)流) / 往返時(shí)間,通過(guò)調(diào)節(jié)擁塞窗口可以達(dá)到調(diào)整發(fā)送方發(fā)送數(shù)據(jù)的速率。

  • TCP如何感知它到目的地之間的路徑是否擁塞?
    ??TCP發(fā)送方的“丟包事件”定義為:要么出現(xiàn)超時(shí),要么收到來(lái)自接收方的3個(gè)冗余ACK。當(dāng)出現(xiàn)過(guò)度的擁塞時(shí),在沿著這條路徑上的一臺(tái)或多臺(tái)路由器的緩存會(huì)溢出,引起數(shù)據(jù)包(含TCP報(bào)文段)被丟棄。被丟棄的數(shù)據(jù)包會(huì)引發(fā)發(fā)送方的丟包時(shí)間(超時(shí)或者收到3個(gè)冗余ACK),發(fā)送方就會(huì)認(rèn)為在發(fā)送方到接收方的路徑上出現(xiàn)了擁塞的指示。

  • TCP發(fā)送方如何確定發(fā)送速率?
    ??(1) 當(dāng)發(fā)生丟失報(bào)文段時(shí)應(yīng)當(dāng)降低TCP發(fā)送方的速率(減少擁塞窗口的長(zhǎng)度)
    ??(2) 當(dāng)對(duì)先前未確認(rèn)報(bào)文段的確認(rèn)到達(dá)時(shí),增加發(fā)送方速率(增加擁塞窗口的長(zhǎng)度)
    ??(3) 帶寬探測(cè)。

  • TCP擁塞控制算法
    慢啟動(dòng)算法
    ??1) 連接建好的開(kāi)始先初始化擁塞窗口cwnd大小為1,表明可以傳一個(gè)MSS大小的數(shù)據(jù)。
    ??2) 每當(dāng)收到一個(gè)ACK,cwnd大小加一,呈線性上升。
    ??3) 每當(dāng)過(guò)了一個(gè)往返延遲時(shí)間RTT(Round-Trip Time),cwnd大小直接翻倍,乘以2,呈指數(shù)讓升。
    ??4) 還有一個(gè)ssthresh(slow start threshold),是一個(gè)上限,當(dāng)cwnd >= ssthresh時(shí),就會(huì)進(jìn)入“擁塞避免算法”
    擁塞避免算法
    ??1) 收到一個(gè)ACK,則cwnd = cwnd + 1 / cwnd
    ??2) 每當(dāng)過(guò)了一個(gè)往返延遲時(shí)間RTT,cwnd大小加一。
    擁塞狀態(tài)時(shí)的算法
    ??1) 更改cwnd和ssthresh為原有cwnd的一半
    ??2) 然后進(jìn)入快速恢復(fù)算法Fast Recovery。
    快速恢復(fù)
    ??1) cwnd = cwnd + 3 * MSS,加3 * MSS的原因是因?yàn)槭盏?個(gè)重復(fù)的ACK。
    ??2) 重傳DACKs指定的數(shù)據(jù)包。
    ??3) 如果再收到DACKs,那么cwnd大小增加一。
    ??4) 如果收到新的ACK,表明重傳的包成功了,那么退出快速恢復(fù)算法。將cwnd設(shè)置為ssthresh,然后進(jìn)入擁塞避免算法。

六、無(wú)連接的服務(wù)UDP

  • 定義:在IP協(xié)議上,添加復(fù)用/分解功能以及少量的差錯(cuò)檢測(cè)。發(fā)送放和接收方的運(yùn)輸層實(shí)體之間沒(méi)有握手,所以被稱為是無(wú)連接的。

  • 使用UDP優(yōu)勢(shì)
    ??1) 能夠?yàn)閼?yīng)用層更精細(xì)控制(時(shí)間及數(shù)據(jù)類型)。只要應(yīng)用進(jìn)程將數(shù)據(jù)傳遞給UDP,UDP就會(huì)將數(shù)據(jù)打包進(jìn)UDP報(bào)文段并立刻傳遞給網(wǎng)絡(luò)層。TCP由于可靠傳輸、擁塞控制機(jī)制等,可能會(huì)導(dǎo)致報(bào)文段傳送的延遲。當(dāng)實(shí)時(shí)應(yīng)用要求最小的發(fā)送速率、不希望過(guò)分地延遲報(bào)文段的發(fā)送,且容忍一些數(shù)據(jù)的丟失,UDP更為適用。
    ??2) 無(wú)需連接建立。UDP不需要任何準(zhǔn)備就能進(jìn)行數(shù)據(jù)傳輸,所以UDP不會(huì)引入建立連接的時(shí)延。
    ??3) 無(wú)連接狀態(tài)。TCP需要在段端系統(tǒng)中維護(hù)連接狀態(tài)(接收和發(fā)送緩存、擁塞控制參數(shù)以及序號(hào)與確定號(hào)等參數(shù)),由于UDP是無(wú)連接狀態(tài)所以不需要維護(hù)也不需要跟蹤這些參數(shù)。所以在某些專門(mén)應(yīng)用于特定應(yīng)用的服務(wù)器,當(dāng)應(yīng)用程序運(yùn)行在UDP而非TCP上時(shí),能夠支持更多的活躍用戶。
    ??4) 分組首部開(kāi)銷(xiāo)小。TCP報(bào)文段需要20字節(jié)的首部開(kāi)銷(xiāo),而UDP僅需要8字節(jié)。

  • UDP的弊端
    ??UDP中缺乏擁塞控制能夠?qū)е耈DP發(fā)送方和接收方之間的高丟包率,并擠垮了TCP會(huì)話,這是一個(gè)潛在的嚴(yán)重問(wèn)題。

  • 流行的因特網(wǎng)應(yīng)用及其下面的運(yùn)輸協(xié)議

應(yīng)用 應(yīng)用層協(xié)議 運(yùn)輸層協(xié)議
電子郵件 SMTP TCP
遠(yuǎn)程終端訪問(wèn) Telnet TCP
Web HTTP TCP
文件傳輸 FTP TCP
遠(yuǎn)程文件服務(wù)器 NFS 通常UDP
流式多媒體 通常專用 UDP或TCP
因特網(wǎng)電話 通常專用 UDP或TCP
網(wǎng)絡(luò)管理 SNMP 通常UDP
路由選擇協(xié)議 RIP 通常UDP
域名轉(zhuǎn)換 DNS 通常UDP
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容