服务无限,企业乐无优

资深工程师咨询热线

400-8871-651
IT外包图片
新闻中心
技术文章
当前位置:首页 >> 新闻中心 >> 技术文章
数据包
www.it33.com 2017-09-21

解释

(Packet):在包交换网络里,单个消息被划分为多个数据块,这些数据块称为包,它包含发送者和接收者的地址信息。这些包然后沿着不同的路径在一个或多个网络中传输,并且在目的地重新组合。[1]

名词解释:OSI(Open System Interconnection,开放系统互联)模型是由国际标准化组织(ISO)定义的标准,它定义了一种分层体系结构,在其中的每一层定义了针对不同通信级别的协议。OSI模型有7层,17层分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。OSI模型在逻辑上可分为两个部分:低层的13层关注的是原始数据的传输;高层的47层关注的是网络下的应用程序。

概述

任意一台主机都能够发送具有任意源地址的数据包。当数据包进行长距离的传输时需要经过许多中继站。每个中继站就是一台主机或路由器,他们基于路由信息,将数据包向下一个中继站传递。在数据传输的路途上,如果路由器遇到大数据流量的情况下,它可能在没有任何提示的情况下丢掉一些数据包。较高层的协议(如TCP协议)用于处理这些问题,以便为应用程序提供一条可靠的链路。如果对于下一个中继站来说数据包太大,该数据包就会被分片。也就是说,打的数据包会被分成两个或多个小数据包,每个小数据包都有自己的IP头,但其净荷仅仅是大数据包净荷的一部分。每个小数据包可以经由不同的路径到达目的地。在传输的路途上,每个小数据包还可能会被继续分片。当这些小数据包到达目标机器时,他们会被重新拼装到一起。按照规则规定,在中间节点上,不允许对小数据包进行拼装组合。[2]

我们可以用一个形象一些的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包 “包”听起来非常抽象,那么是不是不可见的呢?通过一定技术手段,是可以感知到数据包的存在的。比如在Windows 2000 Server中,把鼠标移动到任务栏右下角的网卡图标上(网卡需要接好双绞线、连入网络),就可以看到“发送:××包,收到:××包”的提示。通过数据包捕获软件,也可以将数据包捕获并加以分析。 就是用数据包捕获软件Iris捕获到的数据包的界面图,在此,大家可以很清楚地看到捕获到的数据包MAC地址、IP地址、协议类型端口号等细节。通过分析这些数据,网管员就可以知道网络中到底有什么样的数据包在活动了。

数据包捕获软件

数据包捕获软件

实例

数据包的结构:数据包的结构非常复杂,不是三言两语能够说清的,在这里主要了解一下它的关键构成就可以了,这对于理解TCP/IP协议的通信原理是非常重要的。数据包主要由“目的IP地址”、“源IP地址”、“净载数据”等部分构成,包括包头和包体,包头是固定长度,包体的长度不定,各字段长度固定,双方的请求数据包和应答数据包的包头结构是一致的,不同的是包体的定义。 数据包的结构与我们平常写信非常类似,目的IP地址是说明这个数据包是要发给谁的,相当于收信人地址;源IP地址是说明这个数据包是发自哪里的,相当于发信人地址;而净载数据相当于信件的内容。 正是因为数据包具有这样的结构,安装了TCP/IP协议的计算机之间才能相互通信。我们在使用基于TCP/IP协议的网络时,网络中其实传递的就是数据包。理解数据包,对于网络管理的网络安全具有至关重要的意义。

运用

简单的说,你上网打开网页,这个简单的动作,就是你先发送数据包给网站,它接收到了之后,根据你发送的数据包IP地址,返回给你网页的数据包,也就是说,网页的浏览,实际上就是数据包的交换。

1数据链路层对数据帧的长度都有一个限制,也就是链路层所能承受的最大数据长度,这个值

称为最大传输单元,即MTU。以以太网为例,这个值通常是1500字节。

2、对于IP数据包来讲,也有一个长度,在IP包头中,以16位来描述IP包的长度。一个IP包,最长可能是65535字节。

3、结合以上两个概念,第一个重要的结论就出来了,如果IP包的大小,超过了MTU值,那么就需要

分片,也就是把一个IP包分为多个,这个概念非常容易理解,一个载重5T的卡车,要拉10T的货,它

当然就得分几次来拉了。

4. IP分片是很多资料常讲的内容,但是我倒是觉得分不分片其实不重要,重要的是另一个东西。一个数据包穿过一个大的网络,它其间会穿过多个网络,每个网络的MTU值是不同的。我们可以设想,如果接受/发送端都是以太网,它们的MTU都是1500,我们假设发送的时候,数据包会以1500来封装,然而,不幸的是,传输中有一段X.25网,它的MTU576,这会发生什么呢?我想,这个才是我们所关心的。

当然,结论是显而易见的,这个数据包会被再次分片,咱开始用火车拉,到了半路,不通火车,只通汽车,那一车货会被分为很多车……仅此而已,更重要的是,这种情况下,如果IP包被设置了“不允许分片标志”,那会发生些什么呢?对,数据包将被丢弃,然后收到一份ICMP不可达差错,告诉你,需要分片!这个网络中最小的MTU值,被称为路径MTU,我们应该有一种有效的手段,来发现这个值,最笨的方法或许是先用traceroute查看所有节点,然后一个个ping……

5、到了传输层,也会有一个最大值的限制,当然,对于只管发,其它都不管的UDP来说,不在我们讨论之列。这里说的是TCP协议。说到大小,或许会让人想到TCP著名的滑动窗口的窗口大小,它跟收发两端的缓存有关,这里讨论的是传输的最大数据包大小,所以,它也不在讨论之列。

TCP的选项字段中,有一个最大报文段长度(MSS),表示了TCP传往另一端的最大数据的长度,当一个连接建立时,连接的双方都要通告各自的MSS,也就是说,它是与TCPSYN标志在一起的。当然,对于传输来讲,总是希望MSS越大越好,超载这么严重,谁家不希望多拉点货……但是,MSS总是有个限制的,也就是它的值=MTU-IP头长度-TCP头长度,对于以太网来讲它通常是1500-20-20=1460,虽然总是希望它能很大(1460),但是大多数BSD实现,它都是512的倍数,如1024……

6、回到分片上来,例如,在Win2000下执行如下命令:

"ping 192.168.0.1 -l 1473

按刚才的说法,1473+20(ip)+8(icmp)=1501,刚好大于1500,它会被分片,但是,我们关心的是:

这个数据包会被怎么样分法?

可以猜想,第一个包是

以太头+IP+ICMP+1472的数据;

那第二个分片包呢?

它可以是:

以太头+IP+ICMP+1个字节的数据

或者是:

以太头+IP+1个字节的数据"(引号内的内容可否在这里不详细阐述,对于1473的数据如何被分为14721不是很清楚2010.01.15 1350)也就是省去ICMP头的封装,当然,IP头是不可以省的,否则怎么传输了……

事实上,TCP/IP协议采用的是后一种封装方式,这样,一次可以节约8个字节的空间。IP包头中,用了三个标志来描述一个分片包:

1、分片标志:如果一个包被分片了,分片标志这个字段被置于1,最后一个分片除外;——这样,对于接收端来讲,可以根据这个标志位做为重组的重要依据之一;

2、分片偏移标志:光有一个标志位说明“自己是不是分片包”是不够的,偏移标志位说明了自己这个分片位于原始数据报的什么位置。很明显,这两个标志一结合,就很容易重组分片包了。

3、不允许分片标志:如果数据包强行设置了这个标志,那么在应该分片的时候,…… err