Internet 层协议
物理层和数据链路层并不属于TCP/IP协议,它们仅实现了同一物理网络内的帧传输。为了实现网络互联,必须用路由器把彼此独立的网络互联起来。路由器应能在不改变所连接的子网的网络结构前提下提供网络间的链路,为连到不同网络的端系统的进程提供路由和数据递交功能。TCP/IP协议实现了网络间的互联,它由一组协议簇组成,其中最主要的协议是网际协议(IP)和传输控制协议(TCP)。
为了在互联网上投递IP数据报,首先要解决互联网上的寻址问题。各种网络之间的寻址方式往往是不相同的。在同一网络内物理地址与接口硬件有关,当把接口移到新机器上或替换失效的硬件接口将改变机器的物理地址。两个需要通信的双方无法依赖不兼容的随时可能改变的物理地址来通信。为此,TCP/IP协议采用了IP地址方案。
1.IP地址
TCP/IP使用32位的二进制数作为通用的机器标识符,称为IP地址(Internet Protocol Address)。32位IP地址被分成前缀(Prefix)与后缀(Suffix)两个部分。前缀表示该计算机所接入的物理网络,后缀表示该物理网络上的某特定主机。
为了满足不同规模的物理网络对地址的需求,将IP地址分成五类。其中A类、B类和C类用作主机地址(Host Addresses),称为主要类别(Primary Classes),根据网络规模分给相应类别的IP地址;D类是多播地址(Multicast Address);E类保留为今后使用。
为了易于理解,IP地址的表示采用点分十进制表示法(Dotted Decimal Notation),即每8位二进制数值用十进制数表示,且每个量之间用一个点分开。
为了保证所分配的IP地址在Internet中的唯一性,Internet编号分配管理机构IANA(Internet Assigned Number Authority)对所分配的编码有最终控制权。当一个组织加入Internet时,可以从Internet网络信息中心INTERNIC(INTERnet Network Information Center)那里获得网络地址。
IP地址是指向网络连接的。因此,多地址主机(Multi Homed Host)和路由器的每一个连结有一个地址。除了指向连接的地址外,IP还有如下特殊地址:
a.网络地址(Network Address):IP把主机号的所有位都为“0”的地址保留给网络本身;
b.定向广播地址(Directed Broadcast Address):IP把主机的所有位都为“1”的地址指定为定向广播地址;
c.有限广播地址(Limited Broadcast Address):由32个“1”组成,它只向本地网络广播;
d.本主机地址(This Computer Address):由32个“0”组成,仅在系统启动时允许使用,并且永远都不是有效目的地址;
e.回送地址(Loopback):用于检测网络应用软件,允许在一台计算机上进行通信试验,它永远不能在一个网络上出现。
2.捆绑协议地址
IP地址的分配是独立于机器的物理硬件地址的,为了在物理网络上传送分组给下一跳(可以是目的地或另一个路由器),下一跳的IP地址必须转换成它所对应的物理地址,并用这个物理地址传送该帧。
由IP地址确定其对应的硬件地址的过程叫地址解析(Address Resolution),地址解析算法可以分成以下三种基本类型。
a.表查询(Table Lookup):将协议地址与其对应的物理地址进行捆绑存入内存的一个表中,当需要进行地址解析时,由软件在表中进行查找。
b.紧密关联形式计算(Closed-Form Computation):分配给计算机的协议地址是根据其物理地址经过仔细挑选的,使得计算机的物理地址可以由它的协议地址经过基本的逻辑和算术运算计算出来。
c.信息交换(Message Exchange):位于同一物理网络的计算机通过交换信息进行地址解析。
TCP/IP协议包含了地址解析协议(ARP)。ARP标准定义了两种基本信息类型:请求与响应。当一台主机要求转换一个IP地址时,它广播一个含有该IP地址的ARP请求,如果该请求与一台机器的IP地址匹配,则该机器发出一个含有所需物理地址的应答。应答是直接发给广播该请求的机器的。
在使用ARP的计算机上都保留了一个高速缓存,用于存放最近获得的IP地址到物理地址的绑定,在发送分组时,计算机先到缓存中寻找所需的绑定,如没有,则发出一个ARP请求。接收方在处理ARP分组之前,先更新它们缓存中发送方的IP地址到物理地址的绑定信息,再进行响应或抛弃。
3.IP数据报与数据传输
在TCP/IP互联网上传输的一个分组叫IP数据报(Datagram),每个数据报包含一个头部和位于其后的数据。在数据报头部的源和目的地址都采用IP地址。
位于数据报传输路径上的每一个路由器从数据报头部提取目的地址,由目的地址在路由器的路由表中查找发往目的地的下一跳地址,然后路由器将数据报传递给下一跳,直至到达目的地。
路由表有三个基本字段:目的网络地址字段,目的网络地址的地址掩码字段和到达目的网络的下一跳字段。在数据报头部的目的地址总是数据报的最终目的地址。目的地址与其对应的掩码“按位与”操作,得出目的地址主机所在的网络的网络地址。然后,根据这个网络地址,决定下一跳地址,通过一个特定的连接,将数据发给下一跳。
IP数据报首部格式包含以下内容:
a.版本号(Vers),包含了生成该数据报的IP协议的版本信息,它用来证实发送方,接收方和它们之间的所有路由器都同意的数据报格式。
b.首部长度(Header Length)字段,给出了以32位字长为单位的首部长度。
c.服务(Service Type)字段,包含5个子字段,3个比特的优先级干字段指明本数据报的优先级,允许发送方表示本数据报的重要程度。优先级的值从0(普通优先级)到7(网络控制),D、T和R位表示本数据报所希望的运输类型,这些位的值为1时,D代表低时延,T要求高吞吐量,R要求高可靠性。
d.总长度(Total Length)字段,给出了以8位组为单位的IP数据报长度。
e.寿命(Time to Live)字段,设置了该数据报在互联网中允许存在的时间(秒)或允许经过的路由器的数目。它是一个介于1~255之间的整数。
f.首部校验和(Header Checksum)字段,用于保证首部数据的完整性。IP校验和的计算是把首部看成一个16位的整数序列,对每个整数分别计算其二进制反码,然后相加,再对结果计算一次二进制反码而求得。为了计算校验和,假定首部校验和字段为0。
g.源站地址(Source IP Address)和目的站地址(Desination IP Address)字段,包含了数据报的(原始)发送方和(最终)接收方的32位IP地址。
h.选项(IP Options)字段,增加了IP数据报的灵活性。 ——i.填充(Padding)字段,依赖于选项,它填充“0”以保证数据报的长度是32位的整数倍。
4.IP封装、分片与重组
数据报作为物理帧的数据封装在特定的物理帧内,通过帧的传输来实现数据报的传输。数据帧头部的目的地址是数据报送往目的地的下一跳的物理地址。
数据报在源站进行封装,将物理帧传给下一跳,接收者从物理帧中的数据区提取数据报,丢掉帧的头部,然后采用下一个物理网络的帧格式进行封装,又传给下一跳,直至目的地。
MTU(Maximum Transmission Unit)是指一个特定的网络所允许的物理帧的最大数据量,当路由器收到一个大于其要转发的网络的MTU的数据报时,路由器必须将这个数据报分成可通过该网络的数据报片,每一片仍采用数据报的格式,且保留原数据报的标识符,但只包含原数据报的部分数据,在需要时,数据报片可以再次分片。
在一个TCP/IP互联网上,一旦数据报分片后,每片都作为独立的数据报传送,一直等到到达目的网点的主机后,才对它们重组。目的网点的主机通过数据报首部的标识符来查证各片是否为同一个数据报的分片,且根据片偏移及标志来控制分片和重组。目的主机首次接到某一数据报的一个分片时,就启动一个计时器,如果在收到所有分片之前计时器超时,则接收机废弃已收到的分片,不对数据报处理。
5.差错报告机制
为了让互联网中的路由器报告错误或提供有关意外情况的信息,设计者在TCP/IP中加入了一个特殊用途的报文机制,叫做Internet控制报文协议(ICMP)。
ICMP定义了五类错误信息和四种报告信息。
a.源站抑制:当路由器收到大多的数据报以致没有足够的缓冲区来处理时,路由器放弃到达的额外数据报,使用ICMP源站抑制报文向初始源网点报告拥塞,并请求它减慢目前的数据报发送速率。
b.数据报超时:当一个路由器将一个数据报的寿命字段的值减为零时,路由器放弃该数据报并发送一个超时信息;当一台主机对某一个数据报的重组时间截止时,而该数据报的分片还没有全部到达,主机放弃分片并发送一个超时信息。
c.目的地不可达:当一个路由器检测出一个数据报不能发往它的目的地时,路由器发送一个目的地不可达的信息。
d.重定向:当路由器检测到一台主机使用非优化路由时,它向该主机发送一个重定向的ICMP报文,请求该主机改变路由并把初始数据报向它的目的站转发。
e.分片请求:如果路由器收到一个不允许分片的数据报,而它又大于必须经过的转发网络的MTU,则路由器放弃数据报,发送一个分片请求信息。
f.回送请求/应答:一个回送请求信息能够送到任意计算机的ICMP软件。为了响应一个回送请求,ICMP软件需要发送一个ICMP回送应答信息,应答和请求传递相同的数据。
g.地址掩码请求、应答:一台主机在系统自举时广播一个地址掩码请求。收到请求的路由器发送一个包含该计算机所在网络的32位掩码的应答。
ICMP报文是在IP数据报的数据区中传送的,并且在报文的开始有三个固定长度的字段:类型字段、代码字段和校验和字段。报文类型字段决定了剩余部分的格式及其含义。