TCP/IP协议——IP协议

引言IP协议是TCP/IP协议族中最核心的协议,所有的TCP,UDP、ICMP以及IGMP等协议都以IP数据报的格式传输 。IP协议提供最好的传输服务,其提供无连接、不可靠的数据传输 。或许这句话读起来很矛盾,为什么说是最好的传输服务,但同时又是不可靠的呢 。
最好的传输可以认为IP协议会尽一切能力到达目的主机,若中途发生错误无法到达目的主机,也会返回一个ICMP错误报文 。收到IP协议返回的错误报文后,本机就知道报文没有成功到达目的主机 。而接下来的传输可靠性,即重传,则不属于IP协议的范畴,而是通过TCP协议(或者自己实现的应用层协议)来保证 。
不可靠是指即使传输过程中出现错误,IP协议并不负责处理报文重传的工作,而是交给上层协议 。
无连接是指IP协议的首部中不保存维护任何关于后续数据报的相关状态信息 。
3.2.IP首部IP数据报的格式如图3-1:

TCP/IP协议——IP协议

文章插图
3-1
版本:IP协议的版本号,IPV4即为4
首部长度:包含任意选项,以32位字为单位的长度 。由于是一个4比特字段,可知IP首部最长为16*4字节,即64字节
服务类型:包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位但必须置0 。4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用 。4 bit中只能置其中1 bit 。如果所有4 bit均为0,那么就意味着是一般服务 。
总长度:代表IP数据包的总长(包括其后承载的协议首部与用户数据),由于其有16bit,单位为字节数,可知IP数据报的总长度为65536字节 。不过尽管IP首部允许其传输如此大的字节数,以太网封装的链路层也是不允许的,以太网封装的链路层,最大允许承载的IP数据报长度为1500字节 。并且主机也要求不能接收超过576字节的数据报 。该限制不会影响到TCP协议,因为TCP协议会主动将数据包分段传输 。
标识:唯一的标识主机发送的每一份数据报,通常每发送一份数据报就会加1,在IP分片中起到顺序重组的作用 。
标志:标志该报文类型,在IP分片中代表该报文是否是分片报文
片偏移:分片报文中指明偏移量
生存时间TTL:设置数据报可以经过的路由跳数,每经过一个路由则减1,减到0仍为到达目的主机则丢弃该报文 。可解决黑洞路由,报文一直占用带宽的问题 。TTL最大值为255.
协议:即指明IP首部后承载的协议类型,如ICMP/IGMP/TCP/UDP等,前文曾提到该字段 。
首部检验和:仅包括IP数据报首部的检验和,检验和的计算不包含其承载的IGMP/ICMP等协议的报文内容 。检验和可以检验IP数据报在传输过程中,首部是否出现的错误 。RFC 1071包含了如何计算检验和的方法,感兴趣可以了解 。
源IP地址:即前文所述的32位互联网地址,代表报文的始发主机 。
目的ip地址:代表报文的目的主机 。
选项:是一个任选项,可以用作以下领域,但很少被使用 。
  • 安全和处理限制(详细内容可参考RFC 1108)
  • 记录路径(即报文传输过程中,让经过的路由器记录其地址)
  • 时间戳(即报文传输过程中,让经过的路由器记录其时间与地址)
  • 宽松的源站选路(为数据报选定一系列必须经过的IP地址)
  • 严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)
很少被使用且并不是所有的主机与路由器都实现了这些选项 。值得注意的是选项字段必须是32位的整数倍,因为首部长度是32bit的整数倍 。若未达到32位的整数倍,可以用0填充 。
3.3.IP路由选路IP协议提供的最本质的服务之一就是为报文提供选路功能 。
IP层的路由功能存在两种模式,一种是路由器模式,一种是主机模式 。一般来说,主机是不作为路由器模式使用 。
路由器模式与主机模式的本质区别在于系统是否转发从网络口接收进来的报文 。若配置为主机模式,则对目的ip非本机的报文,系统做丢弃处理,而路由器则会去查找路由表(提供选路信息的转发表),若查找到则将该报文从对应的网络接口转发出去,转发之前需要更改报文的源目mac地址,且TTL-1(如前文所述,为了防止黑洞路由占用带宽),若TTL被减为0,则做丢弃处理不转发 。两种模式对于目的ip属于本机或者为广播地址(广播地址即前文所述的5类互联网地址中主机号为全1的互联网地址)的报文,数据报就被送到由I P首部协议字段所指定的协议模块进行处理 。


推荐阅读