网络通信中的数据包(帧)

合集下载

java处理数据帧方法

java处理数据帧方法

java处理数据帧方法全文共四篇示例,供读者参考第一篇示例:随着物联网技术的迅速发展,数据的传输和处理变得愈发重要。

在这数据帧的处理尤为关键。

数据帧是一种在数据通信中用来传送数据的数据包格式。

在Java编程语言中,我们可以通过一些方法来处理数据帧,确保数据的准确传输和处理。

我们需要了解数据帧的结构。

在通信中,数据帧通常包括了起始帧、数据帧、校验帧和结束帧等部分。

起始帧和结束帧用来标识数据的开始和结束,数据帧用来传输实际的数据信息,而校验帧用来检验数据帧是否传输正确。

在Java中处理数据帧的方法主要有以下几种:1. 字节数组转换:将要传输的数据转换为字节数组,这样可以方便在不同平台之间传输数据。

在Java中,可以使用InputStream和OutputStream来进行字节数组与数据帧的转换。

2. 数据校验:在传输数据时,为了确保数据的完整性和准确性,通常会在数据帧中加入校验位。

在Java中,我们可以使用一些校验算法如CRC校验或校验和来检查数据是否正确。

3. 数据封装:在数据传输过程中,为了处理数据的传输和接收,我们通常会对数据进行封装。

在Java中,我们可以使用ByteBuffer来封装数据帧,方便处理数据的传输。

4. 数据解析:在接收数据帧时,我们需要对接收到的数据进行解析,提取出有效数据并进行处理。

在Java中,我们可以通过解析字节数组来获得数据帧中的有效信息。

5. 数据发送和接收:在Java程序中,我们可以使用Socket来发送和接收数据帧。

通过建立Socket连接,可以实现数据的传输和接收。

处理数据帧在Java编程中是一项重要的技能。

通过掌握数据帧的结构和处理方法,我们可以确保数据的传输和处理的可靠性和准确性。

希望本文对大家有所帮助。

第二篇示例:数据帧是数据在计算机网络中传输的基本单位,它包含了数据和控制信息,可以帮助计算机识别出数据的边界和格式。

在Java中,处理数据帧是重要的任务之一,它涉及到数据的解析、拆包、组包等操作。

os i两层和三层的pdu 封装关系

os i两层和三层的pdu 封装关系

在计算机网络中,OSI模型和TCP/IP模型是两种常见的网络协议模型。

其中,OSI模型将通信协议的通信过程分为七个层次,而TCP/IP模型将其分为四个层次。

其中,PDU(Protocol Data Unit)是数据在不同层次间传输的基本单位,而封装则是指数据从应用层到物理层的传输过程。

让我们简要探讨OSI模型和TCP/IP模型的不同。

OSI模型由国际标准化组织(ISO)制定,包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

而TCP/IP模型则包括网络接口层(或网络接入层)、网际层、运输层和应用层。

在这两种模型中,PDU在每个层次上都有不同的称呼,比如在OSI模型中,PDU在数据链路层上称为帧,在网络层上称为数据包,在传输层上称为段,在TCP/IP模型中,PDU在网络接口层上称为帧,在网际层上称为数据包,在运输层上称为段。

OSI模型和TCP/IP模型在层次划分上存在一定差异。

接下来,让我们深入探讨两层和三层的PDU封装关系。

在OSI模型中,两层的PDU封装关系是指数据链路层和网络层之间的关系,而三层的PDU封装关系是指网络层和传输层之间的关系。

在两层的PDU封装关系中,数据链路层的PDU(帧)包含了网络层的PDU(数据包)以及必要的控制信息,从而实现了数据的传输和链路控制。

而在三层的PDU封装关系中,网络层的PDU(数据包)包含了传输层的PDU (段)以及必要的控制信息,实现了数据的传输和路由选择。

在实际网络通信中,PDU的封装和解封装过程涉及到了各个层次的协议和数据处理,其中不同层次的协议需要相互配合,实现数据的正确传输和交换。

在传输数据时,应用层的数据会通过TCP或UDP协议传递到传输层,然后再通过IP协议传递到网络层,最终通过数据链路层传递到物理层。

在接收端,数据则是按照相反的过程进行解封装和传递。

这些封装和解封装的过程,需要各个层次的协议相互配合,以达到数据传输的目的。

无论是OSI模型还是TCP/IP模型,PDU的封装关系都是网络通信中的重要概念。

网络通信协议分析课程设计源代码和实验报告+帧封装、IP数据包解析和发送TCP数据包

网络通信协议分析课程设计源代码和实验报告+帧封装、IP数据包解析和发送TCP数据包

网络协议分析课程设计之协议编程实验一帧封装实验目的:•编写程序,根据给出的原始数据,组装一个IEEE 802.3格式的帧(题目)默认的输入文件为二进制原始数据(文件名分别为input1和input2))。

•要求程序为命令行程序。

比如,可执行文件名为framer.exe,则命令行形式如下:framer inputfile outputfile,其中,inputfile为原始数据文件,outputfile为输出结果。

•输出:对应input1和input2得结果分别为output1和output2。

试验要求:•编写程序,根据给出的原始数据,组装一个IEEE 802.3格式的帧(题目)默认的输入文件为二进制原始数据(文件名分别为input1和input2))。

•要求程序为命令行程序。

比如,可执行文件名为framer.exe,则命令行形式如下:framer inputfile outputfile,其中,inputfile为原始数据文件,outputfile为输出结果。

输出:对应input1和input2得结果分别为output1和output2验设计相关知识:帧:来源于串行线路上的通信。

其中,发送者在发送数据的前后各添加特殊的字符,使它们成为一个帧。

Ethernet从某种程度上可以被看作是机器之间的数据链路层连接。

按802.3标准的帧结构如下表所示(802.3标准的Ethernet帧结构由7部分组成)802.3标准的帧结构其中,帧数据字段的最小长度为46B 。

如果帧的LLC 数据少于46B ,则应将数据字段填充至46B 。

填充字符是任意的,不计入长度字段值中。

在校验字段中,使用的是CRC 校验。

校验的范围包括目的地址字段、源地址字段、长度字段、LLC 数据字段。

循环冗余编码(CRC)是一种重要的线性分组码、编码和解码方法,具有简单、检错和纠错能力强等特点,在通信领域广泛地用于实现差错控制。

CRC 校验码的检错能力很强,不仅能检查出离散错误,还能检查出突发错误。

数据链路层的工作原理

数据链路层的工作原理

数据链路层的工作原理数据链路层是OSI模型中的第二层,它负责将网络层提供的数据包转换为物理层可以传输的比特流,并在传输过程中进行差错检测和纠正。

数据链路层的工作原理主要包括帧封装、差错检测和流量控制等方面。

1. 帧封装数据链路层将网络层提供的数据包封装成帧,以便在物理层进行传输。

帧的结构通常包括帧头、数据和帧尾三部分。

帧头包含了源地址和目的地址等信息,用于标识帧的发送者和接收者。

数据部分包含了网络层提供的数据包,长度不固定。

帧尾包含了差错检测码,用于检测帧在传输过程中是否发生了错误。

2. 差错检测数据链路层在传输过程中需要进行差错检测,以保证数据的可靠传输。

常用的差错检测方法包括循环冗余校验(CRC)和纵向冗余校验(VRC)等。

CRC是一种基于多项式的差错检测方法,它通过对数据进行除法运算来生成校验码。

VRC是一种简单的差错检测方法,它通过对每个字节进行奇偶校验来检测错误。

3. 流量控制数据链路层还需要进行流量控制,以避免发送方发送过多的数据导致接收方无法处理。

常用的流量控制方法包括停止-等待协议和滑动窗口协议等。

停止-等待协议是一种简单的流量控制方法,它要求发送方在发送完一个数据包后等待接收方的确认信号,才能发送下一个数据包。

滑动窗口协议是一种更为高效的流量控制方法,它允许发送方连续发送多个数据包,而不需要等待接收方的确认信号。

总之,数据链路层是网络通信中非常重要的一层,它负责将网络层提供的数据包转换为物理层可以传输的比特流,并在传输过程中进行差错检测和流量控制等操作,保证数据的可靠传输。

网络通信的数据包(帧)的结构及原理

网络通信的数据包(帧)的结构及原理

网络通信的数据包(帧)的结构及原理
在网络通信中,”包”(Packet)和”帧”(Frame)的概念相同,均指通信中的一个数据块.对于具体某种通信网络,一般使用术语”帧”.一种网络的帧格式可能与另一种网络不同,通常使用术语”包”来指一般意义的帧.串行通信的数据格式有面向字符型的数据格式,如单同步、双同步、外同步;也有面向比特型的数据格式,这以帧为单位传输,每帧由六个部分组成,分别是标志区、地址区、控制区、信息区、帧校验区和标志区.
 串行通信协议属于ISO国际参考标准的第三层,数据链路层.数据链路层必须使用物理层提供给它的服务.物理层所做的工作是接收个一个原始的比特流,并准备把它交给目的地.不能保证这个比特流无差错.所接收的比特的数量也许少于,也许等于或多于所传递的比特的数量,它们具有不同的值.一直要上到数据链路层才能进行检测,如果需要的话,纠正错误.对于数据层,通常的方法是把比特流分成离散的帧,并对每一帧计算出校验和…….当一帧到达目的地后重新计算校验和时,如果新算出的校验和不同于帧中所包括的值,数据链路层就知道出现差错了,从而会采取措施处理差错(即,丢弃坏帧,并发回一个差错报告).
 数据链路层的任务是在两个相邻接点间的线路上无差错地传送以帧为单位的数据.每一帧包括数据和必要的控制信息.人们发现,对于经常产生误码的实际链路,只要加上合适的控制规程,就可以使通信变为比较可靠的.如IBM公司推出了着名的体系结构SNA,在SNA的数据链路规程采用了面向比特的规程SDLC,后来ISO把它修改后称为HDLC,译为高级数据链路控制.在INTERNET 中,用户与ISP(INTERNET服务提供者)之间的链路上使用得最多的协议就是SLIP和PPP.。

交换机数据帧的过滤原理

交换机数据帧的过滤原理

交换机数据帧的过滤原理1.引言1.1 概述概述部分旨在介绍交换机数据帧的过滤原理这一主题的背景和重要性。

通过本节,读者将对文章的内容有一个整体了解,并明确本文的目标和意义。

交换机作为计算机网络中重要的网络设备,用于实现局域网内计算机之间的通信。

在数据通信过程中,交换机起着至关重要的作用。

它能够根据数据帧中的目的地址进行过滤和转发,从而实现网络数据的高效传输。

而交换机数据帧的过滤原理则是达到这一目标的关键技术之一。

数据帧是组成网络数据的基本单位,它包括了源地址、目的地址、数据部分以及一些控制信息。

在进行数据通信时,交换机会根据数据帧中的目的地址来决定如何处理这个数据帧。

通过对目的地址的过滤,交换机可以将数据帧转发到正确的目的地,避免了网络中的广播和冗余传输,提高了网络传输的性能和效率。

交换机数据帧的过滤原理是基于交换机的转发表。

转发表中存储着目的地址和对应的经过验证的端口信息,交换机根据表中的信息来判断数据帧应该被转发到哪个端口。

当交换机接收到一个数据帧时,它首先会检查数据帧中的目的地址。

如果目的地址在转发表中有对应的端口信息,那么交换机将通过相应端口转发该数据帧;如果目的地址不在转发表中,交换机则会将该数据帧转发到所有其他端口。

通过这种方式,交换机可以实现对数据帧的过滤和选择性转发,减少了网络中不必要的数据传输,提高了网络的带宽利用率。

了解交换机数据帧的过滤原理对于理解网络通信的基本原理和网络设备的工作机制具有重要意义。

它可以帮助我们更好地设计和管理计算机网络,提高网络的可靠性和性能。

在本文接下来的部分,我们将深入探讨数据帧的基本概念和交换机数据帧的过滤原理,以期全面了解交换机的工作原理和网络数据的传输过程。

1.2 文章结构文章结构部分的内容可以包括以下信息:文章结构部分主要介绍了本文的整体结构和各个章节内容的概要。

首先,文章会给出本文的概述,简要介绍交换机数据帧的过滤原理的重要性和应用背景。

通过引起读者的兴趣,提出本文的研究目的。

有关分组、帧、报文、比特流的问题

有关分组、帧、报文、比特流的问题

传输层——数据段(Segment)或报文网络层——分组(数据包(Packet))数据链路层——数据帧(Frame)物理层——比特(Bit)在会话层及以上的高层次中,数据传送的单位不再另外命名,统称为报文。

packet也可译作分组或.数据包(是翻译造成的,其实是同一个词packet)知识背景:首先要了解TCP/IP参考模型与OSI参考模型一、OSI模型与TCP/IP模型的比较TCP/IP模型实际上是OSI模型的一个浓缩版本,它只有四个层次:1.应用层2.运输层3.网际层4.网络接口层与OSI功能相比:应用层对应着OSI的应用层表示层会话层运输层对应着OSI的传输层网际层对应着OSI的网络层网络接口层对应着OSI的数据链路层和物理层二、TCP/IP每层所对应的协议,OSI七层模型所对应的协议TCP/IP:数据链路层:ARP,RARP网络层:IP,ICMP,IGMP传输层:TCP ,UDP,UGP应用层:Telnet,FTP,SMTP,SNMP.OSI:物理层:EIA/TIA-232, EIA/TIA-499, V.35, V.24, RJ45, Ethernet, 802.3, 802.5, FDDI, NRZI, NRZ, B8ZS数据链路层:Frame Relay, HDLC, PPP, IEEE 802.3/802.2, FDDI, ATM, IEEE 802.5/802.2网络层:IP,IPX,AppleTalk DDP传输层:TCP,UDP,SPX会话层:RPC,SQL,NFS,NetBIOS,names,AppleTalk,ASP,DECnet,SCP表示层:TIFF,GIF,JPEG,PICT,ASCII,EBCDIC,encryption,MPEG,MIDI,HTML应用层:FTP,WWW,Telnet,NFS,SMTP,Gateway,SNMP三、OSI的七层结构第一层物理层的任务就是为它的上一层提供一个物理连接,以及它们的机械、电气、功能和过程特性。

网络通信中的数据包(帧)

网络通信中的数据包(帧)

网络通信中的数据包(帧)帧(Frame ),数据链路层的协议数据单元(protocol data unit )。

网络设备将“位”组成一个个的字节,然后这些字节“封装”成帧,在网络上传输。

数据链路层的主要职责是控制相邻系统之间的物理链路,它在传送“比特” 信息的基础上,在相邻节点间保证可靠的数据通信。

为了保证数据的可靠传输,把用户数据封装成帧。

在网络中,计算机通信传输的是由“ 0”和“ 1”构成的二进制数据,二进制数据组成“帧”(Frame),帧是网络传输的最小单位。

实际传输中,在铜缆(指双绞线等铜质电缆)网线中传递的是脉冲电流;在光纤网络和无线网络中传递的是光和电磁波(当然光也是一种电磁波)。

针对高速脉冲电流而言,我们人为地用低电平的脉冲代表“ 0”、用高电平的脉冲代表“ 1”。

这些虚拟的“ 0”或“ 1” 就是“位”(Bit)。

在计算机网络中一般8个位组成了一个“字节” (Byte)。

学过计算机的人都知道字节(Byte)是计算机的数据储存单位。

网络技术的初学者大都会把“ Bit”(位)与“ Byte”(字节)相混淆,谈到100Mbps以太网,就会以为它是每秒钟能传100MB 数据的网络,实际上只是25MB (理论值)。

如果把脉冲电流看成是轨道,那么帧就是运行在轨道上的火车。

火车有机车和尾车,帧也有一个起点,我们称之为“帧头”,而且帧也有一个终点,我们称之为“帧尾” 。

帧头和帧尾之间的部分是这个帧负载的数据(相当于火车车头和车尾之间的车厢)。

为什么要把数据“封装”成帧呢?因为用户数据一般都比较大,有的可以达到MB 字节,一下子发送出去十分困难,于是就需要把数据分成许多小份,再按照一定的次序发送出去。

帧是当计算机发送数据时产生的,确切地说,是由计算机中安装的网卡产生的。

帧只对于能够识别它的设备才有意义。

对于集线器来说,帧是没有意义的,因为它是物理层设备,只认识脉冲电流。

有许多人对帧不理解,所以不能很好地理解交换机与集线器的区别。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

网络通信中的数据包(帧)
帧(Frame),数据链路层的协议数据单元(protocol data unit)。

网络设备将“位”组成一个个的字节,然后这些字节“封装”成帧,在网络上传输。

数据链路层的主要职责是控制相邻系统之间的物理链路,它在传送“比特”信息的基础上,在相邻节点间保证可靠的数据通信。

为了保证数据的可靠传输,把用户数据封装成帧。

在网络中,计算机通信传输的是由“0”和“1”构成的二进制数据,二进制数据组成“帧”(Frame),帧是网络传输的最小单位。

实际传输中,在铜缆(指双绞线等铜质电缆)网线中传递的是脉冲电流;在光纤网络和无线网络中传递的是光和电磁波(当然光也是一种电磁波)。

针对高速脉冲电流而言,我们人为地用低电平的脉冲代表“0”、用高电平的脉冲代表“1”。

这些虚拟的“0”或“1”就是“位”(Bit)。

在计算机网络中一般8个位组成了一个“字节”(Byte)。

学过计算机的人都知道字节(Byte)是计算机的数据储存单位。

网络技术的初学者大都会把“Bit”(位)与“Byte”(字节)相混淆,谈到100Mbps以太网,就会以为它是每秒钟能传100MB数据的网络,实际上只是25MB(理论值)。

如果把脉冲电流看成是轨道,那么帧就是运行在轨道上的火车。

火车有机车和尾车,帧也有一个起点,我们称之为“帧头”,而且帧也有一个终点,我们称之为“帧尾”。

帧头和帧尾之间的部分是这个帧负载的数据(相当于火车车头和车尾之间的车厢)。

为什么要把数据“封装”成帧呢?因为用户数据一般都比较大,有的可以达到MB字节,一下子发送出去十分困难,于是就需要把数据分成许多小份,再按照一定的次序发送出去。

帧是当计算机发送数据时产生的,确切地说,是由计算机中安装的网卡产生的。

帧只对于能够识别它的设备才有意义。

对于集线器来说,帧是没有意义的,因为它是物理层设备,只认识脉冲电流。

有许多人对帧不理解,所以不能很好地理解交换机与集线器的区别。

以太网的帧值总是在一定范围内浮动,最大的帧值是1518字节,最小的帧值是64字节。

在实际应用中,帧的大小是由设备的MTU(最大传输单位)即设备每次能够传输的最大字节数自动来确定的。

---------------------------------------------------------------------
在网络通信中,“包”(Packet)和“帧”(Frame)的概念相同,均指通信中的一个数据块。

对于具体某种通信网络,一般使用术语“帧”。

一种网络的帧格式可能与另一种网络不同,通常使用术语“包”来指一般意义的帧。

串行通信的数据格式有面向字符型的数据格式,如单同步、双同步、外同步;也有面向比特型的数据格式,这以帧为单位传输,每帧由六个部分组成,分别是标志区、地址区、控制区、信息区、帧校验区和标志区。

串行通信协议属于ISO国际参考标准的第三层,数据链路层。

数据链路层必须使用物理层提供给它的服务。

物理层所做的工作是接收个一个原始的比特流,并准备把它交给目的地。

不能保证这个比特流无差错。

所接收的比特的数量也许少于,也许等于或多于所传递的比特的数量,它们具有不同的值。

一直要上到数据链路层才能进行检测,如果需要的话,纠正错误。

对于数据层,通常的方法是把比特流分成离散的帧,并对每一帧计算出校验和……。

当一帧到达目的地后重新计算校验和时,如果新算出的校验和不同于帧中所包括的值,数据链路层就知道出现差错了,从而会采取措施处理差错(即,丢弃坏帧,并发回一个差错报告)。

数据链路层的任务是在两个相邻接点间的线路上无差错地传送以帧为单位的数据。

每一帧包括数据和必要的控制信息。

人们发现,对于经常产生误码的实际链路,只要加上合适的控制规程,就可以使通信变为比较可靠的。

如IBM公司推出了著名的体系结构SNA,在SNA的数据链路规程采用了面向比特的规程SDLC,后来ISO把它修改后称为HDLC,译为高级数据链路控制。

在INTERNET中,用户与ISP(INTERNET服务提供者)之间的链路上使用得最多的协议就是SLIP和PPP。

下面就简单介绍HDLC帧结构以及PPP帧结构:
1.HDLC的帧结构:
从网络层交下来的分组,变成为数据链路层的数据。

这就是图1中的信息字段。

信息字段的长度没有具体规定。

数据链路层在信息字段的头尾各加上24bit的控制信息,这样就构成了一个完整的帧。

HDLC规定了一个帧的开头(即首部中的第一个字节)和结尾(即尾部中的最后一个字节)各放入一个特殊的标记,作为一个帧的边界。

这个标记就叫做标志字段F。

标志字段F为6个连续1加上两边各一个0共8位。

地址字段A也是8个比特,它一般被写入次站的地址。

帧校验序列FSC字共占16位,采用CRC-CCITT生成多项式。

控制字段功8位,是最复杂的字段,HDLC的许多重要功能都要靠控制字段来实现。

根据其前面两个比特的取值,可将HDLC的许多帧划分为三大类,即信息帧、监督帧和无编号帧。

图1
2.点对点协议PPP的帧结构:PPP帧格式和HDLC的相似,PPP帧的前3个字段和最后两个字段和HDLC的格式是一样的。

PPP不是面向比特的,因而所有的PPP帧的长度都是整数个字节。

与HDLC不同的是多了一个2个字节的协议字段。

当协议字段为0X0021时,信息字段就是IIP数据报。

若为0XC021,则信息字段是链路控制数据,而0X8021表示这是网络控制数据。

其结构视图如图2所示。

图2
3.例子:异步通信的数据格式
异步通信的数据格式如图3所示:
图3
可以看出,按标准的饿异步通信数据格式,1个字符在传输事,除了传输实际编码信息外,还要传输几个外加数位。

具体说,在一个字符开始传输前,输出线必须在逻辑上处于“1”状态,这称为标识态。

传输一开始,输出线由标识态变为“0”状态,从而作为起始位。

起始位后面为5~8个信息位,信息位有低往高排列,即第一位为字符的最低位,在同意个传输系统中,信息位的数目是固定的。

信息位后面为校验位,校验位可以按奇校验设置,也可以按偶校验设置,也可以不设置。

最后的位数为“1”,它作为停止位,停止位可为1位、1.5位或者2位。

如果传输1个字符以后,立即传输下一个字符,那么,后一个字符的起始位变紧挨着前一个字符的停止位了,否则,输出线又会进入标识态。

看了以上这么多,也许你还是不明白,其实,二进制并不是网管员要打交道的东西,而帧才是网管员真正要注意的东西,所以在Windows 2000的“网络监视器”中,“帧”才是被监视的对象。

但我们究竟怎样监视帧呢?
附1
数据链路层
数据链路层(Data Link Layer)是OSI参考模型第二层,位于物理层与网络层之间。

一般而言,它还可以细分成介质访问控制(Media Access Control,MAC)子层和逻辑链路控制(Logical Link Control,LLC)子层。

数据链路层主要功能:
1、在两个网络实体之间提供数据链路连接的建立、维持和释放管理。

构成数据链路数据单元(frame:数据帧或讯框),并对帧定界、同步、收发顺序的控制。

传输过程中的流量控制(Flow Control),差错检测(Error Detection)和差错控制(Error control)等方面。

只提供导线的一端到另一端的数据传输。

2、数据链路层会在frame 尾端置放检查码(parity,sum,CRC)以检查实质内容,将物理层提供的可能出错的物理连接改造成逻辑上无差错的数据链路,并对物理层的原始数据进行数据封装。

3、数据链路层中的数据封装是指:封装的数据信息中,包含了地址段和数据段等。

地址段含有点对点发送节点和接收节点的地址(如MAC),控制段用来表示数格连接帧的类型,数据段包含实际要传输的数据。

常见数据链路层的设备:
1、交换机是本层设备。

而集线器是物理层设备,不是数据链路层设备。

2、桥接器
附2:
位bit(比特):存放一位二进制数,即0或1,最小的存储单位。

字节byte:8个二进制位为一个字节(B)
1B=8bit
1KB=1024B
1MB=1024KB ……
1TB=1024GB。

相关文档
最新文档