IP协议

IP数据报的格式能够说明IP协议都具有什么功能,下图为IP数据报的完成格式。

       从上图可以看出,一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度的,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。下面介绍首部各字段的意义。

 IP数据报首部的固定部分中的各字段

1)版本       占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前使用最广泛的是IP协议版本是4(即IPv4)。

2)首部长度      占4位,可表示的最大十进制数值是15.请注意,首部长度字段所表示数的单位是32字节(1个32位长是4字节)因为IP首部的固定长度是20字节,因此首部长度字段的最小值是5(即二进制表示的首部长度是0101).而当首部长度为最大值1111时(即十进制15),就表示首部长度达到最大值15个32位字长,即60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字节加以填充。因此IP数据报的数据部分永远在4字节的整数倍时开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时不够用,这样是希望用户减少开销。最常用的首部长度是20字节(既首部长度为0101),这时不使用任何选项。

3)区分服务     占8位。用来获得更好的服务(一般不用)。

4) 总长度       总长度指首部和数据之和的长度,单位是字节。总长度字段为16位,因此数据报的最大长度为2^16-1=65535字节。然而实际上传送这样长的数据报在现实中很少遇到。

     我们知道,在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层所规定的MTU值。例如,最常用的以太网就规定其MTU值是1500字节。若所传送的数据报长度超过数据链路层的MTU值,就必须把过长的数据报进行分片处理。

5)标识    占16位,IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此赋给标识字段,但这个标识并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题,当数据报由于长度超过网络的MTU而必须分片时,这个标识子udande值被复制到所有的数据片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重新成欸原来的数据报。

6) 标志   占3位,但目前只有两位有意义。

— 标志字段中最低位为MF。MF=1即表示后面“还有分片”的数据报,MF=0表示这已是若干数据报片中的最后一个。

— 标志字段中间的一位记为DF,意思是“不能分片”。只有当DF=0时才允许分片。

7) 片偏移     占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何时开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。

8) 生存时间      占8位,生存时间字段常用英文缩写TTL(Time To Live),表名这是数据报在网络中的寿命,由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制的在互联网中兜圈子。最初的设计是以秒作为TTL值得单位。每经过一个路由器时就把TTL值减1.当TTL值减为0时,就丢弃这个数据报。后来就把TTL字段的功能改为“跳数限制”。路由器在每次转发数据报之前就把TTL减1.若TTL值减小为0,就丢弃这个数据报,不再转发。因此现在TTL的单位不再是秒,而是跳数。TTL的意义是指明数据报在互联网中至多可经过多少个路由器。显然,数据报能在互联网中经过的路由器的最大数为255。若把TTL的初始值设置为1,就表示这个数据报只能在本局域网中传送。

9) 协议  占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据上交给哪个协议进行处理。如ICMP协议为1,IP协议为4,TCP为6等。

10)首部检验和     占16位。这个字段只检验数据报的首部,但不包括数据部分。

11) 源地址     占32位。

12)目的地址     占32位。

IP层转发分组的流程

       上图(a)是一个路由表的例子,有四个A类网络通过三个路由器连接在一起。每一个网络上都可能有成千上万台主机(上图没有给出)。可以想象,若路由表指出到每一台主机应怎样转发,则所得出的路由表就会过于庞大(如果每一个网络有1万台主机,四个网络就有4万台主机,因而每一个路由表就有4万个项目,即4万行,每一行对应于一台主机)。但若路由表指出到某个网络应如何转发,则每个路由器中的路由表就只包含4个项目(即只有4行,每一行对应于一个网络)。以路由器R2的路由表为例。由于R2同时连接在网络2和网络3上,都可通过接口0或1由路由器R2直接交付(当然还要利用地址解析协议ARP才能找到这些主机相应的硬件地址)。若目的主机在网络1中,则下一跳路由器应为R1,其IP地址为20.0.0.7。路由器R2和R1由于同时连接在网络2上,因此从路由器R2把分组转发到路由器R1是很容易的。同理,若目的主机在网络4中,则路由器R2应把分组转发给IP地址为30.0.0.1的路由器R3.我们应当注意到,图中的每一个路由器都有两个不同的IP地址。

       我们可以把整个网络拓扑简化为图(b)那样。在简化图中,网络变成了一条链路。但每一个路由器旁边都注明了其IP地址。使用这样的简化图,可以使我们不必关心某个网络内部的具体拓扑及连接在该网络上有多少主机,这样的简化图强调了在互联网上转发分组时,是从一个路由器转发到下一个路由器。

总之,在路由表中,对一条路由最主要的是一下两个信息(实际路由表还有其他的信息):

(目的网络地址,下一跳地址)

      于是,我们根据目的网络地址来确定下一跳路由器,这样做可得出以下的结果:

1) IP数据报最终一定可以找到目的主机所在的目的网络上的路由器(可能要通过多次的间接交付)。

2) 只有到达最后一个路由器时,才试图向目的主机进行直接交付。

       这里应该注意,在IP数据报的首部中没有地方可以用来指明“下一跳路由器的IP地址”。在IP数据报的首部写上的IP地址是源IP地址和目的IP地址,而没有中间经过的路由器的IP地址。既然IP数据报中没有下一跳路由器的IP地址,那么待转发的数据报又怎样能够找到下一跳路由器呢?

       当路由器收到一个待转发的数据报,在从路由表得出下一跳路由器的IP地址后,不是把这个地址填入IP数据报,而是送交数据链路层的网络接口软件。网络接口软件负责把下一跳路由器的IP地址转换成硬件地址(必须使用ARP),并将此硬件地址放在链路层的MAC帧的首部,然后根据这个硬件地址找到下一跳路由器。由此可见,当发送一连串的数据报时,上述的这种查找路由表、用ARP得到硬件地址、把硬件地址写入MAC帧的首部等过程,将不断重复进行,造成了一定开效。

根据以上所述,可归纳出分组转发算法如下:

1) 从数据报的首部提取目的主机的IP地址D,得出目的主机的网络地址为N。

2) 若N就是与此路由器直接相连的某个网络地址,则直接进行直接交付,不需要再经过其他的路由器,直接把数据报交付目的主机(这里包括把目的主机地址D转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧);否则就是直接交付,执行(3)。

3) 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。

4) 若路由表中有到达网络N的路由,则把数据报传送送给路由表中所指明的下一跳路由器;否则,执行(5)。

5) 若路由表中有一个默认路由,则把数 据报传送给路由表中所指明的默认路由;否则,执行(6)。

6) 报告转发分组出错。

      这里强调一下,路由表并没有给分组指明到某个网络完整路劲(即先经过哪一个路由器,然后再经过哪一个路由器,等等)。路由表指出,到某个网络应当先到某个路由器(即下一跳路由器),在达到下一跳路由器后,再继续查找其路由表,知道再下一步应当到哪一个路由器。这样一步一步地查找下去,直到最后到达目的网络。

       用一个简单的比喻来说明查找路由表的做用。如。从家门口开车到机场,但没有地图,不知道应当走哪条路线。好在每一个道路都有一个警察可以询问。因此,每到一个岔口(相当于到了一个路由器),就问:“到机场应当走哪个方向?”(相当于查找路由表)。该警察不指明到下一个岔口以后再应当如何走,也不指明还要经过几个岔口才能到达机场。他仅仅指出下一个岔口的方向。其回答可能是:“向左转。”到了一个岔口,再讯问到机场该走哪个方向?回答可能是“直行。”这样,每到一个岔口,就询问下一步该如何走。这样,即使我们没有地图,但最终一定可以到达目的地—机场。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值