IP协议详解

IP协议是TCP/IP协议族的核心协议,也是socket网络编程的基础之一。

IP服务的主要特点

IP协议为上层协议提供无状态、无连接、不可靠的服务。

  • 无状态

无状态是指IP通信双方不同步传输数据的状态信息,所有IP数据报的发送、传输、接受都是相互独立、没有上下文关系的。这种服务优点在于简单、高效。最大的缺点是无法处理乱序和重复的IP数据报,确保IP数据报完整的工作只能交给上层协议来完成。

  • 无连接

无连接是指IP通信双方都不长久地维持对方的任何信息。上层协议每次发送数据的时候,都需要明确指出对方的IP地址。

  • 不可靠

不可靠是指IP协议不能保证IP数据报准确到达接收端,它指承诺尽最大努力交付。IP模块一旦检测到数据报发送失败,就通知上层协议,而不会试图重传。

IPv4头部


部分说明:

  • 头部长度

标识该IP头部有多少个32位bit字(4字节),由于4位最大描述15,所以IP头部最大长度为60字节。

  • 8为服务位

包括3位优先权位,4为TOS字段和1位保留字段。
4为TOS字段分别表示:最小延时,最大吞吐量、最高可靠性和最小费用。其中最多能选择一位置1,应用程序根据实际需要来设置服务类型。

  • 16位标识

唯一标识主机发送的每一个数据报。其初始值由系统随机生成;每发一个数据报就加1。每个分片中具有相同的标识值。

  • 分片偏移

有3位用于标识偏移,第一位保留,第二位DF字段(禁止分片标识),第三位MF字段(更多分片标识,最后一个分片为0,其他分片置1)。13位偏移是勇敢将实际值左移三位得到的,因此要求数据部分的长度是8的倍数。

  • 8位协议

标识上层协议,1是ICMP,6是TCP,17是UDP。

  • 16位头部校验和

IP模块接受数据后,首先对数据报头部做CRC校验,确保IP头部在传输过程中无损坏后,再分析其头部具体信息。

路由选择

  • 路由匹配

路由匹配顺序:
1) 直接匹配,查找路由表中是否由与目标IP地址完全匹配的主机IP地址,找到则匹配成功,没有的话转2;
2)查找是否有与目标IP地址具有相同网络ID的IP地址,找到则匹配成功,没有的话转3;
3)查看是否有默认网关,有则转发给它,没有的话,路由查找失败,由ICMP返回错误信息。

  • 路由更新

通过route命令或其他工具可以手工修改路由表,是静态路由更新方式。对于大型路由器,它们通常通过BGP、RIP、OSPF等协议进行动态路由更新。

IPv6头部

IPv6协议并不是IPv4的简单扩展,而是完全独立的协议。从以太网帧封装的数据类型来看,前者类型是0X86dd,后者是0x8600,是完全不同的类型。

IPv6解决了网络地址不足的问题,其头部增加了多播和流的功能,引入了自动配置功能,还增加了网络安全的功能。
其固定部分的头部如下:


部分说明:

  • 流标签

是IPv6新增加的字段,用于对某些连接的服务质量有特殊要求的通信,比如音频或者视频等实时数据传递。

  • 下一个包头

指出紧跟IPv6固定头部后的包头类型,如拓展头,或者某个上层协议头(ICMP,TCP,UDP),它类似IPv4中的协议字段,且相同的取值具有相同的含义。

推荐阅读更多精彩内容