1、TCP/IP简介
TCP/IP是传输控制协议和网络协议的简称,它定义设备如何连入因特网,以及数据如何在他们之间传输的标准。TCP/IP不是一个协议,而是一个协议族的统称,里面包括了IP协议、ICMP协议、TCP协议、以及http、ftp、pop3协议等,网络计算机都采用这套协议族进行互联。提到网络协议栈结构,最著名的当属 OSI 七层模型,但是 TCP/IP 协议族的结构则稍有不同,它们之间的层次结构有如图对应关系: 从上图可见,根据TCP/IP四层模型,其中各层的任务如下:
- 应用层:应用程序通过这一层访问网络,常见 FTP、HTTP、DNS 和 TELNET 协议;
- 传输层:TCP 协议和 UDP 协议;
- 网络层:IP 协议,ARP、RARP 协议,ICMP 协议等;
- 网络接口层:是 TCP/IP 协议的基层,负责数据帧的发送和接收。
在日常使用中,我们使用TCP/IP的场景一般如下图所示: 其对应的数据流向如下图所示: 当应用程序发送数据的时候,程序调用更低一层的接口,每一层都会对原有数据增加一些首部或尾部信息。最终通过以太网传送给对端的设备,对端设备通过相反的操作对首部和尾部信息进行剥离后,就成了用户需要处理的业务数据。接下来我们将使用到的协议从下往上进行分别介绍。
2、链路层
通过上面示意图可知,网络层传送下来的IP数据报需要在数据链路层进行封装之后发送到对端设备上。 接下来我们将详细介绍链路层。
(1)链路层的意义
由于物理层的线路有传输介质与通信设备组成,比特流在传输介质上传输时肯定会存在误差的。引入了链路层之后,就可以采用一些手段,向网络层提供高质量的数据传输服务。比如对于网络层,由于链路层的存在,而不需要关心物理层具体采用了那种传输介质和通信设备。
(2)链路层提供的功能
- 链路管理:负责数据链路的建立、维持和释放,主要用于面向连接服务.
- 寻址:保证每一帧都能正确到达目的站。
- 帧同步:接收方确定收到的比特流中一帧的开始位置和结束位置。
- 差错控制:用于使接收方确定收到的数据就是由发送方发送的数据。
- 透明传输:不论数据是什么样的比特组合,都应当能够在链路上进行传输。
- 流量控制:控制发送方的发送数据的速率,使接收方来得及接受。
- 帧定界:将物理层的比特封装成帧,确定帧的开始与结束(当两个主机之间互相传送消息时,网络层的分组必须将封装成帧,并以帧的格式进行传送。将一段数据的前后分别添加首部和尾部,就够成了帧。首部和尾部中含有很多控制信息,这些信息的重要作用之一就是确定帧的界限,这就是帧定界。)
(3)链路层关键功能介绍
- 封装成帧
在每个网络层数据报在传输之前,几乎所有的链路层协议都会将数据报用链路层封装起来。数据链路层从网络层获取数据后将其封装成为帧,当网络层传下来一个 IP 数据报,并且其长度比链路层的 MTU 大,那么网络层就需要对数据报进行分片,使每一片都小于 MTU(为了提供足够快的响应时间,以太网和 IEEE802.3 对数据帧长度都有限制,其最大值分别为 1500 字节和 1492 字节,链路层的这个特性称作 MTU,即最大传输单元。)。
封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。首部和尾部的一个重要作用就是进行帧定界(确定帧的界限)一般为0x7E。
- 链路接入
链路接入主要指的是 MAC 协议,MAC(Medium Access Control) 协议规定了帧在链路上的传输规则。我们知道,数据链路层是 OSI 标准模型的第二层,数据链路层向下还能够细分,主要分为 The logical link control (LLC) 层和The medium access control (MAC) 层。 LLC 层又叫做逻辑控制链路层,它主要用于数据传输,它充当网络层和数据链路层中的媒体访问控制(MAC)子层之间的接口。LLC 层的主要功能如下: - LLC 的主要功能是发送时在 MAC 层上多路复用协议,并在接收时同样地多路分解协议。
- LLC 提供跳到跳的流和差错控制,像是路由器和路由器之间这种相邻节点的数据传输称为 一跳。
- 它允许通过计算机网络进行多点通信。
- MAC 层负责传输介质的流控制和多路复用,它的主要功能如下
MAC 层为 LLC 和 OSI 网络的上层提供了物理层的抽象。
- MAC 层负责封装帧,以便通过物理介质进行传输。
- MAC 层负责解析源和目标地址。
- MAC 层还负责在冲突的情况下执行冲突解决并启动重传。
- MAC 层负责生成帧校验序列,从而有助于防止传输错误。
在 MAC 层中,有一个非常关键的概念就是 MAC 地址。MAC 地址主要用于识别数据链路中互联的节点,如下图所示: MAC 地址长 48 bit,在使用网卡(NIC) 的情况下,MAC 地址一般都会烧入 ROM 中。因此,任何一个网卡的 MAC 地址都是唯一的。MAC 地址的结构如下: MAC 地址中的 3 - 24 位表示厂商识别码,每个 NIC 厂商都有特定唯一的识别数字。25 - 48 位是厂商内部为识别每个网卡而用。因此,可以保证全世界不会有相同 MAC 地址的网卡。 - 可靠交付
网络层提供的可靠交付更多指的是端系统到端系统的交付,而数据链路层提供的可靠交付更多指的是单端链路节点到节点地传送。当链路层协议提供可靠交付时,它能保证无差错地经链路层移动每个网络层数据报。链路层提供可靠交付的方法和 TCP 类似,也是使用 确认 和 重传 取得的。链路层的可靠交付通常用于出错率很高的链路,例如无线链路,它的目的是在本地纠正出错的帧,而不是通过运输层或应用层协议强制进行端到端的数据传输。对于出错率较低的链路,比如光纤、同轴电缆和双绞线来说,链路层的交付开销是没有必要的,由于这个原因,这些链路通常不提供可靠的交付。 - 差错检测和纠正
链路层数据以帧的形式发送,在发送的过程中,接收方节点的链路层硬件可能会由于信号干扰或者电磁噪音等原因错误的把 1 识别为 0 ,0 识别为 1。这种情况下没有必要转发一个有差错的数据报,所以许多链路层协议提供一种机制来检测这样的比特差错。通过让方节点在帧中包括差错检测比特,让接收节点进行差错检查,以此来完成这项工作。运输层和网络层通过因特网校验和来实现差错检测,链路层的差错检测通常更复杂,并且用硬件实现。差错纠正类似于差错检测,区别在于接收方不仅能检测帧中出现的比特差错,而且能够准确的确定帧中出现差错的位置。 差错检测和纠正的技术主要有: 奇偶校验:它主要用来差错检测和纠正 校验和:这是一种用于运输层检验的方法 循环冗余校验:它更多应用于适配器中的链路层。 - 地址映射
因为存在网络层地址(IP 地址)和 数据链路层地址(MAC 地址),所以需要在它们之间进行转换和映射,这就是地址解析协议(ARP)所做的工作。
3、IP协议
(1)IP简介
IP 协议位于网络层,它是 TCP/IP 协议族中最为核心的协议,所有的 TCP、UDP、ICMP 及 IGMP 数据都以 IP 数据报格式传输。IP 协议提供的是不可靠、无连接的数据报传送服务。
- 不可靠(unreliable):IP 协议不能保证数据报能成功地到达目的地,它仅提供传输服务。当发生某种错误时,IP 协议会丢弃该数据报。传输的可靠性全由上层协议来提供。
- 无连接(connectionless):IP 协议对每个数据报的处理是相互独立的。这也说明,IP 数据报可以不按发送顺序接收。如果发送方向接收方发送了两个连续的数据报(先是 A,然后是 B),每个数据报可以选择不同的路线,因此 B 可能在 A 到达之前先到达。
(2)IP数据报文介绍
IP数据报的格式: 如上图所示,普通的 IP 数据报的报头长度 20 字节(除非有选项字段),各个部分的作用:
- 版本号:4 位,用于标明 IP 版本号,0100 表示 IPv4,0110 表示 IPv6。目前常见的是 IPv4。
- 首部长度:4 位,表示 IP 报头长度,包括选项字段。
- 服务类型(TOS):分别有:最小时延、最大吞吐量、最高可靠性、最小花费 4 种服务,如下图所示。4 个标识位只能有一个被置为 1。
- 总长度:16 位,报头长度加上数据部分长度,便是数据报的总长度。IP 数据报最长可达 65535 字节。
- 标识:16 位,接收方根据分片中的标识字段相不相同来判断这些分片是不是同一个数据报的分片,从而进行分片的重组。通常每发送一份报文它的值就会加 1。
- 标志:3 位,用于标识数据报是否分片。其中的第 2 位是不分段(DF)位。当 DF 位被设置为 1 时,则不对数据报进行分段处理;第 3 位是分段(MF)位,除了最后一个分段的 MF 位被设置为 0 外,其他的分段的 MF 位均设置为 1。
- 偏移:13 位,在接收方进行数据报重组时用来标识分片的顺序。
- 生存时间(TTL):8 位,用于设置数据报可以经过的最多的路由器个数。TTL 的初始值由源主机设置(通常为 32 或 64),每经过一个处理它的路由器,TTL 值减 1。如果一个数据报的 TTL 值被减至 0,它将被丢弃。
- 协议:8 位,用来标识是哪个协议向 IP 传送数据。ICMP 为 1,IGMP 为 2,TCP 为 6,UDP 为 17,GRE 为 47,ESP 为 50。
- 首部校验和:根据 IP 首部计算的校验和码。
- 源 IP 和目的 IP :数据报头还会包含该数据报的发送方 IP 和接收方 IP。
- 选项:是数据报中的一个可变长、可选的信息,不常用,多用于安全、军事等领域。
下图是通过抓取到的IP数据报文: 首先看到开头的 192.168.42.3.3000 > 172.16.2.250.44632 代表的是源 ip 为 192.168.42.3,端口 3000,目的 ip 为 172.16.2.250,端口 44632。 然后看到 0x0000 那行: - 协议版本: 0x4 表示的是协议版本为 IPv4;
- 首部长度: 0x5,5*4=20,表示 IP 报头长度为 20 字节。一个字节通常等于 8 位,所以这里可以知道 IP 报头为 4500 到 2a02;
- TOS 服务类型:0x00,意味着是一般服务;
- 总长度:0x0136,换算下来为 310 字节;
- 标识:0x172a;
- 3bit 标志 + 13bit 片偏移:0x4000;
- 生存时间:0x40,值为 64;
- 协议:0x06,代表 TCP 协议;
- 首部校验和:0x88e2。
(3)IP 地址分类
为了便于寻址以及层次化构造网络,每个 IP 地址可被看作是分为两部分,即网络号和主机号。同一个区域的所有主机有相同的网络号(即 IP 地址的前半部分相同),区域内的每个主机(包括路由器)都有一个主机号与其对应。 IP 地址被分为 A、B、C、D、E 五类:
- A 类给大型网络或政府机构等;
- B 类分配给中型网络、跨国企业等;
- C 类分配给小型网络;
- D 类用于多播;
- E 类用于实验。
各类可容纳的地址数目不同,其中我们最常见的为 A、B、C 这三类。IP 地址用 32 位二进制数字表示的时候,A、B、C 类 IP 的网络号长度分别为 8 位、16 位、24 位: A 类地址: - A 类地址网络号范围:1.0.0.0—127.0.0.0;
- A 类 IP 地址范围:1.0.0.0—127.255.255.255;
- A 类 IP 的私有地址范围:10.0.0.0—10.255.255.255 (所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址);
- 127.X.X.X 是保留地址,用做循环测试用的;
- 因为主机号有 24 位,所以一个 A 类网络号可以容纳 224-2=16777214 个主机号。
B 类地址:
- B 类地址网络号范围:128.0.0.0—191.255.0.0;
- B 类 IP 地址范围:128.0.0.0—191.255.255.255;
- B 类 IP 的私有地址范围:172.16.0.0—172.31.255.255;
- 169.254.X.X 是保留地址;191.255.255.255 是广播地址;
- 因为主机号有 16 位,所以一个 B 类网络号可以容纳 216-2=65534 个主机号。
C 类地址:
- C 类地址网络号范围:192.0.0.0—223.255.255.0;
- C 类 IP 地址范围:192.0.0.0—223.255.255.255;
- C 类 IP 的私有地址范围:192.168.0.0—192.168.255.255;
- 因为主机号有 8 位,所以一个 C 类网络号可以容纳 28-2=254 个主机号。
(4)子网划分
IP 地址如果只使用 ABCDE 类来划分,会造成大量的浪费:一个有 500 台主机的网络,无法使用 C 类地址。但如果使用一个 B 类地址,6 万多个主机地址只有 500 个被使用,造成 IP 地址的大量浪费。因此,可以在 ABC 类网络的基础上,进一步划分子网:占用主机号的前几个位,用于表示子网号。这样 IP 地址就可看作 IP = 网络号 + 子网号 + 主机号。子网号的位数没有硬性规定,于是我们用子网掩码来确定一个 IP 地址中哪几位是主机号,具体使用方法如图:
(5)IP 路由选择
如果发送方与接收方直接相连(点对点)或都在一个共享网络上(以太网),那么 IP 数据报就能直接送达。而大多数情况则是发送方与接收方通过若干个路由器(router)连接,那么数据报就需要经过若干个路由器的转发才能送达,它是怎么选择一个合适的路径来"送货"的呢?IP 层在内存中有一个路由表(输入命令 route -n 可以查看路由表),当收到一份数据报并进行发送时,都要对该表进行搜索:
- 搜索路由表,如果能找到和目的 IP 地址完全一致的主机,则将 IP 数据报发向该主机;
- 搜索路由表,如果匹配主机失败,则匹配同子网的路由器(这需要子网掩码的协助)。如果找到路由器,则将该 IP 数据报发向该路由器;
- 搜索路由表,如果匹配同子网路由器失败,则匹配同网络号路由器,如果找到路由器,则将该 IP 数据报发向该路由器;
- 如果以上都失败了,就搜索默认路由,如果默认路由存在,则发报;
- 如果都失败了,就丢掉这个包;
- 接收到数据报的路由器再按照它自己的路由表继续转发,直到数据报被转发到目的主机;
- 如果在转发过程中,IP 数据报的 TTL(生命周期)已经被减为 0,则该 IP 数据报就被抛弃。
(6)NAT 技术
当你用 ifconfig 查看 IP 地址时,有时你会发现自己的 IP 地址是这样的———192.168.X.X 或172.16.X.X。这是 C 类网和 B 类网的私有地址,就是俗称的内网 IP。这是因为你的路由器采用了 NAT 技术。NAT(Network Address Translation,网络地址转换)是 1994 年提出的。当在专用网内部的一些主机本来已经分配到了内网 IP 地址,但现在又想和因特网上的主机通信时,NAT 技术将其内网 IP 地址转换成全球 IP 地址,然后与因特网连接,也就是说,内网的数台主机使用了同一个全球 IP 地址在上网。NAT 技术实现了宽带共享,而且有助于缓解 IP 地址空间枯竭的问题。
4、网络层其他协议
网络层不仅有 IP 协议,还有其它如 ARP、ICMP、IGMP、RARP 等其它协议,这一节我们将对这些协议做介绍。
(1)ARP地址解析协议
(a) ARP的作用:
ARP(Address Resolution Protocol,地址解析协议)是将IP地址解析为以太网MAC地址(或称物理地址)的协议。在局域网中,当主机或其它网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址)。但是仅仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送,因此发送站还必须有接收站的物理地址,所以需要一个从IP地址到物理地址的映射。APR就是实现这个功能的协议。
(b)ARP报文结构:
ARP报文分为ARP请求和ARP应答报文,报文格式如图所示。
- 硬件类型:表示硬件地址的类型。它的值为1表示以太网地址;
- 协议类型:表示要映射的协议地址类型。它的值为0x0800即表示IP地址;
- 硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4;
- 操作类型(OP):1表示ARP请求,2表示ARP应答;
- 发送端MAC地址:发送方设备的硬件地址;
- 发送端IP地址:发送方设备的IP地址;
- 目标MAC地址:接收方设备的硬件地址。
- 标IP地址:接收方设备的IP地址。
(C)ARP地址解析过程
假设主机A和B在同一个网段,主机A要向主机B发送信息。如下图所示: 具体的地址解析过程如下:
- 主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
- 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
- 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
- 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
当主机A和主机B不在同一网段时,主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。
(d)ARP表
设备通过ARP解析到目的MAC地址后,将会在自己的ARP表中增加IP地址到MAC地址的映射表项,以用于后续到同一目的地报文的转发。ARP表项分为动态ARP表项和静态ARP表项。
(e)动态ARP表项
动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。当到达老化时间、接口down时会删除相应的动态ARP表项。
(f)静态ARP表项
静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。配置静态ARP表项可以增加通信的安全性。静态ARP表项可以限制和指定IP地址的设备通信时只使用指定的MAC地址,此时攻击报文无法修改此表项的IP地址和MAC地址的映射关系,从而保护了本设备和指定设备间的正常通信。静态ARP表项分为短静态ARP表项和长静态ARP表项。
- 在配置长静态ARP表项时,除了配置IP地址和MAC地址项外,还必须配置该ARP表项所在VLAN和出接口。长静态ARP表项可以直接用于报文转发。
- 在配置短静态ARP表项时,只需要配置IP地址和MAC地址项。如果出接口是三层以太网接口,短静态ARP表项可以直接用于报文转发;如果出接口是VLAN虚接口,短静态ARP表项不能直接用于报文转发,当要发送IP数据包时,先发送ARP请求报文,如果收到的响应报文中的源IP地址和源MAC地址与所配置的IP地址和MAC地址相同,则将接收ARP响应报文的接口加入该静态ARP表项中,之后就可以用于IP数据包的转发。
(g)免费ARP
免费ARP报文是一种特殊的ARP报文,该报文中携带的发送端IP地址和目标IP地址都是本机IP地址,报文源MAC地址是本机MAC地址,报文的目的MAC地址是广播地址。设备通过对外发送免费ARP报文来实现以下功能:
- 确定其它设备的IP地址是否与本机的IP地址冲突。当其它设备收到免费ARP报文后,如果发现报文中的IP地址和自己的IP地址相同,则给发送免费ARP报文的设备返回一个ARP应答,告知该设备IP地址冲突。
- 备改变了硬件地址,通过发送免费ARP报文通知其它设备更新ARP表项。
(h)免费ARP报文学习功能的作用
使能了免费ARP报文学习功能后,设备会根据收到的免费ARP报文中携带的信息(源IP地址、源MAC地址)对自身维护的ARP表进行修改。设备先判断ARP表中是否存在与此免费ARP报文源IP地址对应的ARP表项:
- 如果没有对应的ARP表项,设备会根据该免费ARP报文中携带的信息新建ARP表项;
- 如果存在对应的ARP表项,设备会根据该免费ARP报文中携带的信息更新对应的ARP表项。
关闭免费ARP报文学习功能后,设备不会根据收到的免费ARP报文来新建ARP表项,但是会更新已存在的对应ARP表项。如果用户不希望通过免费ARP报文来新建ARP表项,可以关闭免费ARP报文学习能,以节省ARP表项资源。
(i)定时发送免费ARP功能的作用
定时发送免费ARP功能可以及时通知下行设备更新ARP表项或者MAC地址表项,主要应用场景如下:
- 防止仿冒网关的ARP攻击:如果攻击者仿冒网关发送免费ARP报文,就可以欺骗同网段内的其它主机,使得被欺骗的主机访问网关的流量,被重定向到一个错误的MAC地址,导致其它主机用户无法正常访问网络。为了尽量避免这种仿冒网关的ARP攻击,可以在网关的接口上使能定时发送免费ARP功能。使能该功能后,网关接口上将按照配置的时间间隔周期性发送接口主IP地址和手工配置的从IP地址的免费ARP报文。这样,每台主机都可以学习到正确的网关,从而正常访问网络。
- 防止主机ARP表项老化:在实际环境中,当网络负载较大或接收端主机的CPU占用率较高时,可能存在ARP报文被丢弃或主机无法及时处理接收到的ARP报文等现象。这种情况下,接收端主机的动态ARP表项会因超时而被老化,在其重新学习到发送设备的ARP表项之前,二者之间的流量就会发生中断。为了解决上述问题,可以在网关的接口上使能定时发送免费ARP功能。使能该功能后,网关接口上将按照配置的时间间隔周期性发送接口主IP地址和手工配置的从IP地址的免费ARP报文。这样,接收端主机可以及时更新ARP映射表,从而防止了上述流量中断现象。
- 防止VRRP虚拟IP地址冲突:当网络中存在VRRP备份组时,需要由VRRP备份组的Master路由器周期性的向网络内的主机发送免费ARP报文,使主机更新本地ARP地址表,确保网络中不会存在与VRRP虚拟IP地址相同的设备。
由于用户可以设定VRRP虚拟IP地址和MAC地址对应关系,因此有以下两种情况:
- 如果当前VRRP虚拟IP地址和虚拟MAC地址对应,则免费ARP报文中的源MAC地址为VRRP虚拟路由器对应的虚拟MAC地址。
- 如果当前VRRP虚拟IP地址和实际MAC地址对应,则免费ARP报文中的源MAC地址为VRRP备份组中Master路由器接口的MAC地址。
- 及时更新模糊终结VLAN内设备的MAC地址表
三层以太网子接口上同时配置了模糊终结多个VLAN和VRRP备份组时,为了避免发送过多的VRRP通告报文,需要关闭VLAN终结支持广播/组播功能,并配置VRRP控制VLAN。此时,为了及时更新各个模糊终结VLAN内设备的MAC地址表项,可以在三层以太网子接口上使能定时发送免费ARP功能。使能该功能后,三层以太网子接口将按照配置的时间间隔周期性发送VRRP虚拟IP地址、接口主IP地址和手工配置的从IP地址的免费ARP报文。这样,当VRRP主备状态切换时,各个模糊终结VLAN内设备上可以及时更新为正确的MAC地址表项。
(j)代理ARP
如果ARP请求是从一个网络的主机发往同一网段却不在同一物理网络上的另一台主机,那么连接它们的具有代理ARP功能的设备就可以回答该请求,这个过程称作代理ARP(Proxy ARP)。代理ARP功能屏蔽了分离的物理网络这一事实,使用户使用起来,好像在同一个物理网络上。代理ARP分为普通代理ARP和本地代理ARP,二者的应用场景有所区别:
- 普通代理ARP的应用环境为:想要互通的主机分别连接到设备的不同三层接口上,且这些主机不在同一个广播域中。
- 地代理ARP的应用环境为:想要互通的主机连接到设备的同一个三层接口上,且这些主机不在同一个广播域中。
关于ARP的详细内容可以参考文章:ARP技术介绍
(2)IGMP组管理协议(Internet Group Management Protocol)
IGMP是Internet Group Management Protocol(互联网组管理协议)的简称。它是TCP/IP协议族中负责IP组播成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
(a)IGMP的版本
到目前为止,IGMP有三个版本:
- IGMPv1(由RFC 1112定义)
- IGMPv2(由RFC 2236定义)
- IGMPv3(由RFC 3376定义)
所有版本的IGMP都支持ASM(Any-Source Multicast,任意信源组播)模型;IGMPv3可以直接应用于SSM(Source-Specific Multicast,指定信源组播)模型,而IGMPv1和IGMPv2则需要在IGMP SSM Mapping技术的支持下才能应用于SSM模型。
(b)IGMPv1工作机制
IGMPv1主要基于查询和响应机制来完成对组播组成员的管理。 当一个网段内有多台组播路由器时,由于它们都能从主机那里收到IGMP成员关系报告报(Membership Report Message),因此只需要其中一台路由器发送IGMP查询报文(Query Message)就足够了。这就需要有一个查询器(Querier)的选举机制来确定由哪台路由器作为IGMP查询器。对于IGMPv1来说,由组播路由协议(如PIM)选举出唯一的组播信息转发者DR(Designated Router,指定路由器)作为IGMP查询器。 如上图所示,假设Host B与Host C想要收到发往组播组G1的组播数据,而Host A想要收到发往组播组G2的组播数据,那么主机加入组播组以及IGMP查询器(Router B)维护组播组成员关系的基本过程如下:
- 主机会主动向其要加入的组播组发送IGMP成员关系报告报文以声明加入,而不必等待IGMP查询器发来的IGMP查询报文;
- IGMP查询器周期性地以组播方式向本地网段内的所有主机与路由器发送IGMP查询报文(目的地址为224.0.0.1);
- 在收到该查询报文后,关注G1的Host B与Host C其中之一(这取决于谁的延迟定时器先超时)——譬如Host B会首先以组播方式向G1发送IGMP成员关系报告报文,以宣告其属于G1。由于本地网段中的所有主机和路由器都能收到Host B发往G1的报告报文,因此当Host C收到该报告报文后,将不再发送同样针对G1的报告报文,因为IGMP路由器(Router A和Router B)已知道本地网段中有对G1感兴趣的主机了。这个机制称为主机上的IGMP成员关系报告抑制机制,该机制有助于减少本地网段的信息流量;
- 与此同时,由于Host A关注的是G2,所以它仍将以组播方式向G2发送报告报文,以宣告其属于G2;
- 经过以上的查询和响应过程,IGMP路由器了解到本地网段中有G1和G2的成员,于是由组播路由协议(如PIM)生成(,G1)和(,G2)组播转发项作为组播数据的转发依据,其中的“*”代表任意组播源;
- 当由组播源发往G1或G2的组播数据经过组播路由到达IGMP路由器时,由于IGMP路由器上存在(,G1)和(,G2)组播转发项,于是将该组播数据转发到本地网段,接收者主机便能收到该组播数据了。
IGMPv1没有专门定义离开组播组的报文。当运行IGMPv1的主机离开某组播组时,将不会向其要离开的组播组发送报告报文。当网段中不再存在该组播组的成员后,IGMP路由器将收不到任何发往该组播组的报告报文,于是IGMP路由器在一段时间之后便删除该组播组所对应的组播转发项。
(c)IGMPv2的改进
与IGMPv1相比,IGMPv2增加了查询器选举机制和离开组机制。 i)查询器选举机制 在IGMPv1中,当某共享网段上存在多个组播路由器时,由组播路由协议(如PIM)选举的指定路由器充当查询器。 在IGMPv2中,增加了独立的查询器选举机制,其选举过程如下:
- 所有IGMPv2路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送IGMP普遍组查询(General Query)报文(目的地址为224.0.0.1);
- 本地网段中的其它IGMPv2路由器在收到该报文后,将报文的源IP地址与自己的接口地址作比较。通过比较,IP地址最小的路由器将成为查询器,其它路由器成为非查询器(Non-Querier);
- 所有非查询器上都会启动一个定时器(即其它查询器存在时间定时器Other Querier Present Timer)。在该定时器超时前,如果收到了来自查询器的IGMP查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。
ii)离开组机制 在IGMPv1中,主机离开组播组时不会向组播路由器发出任何通知,导致组播路由器只能依靠组播组成员查询的响应超时来获知组播组成员的离开。
而在IGMPv2中,当一个主机离开某组播组时:
- 该主机向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送离开组(Leave Group)报文;
- 当查询器收到该报文后,向该主机所声明要离开的那个组播组发送特定组查询(Group-Specific Query)报文(目的地址字段和组地址字段均填充为所要查询的组播组地址);
- 如果该网段内还有该组播组的其它成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的最大响应时间(Max Response Time)内发送成员关系报告报文;
- 如果在最大响应时间内收到了该组播组其它成员发送的成员关系报告报文,查询器就会继续维护该组播组的成员关系;否则,查询器将认为该网段内已无该组播组的成员,于是不再维护这个组播组的成员关系。
(d)IGMPv3的改进
IGMPv3在兼容和继承IGMPv1和IGMPv2的基础上,进一步增强了主机的控制能力,并增强了查询和报告报文的功能。
i)主机控制能力的增强
IGMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),使主机在加入某组播组G的同时,能够明确要求接收或拒绝来自某特定组播源S的组播信息。当主机加入组播组时:
- 若要求只接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为INCLUDE Sources(S1,S2,……);
- 若拒绝接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为EXCLUDE Sources(S1,S2,……)。
如下图所示,网络中存在Source 1(S1)和Source 2(S2)两个组播源,均向组播组G发送组播报文。Host B仅对从Source 1发往G的信息感兴趣,而对来自Source 2的信息没有兴趣。 如果主机与路由器之间运行的是IGMPv1或IGMPv2,Host B加入组播组G时无法对组播源进行选择,因此无论Host B是否需要,来自Source 1和Source 2的组播信息都将传递给Host B。当主机与路由器之间运行了IGMPv3之后,Host B就可以要求只接收来自Source 1、发往G的组播信息(S1,G),或要求拒绝来自Source 2、发往G的组播信息(S2,G),这样就只有来自Source 1的组播信息才能传递给Host B了。
ii) 查询和报告报文功能的增强
1)携带源地址的查询报文 IGMPv3不仅支持IGMPv1的普遍组查询和IGMPv2的特定组查询,而且还增加了对特定源组查询的支持:
- 普遍组查询报文中,既不携带组地址,也不携带源地址;
- 特定组查询报文中,携带组地址,但不携带源地址;
- 特定源组查询报文中,既携带组地址,还携带一个或多个源地址。
2)包含多组记录的报告报文 IGMPv3报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。组记录可以分为多种类型,如下:
- IS_IN:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源列表发往该组播组的组播数据。
- IS_EX:表示组播组与组播源列表之间的过滤模式为EXCLUDE,即只接收从指定组播源列表之外的组播源发往该组播组的组播数据。
- TO_IN:表示组播组与组播源列表之间的过滤模式由EXCLUDE转变为INCLUDE。
- TO_EX:表示组播组与组播源列表之间的过滤模式由INCLUDE转变为EXCLUDE。
- ALLOW:表示在现有状态的基础上,还希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则向现有组播源列表中添加这些组播源;如果当前的对应关系为EXCLUDE,则从现有组播源列表中删除这些组播源。
- BLOCK:表示在现有状态的基础上,不再希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则从现有组播源列表中删除这些组播源;如果当前的对应关系为EXCLUDE,则向现有组播源列表中添加这些组播源。
关于IGMP文章详细内容,请参考:IGMP技术介绍
(3)ICMP控制报文协议(Internet Control Message Protocol)
通信过程中发生各种问题时,ICMP 将问题反馈,通过这些信息,管理者可以对所发生的问题作出诊断,然后采取适当的措施去解决它。CMP 报文由 8 位错误类型、8 位条件代码和 16 位校验和组成,被封装在一个 IP 数据报中:
5、传输层协议-UDP协议
关于ARP的详细内容可以参考: 《http://www.h3c.com/cn/d_200812/623583_30003_0.htm》
|