计算机网络学习(2)—— IP协议

一、概述

        网际互连协议(Internet Protocol),简称IP。是OSI模型和TCP/IP模型中的网络层协议,是构成互联网的基础。对上可载送传输层各种协议的信息,例如TCP、UDP等。对下可将IP信息包放到链路层,通过以太网、令牌环网络等各种技术来传送。
        IP协议版本主要分为:

  • IPv4协议。网际协议第4版(Internet Protocol version4),简称IPv4。是TCP/IP协议使用的数据报传输机制。数据报是一个可变长分组,有两部分组成:头部和数据。头部长度可由20~60个字节组成,该部分包含有与路由选择和传输有关的重要信息。
  • IPv6协议。网际协议第6版(Internet Protocol version6),简称IPv6。自从1970年代IPv4问世以来,数据通信技术日新月异有了很大发展。虽然IPv4设计得很好,但其缺点也逐渐显露出来:
            (1)虽说借助子网化、无类寻址和NAT技术可提高IP地址使用率,因特网中IP地址的耗尽仍然是一个没有彻底解决的问题。
            (2)IPv4没有提供对实时音频和视频传输这种要求传输最小时延的策略和预留资源支持。
            (3)IPv4不能对某些有数据加密和鉴别要求的应用提供支持。
            在IPv6中,IP地址格式和分组长度以及分组的格式都改变了。IPv6每个分组由必须的基本头部和其后的有效载荷组成。有效载荷由可选的扩展头部和来自上层的数据组成。基本头部占用40字节,有效载荷可以包含65535字节数据。

二、IPv4协议

计算机网络学习(2)—— IP协议_第1张图片
计算机网络学习(2)—— IP协议_第2张图片

  • 版本(Version):占4位。就是IP协议的版本,通信双方的IP协议必须要达到一致,IPv4的版本就是4。
  • 首部长度(IHL):占4位。指的是IP层头部占32 bit字的数目(也就是IP层头部包含多少个4字节 – 32位),包括任何选项。由于它是一个4比特字段,因此首部最长为60个字节。普通IP数据报(没有任何选择项)字段的值是5 <==> 5 * (32 / 8) = 5 * 4 = 20 Bytes,即实际的IP首部长度=(IHL * 4)字节。
  • 服务类型(TOS: Type Of Service):占8位。包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位但必须置0.4 bit的TOS子字段分别代表:最小时延,最大吞吐量,最高可靠性和最小费用。4 bit中只能设置其中1 bit。如果所有4 bit均为0,那么就意味着是一般服务。
  • 总长度(Total Length):占16位。是指整个IP数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16比特,所以IP数据报最长可达65535字节。总长度字段是IP首部中必要的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。尽管以太网的最小帧长为46字节,但是IP数据可能会更短。如果没有总长度字段,那么IP层就不知道46字节中有多少是IP数据报的内容。
  • 标识(ID:Identification):占16位。唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。但这个标识并不是平常的序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中,等到重组的时候,相同标识符的值的数据报就会被重新组装成一个数据报。
  • 分段标志(Flags):占3位。由于分片重组,由三个比特构成。
            (1)第一个比特未使用,目前必须是0。
            (2)第二个比特表示是否进行分片,0表示可以分片,1表示不能分片。在路径MTU发现技术中就用到了这个位。
            (3)第三个比特表示在分片时,是否表示最后一个包。1表示不是最后一个包,0表示分配中最后一个包。
  • 分段偏移(Fragment Offset):占13位。指明了该分段在当前数据报中的什么位置上。除了一个数据报的最后一个分段以外,其他所有的分段(分片)必须是8字节的倍数。这是8字节是基本分段单位。由于该域有13个位,所以,每个数据报最多有8192个分段。因此,最大的数据报长度为65536字节,比总长度还要大1。
  • 生存时间(TTL: Time To Live):占8位。设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。TTL是一个用于限制分组生存期的计数器。这里的计数时间单位为秒,因此最大的生存期为255秒。在每一跳上该计数器必须被递减,而且当数据报在一台路由器上排队时间较长时,该计数器必须被多倍递减。在实践中,它只是跳计数器,当它递减到0的时候,分组被丢弃,路由器给源主机发送一个警告分组。此项特性可以避免数据报长时间地逗留在网络中,有时候当路由表被破坏之后,这种事情是有可能发生的。
  • 协议(Protocol):占8位。表示IP协议的上层协议使用了哪个协议。比如TCP协议的编号为6,UDP编号为17。
  • 首部检验和(Header Checksum):占16位。是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。ICMP,IGMP,UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。IPv4的报头的长度一般为20个字节,而校验和的长度为16位 = 2个字节,用一个例子来讲解计算过程:
            假设某个IPv4数据包报头为:E3 4F 23 96 44 27 99 F3 [00 00],注意,用中括号括起来的就是校验和。
            (1)校验和的初始值自动被设置为0。
            (2)以16bit为单位,两两相加,对于该例子,即为:E34F + 2396 + 4427 + 99F3 = 1E4FF。
            (3)若计算结果大于0xFFFF,则将,高16位加到低16位上,对于该例子,即为:0xE4FF + 0x0001 = E500。
            (4)将该值取反,即为:~(E500) = 1AFF。
            此时,发送包已经计算完毕,下面,我们再来计算接收方的信息
            (1)若数据包正常,那么,它的报头应该是这样:E3 4F 23 96 44 27 99 F3 1A FF。
            (2)此时,前18字节的内容不变,等于E500,然后,将E500与刚刚计算的校验和1AFF相加。
            (3)若计算结果为FFFF,则该数据包正常,否则错误。
  • 源地址(Source Address):占32位。将IP地址看作是32位数值则需要将网络字节顺序(小端)转化位主机字节顺序,即需要进行大小端转换。转化的方法是:将每4个字节的第1、4字节互换,将第2、3字节互换。
  • 目的地址(Destination Address):占32位。转换方法和源地址一样。
  • 可选字段(Options):在实际上很少用到,仅在试验或诊断时用,可以没有,如果有,需要配合填充占满32位。

三、IPv6协议

计算机网络学习(2)—— IP协议_第3张图片

你可能感兴趣的:(网络)