IP协议详解 | 您所在的位置:网站首页 › 北京地铁最新资讯新闻联播视频 › IP协议详解 |
IP协议是TCP/IP协议族的核心协议,其主要包含两个方面: IP头部信息。IP头部信息出现在每个IP数据报中,用于指定IP通信的源端IP地址、目的端IP地址,指导IP分片和重组,以及指定部分通信行为。IP数据报的路由和转发。IP数据报的路由和转发发生在除目标机器之外的所有主机和路由器上。它们决定数据报是否应该转发以及如何转发。 一、IP服务的特点IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。 无状态是指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输和接收都是相互独立、没有上下文关系的。这种服务最大的缺点就是无法处理乱序和重复的IP数据报。面向连接的协议,比如TCP协议,能够自己处理乱序的、重复的报文段,它递交给上层协议的内容绝对是有序的、正确的。无状态服务的优点也很明显:简单、高效。我们无需为保持通信的状态而分配一些内核资源,也无需每次传输数据时都携带状态信息。 无连接是指IP通信双方都不长久地维持对方的任何信息。这样上层协议每次发送数据的时候,都必须明确指定对方的IP地址。 不可靠是指IP协议不能保证IP数据报准确地到达接收端,它只是承诺尽最大努力。很多情况都可以导致IP数据报发送失败。比如,某个中转路由器发现IP数据报在网络上存活地时间太长,那么它将丢弃该报文,并返回一个ICMP错误消息给发送端。因此,使用IP服务地上层协议需要自己实现数据确认、超时重传等机制以达到可靠传输的目的。 二、IPv4头部结构IPv4的头部结构如下所示,其长度通常为20个字节,除非含有可变长的选项部分。 1、记录路由,告诉数据报途径的所有路由器都将自己的IP地址填入IP头部的选项部分,这样就可以跟踪数据报的传递路径。 2、时间戳,告诉每个路由器都将数据报被转发的时间填入IP头部的选项部分,这样就可以测量途径路由之间数据报传输时间。 3、松散源路由选择,指定一个路由器IP地址列表,数据报发送过程必须经过其中所有的路由器。 4、严格源路由选择,和松散源路由选择类似,不过数据报只能经过被指定的路由器。 三、IP分片前文提到过,当IP数据报的长度超过帧的MTU时,它将被分片传输。分片可能发生在发送端,也可能发生在中转路由器上,而且可能在传输过程中多次分片,但只有在最终的目标机器上,这些分片才会被内核中的IP模块重新组装。 IP头部中的如下三个字段给IP的分片和重组提供了足够的信息:数据报标识、标志和片偏移。一个IP数据报的每个分片都具有自己的IP头部,它们具有相同的标识值,但具有不同的片偏移。并且除了最后一个分片外,其他分片都将设置MF标志。此外,每个分片的IP头部的总长度字段将被设置位该分片的长度。 以太网帧的MTU时1500字节,因此它携带的IP数据报的数据部分最多是1480字节(IP头部占用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模块复制到第一个IP分片中,使其总长度为1500字节,从而满足MTU的要求;而多出最后1字节则被复制到第二个IP分片中。 需要指出的是,ICMP报文的头部长度取决于报文的类型,其变化范围很大,上图以8字节为例。 四、IP路由IP协议的一个核心任务是数据报的路由,即决定发送数据报到目标机器的路径。 1、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、路由机制 首先,我们熟悉以下路由表的内容: 路由器是如何按照IP地址分类的呢?或者说给定数据报的目标IP地址,它将匹配路由表中的哪一项呢?这就是IP的路由机制,分为3个步骤: 查找路由表中的数据报的目标IP地址完全匹配的主机IP地址。如果找到,就是用该路由项,没找到则转步骤2.查找路由表中的数据报目标IP地址具有相同网络ID的网络IP地址。如果找到,就使用该路由项;没找到则转步骤3.选择默认路由项,这通常意味着数据报的下一跳路由是网关。 五、IP转发前文提到,不是发送给本机的IP数据报将由数据报转发子模块来处理。路由器都能执行数据报的转发操作,而主机一般只能发送和接受数据报,这是因为主机上/proc/sys/net/ipv4/ip_forward内核参数默认被设置为0.我们可以通过修改它来实现主机的数据报转发功能。 对于允许IP数据报转发的系统,数据报转发子模块将对期望转发的数据报执行如下操作: 检查数据报头部的TTL值。如果TTL值已是0,则丢弃该数据报。查看数据报头部的严格源路由选择选项。如果该选项被设置,则检查数据报的目标IP地址是否是本机的某个IP地址。如果不是,则发送一个ICMP源站选路失败报文给发送端。如果有必要,则给源端发送一个ICMP重定向报文,以告诉它一个更合理的下一跳路由器。将TTL值减1处理IP头部选项。如果有必要,则执行IP分片操作。 六、ICMP重定向报文ICMP重定向报文也能用于更新路由表。 1、ICMP重定向报文 前边讨论过ICMP报文头部的3个固定字段:8位类型、8位代码和16位校验和。ICMP重定向报文的类型值是5,代码字段有4个可选值,用来区分不同的重定向类型。以下介绍主机重定向,其代码值是1. ICMP重定向报文的数据部分含义很明确,它给接收方提供了如下两个信息: 引起重定向的IP数据报的源端IP地址。应该使用的路由器的IP地址。接受主机根据这两个信息就可以断定引起重定向的IP数据报应该使用哪个路由器来转发,并且以此来更新路由表(通常是更新路由表缓冲,而不是直接更改路由表)。 /proc/sys/net/ipv4/conf/all/send_redirects内核参数指定是否允许发送ICMP重定向报文,而/proc/sys/net/ipv4/conf/all/accept_redirects内核参数则指定是否允许接收ICMP重定向报文。一般来说,主机只能接收ICMP重定向报文,而路由器只能发送ICMP重定向报文。 七、IPv6头部结构IPv6协议是网络层技术发展的必然趋势。它不仅解决了IPv4地址不够用的问题,还做了很大的改进。比如,增加了多播和流的功能,为网络上多媒体内容的质量提供精细的控制;引入自动配置功能,使得局域网管理更方便;增加了专门的网络安全功能等。 1、IPv6固定头部结构 IPv6头部由40字节的固定头部和可变长的扩展头部组成。如下: 2、IPv6扩展头部 可变长的扩展头部使得IPv6能支持更多的选项,并且很便于将来的扩展需要。它的长度可以是0,表示数据报没有使用任何扩展头部。一个数据报可以包含多个扩展头部,每个扩展头部的类型由前一个头部中的下一个报头字段指定。目前可以使用的扩展头部如下: |
CopyRight 2018-2019 实验室设备网 版权所有 |