天天看点

【计算机网络】详解网络层(一):数据包封装和报文格式

一、前言

网络层是网络体系结构中非常重要的一层,在技术上又是非常复杂的一层。网络层是从功能上定义的一个逻辑层次,与物理层和数据链路层有具体的设备支持一样,网络层也有具体的设备来完成其相关任务,最典型的就是我们常用的路由器(Router)。路由器就相当于连接不同城市公路的中转车站,起数据中转作用。

网络层介于传输层和数据链路层之间,其主要作用是实现两个网络系统之间的数据透明传送,具体包括路由选择,拥塞控制和网际互连等。网络层是网络与网络之间通信的最底层,在数据从数据链路层向传输层进行数据传输的通信中,起到构建一个中间通信子网的作用。不同网络有这不同的网络层协议和地址规范,如果一个网络中的用户不能识别其他网络的通信协议和地址规范,那么这两个网络之间就不能进行数据通信,就好比不同国家有着不同的交通法规,属于不同的交警系统管理,不允许他国车辆随便出入一样。不同网络也有不同的设计规范,属于不同的组织来管理,必须通过授权,并由专门的协议来负责网络间的通信。如果只是同一局域网内的各个计算机之间的通信,单靠物理层和数据链路层就可以建立通信链路完成用户间的数据通信,但要扩大应用范围,连接不同的局域子网,就需要借助网络层处理各个网络子网的协议,从而进行计算机的网络互连,所以网络层在TCP/IP协议体系中叫网际互连层。

【计算机网络】详解网络层(一):数据包封装和报文格式

通常一个计算机网络就是一个管理边界,一般是属于一个特定的公司,有一个特定的管理者负责,所以在进行计算机网络互连时,要同时考虑两方面的问题:一是授权用户可以在不同网络间互访,共享双方的资源;另一方面又要保持各计算机网络管理原来的独立性。从前面介绍的数据链路层,我们知道不同用户之间进行通信,首先得知道彼此的地址,局域网内部的用户访问(物理层和数据链路层就可以构建一个局域网)是通过MAC地址进行,但不同网络之间进行访问不同通过属于数据链路层地址的MAC地址来进行寻址,这需要网络层对应的一个网络地址来进行访问,每个网络都通过其网络地址,即NSAP(网络服务访问点)来标识,网络中的每个节点都有一个NSAP。这个NSAP就是由对应网络所运行的网络层通信协议来定义的,在目前最常见的TCP/IP协议网络中,这个协议就是IP协议,对应的NSAP就是IP地址。

在物理层传输的是一个个比特位(bit),在数据链路层中传输的是一个个以许多字节为单位的帧(Frame),在每个帧的帧头都有源节点的MAC地址和目的节点的MAC地址,局域网内部的寻址就是通过MAC地址进行的,而在网络层中传输的是数据包(Packet,也叫分组),一个数据包是一个数据帧经过网络层协议重封装后得到的,每个数据包的包头(IP头)都有源节点和目的节点的IP地址,网路间的寻址就是通过IP地址进行的。这样我们知道网络通信只有两种情况:如果通信双方在同一个局域网内,可直接通过数据链路层进行相互通信,但因为主机其实也有网络层的路由功能,所以两台主机间进行网络通信时通常也是通过三层来进行的(IP协议则是IP地址寻址);如果通信双方在不同网络内,毫无疑问必须通过三层进行。事实上,网络层的IP包到达链路层后还要重封装成帧,因为不同网络中的统一标识就是三层地址(网络地址),局域网内链路层的则是MAC地址。所以不同层传输的数据包格式不一样,因为每层的标识不一样。网络层的IP包封装成帧后,其中封装的源和目的网络地址作为帧的数据部分,不会改变,这在前面的数据链路层中有介绍。

二、网络层的作用

在网络体系中,每一层都是服务于对应的上下层的,网络层也是,服务于上层的传输层和下层的数据链路层。其主要作用表现在一下几个方面:

1、屏蔽网络差异,提供透明传输

不同网络有不同的规范要求,网络层就是为了解决这种不同差异,寻找一个不同网络间都能共同遵守的网络通信规范,以便不同网络间能相互识别,并接受对方的网络请求,说白了,就是一个中转站的作用,两个毫无交集的网络通过这个中转站来建立交集。这样传输层就可以在不同网络间进行透明数据传输。网络层向传输层提供的服务有两类:面向连接的网络服务和无连接的网络服务。

  1. 虚电路是网络层向传输层提供的一种面向连接的服务,是可以使所有数据包按顺序到达目的节点的可靠数据传送方式。在该种方式下,进行数据交换的两个结点之间存在一条专为它们服务的虚电路(逻辑线路),无须附加网络地址;
  2. 数据报服务是网络层提供的一种无连接的网络服务,只能提供不可靠的数据传送方式,源节点(如源路由器)发送的每个数据包都要附加网络地址、包序号等信息,目的节点收到的数据包也不一定按序到达,还可能存在数据包丢失的情况。IP协议是一种无连接的网络层协议,提供无连接的网络层服务。

2、为网络间通信提供路由选择 路由选择也叫路由选择,是根据一定的原则和路由选择算法在多个结点的通信子网中选择一条到达目的节点的最佳路径的过程。确定路由选择的策略成为路由算法。在无连接的数据包服务中,网络节点要为每个数据包做出路由选择,即选择到达目的节点的最佳路线,而在面向连接的虚电路服务中,存在一条专们的逻辑线路,在建立连接时就已经确定了路有路径,无需额外选择。 3、数据包封装和解封转 这个类似的功能各个网络层都提供,因为在网络体系结构的不同层次中传输的数据单位并不一样,且发送方和接收方接受数据包的路径是相反的。在发送方,数据自上而下每经过一层都必须在数据头部添加对应层的协议头和(或)协议尾信息,到了接收方,数据自下而上每经过一层又都必须解除前面那层所封装的协议头和(或)协议尾信息。 在发送方,来自传输层的报文通常是已根据对应网络链路的MTU(最大传输单元)被分成多个数据段,然后在网络层中对这些数据段头部添加一些网络层协议控制信息就组成了数据包,这就是包的封装过程。数据包的头部包含源节点 和目标节点的网络层地址,在接收方,数据从底层到达网络层时,要去掉在数据链路层加上的数据链路层协议控制信息(帧头和帧尾),还原出原来的数据包格式,这就是包的解封转过程。 4、拥塞控制 拥塞控制是为了避免网络传输路径中数据的传输延迟或死锁。在前面数据链路层介绍了流量控制功能,那是针对数据链路中点对点传输速率的控制,这里的拥塞控制是针对在网络层传输路径中的端到端传输效率的控制。主要采用预约缓冲区、许可证和分组丢弃等方式。

三、网络层数据交换 数据到了网络层后,路由器便把这些数据包转发到位于另一个网络中的目的结点,那么其是如何进行数据交换的呢? 在计算机网络中,两个端点之间通常需要通过中间结点实现数据通信,这些中间结点并不关心数据内容,只提供一个交换设备,把数据从一个结点转发到另一个结点,直至达到目的端。 数据交换技术主要是指网络中间结点所提供的数据交换功能。 先介绍以前的两种数据交换技术:线路交换和报文交换 线路交换是在网络中利用可切换的物理通信线路直接连接通信双方所进行的一种数据交换方式。最常见的就是以前的电话交换系统,甲先转几下电话机(谍战电视剧里是这样子),实际上是打到了电话交换系统,然后说转局长办公室,这样电话员就把电话线插到局长办公室的线路上,这样就可以进行通信了,通话结束后,电话员就拔下这跟电话线。可以看出,线路交换最主要的特点就是在进行数据交换前需要在一对用户之间建立起一条专用的数据通路(如电话线),在整个数据传输过程中要经过线路建立(如电话员切换线路)、数据传输(如通话)与线路释放(如电话员拔下电线)这三个阶段。 该方式的优点是:通话实时性强,适用于交互式会话类通信,其缺点是:对突发性通信不适合(需要事先建立好物理连接),整个数据交换系统效率低,系统也不具有存储数据的功能,很难实现拥塞控制。 报文交换是指信息以报文(完整数据的一个信息段)为单元进行存储-转发的一种数据交换方式。所谓存储-转发是当报文到达路由器后先存储起来,等待路由器分配资源再进行数据分组的转发。 报文交换的原理是用户发送的数据不是直接发送给目的节点,而是先在中间结点进行缓存(这类中间结点通常是由具有存储能力的交换机、路由器承担),然后再由中间结点在线路空闲时把数据发送出去。 既然具有存储-转发功能,报文交换就无须同时占用整个物理线路,中间结点可以暂存报文,排队等候,当线路空闲时再转发给下一个结点,直至终点。

下面介绍目前最常用的分组交换方式。 在分组交换技术中有两大技术派系:一是采用路由技术(目前比较普遍采用的一种交换方式),在要转发的数据包头部加上源节点和目的节点的IP地址,然后通过路由技术一级级地把数据转发下去。这种分组方式就是前面说到的数据报分组交换方式。 另一种就是虚电路服务了,它不依靠路由技术,而是在进行数据分组转发前先在源节点和目的节点间的所有路由器间建立一条虚拟的通信通道,然后再把数据分组从这个虚拟通道中转发到目的节点。 分组交换是集报文交换和线路交换两者优点而开发的一种数据交换方式,也采用报文交换的存储-转发机制,并规定了传输数据的单位长度。现在主要采用这种数据方式。 当报文过长时,会把报文分成几个组,在数据报服务方式中,会为每个分组添加报文号、分组号、目的地址、源地址和校验字段信息,然后将这些信息发送出去,由通信子网中的节点进行路由选择,当一个报文的所有分组到达了目的主机后,再将各个分组按序号编排起来。 采用虚电路这种服务方式的分组则无须添加源和目的地址信息,但仍需要添加报文号、分组号信息。在分组发送之前,已经搭建好了一条逻辑链路。

四、网络层协议及报文格式 在TCP/IP体系结构的网际互联层,最重要的协议就是IP协议簇。 目前的计算机网络,特别是TCP/IP网络,使用最多的是数据包分组交换方式,而IP协议是用于将多个分组交换网络连接起来的最典型通信协议。IP协议是一个无连接的服务,负责在源地址和目的地址之间传送数据包,然后为了使用不同网络对分组大小的要求,需要对上层传来的报文进行分割,最后调用本地网络协议将数据包传送给下一个网关或目的计算机。 1、IP协议基本功能 IP协议是一个无连接的服务,负责在源地址和目的地址之间传送数据报,其主要功能就是把数据报在互连的网络上传送,将数据报在一个个模块间通过路由处理网络地址传送到目的地址。具体来说具备以下几方面的功能:

  1. 寻址,在不同网络中必须通过三层地址进行寻址。常用的IP网络中运行的三层协议就是IP协议,对应的三层地址就是IP地址。
  2. 数据报的封装,从传输层过来的数据段需要经过IP协议的重封装,而从数据链路层过来的数据帧就需要进行解封装。在IP网络中封装后形成的是IP数据报,IP封装的目的就是标识此IP数据报发送节点和接受节点的IP地址和控制信息。
  3. 分段与重组,不同网络上的链路可以传输的最大报文大小是不同的,这就是我们通常说的MTU(最大传输单元)。尺寸较大的数据报在MTU值较小的网络链路传输需要将数据报分段依次传输,对应的接收方就需要把这些接收到的拆分的分段组合起来,还原成原来的数据报。

后面介绍一下当今使用最多的网络层IPv4 1、IPv4数据报格式

【计算机网络】详解网络层(一):数据包封装和报文格式
  • 版本,指定IP数据报中使用的IP协议版本,占4位。IPv4对应值为4(0100)
  • 首部长度,指示IP数据报头部的总长度,占4位。IP数据报头部的总长度以4字节为单位(即4字节的整数倍)
  • 区分服务,用于表示数据报的优先级和服务类型,占8位。包括一个3位长度的优先级,4位长度的标志位,最高位未用
  • 总长度,标识整个IP数据报的总长度,包括报头和数据部分,占16位,由此可知IPv4的最大长度为65535(64KB)
  • 标识,用于表示IP数据报的标识符,占16位,每个IP数据报有一个唯一的标识(不是序号)。当数据报分段时,这个标识的值就被复制到所有分段的标识字段中,相同的标识字段值使分段后的数据报分段最后能正确地重组成为原来的数据报。
  • 标志,指出该IP数据报后面是否还有分段,为分段标志,占3位,仅最低位有意义
  • 片偏移,指出该分段在数据报中的相对位置。相对于用户数据字段的起点,该字段从何处开始,占13位
  • 生存时间,标识IP数据报在网络中传输的有效期,以秒来计数,占8位。现在通常认为这个数值是指数据报允许经过的路由器数,当值为0时,就丢弃这个数据报。设定生存时间是为了防止数据报在网络中无限制地循环转发。
  • 协议,用来标识此IP数据报在传输层所采用的协议类型(如TCP、UDP或ICMP等),以便使目的主机的IP层知道应将数据部分上交给哪个处理过程,占8位
  • 首部校验和,用来检验IP数据报的包头部分(不含“数据”部分)在传输到接收端后是否发生了变化,占16位。因为数据报每经过一个路由器,路由器都要重新计算一下报头校验和
  • 源地址/目的地址,分别表示该IP数据报发送者和接收者的IP地址,各站32位
  • 选项,用来支持各种选项,提供扩展余地,后面的填充字段就是为了保证IP数据报的报头是32位的整数倍。

我们用Wireshark抓包得到IP数据报各字段的示例。

【计算机网络】详解网络层(一):数据包封装和报文格式

2、IPv4数据报的封装与解封转 发送端网络层生成的IP数据报还要继续向下传输,到达数据链路层就要封装成数据帧了。IP数据报的“帧封装”只需把来自网络层的整个IP数据报(报头和数据部分)当做数据链路层帧的数据部分,然后在前面加上与数据链路层对应的协议头即可。 这里补充前篇数据链路层中没有说到的一点:在以太局域网中,由于数据链路层分成了LLC子层和MAC子层这两层,所以来自网络层的IP数据报在到达数据链路层后先要经过LLC子层和MAC子层的协议头封装,最终形成数据链路层的以太网MAC帧。

【计算机网络】详解网络层(一):数据包封装和报文格式

数据帧格式参见数据链路层 (经过路由器)解封装则是去掉帧头和帧尾(如果有帧尾)。 可以得知,IP数据报无论经过了多少个网络,整个数据报内容都不会变,包括报头部分的源和目的地址信息。变化的只是在不同网络数据链路上传输的帧头信息。

参考资料《深入理解计算机网络》、《TCP/IP 一》

继续阅读