TCP/IP学习(四)— IP网际协议
一、IP协议介绍
IP协议是TCP/IP协议的核心,负责Internet上网络之间的通信,定义了数据传输的基本单元和格式。IP协议的主要功能有:无连接数据报传送、数据报路由选择和差错控制。
二、IP协议特点
- 不可靠,即不可靠的数据投递服务。IP协议不能保证将数据包成功的送达目的地,数据报可能在线路延迟、路由错误、数据报分片和重组等过程中受到损坏,但IP不检测这些错误。在错误发生时,IP也没有可靠的机制来通知发送方或接收方。所以要保准数据准确的送达目的地,需要依靠上层协议支持(如TCP)。
- 无连接,及IP协议不会维护IP数据报发送之后的状态信息。每个数据报的处理都是相互独立,也就是说一个信息可能包含很多数据报,这些数据报发送出去后,接收的顺序是随意的,不一定按照发送的顺序来接收。
- 尽最大努力投递服务。尽管IP层提供的是面向非连接的不可靠服务,但是,IP并不随意地丢弃数据报。只有当系统的资源用尽、接收数据错误或网络故障等状态下,IP才*丢弃报文。
三、IPv4
1.IPv4地址的主要特点有:
-
IP地址是一种非等级的地址结构,IP地址不能反映任何有关主机位置的地理信息,只能通过网络号码字段判断出主机属于哪个网络。
-
当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号码Net-id是不同的,这种主机称为多地址主机(Multihomed Host)。主机上的每个接口都对应着一个IP地址,因此多接口主机会有多个IP地址。
-
在IP地址中,所有分配到网络号码Net-id的网络都是平等的。
2.IPv4地址分类
为了方便IP地址的管理及组网,IP地址分成五类,如下图所示。
目前大量使用的IP地址属于A、B、C三类IP地址中的一种。D类地址是组播地址,E类地址保留。A、B、C、D、E类的类别字段分别是二进制数0、10、110、1110、1111,通过网络号码字段的前几个比特就可以判断IP地址属于哪一类,这是区分各类地址最简单的方法。在IETF(Internet Engineering Task Force)发布的RFC1166 Internet Numbers中详细描述了各类IP地址。
3.IPv4报文格式
IPv4报文格式如下图所示。
一个IPv4数据报文由首部和数据两部分组成。首部的前一部分是固定长度,共20个字节,是所有IPv4数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。
主要字段的解释如下表所示。
字段 |
长度 |
含义 |
---|---|---|
版本 |
4比特 |
IP协议的版本号,分为IPv4和IPv6协议。 |
首部长度 |
4比特 |
IPv4的首部长度。 |
区分服务 |
8比特 |
用来获得更好的服务。只有在使用区分服务时,这个字段才起作用。 |
总长度 |
16比特 |
指首部和数据之和的长度。 |
标识 |
16比特 |
IPv4软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。 |
标志 |
3比特 |
目前只有两位有意义。最低位为1表示后面“还有分片”的数据报,为0表示这已经是最后一个数据片;中间一位为1表示“不能分片”,为0才允许分片。 |
片位移 |
13比特 |
指出较长的分组在分片后,该片在原分组中的相对位置。 |
生存时间 |
8比特 |
表示数据报在网络中的寿命,英文缩写是TTL(Time To Live),功能是“跳数限制”。 |
协议 |
8比特 |
指出此数据报携带的数据是使用何种协议。 |
首部检验和 |
16比特 |
数据报每经过一个路由器,路由器都要重新计算一下首部检验和,若首部未发生变化,则此结果必为0,于是就保留这个数据报。这个字段只检验数据报的首部,但不包括数据部分。 |
源地址 |
32比特 |
报文发送方的IPv4地址。 |
目的地址 |
32比特 |
报文接收方的IPv4地址。 |
选项字段(长度可变) |
0~40字节 |
用来支持排错、测量以及安全等措施。在必要的时候插入值为0的填充字节。 |
数据部分 |
可变 |
用来填充报文。 |
四、IPv6
IPv6是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写,是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议,其地址数量号称可以为全世界的每一粒沙子编上一个地址。由于IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍。
IPv6报文的整体结构分为IPv6报头、扩展报头和上层协议数据3部分。IPv6报头是必选报文头部,长度固定为40B,包含该报文的基本信息;扩展报头是可选报头,可能存在0个、1个或多个,IPv6协议通过扩展报头实现各种丰富的功能;上层协议数据是该IPv6报文携带的上层数据,可能是ICMPv6I报文、TCP报文、UDP报文或其他可能报文。
IPv6的报文头部结构如图:
版本号 | 表示协议版本.值为6 |
---|---|
流量等级 | 主要用于QoS |
流标签 | 用来标识同一个流里面的报文 |
载荷长度 | 表明该IPv6包头部后包含的字节数,包含扩展头部 |
下一报头 | 该字段用来指明报头后接的报文头部的类型,若存在扩展头,表示第一个扩展头的类型,否则表示其上层协议的类型,它是IPv6各种功能的核心实现方法 |
跳数限制 | 该字段类似于IPv4中的TTL,每次转发跳数减一,该字段达到0时包将会被丢弃 |
源地址 | 标识该报文的来源地址 |
目的地址 | 标识该报文的目的地址 |
扩展头部:IPv6报文中不再有“选项”字段,而是通过“下一报头”字段配合IPv6扩展报头来实现选项的功能。使用扩展头时,将在IPv6报文下一报头字段表明首个扩展报头的类型,再根据该类型对扩展报头进行读取与处理。每个扩展报头同样包含下一报头字段,若接下来有其他扩展报头,即在该字段中继续标明接下来的扩展报头的类型,从而达到添加连续多个扩展报头的目的。在最后一个扩展报头的下一报头字段中,则标明该报文上层协议的类型,用以读取上层协议数据。