ip协议介绍

目录

前言

一、IPv4

1、IPv4数据报格式

2、IPv4数据报分片

3、IPv4编址

4.主机的IP地址是如何获取的?

二、IPv6



前言

        本篇文章简单介绍计算机网络层的IPv4和IPv6以及它们的相关概念和区别,内容皆总结摘抄自《计算机网络:自顶向下方法》,仅作笔记。


 

一、IPv4

1、IPv4数据报格式

        网络层的分组也叫做数据报,因此IPv4的分组也称为IPv4数据报。IPv4的数据报格式如下图:

         下面按照顺序对以上数据报中的每个部分做简单的介绍。

  • 版本

        版本号的长度为4比特,规定了数据报的IP协议版本。路由器可以通过查看版本号来解释IP数据报的剩余部分。不同的IP版本使用不同的数据报格式。

  • 首部长度

        首部长度的长度为4比特,保存了该数据报的首部的长度。IPv4数据报可以包含一些可变数量的选项(上图中的32比特选项),因此对于不同的IPv4数据报来说真正的载荷实际开始的位置并不确定,首部长度就可以解决该问题。大多数IP数据报不包含选项,所以一般的IP数据报具有20字节的首部。

  • 服务类型

        服务类型的长度为8比特,保存了该IP数据报的类型。对于某些场景来说,区分IP数据报类型是有必要的。

  • 数据报长度

        数据报长度的长度为16比特,保存了该IP数据报的总长度(首部+数据),以字节计算。由于该字段长度为16比特,因此一个IP数据报的理论最大长度为2^16=65535个字节。

  • 标识、标志、片偏移

        这三个字段与IP分片有关,后面介绍分组分片时再着重介绍。

  • 寿命

        寿命(Time-To-Live,TTL)的长度为8比特,用来确保该数据报不会永远再网络中循环。每当一台路由器处理一个数据报时,数据报中的该字段的值减1,直到该字段的值减到0,数据报被丢弃。

  • 上层协议

        上层协议的长度为8比特,该字段指示了IP数据报在到达最终目的地时数据部分应该交给哪个特定的运输层协议。例如值为6表明数据部分要交给TCP协议,值为17表明要交给UDP协议。在IP数据报中的协议号所起的作用类似于运输层报文段中端口号字段所起的作用。协议号是将网络层与运输层绑定到一起的粘合剂,而端口号是将运输层和应用层绑定到一起的粘合剂。

  • 首部检验和

        首部检验和的长度为16比特,用于帮助路由器检测收到的IP数据报中的比特错误。首部中的每两个字节当作一个数,用反码算术对这些数求和,将最终的计算结果放入首部检验和字段中。路由器要对每个收到的IP数据报计算其首部检验和,如果数据报首部携带的首部检验和与计算得到的检验和不一致,则检测出是一个差错。路由器一般会丢弃检测出错误的数据报。每台路由器上必须重新计算检验和并再次存放到原处,因此TTL字段以及可能的选项字段会改变。

  • 源/目的IP地址

        当某源生成一个数据报时,它在源IP字段中插入它的IP地址,在目的IP地址字段中插入其最终目的地的地址。

  • 选项

        选项是对IP首部的扩展,虽然很少使用,但少量选项的存在使得一些问题变得较复杂。由于选项的存在,数据报首部的长度是可变的,因此不能预先确定数据字段从哪里开始。有些数据报要求处理选项,有些数据报则不要求,又导致一台路由器处理一个IP数据报所需的时间变换可能很大。因为各种原因,在IP版本6中去掉了选项。

  • 数据(有效载荷)

        在大多数情况下,IP数据报中的数据字段包含要交付给目的地的运输层报文段,也有些情况承载的是其他类型的数据。

2、IPv4数据报分片

        并不是所有的链路层协议都能承载相同长度的网路层分组,有的协议能承载大数据报,而有的协议只能承载小的分组。一个链路层帧能承载的最大数据量叫做最大传送单元(Maximum Transmission Unit,MTU)。由于每个IP数据报都需要封装在链路层帧中从一台路由器传输到下一台路由器,因此链路层协议的MTU严格限制IP数据报的长度,更不用说在发送方与目的地路径上的每段链路可能使用不同的链路层协议且每种协议可能具有不同的MTU。对于这种场景来说,一个IP数据报的长度就不能保证比路径上的任何一段链路的MTU都要小,这时就需要将IP数据报中的数据分片成多个较小的IP数据报,用单独的链路层帧封装这些较小的IP数据报,每个这些较小的数据报都称为片。

        由于在路由器中重新组装数据报会给协议带来相当大的复杂性并且影响路由器的性能,因此数据报的重新组装工作放到了端系统中,而不是放在网络路由器中。

        当一台目的主机从相同源收到一系列数据报时,它需要确定这些数据报中的某些是否是一些原来较大的数据报的片。如果某些数据报是这些片,还需要进一步确定何时收到了最后一片,并且如何将这些接收到的片拼接到一起以形成初始的数据报。前面介绍IPv4数据报时数据报首部的标识、标志和片偏移字段可以帮助目的主机完成重新组装任务。当生成一个数据报时,发送主机在为该数据报设置源和目的地址的同时贴上标识号。发送主机通常将它发送的每个数据报的标识号加1.当某路由器需要对一个数据报分片时,形成的每个片具有初始数据报的源地址、目的地址与标识号。当目的地从同一发送主机收到一系列数据报时,它能够检查数据报的标识号以确定哪些数据报实际上是同一较大数据报的片。由于IP是一种不可靠的服务,一个或多个片可能永远到达不了目的地,为了让目的主机绝对地详细它已经收到了初始数据报的最后一片,最后一个片的标志比特被设为0,所有其他片的标志比特被设为1。为了让目的主机确定是否丢失了一个片且可以按照正确的顺序重新组装片,使用片偏移字段来指定该片在初始IP数据报的哪个位置。

3、IPv4编址

        在介绍IP编址前先来介绍下主机和路由器接入网络的方法以便于我们更好地理解IP编址。一台主机通常只有一条链路连接到网络;当主机中的IP想发送一个数据报时,它就在该链路上发送。主机与物理链路之间的边界叫做接口。路由器与主机不同,路由器的任务是从链路上接收数据报并从其他链路转发出去,因此路由器必须有两条或更多的链路与它连接。路由器与它的任意一条链路之间的边界也叫做接口,因此一台路由器有多个接口,每个接口都有其对应的链路。IP要求每台主机和路由器接口拥有自己的IP地址,因此,从技术上来说一个IP地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联。

        每个IP地址的长度为32比特,即4个字节,因此最多可以有2^32个可能的IP地址。IP地址通常按照点分十进制法书写,即地址中的每个字节用它的十进制书写,各字节间以句点隔开。例如IP地址192.12.214.8,其中192是该地址的第一个8比特的十进制等价数,12是该地址的第二个8比特的十进制等价数,依次类推。因此192.12.214.8的二进制记法是:

11000000 00001100 11010110 00001000

        一个接口的IP地址的一部分需要由其连接的子网来决定。下图中一台具有3个借口的路由器互联了7台主机,仔细观察可发现左上侧包含了三台主机和路由器的一个接口的IP地址都是类似223.1.1.x,这说明它们IP地址的前24位比特是相同的。用IP的术语来说,互联这3个主机接口与1个路由器接口的网络形成一个子网。IP编址为这个子网分配了一个地址223.1.1.0/24,其中的/24记法有时称为子网掩码,表示拥有32比特的IP地址的最左侧24比特定义了子网地址。任何其他要连到223.1.1.0/24网络的主机都要求其地址具有223.1.1.x的形式。

         因特网的地址分配策略被称为无类别域间路由选择(Classless Interdomain Routing,CIDR)。当使用子网寻址时,32比特的IP地址被划为分两部分,并且也具有点分十进制数形式a.b.c.d/x,其中x表示地址的第一部分中的比特数,被称为该地址的前缀或网络前缀。一个组织通常被分配一块连续的地址,且具有相同前缀的一段地址。在这种情况下,该组织内部的设备的IP地址将共享共同的前缀。而当该组织外部的一台路由器转发一个数据报,且该数据报的目的地址位于该组织内部时,仅需要考虑该地址的前缀即可。

         在CIDR被采用之前,IP地址的网络部分被限制为长度为8、16或24个比特,这种编址方案叫做分类编址,具有8、16和24比特子网地址的子网分别被称为A、B和C类网络。然而对于一个C类子网(CIDR策略表示为/24)只能容纳2^8-2=254个(其中两个地址预留用于特殊用途)台主机,这对于很多组织来说太小了,B类子网(CIDR策略表示为/16)可以容纳2^16-2=65534台主机,又太大了。对于一个具有1000人的组织来说,分配一个C类子网远远不够,分配一个B类子网又有多达64000多个接口的地址空间浪费,因此分类编址是存在一些问题的。

         IP地址255.255.255.255是一个广播地址。当一台数据发出一个目的地址为255.255.255.255的数据报时,该报文会交付给同一个网络中的所有主机,路由器也会有选择地向邻近的子网转发该报文。

4.主机的IP地址是如何获取的?

        某台主机的IP地址是由该主机所在的组织分配的,而组织的地址块则是互联网服务提供商(Internet Service Provider,ISP)从分配给它的一个更大的地址块中分出来的一些地址。全球有不知道多少个ISP,这些ISP的地址块也是需要分配的,因特网名字和编号分配机构(Internet Corporation for Assigned Names and Numbers,ICANN)就是管理IP地址空间并向各ISP和其他组织分配地址块的具有全球性的权威机构。该机构是非营利性质的,且还有管理DNS服务器以及分配域名与解决域名纷争的作用。

        某组织获取一块地址后就可以为组织内的主机与路由器接口逐个分配IP地址。系统管理员通常手工配置路由器中的IP地址。主机地址也能手动配置,但一般使用动态主机配置协议(Dynamic Host Configuration,DHCP)来完成。DHCP允许主机自动获取一个IP地址。网络管理员可以通过配置DHCP使得给定的主机每次与网络连接时都能得到一个相同的IP地址,或者某主机将被分配一个临时的IP地址,每次与网络连接时该地址可能都不同。另外,DHCP还允许一台主机得到它的子网掩码、第一跳路由器地址与它的本地DNS服务器的地址等其他信息。

        由于DHCP具有将主机连接进一个网络的网络相关方面的自动能力,因此它又常被称为即插即用协议或零配置协议。DHCP是一个客户-服务器协议。客户通常是新到达的主机,它要获得包括自身使用的IP地址在内的网络配置信息。在最简单的场景下,每个子网都有一台DHCP服务器。如果某个子网中没有DHCP服务器,则需要一个DHCP中继代理(通常是一台路由器),这个代理知道用于该网络的DHCP服务器的地址。

        对于一个子网中一台新到达的主机来说,通过DHCP协议获取IP地址有如下4个步骤:

  1. DHCP服务器发现。一台新到达的主机的首要任务就是发现一个要与其交互的DHCP服务器。这可以通过使用DHCP发现报文来完成,用户在UDP分组中向端口67发送该发现报文,该UDP分组被封装在一个IP数据报中。新到达的主机是不知道该子网的DHCP服务器地址且没有自己的IP地址,因此在IP数据报的目的地址中使用的是广播地址255.255.255.255,并且源IP地址使用“本网络的本主机的源地址”0.0.0.0。DHCP客户(即新到达的主机)将该IP数据报传递给链路层,链路层将该帧广播到所有与子网连接的节点。
  2. DHCP服务器提供。DHCP 服务器收到一个DHCP发现报文时,用DHCP提供报文向客户做出响应,该报文向该子网的所有节点广播,仍然使用广播地址255.255.255.255。由于在子网中可能存在几个DHCP服务器,每台服务器都会提供报文,提供报文包含收到的发现报文的事务ID、向客户推荐的IP地址、网络掩码以及IP地址租用期。
  3. DHCP请求。DHCP客户从一个或多个服务器提供中选择一个,并向选中的服务器提供用DHCP请求报文进行响应,回显配置的参数。
  4. DHCP ACK。服务器用DHCP ACK报文对DHCP请求报文进行响应,证实所要求的参数。

        一旦客户收到DHCP ACK后,交互便完成了,次数该客户就可以在租用期内使用DHCP分配的IP地址。DHCP有非常严重的缺陷,每当节点连接到一个新的子网的时候就需要从DHCP获取一个新的IP地址,因此当一个移动节点在多个子网之间移动时,就不能维持与远程应用之间的TCP连接。在介绍链路层时会介绍移动IP,它是一种对IP基础设施的扩展,允许移动节点在网络之间移动时使用其单一永久的地址。

二、IPv6

        由于新的子网和IP节点以惊人的增长率连到互联网上,32比特的IP地址空间也即将被用尽,为了应对这种对大IP地址空间的需求,开发了一种新的IP协议,即IPv6。IPv6数据报的格式如下图: 

         IPv6相比IPv4除了扩大了IP地址空间,还加强和优化了其他方面,其中最重要的变化就显示在其数据报格式中:

  • 扩大的地址容量。IPv6将IP地址长度从32比特增加到了128比特,这就确保了IP地址空间不会被用尽。除了单播与多播地址外,IPv6还引入了一种称为任播地址的新型地址,这种地址可以使数据报文交付给一组主机中的任意一个。
  • 首部简化为40个字节。IPv6舍弃了IPv4中许多的首部字段,最终形成一个具有40字节长度的定常的首部,这样路由器可以更快地处理IP数据报。
  • 流标签。IPv6引入了流标签字段,该字段可用于给属于特殊流的分组加上标签,这些特殊流是发送方要求进行特殊处理的流,如一种非默认服务器质量或需要实时服务的流,例如音频与视频传输就可能被当作一种流。

        比较IPv6和IPv4的数据报就可以看出IPv6的数据报结构更简单,以下是对IPv6数据报字段的简单介绍:

  • 版本

        该4比特字段用于标识IP版本号,因此该字段的值为6。需要注意的是将该字段值设为4也并不能创建一个合法的IPv4的数据报。

  • 流量类型

        该8比特字段与IPv4数据报中的“服务类型”字段的含义类似。

  • 流标签

        就像上面介绍的,该20比特的字段用于标识一条数据报的流,能够对一条流中的某些数据报给出优先权,或者对来自某些应用的数据报给出更高的优先权,以优于其他应用的数据报。

  • 有效载荷长度

        该16比特值作为一个无符号整数,给出了IPv6数据报中跟在定常的40字节数据报首部后面的字节数量。

  • 下一个首部

        该字段标识数据报中的内容需要交付给哪个运输层协议,该字段使用与IPv4首部中的协议字段相同的值。

  • 跳限制

        转发数据报的每台路由器将对该字段的内容减1,如果跳限制计数达到0,则该数据报将被丢弃。

  • 源地址和目的地址

        分别为128比特的源IP地址和128比特的目的地址。IPv6地址的格式类似:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx,使用“:”分为了8段,每个x都是16进制数。

  • 数据

        这是IPv6数据报的有效载荷部分,当数据报到达目的地时,该有效载荷部分就从IP数据报中一处,并交给下一个首部字段中指定的协议处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值