Ip协议详解

文章目录
  1. 1. Ipv4头部
  2. 2. Ipv6头部
  3. 3. 转发表
  4. 4. 备注
  5. 5. 参考

Ip协议是Tcp/Ip协议中的核心协议,位于网络层,上层的tcp、udp、icmp等协议都要依靠它。
Ip协议提供了一种尽力交付、无连接的服务。不保证Ip数据包一定能到达目的地。

Ipv4头部

ipv4数据报

  • 基本的ip头部长度为20字节,可变长度的选项最多可达40字节,ip数据最多65515字节。
  • 第一个字段是版本字段,占4位。记录本数据报是ipv4还是ipv6.
  • IHL(Internet head length)是头部长度字段,占4位。记录数据报头部中32位字的数量。所以最多只能表示60个字节.
  • DS字段和ECN字段在最初是统称为服务类型(ToS)字段,后来才分成两个。
  • DS(Differentiated Services)为区分服务字段,占6位。这个字段是用来提供差异化服务的,以给数据报提供不同的优先级。
    6位中最后一位是1,表示实验或本地用途;以0结尾表示标准用途。前5位对流量类别和丢弃优先级进行了区分,具体参考RFC2474/2597/3246/5865.
  • ECN(Explicit Congestion Notification)显式拥塞通知字段,占2位。在数据报传输途中,如果一台具有拥塞感知功能的路由器检测到了拥塞,就会设置这2位,以此来通知目的主机,目的主机接收到之后会通知发送方降低发送速度。
  • 总长度字段记录数据报的总长度,长度16位,可以表示ipv4数据报的最大长度为65535字节。通过这个字段和IHL字段,可以知道数据报的数据部分从哪里开始。
  • 标示、标志、分片偏移三个字段对ip数据报的分片至关重要。
  • 16位的标示字段,是用来标记数据报的分片的。发送方主机在每次发送数据报时,会将本地计数器的值加1,然后存到该字段。如果该数据报在传送途中被分片,每个分片会分别复制这个值,目的主机接收到这些分片,就可以根据这个标示来判断哪些数据报是一伙的。
  • 3位标志字段分别是保留位、DF(don’t frame)、MF(more frame)。DF为1表示本数据报不能分片。MF为1表示后面还有分片,MF为0表示这是最后一个分片。
  • 13位的分片偏移字段,记录该数据报分片之前的位置。
  • 生存期(TTL)字段用来设置一个数据报可能经过的路由器数量上限。每台路由器再转发数据报时会将该值减1,如果达到0,就丢弃该数报并用一个ICMP消息通知发送方。
  • 8位的协议字段用来标示ip数据报所承载的数据报类型,17为udp,6为tcp,4表示ipv4.
  • 16位头部校验和字段仅计算ipv4的头部。所以内部的tcp等数据报需要自己记录本身的校验和。另外由于TTL字段每经过一台路由器就要减1,导致每次需要重新计算校验和。
  • 剩下的两块为源ip地址和目的ip地址。

Ipv6头部

ipv6数据报加入了扩展首部功能。
可扩展首部的ipv6数据报
以下为数据报具体格式:
ipv6数据报

  • 取消了首部长度,因为IPv6的首部长度是固定40个字节。
  • 取消了服务类型,因为流标号和优先级结合起来实现了服务类型的功能。
  • 取消了总长度字段,改用为有效载荷长度,有效载荷就是后面的扩展首部加上数据报中的数据。
  • 取消了标识,标志和片偏移,因为这些功能都包含在了扩展首部里面。
  • 取消了协议字段,改用为下一个首部,功能不变,这样更容易理解。
  • 取消了生存时间ttl,改用为跳数限制,功能不变,这样更容易理解,更形象了。
  • 取消了首部效验和,这样加快了路由器对数据报的处理速度,在数据链路层中,当我们发现有差错的帧就会抛弃,在运输层中,在udp中,当发现有差错就会抛弃,在tcp中,当发现有差错就会重传,直到传送到目的进程为止。因此在网路层的检测就可以精简掉。
  • 取消了选项字段,功能归并在了扩展首部上。

转发表

每个路由器和主机并不记录到达目的地的完整路径,只记录下一跳的地址。ip协议根据相应的转发表,来转发接收到的数据。一个转发表至少包含以下4部分:

  • 掩码,子网掩码,用来与ip地址执行与操作。
  • 目的网络地址,下一跳的网络地址,将数据报中的 目的地址和掩码执行按位与操作,然后跟这个目的网络地址对比。
  • 下一跳,根据对比目的网络地址,决定数据报的下一跳
    *接口,由ip层使用的标识符。

备注

  • Ip协议数据报中的目的地址在经过每一跳时都不改变,但是链路层的目的地址每跳都会发生改变。

参考

欢迎与我分享你的看法。
转载请注明出处:http://taowusheng.cn/