【计算机网络】——网络层,IP地址,IP数据报,数据的分片及组装详解

网络层

  TCP/IP体系中网络层十分重要,本篇文章主要介绍IP(Internet Protocol)协议。 
  网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫作“点对点通信”。 
  网络层的下一层——数据链路层,主要作用是在互联同一种数据链路的节点之间进行宝传递。如果要跨越多种数据链路,就要借助网络层了。 
  网络层可以跨越不同的数据链路,即使在不同的数据链路上也能实现两端节点之间的数据包传输。

IP基础知识

  本文章从三个作用模块介绍IP协议: 
  

  • IP寻址
  • 路由
  • IP分片和组装

    1.IP地址

      如数据链路层的MAC地址一样,MAC地址是用来标识同一个链路中不同计算机的一种识别码。在网络层中,IP地址用来进行“在连接到网络中所有主机中识别出进行通信的目标地址”。因此,在TCP/IP通信中所有主机或路由器都必须设定自己的IP地址。 
      IP地址(IPv4)有32为正整数来表示。TCP/IP要求将IP地址分配给每一个参与通信的主机。 
      实际上IP地址不是由主机配置的,而是有网卡设置的,并且一个网卡其实可以设置多个IP地址。

    IP地址的组成

      IP地址有<网络号,主机号>两个部分组成。

    IP地址的分类

    IP地址分为A,B,C,D四类。

    1. A类IP地址

    一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的 >最高位必须是“0”, 地址范围从1.0.0.0 到126.0.0.0。可用的A类网络 >有126个,每个网络能容纳1亿多个主机。

    2. B类IP地址

    一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络 >地址的最高位必须是“10”,地址范围从128.0.0.0到 >191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多 >个主机 。

    3. C类IP地址

    一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址 >的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类 >网络可达209万余个,每个网络能容纳254个主机。

    4. D类地址用于多点广播(Multicast)。

    D类IP地址第一个字节以“lll0”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算 >机。

    5. E类IP地址

    以“llll0”开始,为将来使用保留。

    全零(“0.0.0.0”)地址对应于当前主机。全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址。

    在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下:

    A类地址:10.0.0.0~10.255.255.255

    B类地址:172.16.0.0~172.31.255.255

    C类地址:192.168.0.0~192.168.255.255

    A类地址的第一组数字为1~126。注意,数字0和 127不作为A类地址,数字127保留给内部回送函数,而数字0则表示该地址是本地宿主机,不 >能传送。

    B类地址的第一组数字为128~191。

    C类地址的第一组数字为192~223。

子网掩码

  对IP地址进行分类可能会对网络地址进行浪费,因此现在用的都是子网掩码。 
  这种方式实际上就是将原来A类、B类、C类等分类中的主机地址部分用作子网地址,可以将源网络分为多个物理网络的一种机制。 
  引入了子网掩码后,一个IP地址就有了两个标识码: 
  

  • IP地址本身
  • 表示网络部的子网掩码

      子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。 
      用于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。

定义子网掩码的步骤为:

A、确定哪些组地址归我们使用。比如我们申请到的网络号为 “210.73.a.b”,该网络地址为c类IP地址,网络标识为“210.73.a”,主机标识为“b”。

B、根据我们所需的子网数以及将来可能扩充到的子网数,用宿主机的一些位来定义子网掩码。比如我们需要12个子网,将来可能需要16个。用第四个字节的前四位确定子网掩码。前四位都置为“1”,即第四个字节为“11110000”,这个数我们暂且称作新的二进制子网掩码。

C、把对应初始网络的各个位都置为“1”,即前三个字节都置为“1”,则子网掩码的间断二进制形式为:“11111111.11111111.11111111.11110000” 。

D、把这个数转化为间断十进制形式为:“255.255.255.240” 。

2.路由控制

  路由控制是将分组数据发送到最终目标地址的功能。 
  当IP数据包到达路由器时,路由器首先查找其目标地址,从而再决定下一步应该将这个包发往哪个路由器,然后将包发送过去。当这个IP包到达那个路由器后,会再次查找下一目标地址,一直到找到最终的目标地址将数据包发送给这个节点。 
  但是这个过程不是无限循环下去的。在IP数据报中有生存时间这个部分专门用来计算经过了多少路由器转发,我们在设置了生存时间后,美每经一个路由器转发,生存时间都会相应减一。 
  IP数据报  

路由控制表

  为了将数据包发送给目标主机,所有主机都维护着一张路由控制表,该表记录IP数据在下一步应该发给哪个路由器。 
  路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。 
  IP包将根据这个路由表在各个数据链路上传输。

路由控制表的形成方式有两种:
  • 管理员手动设置——静态路由控制
  • 路由器与其他路由器相互交换信息时自动刷新——动态路由控制

    默认路由

      默认路由一般标记为0.0.0.0/0或default。这里的0.0.0.0/0是指没有表示IP地址,而不是0.0.0.0IP地址,地址为0.0.0.0的IP地址应该为0.0.0.0/32.

主机路由

   “IP地址/32”成为主机路由,主机路由意味着要基于主机上网卡上配置的IP地址本身,而不是基于该地址的网络地址部分进行路由。

环回地址

  环回地址是在同一台计算机上的程序之间进行网络通信时使用的默认地址。计算机使用一个特殊的IP地址127.0.0.1作为环回地址。

IP属于面向无连接型

  IP面向无连接,即在发包之前,不需要建立与对端目标地址之间的链接。 
  在面向无连接的情况下,即使对端主机关机或不存在,数据包还是会被发送出去,所以在面向无连接的方式下可能会有很多冗余通信。 
  但是IP面向无连接主要是因为两点原因: 
   
- 为了简化 
- 为了提速

  但为了提高可靠性,上一层的TCP采用面向连接型。 
 

IP数据报

这里写图片描述

版本 

  占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。关于IPv6,目前还处于草案阶段。

首部长度 

  占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。  
  当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。  
  首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。

区分服务 

  占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。

总长度 

  总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为2^16-1=65535字节。 
  在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。

标识(identification) 

  占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。  
  但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。

标志(flag) 

  占3位,但目前只有2位有意义。 
● 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。 
● 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。

片偏移 

  占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,除了最后一个分片,每个分片的长度一定是8字节(64位)的整数倍。

生存时间 

  占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。 
  每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。后来把TTL字段的功能改为“跳数限制”(但名称不变)。路由器在转发数据报之前就把TTL值减1.若TTL值减少到零,就丢弃这个数据报,不再转发。  
  因此,现在TTL的单位不再是秒,而是跳数。TTL的意义是指明数据报在网络中至多可经过多少个路由器。显然,数据报在网络上经过的路由器的最大数值是255.若把TTL的初始值设为1,就表示这个数据报只能在本局域网中传送。

协议 

  占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。

首部检验和 

  占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。

源地址 

  占32位。

目的地址 

  占32位。

IP分片和组装

  在不同数据链路中,MAC帧各自的最大传输单位(MTU:Maximum Transmission Unit)不同。 
  MTU的值在以太网中是1500字节,在FDDI中是4352字节,在ATM则为9180字节。 
  MAC帧最小字节为56字节,MTU在不同数据链路中是不同的。 
  当以太网帧大小不够56字节的时候,会对MAC帧进行填充。而当大小超过MTU的时候,就会进行分片。 
  分片的时候,经过分片的数据16位标识都一样,为了组装的时候能够知道哪些是同一片数据。 
  那么组装顺序如何保证呢: 
  通过片偏移来保证,片偏移为0的数据为数据首部,而下一次偏移量等于当前片偏移+总长度。 

  组装的时候也是通过片偏移进行组装的。 

文章出处:转载自“长着胡萝卜须的栗子”的博客“【计算机网络】——网络层,IP地址,IP数据报,数据的分片及组装详解”。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值