IP协议详述

本文将从两个方面对IP协议进行详解:IP头部信息,IP数据报的路由和转发。

IP基础知识

    IP协议是TCP/IP协议栈网络层的协议,它主要是为上层提供无状态、无连接、不可靠的服务。

  • 无状态是指IP通信双方不同同步传输数据的状态信息,所有的IP数据报的发送、传输和接受都是独立的,这种服务的最大缺点是无法处理乱序和重复的IP数据报,所以每当接收端接收到完整的IP数据报,只能把其将数据部分交付给上层,而TCP协议有处理乱序、重复报文段的能力(UDP则没有)。无状态服务的有点也很明显:简单且高效。除此之外,HTTP和UDP协议都是无状态的协议。
  • 无连接是指双方都不长久的维持对方任何信息,因此上层每次发送数据都要指定对方的IP地址。
  • 不可靠是指IP协议不能保证IP数据报准确地到达接收端,他只是尽力而为,很多情况下IP数据报都会丢失,如:生存时间TTL到达上限或者接收端发现IP数据报错误,都会传一个ICMP错误消息给发送端,发送端检测IP数据报发送失败,就通知上层协议,因此上层协议如果要求可靠传输,就要自己实现数据确认、超时重传等机制。

IPV4头部结构

     IP头部结构如图所示,通常情况为20字节

  •  版本号:指定IP协议版本号,对于IPV4来说是4
  • 4位头部长度:表示该IP头部有多少个4字节,4位最大能表示15,所以头部最长为60字节
  • 8位服务类型(TOS):包括一个3bit的优先权子字段(现在已被忽略),4bit的TOS子字段和1bit未用位但必须置0。4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。
  • 16位总长度:是指整个IP数据报的字节数,因此IP数据报最大长度为65535字节。
  • 16位数据报标识:唯一标识主机发送的每一个数据报,同一个数据报的所有分片都具有相同的标识
  • 3位标志位:第一位保留;第二位表示“禁止分片”DF,若置位则禁止分片,若IP数据报长度超过MTU,则数据报就会被丢弃;第三位表示“更多分片”MF,除最后一个分片外,其他都要置1
  • 13位分片偏移:是分片相对IP数据报开始处(仅指数据分布)的偏移。
  • 8位生存时间:是指数据报到达目的地之前允许经过的路由器跳数。
  •  8位协议:是用来区分上层协议的
  • 16位头部校验:由发送端填充,接收端对其使用CRC算法以检查IP数据报头部在传输过程中是否损坏
  • 32位源端IP和目的端IP:用来标识数据报的发送端和接收端的。
  • 选项:最长40字节,主要包括:记录路由、时间戳、松散源路由选择、严格源路由选择

IP分片

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

    IP头部中的数据报标志、标志和片偏移都为IP分组提供了足够的信息。一个IP数据报的每个分片都具有自己的IP头部,他们具有相同的标识,但是具有不同的片偏移,并且除了最后一个分片外,其他分片都设置MF标志。

IP路由

    IP数据报的路由是决定发送数据报到目标机器的路径。

    当IP模块接收到来自数据链路层的IP数据报时,他首先对该数据报的头部做CRC校验,确认无误后可分析其头部信息。

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

    IP模块实现数据报路由的核心数据结构是路由表。可以用route和netstat查看路由表。

     给定数据报的目标IP地址,如果匹配路由表?即IP路由机制,三个步骤。

(1)查找路由表中和数据报目标IP地址完全匹配的主机IP地址,若找到则用该项,若没找到转第二步。

(2)查找路由表中和数据报的目标IP地址具有相同网络ID的网络IP地址(比如Gateway),若找到则用该项,没找到转第三步。

(3)选择默认路由项。

IP转发

    对于允许IP数据报转发地系统(主机或路由器),数据报转发子模块将对期望转发的数据报执行如下操作:

    1)检查数据报头部的TTL值,如果TTL=0则丢弃该数据报

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

    3)如果有必要,给源端发送一个ICMP重定向报文

    4)将TTL值减1

    5)处理IP头部选项

    6)如果有必要则执行IP分片

ICMP重定向

    ICMP协议(因特网控制报文协议)也是网络层一个重要的协议,主要用来检测网络连接,ICMP重定向报文也可以更新路由表。

    图中8位类型字段用于区分报文类型,他将ICMP报文分成两大类:一类是差错报文,这类报文主要用来回应网络错误,另一类是查询报文,这类报文用来查询网络信息,比如ping程序。16位校验和字段对于整个报文进行CRC检验,检查报文在传输过程中是否损坏。

    ICMP重定向报文的类型是5,代码字段有4个可选值,用来区分不同的重定向类型,主机重定向代码值为1。ICMP重定向报文数据部分提供两个信息:

    1)引起重定向的IP数据报的源端IP地址。

    2)应该使用的路由器的IP地址

   

参考 《Linux高性能服务器编程》、《TCP/IP详解卷》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值