自頂向下 | 帶你遨游應(yīng)用層

前言

本文已經(jīng)收錄到我的Github個(gè)人博客,歡迎大佬們光臨寒舍:

我的GIthub博客

學(xué)習(xí)導(dǎo)圖:

學(xué)習(xí)導(dǎo)圖

一、應(yīng)用層協(xié)議原理

Q1:網(wǎng)絡(luò)應(yīng)用程序體系結(jié)構(gòu)

  • 客戶(hù) - 服務(wù)器體系結(jié)構(gòu)(C/S):Web
  • 點(diǎn)對(duì)點(diǎn)結(jié)構(gòu)(P2P):迅雷
  • 混合結(jié)構(gòu):Napster

Q2:進(jìn)程通信

  • 客戶(hù)和服務(wù)器進(jìn)程
  • 進(jìn)程與計(jì)算機(jī)網(wǎng)絡(luò)之間的接口:進(jìn)程通過(guò)套接字(socket)軟件接口向網(wǎng)絡(luò)發(fā)送報(bào)文和從網(wǎng)絡(luò)接收?qǐng)?bào)文。
  • 進(jìn)程尋址:主機(jī)的地址由 IP地址標(biāo)識(shí),進(jìn)程的位置由端口號(hào)標(biāo)識(shí)。

Q3:可供應(yīng)用使用的運(yùn)輸服務(wù)

運(yùn)輸服務(wù)的衡量標(biāo)準(zhǔn):

  • 可靠數(shù)據(jù)傳輸
  • 吞吐量
  • 定時(shí)
  • 安全性

Q4:因特網(wǎng)提供的運(yùn)輸服務(wù)

  • TCP服務(wù):特點(diǎn)是面向連接可靠的數(shù)據(jù)傳送

  • UDP服務(wù):特點(diǎn)是無(wú)連接的最小服務(wù)(非可靠)

Q5:應(yīng)用層協(xié)議

應(yīng)用層協(xié)議 (application layer protocol) 定義了運(yùn)行在不同端系統(tǒng)上的應(yīng)用程序進(jìn)程如何相互傳遞報(bào)文

(1) 交換的報(bào)文類(lèi)型,如請(qǐng)求報(bào)文和響應(yīng)報(bào)文;

(2) 各種報(bào)文類(lèi)型的語(yǔ)法,如報(bào)文中的各個(gè)字段公共詳細(xì)描述;

(3) 字段的語(yǔ)義,即包含在字段中信息的含義;

(4) 進(jìn)程何時(shí)、如何發(fā)送報(bào)文及對(duì)報(bào)文進(jìn)行響應(yīng)。

二、Web 和 HTTP

Q1:HTTP

  • HTTP名為超文本傳輸協(xié)議, 規(guī)定了客戶(hù)端和服務(wù)器之間進(jìn)行報(bào)文交換的方法
  • HTTPTCP 作為他的傳輸層協(xié)議。HTTP 客戶(hù)首先發(fā)起一個(gè)與服務(wù)器的 TCP 連接
  • 服務(wù)器響應(yīng)的時(shí)候,不存儲(chǔ)客戶(hù)端的狀態(tài)信息,因此 HTTP 也被稱(chēng)為 無(wú)狀態(tài)協(xié)議

Q2:非持續(xù)連接和持續(xù)連接

  • 持續(xù)鏈接:只采用一個(gè) TCP連接完成

  • 非持續(xù)連接:采用獨(dú)立的TCP連接完成

  • 由服務(wù)器端決定,TCP協(xié)議的請(qǐng)求,是采用一個(gè) TCP連接完成,還是獨(dú)立TCP連接完成

  • 默認(rèn)情況下使用持續(xù)連接

  • 非持續(xù)連接HTTP:每個(gè)TCP連接 只傳送一個(gè)請(qǐng)求報(bào)文和相應(yīng)報(bào)文

這里書(shū)上提到了一個(gè)概念,RTTRound-Trip Time)往返時(shí)延,報(bào)文從 C->S->C 的時(shí)間。由于有三次握手的存在,前兩次握手已經(jīng)用了 2個(gè) RTT,所以真正的響應(yīng)時(shí)間應(yīng)該是 2RTT + 傳輸HTML對(duì)象

image
  • 持續(xù)連接 HTTP:持續(xù)連接可以提高傳輸效率

上面說(shuō)過(guò),每個(gè)對(duì)象都要握手,經(jīng)過(guò)2個(gè)RTT 才可以傳輸。而持續(xù)連接,則是用系統(tǒng)資源來(lái)?yè)Q取效率。

Q3:HTTP 報(bào)文格式

  1. 請(qǐng)求報(bào)文的格式:
  • 請(qǐng)求行:方法字段、URL字段、HTTP版本
  • 請(qǐng)求頭(首部行):服務(wù)器要使用的附加信息
  • 空行:請(qǐng)求頭后面必有空行
  • 請(qǐng)求數(shù)據(jù):請(qǐng)求數(shù)據(jù)的主題。
    Get方法是沒(méi)有的,放在了 URL的參數(shù)中,POST 方法放在表單中
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close                 //瀏覽器告訴服務(wù)器不要用持續(xù)鏈接,要求服務(wù)器在發(fā)送完請(qǐng)求對(duì)象后就關(guān)閉連接
User-agent: Mozilla/5.0          //指明用戶(hù)代理
Accept-language: fr             //指明用戶(hù)得到對(duì)象的語(yǔ)言版本
請(qǐng)求報(bào)文格式

2.響應(yīng)報(bào)文的格式:

  • 狀態(tài)行HTTP版本、狀態(tài)
  • 響應(yīng)頭(首部行):發(fā)送日期,服務(wù)器相關(guān)信息等
  • 空行
  • 響應(yīng)正文:響應(yīng)的數(shù)據(jù)正文
響應(yīng)報(bào)文格式
HTTP/1.1  200  OK
Connection: close
Date: Tue, 09 Aug 2011 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html

(data data data data data ...)

常見(jiàn)狀態(tài)碼:

  • 200:請(qǐng)求成功

  • 301:請(qǐng)求的對(duì)象被轉(zhuǎn)移了,重定向的 URL在響應(yīng)報(bào)文中

  • 400:非法請(qǐng)求,丟棄

  • 404Not Found,被請(qǐng)求的文檔不在服務(wù)器上

  • 505:服務(wù)器不支持請(qǐng)求報(bào)文使用的 http 版本

3.HTTP1.0 、HTTP1.1、HTTP2.0 之間的比較:

a.HTTP/1.0

  • 支持:GET、POSTHEAD三種請(qǐng)求方法
  • 無(wú)狀態(tài)
  • 非持續(xù)連接
  • 串行發(fā)送:前一個(gè)請(qǐng)求的響應(yīng)到達(dá),后一個(gè)請(qǐng)求才可以發(fā)送

b. HTTP/1.1:

當(dāng)前正在廣泛使用的版本

  • 新增了:OPTIONS、PUT、DELETE、TRACE、CONNECT五種HTTP請(qǐng)求方法
  • 持續(xù)性連接(持久連接)
  • 請(qǐng)求管道化(由于TCP長(zhǎng)連接的存在,所以可以管道化)
  • 增加緩存處理
  • 支持?jǐn)帱c(diǎn)傳輸、增加Host字段

最重要的是 長(zhǎng)連接

c.HTTP/2.0

  • 二進(jìn)制分幀
  • 多路復(fù)用(并行傳輸)
  • 頭部壓縮
  • 服務(wù)器推送

重點(diǎn)是可以并行傳輸

Q4:用戶(hù)和服務(wù)器的交互:cookie

之前說(shuō)過(guò),HTTP 是無(wú)狀態(tài)協(xié)議。但是 Web 站點(diǎn)為了 識(shí)別用戶(hù)身份 ,使用了 Cookie 技術(shù)。
Cookie 技術(shù)包含 4 個(gè)組件:

  • HTTP 請(qǐng)求報(bào)文里增加一個(gè)關(guān)于 Cookie 的首部行
  • HTTP 響應(yīng)報(bào)文里增加一個(gè)關(guān)于 Cookie 的首部行
  • 客戶(hù)端系統(tǒng) 保留一個(gè) Cookie 文件,由瀏覽器保存維護(hù)
  • Web 站點(diǎn)建立 Cookie 和 用戶(hù)身份的關(guān)聯(lián)

很好理解,自然是請(qǐng)求報(bào)文和相應(yīng)報(bào)文都攜帶 Cookie,客戶(hù)端和服務(wù)器端都存有 Cookie 文件。即 本地保存,訪問(wèn)攜帶

CookieSession 的區(qū)別
簡(jiǎn)單來(lái)說(shuō),二者都是為了 Web 站點(diǎn) 識(shí)別用戶(hù)身份,Session 譯為 會(huì)話(huà),就是保存每一次客戶(hù)端和服務(wù)器端會(huì)話(huà)中的 用戶(hù)信息和用戶(hù)操作,是有時(shí)間限制的。
Session 會(huì)在服務(wù)器端有一個(gè) 類(lèi)似 HashTable 的數(shù)據(jù)來(lái)存放用戶(hù)數(shù)據(jù),瀏覽器第一次請(qǐng)求,生成一個(gè) HashTable 和對(duì)應(yīng) 的SessionID (用于標(biāo)識(shí)這個(gè) HashTable)。這個(gè) Session ID 一般在 30 分鐘后會(huì)自動(dòng)銷(xiāo)毀。

區(qū)別:

  • Cookie客戶(hù)端,會(huì)被篡改,不安全。Session服務(wù)器端
  • Cookie 只能存 String 類(lèi)型對(duì)象,且容量小。 Session 可以存 java 對(duì)象,容量大。

Q5:Web 緩存器(代理服務(wù)器)

1.使用 Web 緩存器的 2 個(gè)主要原因:

  • 降低延遲:緩存離客戶(hù)端更近,因此,從緩存請(qǐng)求內(nèi)容比從源服務(wù)器所用時(shí)間更少,呈現(xiàn)速度更快,網(wǎng)站就顯得更靈敏
  • 降低網(wǎng)絡(luò)傳輸:副本被重復(fù)使用,大大降低了用戶(hù)的帶寬使用,其實(shí)也是一種變相的省錢(qián)(如果流量要付費(fèi)的話(huà)),同時(shí)保證了帶寬請(qǐng)求在一個(gè)低水平上,更容易維護(hù)了

2.工作過(guò)程

Web 緩存器有緩存
Web 緩存器無(wú)緩存

Q6:條件 get 方法

上述實(shí)現(xiàn)方式還有一個(gè)問(wèn)題就是無(wú)法保證本地存儲(chǔ)器內(nèi)的內(nèi)容是最新的,所以需要采用一種方式(條件性 GET 方法)來(lái)保證數(shù)據(jù)是最新版本。這個(gè)方法的基本思想就是本地代理服務(wù)器向 URL 目標(biāo)服務(wù)器發(fā)送一個(gè) GET 請(qǐng)求消息,這個(gè)消息里面包括了本地存儲(chǔ)資源的更新時(shí)間,在 URL 目標(biāo)服務(wù)器中,會(huì)用這個(gè)時(shí)間與最新版本的時(shí)間進(jìn)行比對(duì),如果時(shí)間一致就返回 304 Not Modified , 否則就返回 200 OK 和最新版本的資源。代理服務(wù)器接收到返回信息后會(huì)判斷這個(gè)返回碼,如果是 304,就直接返回給客戶(hù)給本地代理服務(wù)器存儲(chǔ)的資源;如果是 200 就把新接收到的資源返回給用戶(hù),同時(shí)更新代理服務(wù)器存儲(chǔ)的內(nèi)容。

三、文件傳輸協(xié)議 FTP

  • FTP 的特點(diǎn):同 HTTP 一樣,也是運(yùn)行在 TCP 上的協(xié)議,但它采用了兩個(gè)并行TCP 連接來(lái)傳輸文件:
  • 一個(gè)用于控制連接
  • 一個(gè)用于數(shù)據(jù)連接
  • 所以我們稱(chēng)其為帶外(out-of-band)傳輸。另外,控制鏈接和持續(xù)整個(gè)過(guò)程,而每傳輸一個(gè)新文件,都需要新開(kāi)一條數(shù)據(jù)連接

四、因特網(wǎng)中的電子郵件

電子郵件的組成部分:

  • 用戶(hù)代理
  • 郵件服務(wù)器
  • 簡(jiǎn)單郵件傳輸協(xié)議SMTP
image
  • 用戶(hù)代理允許用戶(hù)閱讀、回復(fù)、轉(zhuǎn)發(fā)、保存和撰寫(xiě)報(bào)文

  • 郵件服務(wù)器組成了電子郵件體系結(jié)構(gòu)的核心

  • 每個(gè)接收方在其中的某個(gè)服務(wù)器上有一個(gè)郵箱

  • 郵箱包含用戶(hù)的到達(dá)報(bào)文、離開(kāi) (將發(fā)送) 郵件報(bào)文的報(bào)文隊(duì)列

  • 在發(fā)送電子郵件報(bào)文的郵件服務(wù)器之間采用 SMTP 協(xié)議。

郵件服務(wù)器結(jié)構(gòu)

SMTP 是因特網(wǎng)電子郵件中主要的應(yīng)用層協(xié)議。它使用 TCP 可靠數(shù)據(jù)傳輸服務(wù),從發(fā)送方的郵件服務(wù)器向接收方的郵件服務(wù)器發(fā)送郵件。

1、SMTP

  • 使用 TCP 從客戶(hù)機(jī)到服務(wù)器可靠地傳輸電子郵件報(bào)文,用端口 25
  • 直接傳輸:發(fā)送服務(wù)器到接收服務(wù)器

  • 傳輸?shù)娜齻€(gè)階段:握手 (歡迎)、報(bào)文的傳輸、關(guān)閉

  • 報(bào)文必須以 7 比特 ASCII 格式

為了描述 SMTP 的基本操作,下面來(lái)模擬一下 AliceBob 發(fā)送一封簡(jiǎn)單的 ASCII 報(bào)文的過(guò)程:

image
  1. Alice 使用用戶(hù)代理寫(xiě)作報(bào)文并向 bob@someschool.edu 發(fā)送

  2. Alice用戶(hù)代理 向其郵件服務(wù)器發(fā)送報(bào)文;報(bào)文放置在報(bào)文隊(duì)列

  3. SMTP 的客戶(hù)機(jī)側(cè)打開(kāi)與 Bob 的郵件服務(wù)器的 TCP 連接

  4. SMTP 通過(guò) TCP 連接發(fā)送 Alice 的報(bào)文

  5. Bob 的郵件服務(wù)器將該報(bào)文放入 Bob 的郵箱

  6. Bob 調(diào)用其用戶(hù)代理(通過(guò)POP/POP3)來(lái)讀報(bào)文

2、SMTPHTTP 的對(duì)比

  • HTTP: 拉協(xié)議 SMTP: 推協(xié)議

  • SMTP 要求全部 7ASCII 碼格式傳輸 HTTP 無(wú)此要求

  • HTTP: 每個(gè)對(duì)象封裝在其自己的響應(yīng)報(bào)文中 SMTP: 所有報(bào)文對(duì)象放在一個(gè)報(bào)文

3、郵件訪問(wèn)協(xié)議

  • 注意到 Bob 的用戶(hù)代理不能使用 SMTP 來(lái)取回郵件,因?yàn)?strong>取郵件是一個(gè)拉操作,而 SMTP 是一個(gè)推協(xié)議。因此我們要引入郵件訪問(wèn)協(xié)議:

POP

  • POP 協(xié)議支持 “離線” 郵件存儲(chǔ)轉(zhuǎn)發(fā)處理:客戶(hù)端程序連接服務(wù)器,下載所有未閱讀的電子郵件
  • 一旦將郵件從郵件服務(wù)器端送到客戶(hù)端上,郵件服務(wù)器上的郵件將會(huì)被刪除

POP3

  • POP3 協(xié)議允許電子郵件客戶(hù)端下載服務(wù)器上的郵件
  • 但是在客戶(hù)端的操作(如移動(dòng)郵件、標(biāo)記已讀等),不會(huì)反饋到服務(wù)器上,比如通過(guò)客戶(hù)端收取了郵箱中的 3 封郵件并移動(dòng)到其他文件夾,郵箱服務(wù)器上的這些郵件是沒(méi)有同時(shí)被移動(dòng)的

IMAP的介紹,以及和 POP3 的區(qū)別

  • IMAPPOP3 那樣提供了方便的郵件下載服務(wù),讓用戶(hù)能進(jìn)行離線閱讀

  • IMAPPOP3 是郵件訪問(wèn)最為普遍的 Internet 標(biāo)準(zhǔn)協(xié)議。不同的是:

  • IMAP 提供 Webmail 與電子郵件客戶(hù)端之間的雙向通信,客戶(hù)端收取的郵件仍然保留在服務(wù)器上,同時(shí)在客戶(hù)端上的操作都會(huì)反饋到服務(wù)器上(如:刪除郵件,標(biāo)記已讀等,服務(wù)器上的郵件也會(huì)做相應(yīng)的動(dòng)作。所以無(wú)論從瀏覽器登錄郵箱或者客戶(hù)端軟件登錄郵箱,看到的郵件以及狀態(tài)都是一致的)。而 POP3 在客戶(hù)端的操作不會(huì)反饋到服務(wù)器上。
  • IMAP 更好地支持了從多個(gè)不同設(shè)備中隨時(shí)訪問(wèn)新郵件
  • IMAP 提供的摘要瀏覽功能:可以讓你在閱讀完所有的郵件到達(dá)時(shí)間、主題、發(fā)件人、大小等信息后才作出是否下載的決定。
  • POP3 需要下載未閱讀的郵件,IMAP 可以不用把所有的郵件全部下載,而是通過(guò)客戶(hù)端直接對(duì)服務(wù)器上的郵件進(jìn)行操作。所有通過(guò) IMAP 傳輸?shù)臄?shù)據(jù)都會(huì)被加密,從而保證通信的安全性。
  • IMAP 整體上為用戶(hù)帶來(lái)更為便捷和可靠的體驗(yàn)。POP3 更易丟失郵件或多次下載相同的郵件。

五、DNS:因特網(wǎng)的目錄服務(wù)

  • DNS 提供的服務(wù)主要為主機(jī)名到 IP 地址的轉(zhuǎn)換

  • DNS 采用的是 UDP

Q1:DNS 提供的其他服務(wù):

  • 主機(jī)別名

有著復(fù)雜主機(jī)名的主機(jī)可以擁有一個(gè)或多個(gè)別名。原復(fù)雜主機(jī)名也叫規(guī)范主機(jī)名。主機(jī)別名(如果有的話(huà))比主機(jī)規(guī)范名更容易記憶。應(yīng)用程序可以調(diào)用 DNS 來(lái)獲得主機(jī)別名對(duì)應(yīng)的規(guī)范主機(jī)名以及主機(jī)的 IP 地址

  • 郵件服務(wù)器別名

同主機(jī)別名類(lèi)似,電子郵件應(yīng)用程序調(diào)用 DNS,對(duì)提供的郵件服務(wù)器別名進(jìn)行解析,以獲得該主機(jī)的規(guī)范主機(jī)名以及其 IP 地址。MXMail Exchanger,郵件交換)記錄允許一個(gè)公司的郵件服務(wù)器和 Web 服務(wù)器用相同的(別名化的)主機(jī)名

  • 負(fù)載分配

DNS 也用于在冗余的服務(wù)器(如冗余的 Web 服務(wù)器等)之間進(jìn)行負(fù)載分配。對(duì)于這些冗余的 Web 服務(wù)器,一個(gè) IP 地址集合對(duì)應(yīng)于同一個(gè)規(guī)范主機(jī)名。DNS 數(shù)據(jù)庫(kù)中存儲(chǔ)著這些 IP 地址集合。當(dāng)客戶(hù)機(jī)為映射到這個(gè) IP 地址集合的名字發(fā)出一個(gè) DNS 請(qǐng)求時(shí),該服務(wù)器用包含全部這些地址的報(bào)文回答,但在每個(gè)回答中旋轉(zhuǎn)這些地址排放順序。因?yàn)榭蛻?hù)機(jī)通??偸窍?IP 地址排在最前面的服務(wù)器發(fā)送 HTTP 請(qǐng)求報(bào)文,所以 DNS 就在所有這些冗余的 Web 服務(wù)器之間旋轉(zhuǎn)分配負(fù)載。DNS 旋轉(zhuǎn)同樣適用于郵件服務(wù)器,因此,多個(gè)郵件服務(wù)器可以具有相同的別名。

2、DNS 的工作原理

DNS 采用分布式的設(shè)計(jì)方案

下面是 DNS 服務(wù)器的部分層次結(jié)構(gòu)(由上到下,每層分別是根服務(wù)器、頂級(jí)域TLD 服務(wù)器、權(quán)威服務(wù)器)

image

1)分布式、層次數(shù)據(jù)庫(kù)

大致來(lái)說(shuō),有 3 種類(lèi)型的 DNS 服務(wù)器:DNS 服務(wù)器、頂級(jí)域(Top9 Level Domain,TLDDNS 服務(wù)器權(quán)威 DNS 服務(wù)器。

下面來(lái)詳細(xì)介紹一下這三種類(lèi)型的 DNS 服務(wù)器:

  • DNS 服務(wù)器
image
  • 頂級(jí)域TLD服務(wù)器

負(fù)責(zé) com, org, net, edu 等,以及所有頂級(jí)國(guó)家域 uk, fr, ca, jp,cn

  • 權(quán)威 DNS服務(wù)器

組織的 DNS 服務(wù)器為組織的服務(wù)器 (如 Web 和電子郵件) 提供對(duì)IP映射的權(quán)威主機(jī)名。 能夠由組織或服務(wù)提供商維護(hù)。

  • 本地 DNS 服務(wù)器

本地 DNS 服務(wù)器嚴(yán)格來(lái)說(shuō)并不屬于 DNS 服務(wù)器的層次結(jié)構(gòu),但它對(duì) DNS 層次結(jié)構(gòu)是很重要的。

迭代查詢(xún)
圖 2、遞歸查詢(xún)

在圖 1 的例子中用到了遞歸查詢(xún)迭代查詢(xún)

從理論上,所有的 DNS 查詢(xún)既可以是迭代的也可以是遞歸的。例如,圖 2 顯示了一條 DNS 查詢(xún)鏈,其中所有查詢(xún)都是遞歸的

實(shí)際中,查詢(xún)通常遵循圖 1 中的模式:從請(qǐng)求主機(jī)到本地 DNS 服務(wù)器的查詢(xún)是遞歸的,其余查詢(xún)是迭代的

2)DNS 緩存

  • 為了改善時(shí)延性能并減少在因特網(wǎng)上到處傳輸?shù)?DNS 報(bào)文數(shù)量,DNS 廣泛使用緩存技術(shù)
  • 原理:當(dāng)一個(gè) DNS 服務(wù)器接收一個(gè) DNS 回答(例如,包含主機(jī)名到 IP 地址的映射)時(shí),DNS 服務(wù)器能將回答中的信息緩存在本地存儲(chǔ)器。由于主機(jī)與主機(jī)名的 IP 地址映射決不是永久的,所以 DNS 服務(wù)器在一段時(shí)間后(通常設(shè)置為兩天)將丟棄緩存的信息

3)域名解析過(guò)程

image

六、P2P 應(yīng)用

問(wèn)題 : 從一個(gè)服務(wù)器向 N 個(gè)節(jié)點(diǎn)分發(fā)一個(gè)文件需要多長(zhǎng)時(shí)間?

(1)客戶(hù)機(jī) / 服務(wù)器:服務(wù)器串行地發(fā)送 N 個(gè)副本

  • 時(shí)間: NF/us
  • 客戶(hù)機(jī) i 需要 F/di 時(shí)間下載

(2)P2P:服務(wù)器必須發(fā)送一個(gè)副本

  • 時(shí)間: F/us
  • 客戶(hù)機(jī) i 需要 F/di 時(shí)間下載
  • 總共需要下載 NF 比特
  • 最快的可能上傳速率: us + ∑ui
P2P需要的時(shí)間
C/S需要的時(shí)間
C/S 模式和 P2P 模式對(duì)比

如果文章對(duì)您有一點(diǎn)幫助的話(huà),希望您能點(diǎn)一下贊,您的點(diǎn)贊,是我前進(jìn)的動(dòng)力

本文參考鏈接:

最后編輯于
?著作權(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ù)。

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