實(shí)驗(yàn)二數(shù)據(jù)鏈路層實(shí)驗(yàn)_第1頁
實(shí)驗(yàn)二數(shù)據(jù)鏈路層實(shí)驗(yàn)_第2頁
實(shí)驗(yàn)二數(shù)據(jù)鏈路層實(shí)驗(yàn)_第3頁
實(shí)驗(yàn)二數(shù)據(jù)鏈路層實(shí)驗(yàn)_第4頁
實(shí)驗(yàn)二數(shù)據(jù)鏈路層實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí)驗(yàn)二數(shù)據(jù)鏈路層實(shí)驗(yàn)實(shí)驗(yàn)項(xiàng)目性質(zhì):設(shè)計(jì)性計(jì)劃學(xué)時:4實(shí) 驗(yàn) 環(huán) 境: 實(shí)驗(yàn)日期:2015年10月14日一、實(shí)驗(yàn)?zāi)康?、理解并掌握數(shù)據(jù)鏈路層協(xié)議的功能。2、進(jìn)一步理解停止等待協(xié)議和滑動窗口協(xié)議的基本工作原理。3、掌握計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議的基本實(shí)現(xiàn)技術(shù)。4、利用RS 232C通信接口實(shí)現(xiàn)兩臺PC間傳輸文件。二、實(shí)驗(yàn)內(nèi)容與要求1、設(shè)計(jì)完成數(shù)據(jù)鏈路層相關(guān)類;2、開發(fā)一個使用RS232C接口在兩臺計(jì)算機(jī)之間采用停止等待協(xié)議傳輸信息(文件)的程序;3、開發(fā)一個使用RS232C接口在兩臺計(jì)算機(jī)之間采用滑動窗口協(xié)議傳輸文件的程序。完成實(shí)驗(yàn)內(nèi)容中的第1、2部分,有能力的同學(xué)完成全部內(nèi)容。三、

2、實(shí)驗(yàn)(設(shè)計(jì))儀器設(shè)備和材料清單計(jì)算機(jī)兩臺,串行電纜一根。四相關(guān)知識1 數(shù)據(jù)路層概述數(shù)據(jù)鏈路層協(xié)議應(yīng)提供的基本功能有:(1) 數(shù)據(jù)在數(shù)據(jù)鏈路上的正常傳輸(建立、維護(hù)和釋放)。(2) 幀定界與同步,以實(shí)現(xiàn)透明傳輸。(3) 差錯控制和流量控制。(4) 透明傳輸。2 數(shù)據(jù)成幀方法在數(shù)據(jù)鏈路層,為實(shí)現(xiàn)透明傳輸及進(jìn)行差錯控制和流量控制,在把數(shù)據(jù)送到物理層之前,需將若干個數(shù)據(jù)組成一幀,并在其中加上其他必要的控制信息??刂菩畔⑿纬桑〝?shù)據(jù)成幀)的方法有以下幾種:字符計(jì)數(shù)法、帶字符填充的首尾界符法、帶填充位的首尾標(biāo)志法、物理層編碼違例法。3 差錯控制與流量控制為確保幀可靠地交付接收方,接收方在收到幀后,應(yīng)向發(fā)送方

3、應(yīng)答,告知是否正確收到幀,因此在數(shù)據(jù)鏈路層要建立差錯控制機(jī)制: 差錯控制方法、CRC循環(huán)冗余校驗(yàn)、流量控制。4 數(shù)據(jù)鏈路層協(xié)議(1) 停止等待協(xié)議停止等待協(xié)議的基本原理是:發(fā)送方在數(shù)據(jù)幀中加入校驗(yàn)碼(CRC),由接收方檢查;若出錯,返回NAK幀(否認(rèn)幀),否則發(fā)送ACK幀(確認(rèn)幀);發(fā)送方收到NAK幀后重發(fā)數(shù)據(jù)幀,若收到ACK幀可發(fā)送下一幀。當(dāng)超時計(jì)時事件發(fā)生時,重發(fā)丟失的幀,這樣可通過等待發(fā)送來實(shí)現(xiàn)流量控制,如圖3-2所示。停止等待協(xié)議發(fā)送方的算法如下:(1) 從主機(jī)取一個數(shù)據(jù)幀。(2) V(s) <-0,發(fā)送方狀態(tài)變量初始化。(3) N(s)<- V(s)(置發(fā)送序號),將數(shù)據(jù)

4、幀送發(fā)送緩沖區(qū)。(4) 將發(fā)送緩沖的數(shù)據(jù)發(fā)送。(5) 置超時定時器。(6) 等待(下列三種情況)。(7) 收到回答ACK ,從主機(jī)取一個新數(shù)據(jù)幀, V(s) <-1-V(s),轉(zhuǎn)(3)。圖3-2停止等待協(xié)議工作原理示意圖(8) 收到回答NAK ,轉(zhuǎn)(4)。(9) 超時,轉(zhuǎn)(4)。接收方的算法如下:(1) V(r) <-0, 接收方狀態(tài)變量初始化。(2) 等待。(3) 收到一個數(shù)據(jù)幀后,測試正確繼續(xù);否則傳輸出錯,轉(zhuǎn)(8)。(4) 如果接收到的幀序號等于期待的幀序號( N(s) = V(r) ,繼續(xù);否則丟棄該數(shù)據(jù),轉(zhuǎn)(7)。(5) 將接收幀的數(shù)據(jù)部分上交主機(jī)。(6) V(r) &l

5、t;-1- V(r)。 (7) 向發(fā)方發(fā)ACK ,轉(zhuǎn)(2)。(8) 向發(fā)方發(fā)NAK ,轉(zhuǎn)(2)。停止等待協(xié)議的算法流程如圖3-3所示,其中V(s) 和V(r)分別是發(fā)送方和接收方維護(hù)的狀態(tài)變量,N(s)是發(fā)送序號。圖3-3停止等待協(xié)議的算法停止等待協(xié)議算法簡單,只適合傳送少量的大的幀的情況。但大的數(shù)據(jù)塊要分成許多幀傳送,此時停止等待協(xié)議不適用,原因是本協(xié)議只允許同時只有一幀在鏈路上傳送,鏈路利用率低。(2) 連續(xù)重傳ARQ協(xié)議為了提高信道利用率,發(fā)送方發(fā)完一幀后,不必停下來等待對方的應(yīng)答,可以連續(xù)發(fā)送若干幀;如果在發(fā)送過程中收到接收方的肯定應(yīng)答,可以繼續(xù)發(fā)送;若收到對其中某一幀的否認(rèn)幀,則從該

6、幀開始的后續(xù)幀全部重發(fā),如圖3-4。由于減少了等待時間,整個通信的吞吐量就提高了,提高了信道利用率。但回退重傳(Go-back-N)會導(dǎo)致某些已正確接收的幀的重傳,因此降低了發(fā)送效率。當(dāng)誤碼率較低時,連續(xù)重傳ARQ優(yōu)于停止等待協(xié)議;反之則不一定。圖3-4連續(xù)重傳ARQ協(xié)議工作原理示意圖(3) 滑動窗口協(xié)議(Sliding Window Protocol)在使用連續(xù)重傳ARQ協(xié)議時,如果發(fā)送端一直沒有收到對方的確認(rèn)信息,那么實(shí)際上發(fā)送端并不能無限制地發(fā)送其數(shù)據(jù)幀。這是因?yàn)椋?1) 當(dāng)未被確認(rèn)的數(shù)據(jù)幀的數(shù)目太多時,只要有一幀出了差錯,就可能要有很多的數(shù)據(jù)幀需要重傳,這必然要白白花費(fèi)較多的時間,因而

7、增大開銷。(2) 為了對所發(fā)送出去的大量數(shù)據(jù)幀進(jìn)行編號,每個數(shù)據(jù)幀的發(fā)送序號也要占用較多的比特?cái)?shù),這樣又增加了一些不必要開銷。連續(xù)ARQ協(xié)議中,每一個要發(fā)出的幀都包含一個序列號,范圍從0到最大(0 2n 1,一般用n個二進(jìn)制位表示),使得序列號能恰好放入n位的字段中,n同時表示緩存器的大小。滑動窗口協(xié)議的工作原理如下:(1) 任何時刻,發(fā)送端始終保持一個已發(fā)送但尚未確認(rèn)的幀的序號表,稱為發(fā)送窗口。發(fā)送窗口的上界表示要發(fā)送的下一個幀的序號,下界表示未得到確認(rèn)的幀的最小編號。發(fā)送窗口 = 上界下界,大小可變;窗口內(nèi)的序列號代表已發(fā)送了的但尚未確認(rèn)的幀。(2) 發(fā)送端每發(fā)送一個幀,序號取上界值,上界

8、加1;每接收到一個正確響應(yīng)幀,下界加1;(3) 接收端有一個接收窗口,大小固定,但不一定與發(fā)送窗口相同。接收窗口的上界表示允許接收的序號最大的幀,下界表示希望接收的幀;(4) 接收窗口表示允許接收的信息幀,落在窗口外的幀均被丟棄。序號等于下界的幀被正確接收,并產(chǎn)生一個響應(yīng)幀,下界加1。接收窗口大小不變。正因?yàn)槭瞻l(fā)兩端的窗口按照以上的規(guī)律不斷地向前滑動,因此這種協(xié)議又稱為滑動窗口協(xié)議。當(dāng)發(fā)送窗口和接收窗口的大小都等于1時,就是最初討論的停止等待協(xié)議。下圖3-5為滑動窗口的原理,它采用三位編碼,順序號為0-7,圖中方框內(nèi)表示發(fā)送方可以發(fā)送7幀,序號從6開始,每發(fā)送一幀,窗口左邊界向里收縮,每收到一

9、個確認(rèn),窗口向右滑動。接收方每一幀,窗口左邊向右收縮,每發(fā)送相應(yīng)后窗口向右擴(kuò)展。圖3-5滑動窗口協(xié)議中的發(fā)送窗口和接收窗口假設(shè)窗口為7幀,最上面的A發(fā)送7幀,但發(fā)送后3幀未收到確認(rèn),于是A把窗口收縮到4幀F(xiàn)3-F7。但此時B發(fā)送確認(rèn)RR3表明已經(jīng)收到0-2幀,并準(zhǔn)備接收3-7幀。A收到確認(rèn)RR3,窗口向外滑動3幀,表示A可以從F3開始發(fā)送7幀。接著發(fā)送F3-F6。 若B返回確認(rèn)RR4,表示已經(jīng)接收這些幀,并允許A發(fā)送F7開始的7幀。圖3-6滑動窗口協(xié)議工作原理示意圖。AB圖3-6滑動窗口協(xié)議工作原理示意圖可以證明,當(dāng)用 n個比特進(jìn)行編號時,若發(fā)送窗口的大小為WT,接收窗口的大小為WR,則只有W

10、T2n-1 和WT+WR2n成立時,滑動窗口協(xié)議才能正常工作。(4) 選擇重傳ARQ協(xié)議 為了進(jìn)一步提高信道的利用率,可設(shè)法只重傳出現(xiàn)差錯的數(shù)據(jù)幀或者是定時器超時的數(shù)據(jù)幀。但這時必須加大接收窗口,以便先收下發(fā)送序號不連續(xù)但仍處在接收窗口中的那些數(shù)據(jù)幀,等到所缺序號的數(shù)據(jù)幀收到后再一并送交主機(jī)。這就是選擇重傳ARQ協(xié)議。使用選擇重傳ARQ協(xié)議可以避免重復(fù)傳送那些本來已經(jīng)正確到達(dá)接收端的數(shù)據(jù)幀。但付出的代價是在接收端要設(shè)置具有相當(dāng)容量的緩存空間,這在許多情況下是不夠經(jīng)濟(jì)的。因此選擇重傳ARQ協(xié)議在目前就遠(yuǎn)沒有連續(xù)重傳ARQ協(xié)議使用得那么廣泛。5 面向比特的鏈路控制規(guī)程HDLC高級數(shù)據(jù)鏈路控制HDL

11、C(High-level Data Link Control)是在IBM公司著名的體系結(jié)構(gòu)SNA上的數(shù)據(jù)鏈路層的面向比特的規(guī)程SDLC(Synchronous Data Link Control)基礎(chǔ)上發(fā)展起來的,由ISO把SDLC修改后稱為國際標(biāo)準(zhǔn)ISO 3309。從網(wǎng)絡(luò)層交下來的分組,變成為數(shù)據(jù)鏈路層的數(shù)據(jù)。數(shù)據(jù)鏈路層的數(shù)據(jù)傳送是以幀為單位的。也就是說,數(shù)據(jù)鏈路層的PDU是幀。幀是一個具有固定的格式數(shù)據(jù)塊。一個HDLC幀由標(biāo)志、地址、控制、信息及幀校驗(yàn)等5個字段組成。如圖3-7所示。HDLC有三種幀類型,由控制字段加以區(qū)分。HDLC幀中各字段的作用及含義如下:標(biāo)志F地址A控制C信息Info

12、r幀校驗(yàn)序列FCS標(biāo)志F幀校驗(yàn)區(qū)間透明傳輸區(qū)間圖3-7HDLC幀結(jié)構(gòu)(1) 標(biāo)志字段F(Flag)幀的邊界,標(biāo)識一個幀的開始與結(jié)束;當(dāng)連續(xù)傳輸兩個幀時,前一個幀的結(jié)束標(biāo)志字段F可以兼作后一幀的起始標(biāo)志字段。其內(nèi)容為:。在兩個標(biāo)志字段之間的比特串中,如果碰巧出現(xiàn)了和標(biāo)志字段F一樣的比特組合,那么就會誤認(rèn)為是幀的邊界。為了避免出現(xiàn)這種錯誤,HDLC采用零比特填充法使一幀中兩個F字段之間不會出現(xiàn)6個連續(xù)1。 (2) 地址字段A(Address)基本單位為8比特,需要時可以8比特為單位擴(kuò)展。這時用地址字段的第1位表示擴(kuò)展位,其余7位為地址位。當(dāng)某個地址字段的第1位為0時,則表示下一個地址字段的后7位也

13、是地址位。當(dāng)這個地址字段的第1位為1時,即表示這已是最后一個地址字段了。(3) 控制字段C(Control)標(biāo)志F地址A控制C信息Infor幀校驗(yàn)序列FCS標(biāo)志F比特序號信息幀I監(jiān)控幀S無編號幀U123456780N(S)P/FN(R)10SP/FN(R)11MP/FM控制字段占8比特,其定義如圖3-8所示。HDLC用其將幀劃分為信息幀(Information)、監(jiān)督幀(Supervisory)和無編號幀(Unnumbered)等三大類。它們的簡稱分別是I幀,S幀和U幀。圖3-8控制字段(4) 信息字段I(Information)信息字段可以任意長,只有信息幀才有該字段。(5) 幀校驗(yàn)序列FC

14、S(Frame Check Sequence)字段本字段共占16bit,校驗(yàn)的范圍是從地址字段的第1個比特起,到信息字段的最末1個比特為止。它采用的生成多項(xiàng)式是x16十x12+x5十1,即CRCCCITT。HDLC的通信過程要經(jīng)過建立數(shù)據(jù)鏈路、數(shù)據(jù)傳輸、數(shù)據(jù)鏈路拆除三個階段。五、結(jié)果分析(可根據(jù)需要附加頁)6、 主要源代碼using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using S

15、ystem.Windows.Forms;using System.Threading;using System.Runtime.InteropServices;using NetProject;namespace DataLink_Exp public partial class MainForm : Form static MainForm mHANDLE=null; /主窗體名柄,在線程中訪問 static Thread Mon_Thread=null; /監(jiān)視線程 private ChildForm sendForm = null; /發(fā)送子窗口對象 private ChildForm

16、rcvForm = null; /接收子窗口對象 static Physical PHL = null; /物理層實(shí)體 static DataLink DLL = null; /數(shù)據(jù)鏈路層實(shí)體 delegate void SetTextCallback(byte buffer); public MainForm() InitializeComponent(); mHANDLE = this; private void MainForm_Load(object sender, EventArgs e) /初始化,創(chuàng)建子窗體,啟動監(jiān)視線程 sendForm = new ChildForm(); s

17、endForm.MdiParent = this; sendForm.Text = "發(fā)送窗口" /this.MdiChildren.Length.ToString(); sendForm.Name = "SendWindow" sendForm.Show(); rcvForm = new ChildForm(); rcvForm.MdiParent = this; rcvForm.Text = "接收窗口" rcvForm.Name = "ReceiveWindow" rcvForm.rtxBox.ReadOnl

18、y = true; rcvForm.Show(); this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical);/其他排列方法:Cascade、TileHorizontal PHL = new Physical("COM3"); DLL = new DataLink(); /創(chuàng)建數(shù)據(jù)鏈路層對象 DLL.setPHL(PHL); /連接物理層 sendForm.Enabled = false; /發(fā)送窗口禁止編輯 /創(chuàng)建并啟動監(jiān)視線程 Mon_Thread = new Thread(new ThreadStart(t

19、his.MonitorThread); Mon_Thread.Start(); private void disconnect_Click(object sender, EventArgs e) /關(guān)閉串行口 PHL.Close(); connect.Enabled = true; sendForm.Enabled = false; private void connect_Click(object sender, EventArgs e) /打開串行口/ port = new SerialPort("COM1", 9600, Parity.None, 8, StopBit

20、s.One); PHL.Open(); sendForm.Enabled = true; connect.Enabled = false; disconnect.Enabled = true; private void Receive(byte buffer) /接收數(shù)據(jù)并顯示 /寫實(shí)際接收代碼 if (this.rcvForm.rtxBox.InvokeRequired) SetTextCallback d = new SetTextCallback(Receive); this.Invoke(d, new object buffer ); else string Msg = Encodin

21、g.Unicode.GetString(buffer, 0, buffer.Length); /編碼格式轉(zhuǎn)換 this.rcvForm.rtxBox.Text += Msg; /收到的信息顯示 public static void Send(string Msg) /發(fā)送子窗體高層向低層發(fā)送數(shù)據(jù)(使用<Ctrl>+<T>) byte buffer = Encoding.Unicode.GetBytes(Msg); /發(fā)送前進(jìn)行編碼格式轉(zhuǎn)換 DLL.Send(buffer);/ PHL.Send(buf); /數(shù)據(jù)送物理層SAP下行隊(duì)列,發(fā)送數(shù)據(jù)(物理層實(shí)驗(yàn)用) /監(jiān)視線

22、程函數(shù),運(yùn)行協(xié)議處理方法,接收傳輸給當(dāng)前應(yīng)用的數(shù)據(jù)。 private void MonitorThread() byte Msg; while (true) DLL.Run(); /運(yùn)行數(shù)據(jù)鏈路層協(xié)議處理方法 if (Msg = DLL.Receive() != null) /數(shù)據(jù)鏈路層有向高層遞交的數(shù) /是,從數(shù)據(jù)鏈路層接收數(shù)據(jù)(數(shù)據(jù)存儲在Msg中) Receive(Msg); /送接收處理(本例為數(shù)據(jù)直接顯示在子窗體中) private void arrToolStripMenuItem_Click(object sender, EventArgs e) /排列子窗體 this.Layou

23、tMdi(System.Windows.Forms.MdiLayout.TileVertical); /還有其他排列方法:Cascade、TileHorizontal private void exitToolStripMenuItem_Click(object sender, EventArgs e) Close(); private void MainForm_FormClosed(object sender, FormClosedEventArgs e) if (Mon_Thread != null) Mon_Thread.Abort();using System;using Syste

24、m.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Threading;using System.Runtime.InteropServices;using NetProject;namespace DataLink_Exp public partial class MainForm : Form static MainForm mHANDLE=null;

25、 /主窗體名柄,在線程中訪問 static Thread Mon_Thread=null; /監(jiān)視線程 private ChildForm sendForm = null; /發(fā)送子窗口對象 private ChildForm rcvForm = null; /接收子窗口對象 static Physical PHL = null; /物理層實(shí)體 static DataLink DLL = null; /數(shù)據(jù)鏈路層實(shí)體 delegate void SetTextCallback(byte buffer); public MainForm() InitializeComponent(); mHAN

26、DLE = this; private void MainForm_Load(object sender, EventArgs e) /初始化,創(chuàng)建子窗體,啟動監(jiān)視線程 sendForm = new ChildForm(); sendForm.MdiParent = this; sendForm.Text = "發(fā)送窗口" /this.MdiChildren.Length.ToString(); sendForm.Name = "SendWindow" sendForm.Show(); rcvForm = new ChildForm(); rcvForm

27、.MdiParent = this; rcvForm.Text = "接收窗口" rcvForm.Name = "ReceiveWindow" rcvForm.rtxBox.ReadOnly = true; rcvForm.Show(); this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical);/其他排列方法:Cascade、TileHorizontal PHL = new Physical("COM4"); DLL = new DataLink(); /創(chuàng)建數(shù)據(jù)鏈路層對

28、象 DLL.setPHL(PHL); /連接物理層 sendForm.Enabled = false; /發(fā)送窗口禁止編輯 /創(chuàng)建并啟動監(jiān)視線程 Mon_Thread = new Thread(new ThreadStart(this.MonitorThread); Mon_Thread.Start(); private void disconnect_Click(object sender, EventArgs e) /關(guān)閉串行口 PHL.Close(); connect.Enabled = true; sendForm.Enabled = false; private void conne

29、ct_Click(object sender, EventArgs e) /打開串行口/ port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); PHL.Open(); sendForm.Enabled = true; connect.Enabled = false; disconnect.Enabled = true; private void Receive(byte buffer) /接收數(shù)據(jù)并顯示 /寫實(shí)際接收代碼 if (this.rcvForm.rtxBox.InvokeRequire

30、d) SetTextCallback d = new SetTextCallback(Receive); this.Invoke(d, new object buffer ); else string Msg = Encoding.Unicode.GetString(buffer, 0, buffer.Length); /編碼格式轉(zhuǎn)換 this.rcvForm.rtxBox.Text += Msg; /收到的信息顯示 public static void Send(string Msg) /發(fā)送子窗體高層向低層發(fā)送數(shù)據(jù)(使用<Ctrl>+<T>) byte buffer

31、 = Encoding.Unicode.GetBytes(Msg); /發(fā)送前進(jìn)行編碼格式轉(zhuǎn)換 DLL.Send(buffer);/ PHL.Send(buf); /數(shù)據(jù)送物理層SAP下行隊(duì)列,發(fā)送數(shù)據(jù)(物理層實(shí)驗(yàn)用) /監(jiān)視線程函數(shù),運(yùn)行協(xié)議處理方法,接收傳輸給當(dāng)前應(yīng)用的數(shù)據(jù)。 private void MonitorThread() byte Msg; while (true) DLL.Run(); /運(yùn)行數(shù)據(jù)鏈路層協(xié)議處理方法 if (Msg = DLL.Receive() != null) /數(shù)據(jù)鏈路層有向高層遞交的數(shù) /是,從數(shù)據(jù)鏈路層接收數(shù)據(jù)(數(shù)據(jù)存儲在Msg中) Receive(

32、Msg); /送接收處理(本例為數(shù)據(jù)直接顯示在子窗體中) private void arrToolStripMenuItem_Click(object sender, EventArgs e) /排列子窗體 this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical); /還有其他排列方法:Cascade、TileHorizontal private void exitToolStripMenuItem_Click(object sender, EventArgs e) Close(); private void MainForm_FormClosed(object sender, FormClosedEventArgs e) if (Mon_Thread != null) Mon_Thread.Abort(); 七、分析與思考1. 數(shù)據(jù)鏈

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論