实现数据传输,就要把数据打成数据包,不断地按要求组装和拆分数据包,就像邮政网络对信件重新装包和拆包一样。
从数据发送和接收者的角度看,数据是由一系列的ASCII码、汉字编码或二进制编码组成的,称之为应用层。从无线或有线电路通信的角度看,被传输的是能够表达0和1代码的电路信号,称之为物理层。在物理层和应用层之间,或从应用层到物理电信号传输之间,需要对数据包进行多次封装与拆分,如图5-3所示。
图5-3表示先把要传输的数据打成若干个UDP 包(包括包的头部和数据体),然后,把UDP包再(拆分)打成IP包(头部和数据体)。然后,链路层和物理层再转换为物理电路能够发送和接收的信号包(报文)进行发送和接收。物理层和链路层的传输是硬件工程师的工作。互联层以上层的传输是软件工程师的工作。
图5-3 数据的分层封装
无论是哪种数据包,一个数据包至少要定义原始数据的发包者地址,称为源地址,收包者的地址,称为目标地址或目的地地址,以及所传输的数据。也就是说,必须给被传输的数据添加上包的头部,头部说明数据从哪里来,到哪里去,数据的长度等信息。表5-3所示是IPv4的IP(Internet Protocol)包的头部结构。
表5-3 IP包头部定义
IP包头部的字段含义如下所述。
(1)IHL(Internet Header Length——头部长度):IHL说明头部字长的个数。
(2)DSCP(Differentiated Service code Point):该字段定义服务类型(Type of Service),例如,用于指示像语音这样的实时数据流。
(3)ECN(Explicit Congestion Notification——显式拥塞通告):允许在不丢弃包的同时通知对方发生了网络拥塞。(www.xing528.com)
(4)总长度(Total Length):用16位数定义整个包的大小(字节),包括头部和数据部。最小长度是20个字节(20个字节头部,0个数据字节),最大是65 535个字节。
(5)标识号(Identification):用来标识原始IP数据帧(datagram)的唯一性。例如,可以用来追溯原始信息,避免传输过程中的信息被篡改。
(6)标志(Flags):3位的字段,用来控制和标识分片(fragment),它们是:
位0:保留,必须为0。
位1:禁止分片(DF,Don't Fragment)。
位2:更多分片(MF,More Fragments)。
(7)源IP地址:一个地址由4个字节共32位构成,此字段的值是将每个字节转为二进制并拼在一起所得到的32位值。例如,10.9.8.7的二进制码是00001010000010010000100000000111。
(8)目的地址:与源地址格式相同,指出报文的接收端。
如果一个数据包太大,就必须考虑如何把一个大数据包拆成多个标准的(或大小一样的)数据包,分别传输。当收包者收到所有的数据包时,能够把这些数据包再组合起来。
可以分开定义包的数据体与头部。数据的格式在IP包头部的“协议”字段中被指明——数据包以传输层协议的形式表达。即IP包头部说明的传输数据所使用的传输协议。而传输协议中说明数据和数据的传输方式。例如,IPv4可以有0~255种传输协议。
注意:最初的互联网被或称为IPv4,因为目的地址和源地址都是4个字节,即32位二进制编码。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。