【计算机网络】IP协议

目录

前言

一、IP服务的特点

二、IPv4头部结构

三、IP分片

四、IP路由

1)IP模块的工作流程

2)路由机制

3)IP转发

4)ICMP重定向报文

五、IPV6

1)IPv6 的固定头部结构

2)IPv6 的扩展头部


前言

IP协议是TCP/IP 协议族的核心协议,也是socket网络编程的基础之一。本文从两个方面深入探讨IP协议:

  • IP头部信息。IP头部信息出现在每个IP数据报中,用于指定IP通信的源端IP地址、目的端IP地址,指导IP分片和重组,以及指定部分通信行为。
  • IP数据报的路由和转发。IP数据报的路由和转发发生在除目标机器之外的所有主机和路由器上,它们决定数据报是否应该转发以及如何转发。

一、IP服务的特点

IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务

  •  无状态指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输和接收都是相互独立、没有上下文关系的。

这种服务最大的缺点无法处理乱序和重复的IP数据报。虽然IP数据报头部提供了一个标识字段用以唯一标识一个IP数据报,但是它是用来处理IP分片和重组的,而不是用来指示接收顺序的。

这种服务的优点简单、高效。无须为保持通信的状态而分配一些内核资源,也无须每次传输数据时都携带状态信息。(UDP协议和HTTP协议都是无状态协议,以HTTP协议为例,一个浏览器的连续两次网页请求之间没有任何关联,它们被Web服务器独立地处理)

  • 无连接指IP通信双方都不长久的维持对方的任何信息。这样,上层协议每次发送数据的时候,都必须明确对方的IP地址
  • 不可靠指IP协议不能保证IP数据报准确地到达接收端,它只是承诺尽最大努力。很多情况都能导致IP数据报发送失败。无论哪种情况,发送端的IP模块一旦检测到IP数据报发送失败,就通知上层协议发送失败,而不会试图重传。因此,使用IP服务的上层协议(比如TCP协议)需要自己实现数据确认、超时重传等机制达到可靠传输的目的。

二、IPv4头部结构

IPv4头部结构通常为20字节,除非含有可变长的选项部分。 

图1  IPv4头部结构
  • 4位版本号指定IP协议的版本。对于IPv4来说,其值为4。其他IPv4协议的拓展版本具有不同的版本号(头部结构也不同)。 
  • 4位头部长度标识该IP头部有多少个32bit字(4字节)。因为4位最大表示15,所以IP头部最长是60字节。
  • 8位服务类型(TOS)包括一个3位的优先权字段、4位的TOS字段和1位保留字段(必须置零)。4位的TOS字段分别表示:最小延时、最大吞吐、最高可靠性和最小费用,其中最多有一个能置1,应用程序根据实际需要来设置它。比如:ssh和Telnet这样登录程序需要的是最小延时的服务,而文件传输程序FTP则需要最大吞吐量的服务。
  • 16位总长度值指整个IP数据报的长度,以字节为单位,因此IP数据报的最大长度为2^16-1(65535)字节。但由于MTU(最大传输单元)的限制,长度超过MTU的数据报都将被分片传输,所以实际传输的IP数据报(或分片)的长度都远远没有达到最大值。接下来的3个字段则描述了如何实现分片。
  • 16位标识唯一标识主机发送的每一个数据报。其初始值由系统随机生成;每发送一个数据报,其值加一。该值在数据报分片时被复制到每一个分片中,因此同一个数据报的所有分片都具有相同的标识值。
  • 3位标志字段第一位保留;第二位表示“禁止分片”,如果设置了这个位,IP模块将不对数据进行分片。这种情况下,如果IP数据报长度超过MTU的话,IP模块将丢弃该数据报并返回一个ICMP差错报文。第三位表示“更多分片”。除了数据报的最后一个分片外,其他分片都要把它置1.
  • 13位分片偏移是分片相对原始IP数据报开始的偏移。实际的偏移值是该值左移3位(乘8)得到的。由于这个原因,除了最后一个分片外,每个IP分片的数据部分必须是8的整数倍(这样才能保证后面的IP分片拥有一个合适的偏移值)
  • 8位生存时间是数据报到达目的地之间允许经过的路由跳数。TTL值没发送端设置(常见值为64),数据报在转发过程中每经过一个路由,该值就被路由器减1.当TTL值减为0时,路由器将丢弃数据报,并向源端发送一个ICMP差错报文。TTL值可以防止数据报陷入路由循环。
  • 8位协议用来区分上层协议,ICMP协议字段值为1,TCP为6,UDP为17.
  • 16位头部校验和由发送端填充,接收端对其使用CRC算法以校验IP数据报头部(注意,仅校验头部)在传输过程中是否顺坏。
  • 32位源端IP地址和目的端IP地址用来标识数据报的发送端和接收端。一般情况下,这两个地址在整个数据报传递过程中保持不变。
  • 选项字段是可变长的可选信息。这部分最多可包含40字节。因为IP头部最长是60字节。

可选项包括:(1)记录路由:告诉数据报途径的所有路由器都将自己的IP地址填入IP头部的选项部分,这样我们就可以跟踪数据报的传递路径。

                     (2)时间戳:告诉每个路由器都将数据报被转发的时间填入IP头部的可选项,这样就可以测量途径路由之间数据报传输的时间。

                     (3)松散源路由选择:指定一个路由器IP地址列表,数据报发送过程中必须经过其中所有的路由器

                     (4)严格源路由选择:和松散源路由选择类似,不过数据报只经过被指定的路由器。

  (作为记录路由的替代品,traceroute程序使用UDP报文和ICMP报文实现更可靠的记录路由功能。)


三、IP分片

当IP数据报的长度超过帧的MTU时,它将被分片传输。分片可能发生在发送端,也可能发生在中转路由器上,而且可能在传输过程中被多次分片,但只有在最终的目标机器上,这些分片才会被内核中的IP模块重新组装。 

IP头部给IP分片和重组提供信息的三个字段为:数据报标识、标志和片偏移。一个IP数据报的每个分片都有自己的IP头部,它们具有相同的标识值,但具有不同的片偏移。并且除了最后一个分片外,其他分片将设置MF标志。每片的IP头部总长度字段都被设置为该片的长度。

以太网帧的MTU是1500字节(通过ifconfig或netstat命令查看),因此它携带的IP数据报的数据部分最多四1480字节(头部占用20字节)。考虑到IP数据报封装一个长度为1481字节的ICMP报文(包括8字节的ICMP头部,所以其数据部分为1473字节),则该数据报在使用以太网帧传输时必须被分片。

实例分析:

长度为1501字节的IP数据报被拆分两个IP分片,第一个IP分片长度为1500字节,第二个IP分片长度为21字节。

每个IP分片都包含自己的IP头部(20字节),且第一个IP分片的IP头部设置MF标志,而第二个IP分片的IP头部没有设置该标志,因为他已经是最后一个分片了。

原始IP数据报中的ICMP头部内容被完整复制到第一个IP分片上,第二个IP分片不包含ICMP头部信息,因为IP模块重组该ICMP报文时只需要一份ICMP头部信息,重复传送这个信息没有任何益处。

1473字节的ICMP报文数据的前1472字节被IP模块复制到第一个分片中,使其总长度为1500字节,从而满足MTU的要求,而多处来的最后1字节被复制到第二个IP分片中。

ICMP报文的头部长度取决于报文的类型,其变化范围很大。


四、IP路由

IP协议的核心任务是数据报的路由。

1)IP模块的工作流程

图 3   IP模块的工作流程

从右往左分析。当IP模块收到来自数据链路层的IP数据报时,首先对该数据报的头部进行CRC校验,确认无误之后就分析其头部的具体信息。

如果该IP数据报的头部设置了源站选路选项(松散/严格源路由选择),则IP模块调用数据报转发子模块来处理该数据报。如果该IP数据报的头部中目标IP地址是本机的某个IP地址,或广播地址(即该数据报是发送给本机的),则IP模块就根据数据报头部的协议字段来决定将它派发个哪个上层应用。如果IP模块发现这个数据报不是发送给本机的,则调用数据报转发子模块处理该数据报。

数据报转发子模块将首先检测系统是否允许转发,如果不允许,IP模块就将数据报丢弃。如果允许,数据报转发子模块将该数据报执行一些操作,然后将它给IP数据报输出子模块。

IP数据报应该发送至哪个下一跳路由(或目标机器),以及经过哪个网卡发送,就是IP路由过程。IP模块实现数据报路由的核心数据结构是路由表。该表按照数据报的目标IP地址分类,同一类IP数据报将发往相同的下一跳路由器。

IP输出队列中存放的是所有等待发送的IP数据报,其中除了需要转发的IP数据报外,还包括封装的上层数据(ICMP报文、TCP报文段、UDP数据报)的IP数据报。

虚线箭头显示了路由表更新的过程。这一过程是通过路由协议或route命令调整路由表,使之更加适应新的网络拓扑结构,称之为IP路由策略

 

2)路由机制

第一个目标地址default是默认路由,Gateway是下一跳目标网关,其地址是192.168.1.1。另一个路由项的目标地址是192.168.1.0(是本地局域网),其路由网关地址为*,说明数据报不需要路由中转,可以直接发送到目标机器。

IP路由机制分为3个步骤:

①查找路由表中和数据报的目标IP地址完全匹配的主机IP地址。如果找到,就使用该路由项;否则执行步骤②;

②查找路由表中和数据报的目标IP地址具有相同网络ID的网络IP地址。如果找到,就使用该路由项;否则执行步骤③;

③选择默认路由项,这通常意味着数据报的下一跳路由是网关。

 

3)IP转发

路由器都能执行数据报的转发操作,而主机一般只发送和接收数据报,这是因为主机上/proc/sys/net/ipv4/ip_forward内核参数默认被设置为0.

可以通过修改它来行使主机的数据报转发功能:(使用root身份执行)

IP转发步骤:

①检查数据报头部TTL值。如果TTL值为0,则舍弃该数据报。

②查看数据报头部的严格路由选择。如果该项被设置,则检测数据报的目标IP地址是否为本机的某个IP地址。如果不是,则发送一个ICMP源站选路失败报文给发送端。

③如果有必要,则给源端发送一个ICMP重定向报文,以告诉它一个更合理的下一跳路由器

④TTL值减一

⑤处理IP头部选项

 

4)ICMP重定向报文

图4  ICMP重定向报文格式

ICMP报文头部3给固定字段:8位类型、8位代码、16位校验和。(类型值为5,代码字段4个可选值,用来区分不同的重定向类型)

ICMP重定向报文的数据报部分给接收方提供两个信息:

  • 引起重定向的IP数据报的源端IP地址。
  • 应该使用的路由器的IP地址

(以此信息可以断定应该使用哪个路由器来转发和更新路由表)


五、IPV6

IPv6协议不仅解决了IPv4地址不够用的问题,还做了很大改进。例如:增加了多播和流的功能,为网络上多媒体内容的质量提供精细地控制;引入自动配置功能,使得局域网管理更加方便;增加了专门的网络安全功能。

1)IPv6 的固定头部结构

图5   IPv6固定头部结构

 

IPv6头部由40字节的固定头部可变长的拓展头部组成。

  • 4位版本号指定IP协议的版本,IPv6其值为6
  • 8位通信类型指示数据流通信类型或优先级(类似于IPV4的TOS)
  • 20位流标签,用于某些对连接的服务质量有特殊要求的通信,比如音频或视频的实时数据传输。
  • 16位净荷长度指IPV6拓展头部和应用程序数据长度之和。(不包含固定头部长度)
  • 8位下一个包头指紧跟IPv6固定头部后的包头类型(类似IPv4头部的协议字段)
  • 8位跳数限制(类似IPv4头部的TTL)
  • IPv6用128位(16字节)来表示IP地址,使得IP地址的总量达2^128个

2)IPv6 的扩展头部

可变长的扩展头部使得IPV6能支持更多选项,并且便于将来的扩展需要。它的长度可以是0,表示数据报没有使用任何扩展头部。一个数据报可以包含多个扩展头部,每个扩展头部的类型由前一个头部中的下一个报头字段指定。

图7 IPV6  拓展头部

【注意】IPV6协议不是IPv4 协议的简单拓展,而是完全独立的协议。用以太网帧封装的IPV6数据报和IPV4具有不同的类型值 (IPV4是0x800,IPv6 是0x86dd)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值