引言
IP是TCP/IP协议簇中最核心的协议之一。IP提供不可靠、无连接的数据报传输服务。
不可靠(unreliable)的意思是IP不能保证数据报能成功地到达目的地,它仅仅尽最大努力提供最好的传输服务。当其发生某种错误时,例如路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报(通常是最后达到的数据报),然后发送ICMP消息报给主机。任何可靠性的要求都由上层的TCP来提供。
无连接(connectionless)的意思是IP并不维护任何已经发送出去的数据报的相关信息,每个数据报都是单独处理,也就是说IP可以不按顺序发送数据报。
IP头部
IPv4数据报头部如下:
IPv6数据报头部如下:
4个字节的32位值以如下次序传输:首先是0-7位,接着8-15位,然后16-23位,最后24-31位,这种传输次序被称为大端字节序(big endian),也叫做网络字节序。然而大部分主机使用的是小端字节序,与其刚好相反,如果主机使用的是小段字节序,则需要对其进行转换。
【补充说明】:大端字节序指的是对于内存中的一个32位的整数,低位字节的内存地址存储的是整数的高位字节,高位字节的内存地址存储的是整数的低位字节;小端字节序则是低位字节的内存地址存储整数的低位字节。
IP头部区域
版本号(Version):占4位,表明IP数据报的版本号,4表示为IPv4,6表示为IPv6。
头部长度(IHL(Internet Header Length)):表明IPv4数据报头部占32位字长的数目,包含了选项(Options)。由于头部长度占4位,故而IPv4数据报头部最长为32 / 8 * 15 = 60个字节,而IPv6没有该字段是因为IPv6头部固定为40字节。
服务类型(ToS):8位被划分为两部分,前6位表示区分服务字段(DSField(Differentiated Services Field)),后两位表示为显式拥塞通知(ECN(Explicit Congestion Notification))。在IPv4中叫做服务类型,而在IPv6则叫做流量级别(Traffic Class)。服务类型的前3位表示一个优先权子字段(现在已被忽略),接着是3位的ToS子字段和1位必须置0的未用位。其中4位的ToS子字段分别表示最小延迟、最大吞吐量、最高可靠性和最小费用。
总长度(Total Length):占16位,指整个IPv4数据报的长度,以字节为单位。通过头部长度字段(IHL)和该总长度字段就可以得出IPv4数据报中数据的长度。总长度是IPv4头部中必须的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。根据总长度可以算出整个IPv4数据报最大长度为65535字节。
标识(Identification):占16位,唯一地标识主机发送出去的每一份IPv4数据报,通常每发送一份IPv4数据报则该值加1。
标志(Flags)和片段偏移(Fragment Offset):与IP分片相关,由于大部分链路层(如以太网ÿ