IPv4

2017-10-10  本文已影响103人  Zhang21

《Tcp/Ip协议族》笔记



网际协议版本4(IPv4)

IP分组由一个基本首部和一些选项构成,这些选项有时用于促进和控制分组的交付。

目标:

引言

网际协议(Internet Protocol,IP)是TCP/IP协议族在网络层使用的传输机制。

IP在TCP/IP协议族中的位置

IP是一种不可靠的无连接数据报协议——尽最大努力交付(best-effort delivery)的服务。尽最大努力是IP分组有可能损坏、丢失、失序或延迟到达,并且可能会给网络带来拥塞。IP依靠更高层的协议来解决所有这些问题。
如果可靠性很重要,那么IP就必须与可靠的协议(如TCP)配合起来使用。

数据报

网络(互联网)层的分组称为数据报(datagram)。数据报是一个可变长度的分组,它由两部分组成:首部和数据。
首部长度由 20字节基本首部+0-40字节可选部分构成,包含有关路由选择和交付的重要信息。

习惯上,在TCP/IP中都是以4字节为一段来表示首部。

IP数据报 服务类型 以太网帧中的填充 复用
协议
1 ICMP
2 IGMP
6 TCP
17 UDP
89 OSPF



分片

数据报可以穿越不同的网络。每个数据报都会从收到的数据帧中拆解出IP数据报,并对它进行处理,然后再封装成另一个帧;
接收到的帧格式与长度取决于这个帧刚刚经过的物理网络所使用的协议,而发送出去的帧格式与长度则取决于这个帧将要经过的物理网络所使用的协议。

例如,某台路由器将一个以太网连接到一个广域网。
那么它收到的帧是以太网格式的,而发送的帧是广域网格式的。

最大传输单元(MTU)

每个数据链路层协议都有自己的帧格式,在这个格式中有一个字段是"数据字段最大长度"。

MTU

对于不同的物理网络协议,MTU的值是不同的。

例如,以太网局域网的MTU是1500字节,FDDI局域网的MTU是4352字节,而PPP是296字节。

为了使IP协议与物理网络无关,协议设计者们决定让IP数据报的最大长度等于65535字节。如果我们使用的协议的MTU正好等于这个数值,那么传输效率会很高;
但是对于其他物理网络,就要分割数据报,使它们能够通过这些网络,这称为分片(fragmentation)

当数据报被分片时,每一个数据报都有自己的首部,其中大部分的字段是重复的,但有些是变化的;
如果已经分片的数据报遇到具有更小MTU的网络,那么这些已经分片的数据报还可以再进行分片;
换言之,数据报在到达最后终点之前可以经过多次分片。

数据报可以被源主机或途中任何路由器分片,但数据报的重装只能在目的主机上进行,因为每一个分片都变成了独立的数据报;
一方面,分片的数据报可以各走不同的路由,我们永远无法控制或保证分片的数据报应当走哪一条路径;
另一方面,属于同一个数据报的所有数据报片最终是会到达它们的目的主机;
所以,从逻辑上讲,应当在最后的终点进行重装。
另外还有一个更有力的反对在传输期间进行重装的理由,那就是这样做会严重影响效率。

当数据报被分片时,首部中一些必要的部分必须被复制到所有的分片中,其余的各字段必须被复制;
对数据报进行分片的主机或路由器必须改变三个字段的值:标志,分片偏移,总长度
不管是否进行分片,校验和的值总是要重新计算的;
只有数据报中的数据是分片的。

与分片有关的字段

与一个数据报的分片与重装有关的字段是:标识、标志和分片偏移

标志字段 分片栗子 详细的分片

即使各个分片采取不同的路径并失序到达,最终的目的主机也能够用收到的分片(假设没有丢失)组装成原始的数据报。



选项

选项对于数据报来说并不是必需的,但它可用于网络的测试和排错;
虽然选项并非IP首部的必要项目,但对选项的处理确是IP软件的必要部分。

格式

选项的组成是:类型字段(1字节)、长度字段(1字节)和值字段(可变长度)。这三个字段常被称为 TLV(type-length-value)。

选项格式

类型

类型字段(type field)长度为8位,包括了三个子字段:复制、类别和编号。

长度

长度字段(length field)定义选项的总长度,包括类型字段和长度字段本身。这个字段并不是在所有类型的选项中都会出现。

值字段(value field)包含的是某些特定选项所需的数据。这个字段并不是在所有类型的选项中都会出现。

选项类型

目前仅使用了六种选项:

选项种类



校验和

绝大多数TCP/IP协议采用的差错检测方法称为 检验和(checksum)
校验和能够防止分组在传输期间出现的损坏,校验和是附加在分组上的冗余信息。

发送端计算出校验和,并把得到的校验和与分组一起发送出去;接收端对整个分组重复同样的计算。
若得到正确结果则接收此分组,否则丢弃。

在发送端计算校验和

发送端按以下步骤产生检验和:

  1. 把分组划分成k段,每段的长度都是 n 位;
  2. 用反码算术运算把这些所有段相加;
  3. 把最终结果取反码就得到检验和。

在接收端计算检验和

接收端检验步骤:

  1. 把收到的分组划分为k段;
  2. 把所有段相加,取反码;
  3. 若为0,则接收分组。否则丢弃分组。
校验和概念

假设发送端将所有段相加后得到的数为T,当我们用反码算术运算把这个数取反码时,就得到了这个数的负值。这表示,若所有段之和为T,则校验和就是-T。
当接收端收到这个分组时,把所有段相加。这实际上就是把T与-T相加,二进制反码为-0,再取反码为0。

计算校验和

IP分组中的校验和

在IP分组中,首先把“校验和”字段值置为0。然后把整个首部划分为16位(ip首部校验和16位)的段,再将各段相加。把结果(和)取反码,把插入到ip-header的校验和字段中。

IP分组中的校验和为首部校验和,不包括数据。

发送端计算校验和 接收端计算校验和



IP在ATM上运行

在前面,我们都假设支持IP数据报在其上传送的底层网络是局域网或点对点广域网。
我们希望了解IP数据报如何通过像ATM这样的交换广域网来传送。

在ATM交换广域网中,IP分组被封装在信元中(不止一个),对于一个设备的物理地址,ATM网络有它自己的定义。在IP地址和物理地址之间的绑定是通过一个称为ATMARP的协议获得的。

ATM广域网

作为信元交换网络的ATM可以称为IP数据报的高速公路。

ATM广域网

AAL层
能被因特网使用的AAL只有AAL5,有时它称为 简单有效的适配层(simple and efficient adaptation layer,SEAL)。
AAL5假设从IP数据报中创建出来的所有信元都属于同一个报文。因此,AAL5不提供地址、序列或其它的首部信息。
实际上,只有一些填充和一个四字段的尾部被附加在IP分组上。

IP协议使用的AAL层是AAL5,使用AAL5效率更高。

信元的路由选择

ATM网络在两个路由器之间建立一条路由。我们称这两个路由器为 进入点(entering-point)路由器离去点(exiting-point)路由器

进入点和离去点路由器

地址

把信元从一个特定的进入路由器转发到一个特定的离去路由器,需要3种类型的地址:IP地址、物理地址和虚电路标识符。

地址绑定

ATM网络需要用虚电路标识符为信元选路。在IP数据报中只包含了源IP地址和目的IP地址。必须根据目的IP地址来判断其虚电路标识符。

步骤如下:

  1. 进入点路由器收到一个IP数据报。它用IP数据报的目的地址和自己的路由表来找出下一个路由器(即离去点路由器)的IP地址;
  2. 进入点路由器使用了一个称为ATMARP的协议服务找出离去点路由器的物理地址。ATMARP和ARP类似。
  3. 虚电路标识符被绑定到相应的物理地址。
IP在ATM上的地址绑定



安全性

与整个因特网一样,IPv4协议在诞生之初,因特网上的用户彼此之间都是互相信任的。IPv4没有提供任何安全措施。但是,现如今的因特网已不再安全。

安全问题

有三个安全问题是特别应用于IP协议的:

IPSec

目前我们可以使用一种称为 IPSec(IP安全性) 的协议来保护IP分组不受前面所提到的各种攻击。
这个协议是与IP协议结合在一起使用的。
它在两个实体之间创建了一种面向连接的服务,使这两个实体在交换IP分组时不用担心会受到前面三种攻击。

IPSec提供四中服务:



IP软件包

将给出一个假象的IP软件包的栗子,目的是为了展示本章所讨论的各种不同概念之间的相互关系。

IP的构件

可以认为IP软件包包含了八个构件:首部添加模块、处理模块、转发模块、分片模块、重装模块、路由表、MTU表和重装表

IP_Adding_Module(数据,目的地址)
{
    把数据封装为IP数据报
    计算校验和,并将它插入到校验和字段
    把数据发送到相应的输入队列
    返回
}
IP_Processing_Module(IP数据报)
{
    从一个输入队列中取出一个数据报
    if(目的地址与本地地址中的一个相匹配) 
     {
        把数据报发送到重装模块
        返回
    }
    if(本机是路由器)
    {
        TTL-1
    }
    if(TTL<=0)
    {
        丢弃这个数据报
        发送ICMP差错报文
        返回
    }
    把数据报发送到转发模块
    返回
}
IP_Fragmentation_Module(IP数据报)
{
    提取数据报的长度
    if(长度 > 相应网络的MTU)
    {
        if(D位 被置为1)#D位 为不分片
        {
            丢弃这个数据报
            发送ICMP报文
            返回
        }
        Else
        {
            计算最大长度
            把数据报划分为分片
            给每个分片添加首部
            给每个分片添加需要的选项
            发送分片
            返回
        }
    }
    Else
    {
        发送这个数据报
    }
    返回
}
IP_Reassembly_Module(IP数据报)
{
    if(分片偏移值为0且M为为0)
    {
        把数据报发送到适当的队列
        返回  
    }
    查找重装表中的相应表项
    if(相应表项未找到)
    {
        创建一个新的项目
    }
    在链表的适当地方插入这个分片
    if(所有的分片都已到达)
    {
        重装这些分片
        把数据交付给相应的高层协议
        返回
    }
    Else
    {
        if(超时)
        {
            丢弃所有的分片
            发送ICMP差错报文      
        }
    }
    返回
}



小结

讨论IPv4的RFC包括:RFC791、RFC815、RFC894、RFC1122、RFC2474和RFC2475.

重要术语

尽最大努力交付;        校验和;
码点;        输出队列;
数据报;        指针字段;
区分服务;        优先级;
选项结束选项;        处理模块;
进入点路由器;        重装模块;
转发模块;        重装表;
分片;        分片偏移;
分片模块;        记录路由选项;
服务类型;        严格的源路由选项;
首部添加模块;        生存时间;
输入队列;       时间戳选项;
网际协议(IP) ;        长度字段;
类型字段;        Traceroute;
不严格的源路由选项;        服务类型(TOS);
最大传输单元(MTU);    值类型;
无操作选型;
上一篇下一篇

猜你喜欢

热点阅读