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中的协议字段,且相同的取值具有相同的含义。