IP协议

IP协议:网络层的核心协议,IP协议根据数据包的目的IP地址来决定如何投递它。如果数据包不能直接发送给目标主机,那么IP协议就为它寻找一个合适的下一个路由器,并将数据包交付给该路由器来转发,并多次重复这一过程,直至数据包到达目标主机,或者因发送失败而丢弃。

IP服务的特点:它为上层协议提供无状态、无连接、不可靠的服务。
①无状态:IP通信的双方不同步传输数据的状态信息。缺点:无法处理乱序和重复的IP数据报。优点:简单、高效,无需为保持通信状态而分配一些内核资源。(http协议也是无状态的:一个浏览器的连续两次网页请求之间没有任何关联,会被Web服务器独立的处理)
②无连接:IP通信双方都不长久地维持对方的任何信息。这样上层协议每次发送数据都必须明确的指定对方的IP地址。
③不可靠:IP协议不保证IP数据报准确的到达接收端,它只是尽它最大努力。很多种情况都可能导致IP数据报发送失败,无论什么情况,发送端的IP模块一旦检测到IP数据报发送失败,就通知上层协议发送失败,而不会试图重传,因此使用IP协议必须自己实现数据的确认、超时重传等机制。

<1>IP头部信息:用于指定IP通信的源端IP地址、目的端IP地址。
IPV4头部信息:
IP协议
①4位版本号:IPV4的版本号为4。
②4位头部长度:标识该IP头部有多少个4字节,4位最大标识15,所以IP头部最长为60字节。
③8位服务类型:3位的优先权字段,1个保留字段(必须置0),4位TOS表示,最小延时,最大吞吐量,最高可靠性,最小费用,最多有一个能置为1。
④16位总长度:整个IP数据报的长度,字节为单位,因此,IP数据报的最大长度65535(2^16-1)字节。由于MTU(以太网帧1500字节)的限制,长度超过MTU的数据报都将被分片传输,实际传输的IP数据报的长度远远没有达到最大值,接下来的三个字段描述如何实现分片。
⑤16位标识:唯一的标识主机发送的每一个数据报,初始值由系统随机分配,每发送一个其值就+1。该值在数据报分片时被复制到每个分片,因此同一数据报的所有分片都具有相同的标识。
⑥3位标志字段:第一位保留,第二位表示禁止分片。此时如果IP数据报的长度超过MTU,IP模块将丢弃该数据报并返回一个ICMP差错报文,第三位表示更多分片,除了数据报的最后一个分片,其他分片都要把它置。
⑦13位分片偏移:是分片相对原始IP数据报的开始处的偏移。实际的偏移值是该值左移3位得到的。因此除了最后一个IP分片外,每个IP分片的数据部分的长度必须是8的整数倍。
⑧8位的生存时间(TTL):是数据报在到达目的之前允许经过的路由器数目。
⑨8位协议:用来区分上层协议,TCP是6,UDP是17。在/etc/protocols文件中定义。
⑩16位头部检验和:由发送端填充,接收方对其使用CRC算法以检验IP数据报头部在传输过程中是否损坏。
⑪32位源端和目的端IP地址用来标识数据报的发送端和接收端。
⑫选项字段:可变长的可选信息,最多40个字节,前边的20个字节是固定的,可选项包括:记录路由:记录所有经过的路由器的IP地址,以跟踪传输路径。时间戳:路由器将数据报转发的时间填入对应的头部选项,以测量途经路由器之间的数据报传输时间。松散源路由选择:指定路由转发地址列表,数据报必须经过其中所有的路由器。严格源路由选项:数据报智能经过被指定的路由器。

<2>IP数据报转发(主机或路由):IP数据报的路由和转发发生在除目标机器之外的所有主机和路由器智商。他们决定数据报是否应该转发以及如何转发。
①检查数据报头部的TTL值,每经过一个路由器TTL减1,当TTL值为0的时候,数据报将会被丢弃,并向源端发送ICMP差错报文。TTL值可以防止数据报陷入路由循环。
②查看数据报头部的严格源路由选项,如果该选项被设置,则检测数据报的目标IP地址是否是本机的某个IP地址。如果不是,则发送一个ICMP源站选路失败报文给发送端。
③如果有必要,则给源端发送一个ICMP重定向报文,以告诉它一个更合理的下一跳路由器。
④TTL减1。
⑤处理IP头部选项。
⑥如果有必要,则执行IP分片操作。

<3>IPV6头部信息:由40字节的固定头部和可变长的扩展头部组成。
IP协议
①4位版本号:IPV6为6。
②8位通信类型:数据流通信类型或优先级,和IPV4的TOS相似。
③20位流标签:用于某些对连接的服务质量有特殊要求的通信。比如音频和视频的实时传输。
④16位净荷长度:IPV6扩展头部和应用数据长度之和,不包含固定头部长度。
⑤8位下一个包头:紧跟IPV6固定头部后的包头类型,相似于IPV4的协议字段。
⑥8位跳数限制:同IPV4的TTL。
⑦128位源端以及128位目的端IP地址:使得IP地址的总量达到了2^128个。