IP:网际协议

概述

IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP、及IGMP数据都以IP数据报格式传输。
IP提供不可靠、无连接的数据报传送服务。
不可靠的意思是它不能保证IP数据报能成功到达目的地。任何要求的可靠性必须由上层来提供(如TCP)。
无连接这个术语的意思是IP并不维护任何关于后续数据报的状态信息。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A之前先到达。

IP地址

互联网上的每个接口必须有一个唯一的Internet地址(IP地址)。IP地址具有一定的结构,五类不同的IP地址格式如下图所示。

有三类IP地址:单播地址(目的端为单个主机)、广播地址(目的端为给定网络上的所有主机)以及多播地址(目的端为同一组内的所有主机)

IP首部


IP数据包的格式如上图所示, 普通的IP首部长为20个字节,除非含有选项字段。分析上图的首部,最高位在左边,记为0bit,最低位在右边,记为31bit。这种传输次序称作big endian字节序,由于TCP、IP首部中的所有二进制整数在网络中传输时都要求以这种次序,因此又称为网络字节序。以其他形式存储二进制整数的机器,例如little endian格式,则必须在传输数据之前把首部转换成网络字节序。
目前最常用的协议版本号是4,因此IP有时也称作IPV4.
首部长度指的是首部占32bit字的数目,包括任何选项。
服务类型(TOS)字段包括一个3bit的优先权字段(现在已被忽略),4bit的TOS字段和1bit未用但必须置为0.4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。
总长度字段是指整个IP数据报的长度,以字节为单位。由于该字段长16比特,所以IP数据报最长可达65535字节。
标识字段唯一地标识主机发送的每一份数据报。
TTL(time to live)生存时间字段设置了数据报可以经过的最多路由数器数。它指定了数据报的生存时间。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减1。当该字段的值为0时,数据包就被丢弃,并发送ICMP报文通知源主机。
协议字段是一个长度为8bit的数值。1表示ICMP协议,2表示IGMP协议,6表示TCP协议,17表示UDP协议。
首部检验和字段是根据IP首部计算的校验码。具体可参见这里
每一份IP数据报都包含源IP地址和目的IP地址。
最后一个是任选项,是数据报中的一个可变长的可选信息。

IP路由选择

此部分比较复杂,在以后的博文中会进行详细研究。

子网寻址

现在所有的主机都要求支持子网编址。不是把IP地址看成单纯由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。
这么做的原因是因为A类和B类地址为主机号分配了太多的空间,可分别容纳的主机数量为2的24次方-2和2的2的16次方-2(由于全0或全1的主机号是无效的,因此我们把总数-2).事实上,在一个网络中人们并不安排这么多的主机。
从InterNIC获得某类IP网络号后,就由当地的系统管理员来进行分配,有他决定来决定是否建立子网,以及分配多少比特给子网号和主机号。
子网对外部路由器来说隐藏了内部网络阻止(一个校园或公司内部)的细节。
与30个C类地址,用一个包含30个子网的B类地址的好处是,它可以缩小Internet路由表的规模。

子网掩码

子网掩码是一个32bit的值,其中值为1的比特留个网络号和子网号,为0的比特留给主机号。
尽管IP地址一般以点分十进制表示,但是子网掩码却经常用十六进制来表示。
给定子网掩码后,主机就可以确定IP数据报的目的是:
(1)本子网上的主机
(2)本网络中的其他主机
(3)其他网络上的主机