什么是数据包?
您在互联网上做的一切都涉及到数据包。例如,您接收的每个网页都以一系列数据包的形式传入,您发送的每封电子邮件都以一系列数据包的形式传出。以小型数据包传输数据的网络称为数据包交换网络。
在互联网上,网络以字节为单位将电子邮件分割为多个大小固定的部分。这些部分就是数据包。每个数据包都承载着引导它到达目的地的信息——发件人的IP地址、目标收件人的IP地址以及其他一些信息,以告诉网络此电子邮件分割成了多少个数据包和这些数据包的编号。数据包根据互联网所用的协议承载数据:传数控制协议/互联网协议(TCP/IP)。每个数据包都包含邮件正文的一部分。典型的数据包可能包含1,000或1,500字节。
然后每个数据包通过最佳可用路由发送到目的地——要么邮件的所有其他数据包都采用该路由,要么所有其他数据包都不采用。这使得网络的效率更高。首先,网络可以平衡每毫秒内各个设备间的负载。其次,如果传输邮件时网络中的一件设备出现故障,数据包也可以经路由绕过故障,确保整封邮件的传递成功。
根据网络类型的不同,数据包可能使用其他名字:
- 帧
- 块
- 单元
- 段
大部分数据包分为三个部分:
- 报头——报头包含对数据包所承载数据的说明。这些说明可包括:
- 数据包长度(一些网络使用固定长度的数据包,而一些则依赖报头来包含此信息)
- 同步(若干字节的数据,用于帮助数据包匹配网络)
- 数据包编号(表示这是数据包序列中的第几个)
- 协议(在传输多种类型信息的网络上,协议定义所要传输数据包的类型:电子邮件、网页或流视频等)
- 目标地址(数据包的目的地)
- 发出地址(数据包的来源)
- 负载——也称为数据包正文或数据。这是数据包向目的地发送的实际数据。如果数据包的长度固定,则负载可能以空白信息填补以达到正确的长度。
- 报尾——报尾有时也称为页脚,通常包含几个字节的数据,用于通知接收设备该处已是数据包的末尾。它还可能具有某种类型的错误检查功能,其中最常见的是循环冗余码校验(CRC)。CRC非常简洁。它在某些计算机网络中的工作方式是,先取出负载中所有的1并相加,然后将结果以十六进制的形式保存在报尾中。接收设备将负载中的1值相加,并与报尾中保存的值比较。如果两值相同,则证明数据包是完好的;如果两值不同,接收设备就会向发出设备发送请求,请其重新发送数据包。
让我们来看看电子邮件是怎样分割为若干数据包的。假设您向朋友发送一封电子邮件,大小约为3,500 字节(3.5KB)。用来发送邮件的网络使用固定长度为1,024字节(1KB)的数据包。每个数据包的报头长度为96字节,报尾为32字节,剩下的896字节分配给负载。要将3,500字节的邮件分割,您需要4个数据包(3,500除以896)。三个数据包包含896字节负载,第四个包含812字节。下面是其中一个数据包的内容:
|
每个数据包的报头都包含相应的协议、发出地址(您的计算机的IP地址)、目标地址(接收电子邮件的计算机的IP地址)和数据包编号(1、2、3或4,因为一共有4个数据包)。网络中的路由器将查看报头中的目标地址,并将其与查询表中的内容进行比较,以确定数据包的发送目的地。当数据包到达目的地后,您朋友的计算机将从每个数据包中剔除报头和报尾,并按照数据包的编号顺序重新组合电子邮件。