IP协议详解

一、IP服务的特点

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

1、无状态

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

 该服务最大的缺点:无法处理乱序和重复的IP数据报。比如发送端发送出的第N个IP数据报可能比第N+1个IP数据报后到达接收端,而同一个IP数据报也可能经过不同的路径多次到达接收端。在这两种情况下,接收端的IP模块无法检测到乱序和重复,因为这些IP数据报之间没有任何上下文关系。接收端的IP模块只要接收到了完整的IP数据报(如果是IP分片的话,IP模块将先执行重组),就将其数据部分(TCP报文段、UDP数据报或者ICMP报文)上交给上层协议。那么从上层协议来看这些数据可能就是乱序的、重复的。面向连接的协议,比如TCP协议,则能够自己处理乱序的、重复的报文段,递交给上层协议的内容绝对是有序的、正确的。

  该服务的优点:简单、高效。我们无须为保持通信的状态而分配一些内核资源,也无须每次传输数据时都携带状态信息

  虽然IP数据报头部提供了一个标识字段,用以唯一标识一一个IP数据报,但它是被用来处理IP分片和重组的,而不是用来指示接收顺序的。

(2)无连接

  指IP通信双方都不长久的维持对方的任何信息。这样上层协议每次发送数据的时候,都必须明确指定对方的IP地址

  指IP协议不能保证IP数据报准确的到达接收端,它只是承诺尽最大努力。很多情况都能能导致IP数据报发送失败,比如,某个中转路由发现IP数据报在网络上存活的时间太久(根据IP数据报头部字段TTL判断),那么它将丢弃这个数据报,并返回一个ICMP错误信息(超时错误)给发送端。又比如,接收端发现接收的IP数据报不正确(通过检验机制),它将丢弃之,并返回一个ICMP错误信息(IP头部参数错误)给发送端。无论哪种情况,发送端的IP模块一旦检测到IP数据报发送失败,就通知上层协议发送失败,而不会试图重传。因此,使用IP服务的上层协议(比如TCP协议)需要自己实现数据确认、超时重传等机制可以达到可靠传输的目的

二、Ipv4头部结构

16位总长度:指整个IP数据报的长度,以字节为单位,因此IP数据报的最大长度为65535(2^16-1)字节。但由于MTU的限制,长度超过MTU的数据报都将被分片传输,所以实际传输的IP数据报(或分片)的长度都没有达到最大值

下面的3的字段描述了如何实现分片

16位标识符:唯一的标识主机发送的每一个数据报。其初始值由系统随机生成。每发送一个数据报其值就加1。该值在数据报分片时被复制到每个分片中,因此同一个数据报的所有分片的标识符都一样。

3位标志位:第一位为保留位,第二表示“禁止分片”。如果设置了这个位,IP模块将不对数据报进行分片。在这种情况下,如果IP数据报的长度超过了MTU,IP模块将该数据报丢弃,并返回一个ICMP差错报文。第三位表示“更多分片”。除了数据报的最后一个分片外,其他分片都要把它置为1

13位分片偏移:是分片相对于原始IP数据报开始处(仅指数据部分)的偏移。实际的偏移值是该值左移3位(乘8)后得到的。由于这个原因,除了最后一个IP分片外,每个IP分片的数据部分的长度必须是8的整数倍(这样才能保证后面的IP分片拥有一个合适的偏移值)

8位生存时间TTL:数据报到达目的地之前允许经过的路由器跳数。TTL值被发送端设置(常见的值是64).数据报在转发过程中每经过一个路由,该值就被路由器减1.当TTL值被减为0时,路由器就丢弃数据报,并向源端发送一个ICMP差错报文。TTL值可以防止数据报陷入路由循环。

8位协议:用来区分上层协议

16位头部校验和:由发送端填充,接收端对其使用CRC算法以检验IP数据报头部(注意,仅检验头部)在传输过程中是否损坏

32位源端IP地址和目的IP地址:用来表示数据报的发送端和接收端

二、IP分片

当IP数据报长度超过MTU时,会进行分片,也可能会经过多次分片,但只有在最终的目标主机上,这些分片才会被内核中的IP数据模块重新组装。每个分片的IP头部的总长度字段将被设置为该分片的长度。请注意,在携带ICMP报文的IP数据报被分片的时候,原始IP数据报中的ICMP头部内容被完整的复制到了第一个IP分片中。第二个IP分片以及后续的分片不包含ICMP头部信息,因为IP模块重组该ICMP报文的时候只需要一份ICMP头部信息,重复传送这个信息没有任何益处

、IP路由

(1)IP协议的一个核心任务时数据报的路由,即决定发送数据报到目标机器的路径。

(2)可以使用route或netstat命令来查看路由表

(3)路由表必须能够更新,以反映网络连接的变化,这样IP模块才能准确、高效的转发数据报

(4)静态的路由更新方式:route命令或其他工具手工修改路由表

(5)动态的、自动的更新路由表的方式:对于大型路由器通常通过BGP(边际网关协议)、RIP(路由信息协议)、OSPF等协议

四、重定向

图2-4ICMP重定向报文格式(后加)

ICMP重定向报文的数据部分含义很明确,它给接收方提供了如下两个信息:

(1)引起重定向的IP数据报(即图中的原始数据报)的源端P地址

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

接收主机很根据这两个信息就可以断定引起重定向的IP数据报应该使用哪个路由器来转发,并且以此来更新路由表(通常更新的是路由缓冲,而不是直接更改路由表)

五、IPV6头部结构

  IPV6是网络层技术发展的必然趋势。它不仅解决了IPV4地址不够用的问题,还做了很大的改进,比如增加了多播和流的功能,为网络上多媒体内容的质量提供精细的控制,引入自动配置功能使得局域网管理方便;增加了专门的网络安全功能

  • 20位流标签:是IPV6新增的字段,用于某些对连接的服务质量有特殊要求的通信,比如音频或视频等实时数据传输
  • 16位净荷长度:指IPV6扩展头部和应用程序数据长度之和,不包括固定头部长度
  • 8位下一个包头:指紧跟IPV6固定头部后的包头类型,如扩展(如果有的话)或某个上层协议(比如TCP、UDP、ICMP)。它类似于IPV4头部中的协议字段。且相同的取值有相同的含义
  • 8位跳数限制:和IPV4中的TTL含义相同
  • IPV6用128位(16字节)来表示IP地址,使得IP地址的总量达到2^128个。所以说“Ipv6使得地球上的每粒沙子都有一个IP地址”
  • 32位表示的IPV4地址一般用于点分十进制来表示,而IPV6地址则用十六进制字符串表示

注意:Ipv6协议并不是IPV4协议的简单扩展,而是完全独立的协议。用以太网帧封装的IPV6数据报和IPV4数据报具有不同类型值。IPV4数据报的以太网帧封装类型值是0X800,而IPV6数据报的以太网帧封装类型值是0X86dd

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值