IP地址与硬件地址

IP协议详解之配套协议:ARP, ICMP_字段

物理地址是数据链路层和物理层使用的地址。

IP地址则是网络层和以上各层使用的地址,是一种逻辑地址。

IP地址放在IP数据报的首部,而硬件地址则放在MAC帧的首部。

数据链路层看不见数据报的IP地址。

数据在网络传输时,

    <1>. 在IP层抽象的互联网上只能看到IP数据报

    <2>. 路由器只根据目的站的IP地址的网络号进行路由选择。

    <3>. 在局域网的链路层,只能看见MAC帧。

            在不同网络上传送时,MAC帧首部中的源地址和目的地址要发生变化。

    <4>. IP层抽象的互联网却屏蔽了下层这些复杂的细节。

--------------------------------------------------------------------------

地址解析协议ARP

IP协议详解之配套协议:ARP, ICMP_数据_02

IP层与网络硬件之间由于格式不同而不存在简单的映射关系,此外,一个网络上可能有新的主机进来,或撤走,也可以更换网络适配器,都会使主机的硬件地址改变。地址解析协议ARP解决这个问题的方法是在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。每一个主机都设有一个ARP高速缓存( ARP cache ),里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。

当主机A要向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如有,就在ARP高速缓存中查出其对应的硬件地址,再把这些硬件写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。如无对应的IP地址,则A自动运行ARP,然后按以下步骤查找B的硬件地址:

    <1>. ARP进程在本局域网上广播发送一个ARP请求分组。ARP请求分组的主要内容是表明:“我的IP地址是 209.0.0.5 ,硬件地址是 00-00-C0-15-AD-18。我想知道IP地址为 209.0.0.6 的主机的硬件地址。”

    <2>. 在本局域网上的所有主机运行的ARP进程都收到此ARP分组。

    <3>. 主机B在ARP请求分组中见到自己的IP地址,就向主机A发送ARP响应分组,并写入自己的硬件地址。其余的所有主机都不理睬这个ARP请求分组。ARP响应分组的主要内容是表明:“我的IP地址是 209.0.0.6 ,我的硬件地址是 08-00-2B-00-EE-1A”。注意:ARP请求分组是广播发送的,但ARP响应分组是普通的单播。

    <4>. 主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。

ARP把保存在高速缓存中的每一个映射地址项目都设置生存时间(10~20 min)。

ARP是解决同一局域网上的主机或路由器的IP地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一局域网上,主机H1就无法解析出主机H2的硬件地址(实际上主机H1也不需要知道远程主机H2的硬件地址)。主机H1发送给H2的IP数据报首先需要通过与主机H1连接在同一局域网上的路由器R1来转发。

从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。

ARP的四种典型情况:

    <1>. 发送方是主机,要把IP数据报发送往本网络上的另一主机。这时用ARP找到目的主机的硬件地址。

    <2>. 发送方是主机,要把IP数据报发送往另一网络上的一个主机。这时用ARP找到本网络上的一个路由器的硬件地址。剩下的工作由此路由器完成。

    <3>. 发送方是路由器,要把IP数据报转发到本网络上的一个主机。这时用ARP找到目的主机的硬件地址。

    <4>. 发送方是路由器,要把IP数据报转发到另一个网络上的一个主机。这时用ARP找到本网络上的一个路由器的硬件地址。剩下的工作由此路由器完成。

--------------------------------------------------------------------------

网际控制报文协议ICMP

ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。

ICMP报文作为IP层数据报的数据,加上数据报首部,组成IP数据报发送出去。

IP协议详解之配套协议:ARP, ICMP_数据_03

ICMP报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。

ICMP报文的前4个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的4个字节的内容与ICMP的类型有关。最后面的是数据字段。

ICMP报文的代码字段是为了进一步区分某种类型中的几种不同情况。检验和字段用来检验整个ICMP报文。

ICMP差错报告报文共有五种:

    <1>. 源点不可达。当路由器或主机不能交付数据报时就向源点发送终点不可达报文。

    <2>. 源点抑制。当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点掏报文,使源点知道应当把数据报的发送速率放慢。

    <3>. 时间超过。当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。

    <4>. 参数问题。当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。

    <5>. 改变路由(重定向)。路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器。

ICMP询问报文有两种:

    <1>. 回送请求和回答。ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。

    <2>. 时间戳请求和回答。ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日到当前时刻一共有多少秒。可用来进行时钟同步和测量时间。

 

ICMP应用举例

分组网间探测PING ( Packet InterNet Groper ),用来测试两个主机间的连通性。

PING是应用层直接使用网络层ICMP的一个例子。它没有通过运输层的TCP或UDP。

使用:    ping hostname ( 可主机名或IP地址)

PC机一连发出四个ICMP回送请求报文,如果主机正常工作而且响应这个ICMP回送请求报文(有的主机为了防止恶意攻击就不理睬外界发送过来的这种报文),那么它就发回ICMP回送回答报文。

另一个非常有用的应用是 traceroute (Unix), tracert (Windows)。用来跟踪一个分组从源点到终点的路径。

工作原理:Traceroute从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报。第一个数据报P1的生存时间TTL设置为1。当P1到达路径上的第一个路由器R1时,路由器R1先收下它,接着把TTL的值减1。由于TTL等于零了,R1就把P1丢弃了,并向源主机发送一个ICMP时间超过差错报告报文。源主机接着发送第二个数据报P2,并把TTL设置为2。P2先到达路由器R1,R1先收下后把TTL减1再转发给路由器R2。R2收到P2时的TTL为1,但减1后TTL变为零了。R2就丢弃P2,并向源主机发送一个ICMP时间超过差错报告报文。这样一直继续下去。当最后一个数据报刚刚到达目的主机时,数据报的TTL是1。主机不转发数据报,也不把TTL值减1。但因IP数据报中封装的是无法交付的运输层的UDP用户数据报,因此目的主机要向源主机发送ICMP终点不可达差错报告报文。这样,源主机达到了自己的目的,因为这些路由器和最后目的主机发来的ICMP报文正好给出了源主机想知道的路由信息——到达目的主机所经过的路由器的IP地址,以及其中的每一个路由器的往返时间。