网络层(一)概述

时间:2024-04-06 08:43:39

网络层概述

一.前言

       网络层是网络体系结构中非常重要的一层,在技术上又是非常复杂的一层。网络层是从功能上定义的一个逻辑层次,与物理层和数据链路层有具体的设备支持一样,网络层也有具体的设备来完成其相关任务,最典型的就是我们常用的路由器(Router)。路由器就相当于连接不同城市公路的中转车站,起数据中转作用
       网络层介于传输层和数据链路层之间,其主要作用是实现两个网络系统之间的数据透明传送,具体包括路由选择拥塞控制网际互连等。网络层是网络与网络之间通信的最底层,在数据从数据链路层向传输层进行数据传输的通信中,起到构建一个中间通信子网的作用。不同网络有这不同的网络层协议和地址规范,如果一个网络中的用户不能识别其他网络的通信协议和地址规范,那么这两个网络之间就不能进行数据通信,就好比不同国家有着不同的交通法规,属于不同的交警系统管理,不允许他国车辆随便出入一样。不同网络也有不同的设计规范,属于不同的组织来管理,必须通过授权,并由专门的协议来负责网络间的通信。如果只是同一局域网内的各个计算机之间的通信,单靠物理层和数据链路层就可以建立通信链路完成用户间的数据通信,但要扩大应用范围,连接不同的局域子网,就需要借助网络层处理各个网络子网的协议,从而进行计算机的网络互连,所以网络层在TCP/IP协议体系中叫网际互连层。

二.网络层提供的两种服务

       网络层向传输层提供的服务有两类:面向连接的网络服务无连接的网络服务

1、虚拟电路服务(Virtual-Circuit 称为VC)

       虽然因特网是一个利用数据报服务传输信息的,但是很多其他网络体系结构(例如ATM)使用的是虚拟电路网络。我们先通过电信网来了解虚拟电路,电信网进行的是面向连接的通信方式,使用昂贵的程控交换机(为了保证传输的可靠性),从而向用户提供可靠传输的服务。电信网把用户电话机产生的语音信号可靠地传输到对方的电话机。

       一条虚拟电路的组成由这些部分构成:
(1)源主机和目的主机之间的路径(一些列链路和路由器)
(2)路径中每一段链路都有一个VC号
(3)路径中的每个路由器都有一个转发表
每一次IP数据报跨越一台路由器创建一个新的连接,就在这个路由器的转发表中增加一个新的连接项。同样,每次施放一个链接,就从表中删除这一项。
使用虚拟电路服务就一般是通过以下三个步骤:
(1)虚拟电路的建立
(2)数据传送
(3)虚拟电路的拆除
       最后将简单举例说明第二个步骤,数据传送是怎么进行的:
这里有一条线路为A ——> R1 ——> R2 ——> B(其中A和B是主机,R1和R2是路由器),三段链路的VC号码依次是11、22、33,IP数据报离开A的时候,首部中VC字段为11,然后经过了R1,将首部中VC字段变为22,然后经过了R2的时候将首部中的VC字段变为了33。

2、数据报服务(datagram network)

       因特网采用的是数据报服务,而不是虚拟电路服务。当时这些先驱者通过对比电信网提供的可靠传输服务,提出了一些看法:电信网采用了可靠传输服务对电话业务是很合适的,原因是电信网的终端也就是电话机非常简单,没有差错处理的高级功能。但是电话服务又必须是可靠的,所以这就必须交给网络线路来处理,将传输变得更加可靠。但是相比电话机,计算机有很强的差错处理功能,所以可以采用另外一种设计思路。

       网络层上只是简单提供无连接的、简单灵活的、尽最大努力交付的数据报服务。在网络层是不提供可靠传输服务的,所以IP数据报是可能在传输过程中出现错误的。这种设计就使得网络中的路由器可以做的比较简单,而且价格低廉。而进行可靠传输是有主机中的运输层来做的(包括差错处理、流量控制等)(所谓的TCP/IP中的IP是不保证可靠传输的,而是交给了TCP来做的)。
时至今日,互联网发展的规模已经非常大了,实践证明了这种思路确实是对的。

3、两种服务的对比

网络层(一)概述

三.网络层功能

       通常一个计算机网络就是一个管理边界,一般是属于一个特定的公司,有一个特定的管理者负责,所以在进行计算机网络互连时,要同时考虑两方面的问题:一是授权用户可以在不同网络间互访,共享双方的资源;另一方面又要保持各计算机网络管理原来的独立性。从前面介绍的数据链路层,我们知道不同用户之间进行通信,首先得知道彼此的地址,局域网内部的用户访问(物理层和数据链路层就可以构建一个局域网)是通过MAC地址进行,但不同网络之间进行访问不同通过属于数据链路层地址的MAC地址来进行寻址,这需要网络层对应的一个网络地址来进行访问,每个网络都通过其网络地址,即NSAP(网络服务访问点)来标识,网络中的每个节点都有一个NSAP。这个NSAP就是由对应网络所运行的网络层通信协议来定义的,在目前最常见的TCP/IP协议网络中,这个协议就是IP协议,对应的NSAP就是IP地址。

       在物理层传输的是一个个比特位(bit),在数据链路层中传输的是一个个以许多字节为单位的帧(Frame),在每个帧的帧头都有源节点的MAC地址和目的节点的MAC地址,局域网内部的寻址就是通过MAC地址进行的,而在网络层中传输的是数据包(Packet,也叫分组),一个数据包是一个数据帧经过网络层协议重封装后得到的,每个数据包的包头(IP头)都有源节点和目的节点的IP地址,网路间的寻址就是通过IP地址进行的。这样我们知道网络通信只有两种情况:如果通信双方在同一个局域网内,可直接通过数据链路层进行相互通信,但因为主机其实也有网络层的路由功能,所以两台主机间进行网络通信时通常也是通过三层来进行的(IP协议则是IP地址寻址);如果通信双方在不同网络内,毫无疑问必须通过三层进行。事实上,网络层的IP包到达链路层后还要重封装成帧,因为不同网络中的统一标识就是三层地址(网络地址),局域网内链路层的则是MAC地址。所以不同层传输的数据包格式不一样,因为每层的标识不一样。网络层的IP包封装成帧后,其中封装的源和目的网络地址作为帧的数据部分,不会改变。

1、功能概述

       网络访问的过程其实就是一个查地图找路的过程。
       1.一层主要是指物理传输,牵扯到相互访问,所以不可能没有一层,换句话说,不通过物理传输,你怎么可能和别人通信呢?(即使是无线,那也叫传输,只不过传输介质不是我们普通的光、电而已)
       2.什么是狭义的局域网,局域网就是指在同一个IP网段的所有设备的集合。
       3.三层主要是指路由,也就是找路的过程,只有在IP属于不同网段,才需要使用到路由。当你访问一个不同网段的主机的时候,他会先查找网关,也就是是路由器(相当于我们打电话时候,如果拨外线,需要先到电信局),然后通过路由器来查找路由表(就是查地图),确定你的消息应该从哪条路送出去。
       4.为什么局域网只涉及到物理层和链路层呢?1)涉及到物理层,这个不用再解释了2)不涉及到网络层(三层),是因为网络层只为不同网段的IP进行服务3)对于局域网内部的访问,因为属于同一个网段(也就是所有的电脑最终都连到路由器的同一个接口下),所以并不需要查找地图。举个例子:你住集体宿舍,你要找一个住在同楼的不认识的朋友,你只要喊一下:我是小A,谁是小C呀,大家都会听到,然后小C就会答应,你们就知道了彼此的位置,并不需要在麻烦去查一下地图。——这就是二层的访问,而你们彼此之间一应一答认识的过程,就是楼上所说的ARP解析的过程,也就是确定了对方的位置。 事实上,即使是局域网内部的访问,也需要涉及到三层及以上,比如:你和局域网内的电脑进行FTP传文件,事实上,FTP就是个七层的服务,你要发送一个报文,就需要把报文封装成7层,然后4、3、2层,对方收到之后,也要一层一层的把封装解开。所以,准确点说,应该这样描述:在局域网内部彼此访问,中间传输过程,不需要使用到三层及以上设备。

2、屏蔽网络差异,提供透明传输

       不同网络有不同的规范要求,网络层就是为了解决这种不同差异,寻找一个不同网络间都能共同遵守的网络通信规范,以便不同网络间能相互识别,并接受对方的网络请求,说白了,就是一个中转站的作用,两个毫无交集的网络通过这个中转站来建立交集。这样传输层就可以在不同网络间进行透明数据传输。网络层向传输层提供的服务有两类:面向连接的网络服务和无连接的网络服务。

3、为网络间通信提供路由选择

       路由选择也叫路由选择,是根据一定的原则和路由选择算法在多个结点的通信子网中选择一条到达目的节点的最佳路径的过程。确定路由选择的策略成为路由算法。在无连接的数据包服务中,网络节点要为每个数据包做出路由选择,即选择到达目的节点的最佳路线,而在面向连接的虚电路服务中,存在一条专们的逻辑线路,在建立连接时就已经确定了路有路径,无需额外选择。

4、数据包封装和解封装

       这个类似的功能各个网络层都提供,因为在网络体系结构的不同层次中传输的数据单位并不一样,且发送方和接收方接受数据包的路径是相反的。在发送方,数据自上而下每经过一层都必须在数据头部添加对应层的协议头和(或)协议尾信息,到了接收方,数据自下而上每经过一层又都必须解除前面那层所封装的协议头和(或)协议尾信息。
       在发送方,来自传输层的报文通常是已根据对应网络链路的MTU(最大传输单元)被分成多个数据段,然后在网络层中对这些数据段头部添加一些网络层协议控制信息就组成了数据包,这就是包的封装过程。数据包的头部包含源节点和目标节点的网络层地址,在接收方,数据从底层到达网络层时,要去掉在数据链路层加上的数据链路层协议控制信息(帧头和帧尾),还原出原来的数据包格式,这就是包的解封装过程。

5、拥塞控制

       拥塞控制是为了避免网络传输路径中数据的传输延迟或死锁。数据链路层介绍了流量控制功能,那是针对数据链路中点对点传输速率的控制,这里的拥塞控制是针对在网络层传输路径中的端到端传输效率的控制。主要采用预约缓冲区、许可证和分组丢弃等方式。

四.网络层数据交换

       网络层只管发数据包只负责 在不同网络之间尽力转发数据包,基于数据包的ip地址转发,不管发送的顺序和发得是否完整(是否有丢失 )不负责丢失重传,这些事是由传输层管。每个数据包都是单独选择路径。

1、电路交换:

       电路交换是在网络中利用可切换的物理通信线路直接连接通信双方所进行的一种数据交换方式。最常见的就是以前的电话交换系统,甲先转几下电话机(谍战电视剧里是这样子),实际上是打到了电话交换系统,然后说转局长办公室,这样电话员就把电话线插到局长办公室的线路上,这样就可以进行通信了,通话结束后,电话员就拔下这跟电话线。可以看出,电路交换最主要的特点就是在进行数据交换前需要在一对用户之间建立起一条专用的数据通路(如电话线),在整个数据传输过程中要经过线路建立(如电话员切换线路)、数据传输(如通话)与线路释放(如电话员拔下电线)这三个阶段。由于电路交换在通信之前要在通信双方之间建立一条被双方独占的物理通路(由通信双方之间的交换设备和链路逐段连接而成),因而有以下优缺点。
        优点:
       ①由于通信线路为通信双方用户专用,数据直达,所以传输数据的时延非常小
       ②通信双方之间的物理通路一旦建立,双方可以随时通信,实时性强。
       ③双方通信时按发送顺序传送数据,不存在失序问题。
       ④电路交换既适用于传输模拟信号,也适用于传输数字信号。
        ⑤电路交换的交换的交换设备(交换机等)及控制均较简单。
       缺点:
       ①电路交换的平均连接建立时间对计算机通信来说嫌长。
       ②电路交换连接建立后,物理通路被通信双方独占,即使通信线路空闲,也不能供其他用户使用,因而信道利用率低。
       ③电路交换时,数据直达,不同类型、不同规格、不同速率的终端很难相互进行通信,也难以在通信过程中进行差错控制。

2、报文交换:

       报文交换是以报文为数据交换的单位,报文携带有目标地址、源地址等信息,在交换结点采用存储转发的传输方式,因而有以下优缺点:
       优点:
       ①报文交换不需要为通信双方预先建立一条专用的通信线路,不存在连接建立时延,用户可随时发送报文。
        ②由于采用存储转发的传输方式,使之具有下列优点:a.在报文交换中便于设置代码检验和数据重发设施,加之交换结点还具有路径选择,就可以做到某条传输路径发生故障时,重新选择另一条路径传输数据,提高了传输的可靠性;b.在存储转发中容易实现代码转换和速率匹配,甚至收发双方可以不同时处于可用状态。这样就便于类型、规格和速度不同的计算机之间进行通信;c.提供多目标服务,即一个报文可以同时发送到多个目的地址,这在电路交换中是很难实现的;d.允许建立数据传输的优先级,使优先级高的报文优先转换。
       ③通信双方不是固定占有一条通信线路,而是在不同的时间一段一段地部分占有这条物理通路,因而大大提高了通信线路的利用率。
       缺点:
       ①由于数据进入交换结点后要经历存储、转发这一过程,从而引起转发时延(包括接收报文、检验正确性、排队、发送时间等),而且网络的通信量愈大,造成的时延就愈大,因此报文交换的实时性差,不适合传送实时或交互式业务的数据。
       ②报文交换只适用于数字信号。
       ③由于报文长度没有限制,而每个中间结点都要完整地接收传来的整个报文,当输出线路不空闲时,还可能要存储几个完整报文等待转发,要求网络中每个结点有较大的缓冲区。为了降低成本,减少结点的缓冲存储器的容量,有时要把等待转发的报文存在磁盘上,进一步增加了传送时延。

3、分组交换:

       分组交换仍采用存储转发传输方式,但将一个长报文先分割为若干个较短的分组,然后把这些分组(携带源、目的地址和编号信息)逐个地发送出去,因此分组交换除了具有报文的优点外,与报文交换相比有以下优缺点:
       优点:
        ①加速了数据在网络中的传输。因为分组是逐个传输,可以使后一个分组的存储操作与前一个分组的转发操作并行,这种流水线式传输方式减少了报文的传输时间。此外,传输一个分组所需的缓冲区比传输一份报文所需的缓冲区小得多,这样因缓冲区不足而等待发送的机率及等待的时间也必然少得多。
        ②简化了存储管理。因为分组的长度固定,相应的缓冲区的大小也固定,在交换结点中存储器的管理通常被简化为对缓冲区的管理,相对比较容易。
        ③减少了出错机率和重发数据量。因为分组较短,其出错机率必然减少,每次重发的数据量也就大大减少,这样不仅提高了可靠性,也减少了传输时延。
       ④由于分组短小,更适用于采用优先级策略,便于及时传送一些紧急数据,因此对于计算机之间的突发式的数据通信,分组交换显然更为合适些。
       缺点:
        ①尽管分组交换比报文交换的传输时延少,但仍存在存储转发时延,而且其结点交换机必须具有更强的处理能力。
       ②分组交换与报文交换一样,每个分组都要加上源、目的地址和分组编号等信息,使传送的信息量大约增大5%~10%,一定程度上降低了通信效率,增加了处理的时间,使控制复杂,时延增加。
       ③当分组交换采用数据报服务时,可能出现失序、丢失或重复分组,分组到达目的结点时,要对分组按编号进行排序等工作,增加了麻烦。若采用虚电路服务,虽无失序问题,但有呼叫建立、数据传输和虚电路释放三个过程。
总之,若要传送的数据量很大,且其传送时间远大于呼叫时间,则采用电路交换较为合适;当端到端的通路有很多段的链路组成时,采用分组交换传送数据较为合适。从提高整个网络的信道利用率上看,报文交换和分组交换优于电路交换,其中分组交换比报文交换的时延小,尤其适合于计算机之间的突发式的数据通信。

五.网络层协议

       在TCP/IP体系结构的网际互联层,最重要的协议就是IP协议簇。目前的计算机网络,特别是TCP/IP网络,使用最多的是数据包分组交换方式,而IP协议是用于将多个分组交换网络连接起来的最典型通信协议。IP协议是一个无连接的服务,负责在源地址和目的地址之间传送数据包,然后为了使用不同网络对分组大小的要求,需要对上层传来的报文进行分割,最后调用本地网络协议将数据包传送给下一个网关或目的计算机。

网络层(一)概述

1、协议栈概述

       TCP/IP协议栈中主要有几大协议:ARP协议、IP协议、ICMP协议、IGMP协议,如上图一般,呈现出一种层层递进的关系。之所以把它们放到一起,是因为IP协议经常要用到ARP和RARP协议,而ICMP和IGMP协议常常作为IP数据报的数据部分。
- ARP: 地址解析协议,简单的说就是解析IP地址,查询目标主机的MAC地址。
- RARP:逆向地址解析协议,简单的说就是将MAC地址转换为IP地址。
- IP协议:负责将数据包从一个网段转发到另一个网段 ,即负责数据的传输
- ICMP:控制报文协议,简单的说他的作用就是在通信过程中记录问题信息并反馈。
- IGMP:组管理协议,是主机和路由器之间的控制协议。

2、ARP协议

       地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
       另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)。
       在每台安装有TCP/IP协议的电脑或路由器里都有一个ARP缓存表,表里的IP地址与MAC地址是一对应的,如下表所示。
主机名称         IP地址         MAC地址
A        192.168.38.10       00-AA-00-62-D2-02
B        192.168.38.11       00-BB-00-62-C2-02
C        192.168.38.12       00-CC-00-62-C2-02
D        192.168.38.13       00-DD-00-62-C2-02
E        192.168.38.14       00-EE-00-62-C2-02
… … …
       以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询 问:“192.168.38.11的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.38.11的MAC地址是(00-BB-00-62-C2-02)”。 这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

3、RARP协议

       逆地址解析协议(Reverse Address Resolution Protocol,RARP),是一种网络协议,互联网工程任务组(IETF)在RFC903中描述了RARP[1]。RARP使用与ARP相同的报头结构,作用与ARP相反。RARP用于将MAC地址转换为IP地址。其因为较限于IP地址的运用以及其他的一些缺点,因此渐为更新的BOOTP或DHCP所取代。
       RARP的工作原理:
       发送主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;如果不存在,RARP服务器对此不做任何的响应;源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

4、IP协议

       IP是在TCP/IP协议中网络层的主要协议,任务是仅仅根据源主机和目的主机的地址传送数据。为此目的,IP定义了寻址方法和数据报的封装结构 。第一个架构的主要版本,现在称为IPv4,仍然是最主要的互联网协议,尽管世界各地正在积极部署IPv6。数据在IP互联网中传送时会被封装为数据包。IP协议的独特之处在于:在报文交换网络中主机在传输数据之前,无须与先前未曾通信过的目的主机预先建立好一条特定的“通路”。互联网协议提供了一种“不可靠的”数据包传输机制(也被称作“尽力而为”);也就是说,它不保证数据能准确的传输。数据包在到达的时候可能已经损坏,顺序错乱(与其它一起传送的报文相比),产生冗余包,或者全部丢失。如果应用需要保证可靠性,一般需要采取其他的方法,例如利用IP的上层协议控制。
       IP提供的服务由于封装带来的抽象机制,IP能够在各种各样的网络上工作,例如以太网,ATM,FDDI,Wi-Fi,令牌环等等。每个链路层的实现可能有自己的方法(也有可能是完全没有它自己的方法),把IP地址解析成相应的数据链路地址。IPv4使用地址解析协议(ARP),而IPv6采用邻居发现协议(NDP)。现在正在网络中运行的IP协议是IPv4,IPv6 为IPv4的后续的一个版本。互联网现在正慢慢的耗尽IP地址,而IPv6的出现解决了这个问题,与IPv4的32位的地址相比而言,IPv6拥有128位的地址空间,可以提供比前者多很多的地址。版本0至3不是被保留就是没有使用。而版本5被用于实验流传输协议。其他的版本也已经被分配了,通常是被用于实验的协议,而没有被广泛的应用。
       IP协议是一个无连接的服务,负责在源地址和目的地址之间传送数据报,其主要功能就是把数据报在互连的网络上传送,将数据报在一个个模块间通过路由处理网络地址传送到目的地址。具体来说具备以下几方面的功能:
- 寻址,在不同网络中必须通过三层地址进行寻址。常用的IP网络中运行的三层协议就是IP协议,对应的三层地址就是IP地址。
- 数据报的封装,从传输层过来的数据段需要经过IP协议的重封装,而从数据链路层过来的数据帧就需要进行解封装。在IP网络中封装后形成的是IP数据报,IP封装的目的就是标识此IP数据报发送节点和接受节点的IP地址和控制信息。
- 分段与重组,不同网络上的链路可以传输的最大报文大小是不同的,这就是我们通常说的MTU(最大传输单元)。尺寸较大的数据报在MTU值较小的网络链路传输需要将数据报分段依次传输,对应的接收方就需要把这些接收到的拆分的分段组合起来,还原成原来的数据报。

5、ICMP协议

       ICMP的全称是InternetControlMessageProtocol从技术教度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性﹐其功能主要有:
       ◆侦测远端主机是否存在
       ◆建立及维护路由资料
       ◆重导资料传送路径
       ◆资料流量控制
        IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。当传送IP数据包发生错误,比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP错误报文的。如下
       ◆ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送)
       ◆目的地址是广播地址或多播地址的IP数据报。
       ◆作为链路层广播的数据报。
       ◆不是IP分片的第一片。
       ◆源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。
       ◆虽然里面的一些规定现在还不是很明白,但是所有的这一切规定,都是为了防止产生ICMP报文的无限传播而定义的。
ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:
       ping查询
       ◆子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)
       ◆时间戳查询(可以用来同步时间)
       ◆而差错报文则产生在数据传送发生错误的时候。

6、IGMP协议

1.单播(unicast)

       单播是说,对特定的主机进行数据传送。例如给某一个主机发送IP数据包。这时候,数据链路层给出的数据头里面是非常具体的目的地址,对于以太网来 说,就是网卡的MAC地址(不是FF-FF-FF-FF-FF-FF这样的地址)。现在的具有路由功能的主机应该可以将单播数据定向转发,而目的主机的网 络接口则可以过滤掉和自己MAC地址不一致的数据。

2.广播(unicast)

       广播是主机针对某一个网络上的所有主机发送数据包。这个网络可能是网络,可能是子网,还可能是所有的子网。如果是网络,例如A类网址的广播就是 netid.255.255.255,如果是子网,则是netid.netid.subnetid.255;如果是所有的子网(B类IP)则是则是 netid.netid.255.255。广播所用的MAC地址FF-FF-FF-FF-FF-FF。网络内所有的主机都会收到这个广播数据,网卡只要把 MAC地址为FF-FF-FF-FF-FF-FF的数据交给内核就可以了。一般说来ARP,或者路由协议RIP应该是以广播的形式播发的。

3.多播(multicast)

       可以说广播是多播的特例,多播就是给一组特定的主机(多播组)发送数据,这样,数据的播发范围会小一些(实际上播发的范围一点也没有变小),多播的MAC地址是最高字节的低位为一,例 如01-00-00-00-00-00。多播组的地址是D类IP,规定是224.0.0.0-239.255.255.255。
       虽然多播比较特殊,但是究其原理,多播的数据还是要通过数据链路层进行MAC地址绑定然后进行发送。所以一个以太网卡在绑定了一个多播IP地址之后,必 定还要绑定一个多播的MAC地址,才能使得其可以像单播那样工作。这个多播的IP和多播MAC地址有一个对应的算法,在书的p133到p134之间。可以看到 这个对应不是一一对应的,主机还是要对多播数据进行过滤。

       个人的看法:广播和多播的性质是一样的,路由器会把数据放到局域网里面,然后网卡对这些数据进行过滤,只拿到自己打算要的数据,比如自己感兴趣的多 播数据,自己感兴趣的组播数据。当一个主机运行了一个处理某一个多播IP的进程的时候,这个进程会给网卡绑定一个虚拟的多播mac地址,并做出来一个多播 ip。这样,网卡就会让带有这个多播mac地址的数据进来,从而实现通信,而那些没有监听这些数据的主机就会把这些数据过滤掉,换句话说,多播,是让主机的内核轻松了,而网卡,对不起,您就累点吧。

4.IGMP协议

       IGMP的作用在于,让其他所有需要知道自己处于哪个多播组的主机和路由器知道自己的状态。一般多播路由器根本不需要知道某一个多播组里面有多少个主机,而只要知道自己的子网内还有没有处于某个多播组的主机就可以了。只要某一个多播组还有一台主机,多播路由器就会把数据传输出去,这样,接受方就会通过网卡过滤功能来得到自己想要的数据。为了知道多播组的信息,多播路由器需要定时的发送IGMP查询,各个多播组里面的主机要根据查询来回复自己的状态。路由器来决定有几个多播组,自己要对某一个多播组发送什么样的数据。这种查询回应数据报的TTL一般是1,而且就算是出错也不产生ICMP差错(没必要)。