IP协议配套的四个协议:ARP RARP ICMP IGMP

谁来保证可靠性
在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起了长期的争论。争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统(即是网络层还是运输层)
方案一:让网络负责可靠交付(借鉴电信网的成功经验)
面向连接的通信方式,建立虚电路(VirtualCircuit),以保证双方通信所需的一切网络资源。如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点。但虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。请注意,电路交换的电话通信是先建立了一条真正的连接。因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。

方案二:网络层不提供服务质量的承诺。
即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接。每一个分组(即IP数据报)独立发送,与其前后的分组无关(不进行编号)。

方案一与方案二的比较:

因特网采用方案二的原因:
由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)。采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。因特网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。



  


网际协议IP
网际协议IPTCP/IP体系中两个最主要的协议之一。与IP协议配套使用的还有四个协议:
地址解析协议ARP
   (Address ResolutionProtocol)
逆地址解析协议RARP
  (Reverse Address ResolutionProtocol)
网际控制报文协议ICMP
  (Internet Control MessageProtocol)
网际组管理协议IGMP
  (Internet Group ManagementProtocol)

IP协议在前面的博客中都讲过了,这里就只是讲一下这4个协议。


地址解析协议ARP
     
不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。每一个主机都设有一个ARP高速缓存(ARPcache),里面有所在的局域网上的各主机和路由器的IP地址到硬件地址的映射表。
     
当主机A欲向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机BIP地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入MAC帧,然后通过局域网将该MAC帧发往此硬件地址。 如果没有主机A发送其ARP分组请求,如下图所示,当主机 B收到AARP请求分组时,就将主机A的这一地址映射写入主机B自己的ARP高速缓存中。然后主机A得到主机B的地址映射后就将谢入到自己的ARP高速缓存中。然后就开始给B主机发送IP报文。


注:
IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动地将该IP地址解析为链路层所需要的硬件地址。

使用ARP的四种典型情况
发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用ARP找到目的主机的硬件地址。
发送方是主机,要把IP数据报发送到另一个网络上的一个主机。这时用ARP找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
发送方是路由器,要把IP数据报转发到本网络上的一个主机。这时用ARP找到目的主机的硬件地址。
发送方是路由器,要把IP数据报转发到另一个网络上的一个主机。这时用ARP找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。

什么我们不直接使用硬件地址进行通信?
由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。IP层抽象的互联网屏蔽了下层很复杂的细节在抽象的网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或主机和路由器之间的通信连接到因特网的主机都拥有统一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为调用ARP来寻找某个路由器或主机的硬件地址都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。 


逆地址解析协议RARP
逆地址解析协议RARP使只知道自己硬件地址的主机能够知道其IP地址。这种主机往往是无盘工作站。因此 RARP协议目前已很少使用。


注:地址解析协议ARP和逆地址解析协议RARP

     IP地址与硬件地址及数据流动

 


图中的 IP1→IP2 表示从源地址IP1到目的地址IP2,两个路由器的IP地址并不出现在IP数据报的首部中,路由器只根据目的站的IP地址的网络号进行路由选择,在具体的物理网络的链路层只能看见MAC帧而看不见IP数据报。



网际控制报文协议ICMP
为了提高IP数据报交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)

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

ICMP不是高层协议,而是IP层的协议。

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


ICMP报文的格式




  • 类型字段:用来描述特定类型的ICMP报文。

  • 代码:进一步描述类型的不同条件

  • 检验和:ICMP的检验和是必需的。

ICMP报文的种类
ICMP
报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。
ICMP
报文的前4个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的4个字节的内容与ICMP的类型有关。


ICMP差错报告报文共有5
终点不可达
源点抑制(Sourcequench)  
时间超过
参数问题
改变路由(重定向)(Redirect) 


ICMP
询问报文有两种
回送请求和回答报文
时间戳请求和回答报文


注:下面的几种ICMP报文不再使用
信息请求与回答报文
掩码地址请求和回答报文
路由器询问和通告报文

不应发送ICMP差错报告报文的几种情况
ICMP差错报告报文不再发送ICMP差错报告报文。
对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文。
对具有多播地址的数据报都不发送ICMP差错报告报文。
对具有特殊地址(如127.0.0.00.0.0.0)的数据报不发送ICMP差错报告报文。


ICMP
的应用举例PINGTraceroute 
PING
用来测试两个主机之间的连通性,它使用了ICMP回送请求与回送回答报文。PING是应用层直接使用网络层ICMP的例子,它没有通过运输层的TCPUDP
Traceroute
通过Traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。UNIX系统中,我们称之为Traceroute,MSWindows中为TracertTraceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备Traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。


Traceroute程序的设计是利用ICMPIPheaderTTLTimeTo Live)栏位(field)。首先,traceroute送出一个TTL1IPdatagram(其实,每次送出的为340字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL1。此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMPtime exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute再送出另一个TTL2datagram,发现第2个路由器......traceroute 每次将送出的datagramTTL1来发现另一个路由器,这个重复的动作一直持续到某个datagram抵达目的地。当datagram到达目的地后,该主机并不会送回ICMPtime exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?
Traceroute
在送出UDPdatagrams到目的地时,它所选择送达的portnumber 是一个一般应用程序都不会用的号码(30000以上),所以当此UDPdatagram 到达目的地后该主机会送回一个「ICMPport unreachable」的消息,而当traceroute收到这个消息时,便知道目的地已经到达了。所以tracerouteServer端也是没有所谓的Daemon程式。
Traceroute
提取发ICMPTTL到期消息设备的IP地址并作域名解析。每次,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及IP地址,三个包每次来回所花时间。
Traceroute
有一个固定的时间等待响应(ICMPTTL到期消息)。如果这个时间过了,它将打印出一系列的*号表明:在这个路径上,这个设备不能在给定的时间内发出ICMPTTL到期消息的响应。然后,TracerouteTTL记数器加1,继续进行。


网际组管理协议IGMP和多播
IGMP
是在多播中用到的一个协议,因此如果要说IGMP的话就不得不谈多播,
多播的概念

IP多播的一些特点
(1)
多播使用组地址——IP使用D类地址支持多播,多播地址只能用于目的地址,而不能用于源地址。 
(2)
永久组地址——由因特网号码指派管理局IANA负责指派。
(3)
动态的组成员
(4)
使用硬件进行多播


在局域网上进行硬件多播
因特网号码指派管理局IANA拥有的以太网地址块的高24位为00-00-5E
因此TCP/IP协议使用的以太网多播地址块的范围是:从00-00-5E-00-00-00
                    
00-00-5E-FF-FF-FF
D
IP地址可供分配的有28位,在这28位中的前5位不能用来构成以太网硬件地址。
D
IP地址与以太网多播地址的映射关系


为了使路由器知道多播组成员的信息,需要利用网际组管理协议IGMP(Internet Group Management Protocol)
网际组管理协议IGMP
1989
年公布的RFC1112IGMPv1)早已成为了因特网的标准协议。
1997
年公布的RFC2236IGMPv2,建议标准)对IGMPv1进行了更新。
2002
10月公布了RFC3376IGMPv3,建议标准),宣布RFC2236IGMPv2)是陈旧的。
IGMP
是整个网际协议IP的一个组成部分
ICMP相似,IGMP使用IP数据报传递其报文(即IGMP报文加上IP首部构成IP数据报),但它也向IP提供服务。
因此,我们不把IGMP看成是一个单独的协议,而是属于整个网际协议IP的一个组成部分。
IGMP
可分为两个阶段
第一阶段:当某个主机加入新的多播组时,该主机应向多播组的多播地址发送IGMP报文,声明自己要成为该组的成员。本地的多播路由器收到IGMP报文后,将组成员关系转发给因特网上的其他多播路由器。
第二阶段:因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。
只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的。
但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器。
IGMP
采用的一些具体措施
在主机和多播路由器之间的所有通信都是使用IP多播。
多播路由器在探询组成员关系时,只需要对所有的组发送一个请求信息的询问报文,而不需要对每一个组发送一个询问报文。默认的询问速率是每125秒发送一次。
当同一个网络上连接有几个多播路由器时,它们能够迅速和有效地选择其中的一个来探询主机的成员关系。
IGMP的询问报文中有一个数值N,它指明一个最长响应时间(默认值为10秒)。当收到询问时,主机在0N之间随机选择发送响应所需经过的时延。对应于最小时延的响应最先发送。
同一个组内的每一个主机都要监听响应,只要有本组的其他主机先发送了响应,自己就可以不再发送响应了。
IGMP
的本地使用范围
IGMP
并非在因特网范围内对所有多播组成员进行管理的协议。
IGMP
不知道IP多播组包含的成员数,也不知道这些成员都分布在哪些网络上。
IGMP
协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。


你可能感兴趣的:(网络专栏)