第三章 网络安全基础(一)
第三章 网络安全基础
- 1. 计算机网络基础知识
- 1.1 计算机网络的体系结构
- 1. 计算机网络体系结构的定义
- 2. 几种典型的计算机网络体系结构
- 1.2 Internet 协议
- 1. 网络层协议
- 1. IPv4协议
- 2. Internet 路由协议
- 1. 路由信息协议 RIP(Routing Information Protocol)
- 2. 开放最短路径优先协议 OSPF(Open Shortest Path First)
- 3. 边界网关协议 BGP(Border Gateway Protocol)
- 4. 自治系统 AS(Autonomous system)
- 5. 因特网组管理协议 IGMP(Internet Group Management Protocol)
- 3. 地址解析协议 ARP(Address Resolution Protocol)及RARP
- 1. ARP协议
- 2. 反向地址解析协议 RARP(Reverse Address Resolution Protocol)
- 4. Internet 控制报文协议 ICMP(Internet Control Message Protocol)
1. 计算机网络基础知识
1.1 计算机网络的体系结构
1. 计算机网络体系结构的定义
为进行网络中的数据交换而建立的规则、标准或约定就是网络协议
(Protocol)
将计算机网络的各层及其协议的集合,称为计算机网络的体系结构
(Architecture)
2. 几种典型的计算机网络体系结构
- OSI/ISO体系结构
国际标准化组织ISO(International Organization for Standardization)在1977年开始制定有关异种计算机网络如何互连的国际标准,并提出了开放系统互连参考模型(Open System Interconnection Reference),简称OSI,体系结构如图:
- TCP/IP体系结构
1969年,美国国防部高级研究计划局(Advanced Research Projects Agency,ARPA)制定了一套协议,指明了单个计算机如何通过网络进行通信,其中TCP(Transmission Control Protocol)传输控制协议和IP(Internet Protocol)网际协议是其中两个主要协议,这套协议后来被称为TCP/IP协议。体系结构如图:
OSI参考模型和TCP/IP四层模型 对应关系
详细参考OSI开放系统互联参考模型及一些相关协议
1.2 Internet 协议
Internet 协议的主要协议及其层次关系如图:
1. 网络层协议
1. IPv4协议
网际协议版本4(Internet Protocol version 4,IPv4),又称互联网通信协议第四版,是网际协议开发过程中的第四个修订版本,也是此协议第一个被广泛部署的版本。IPv4是互联网的核心,也是使用最广泛的网际协议版本,其后继版本为IPv6,直到2011年,IANA IPv4位址完全用尽时,IPv6仍处在部署的初期。
- 概述
一台主机
至少拥有一个IP地址。任何两台主机的IP地址不能相同,但是允许一台主机拥有多个IP地址。
如果一台计算机虽然也连入Internet,使用Internet某些功能,但它没有自己的IP地址,就不能称为主机。它只能通过连接某台具有IP地址的主机实现这些功能,因此只能作为上述主机的仿真终端。
IP地址划分经过三个阶段:分类IP地址;子网划分;无分类编址(CIDR)
- 分类IP地址结构及类别
IP地址是由32位二进制数,即4个字节组成,它与硬件没有任何关系,所以也称逻辑地址
。它由网络号和主机号组成,这样的IP地址是两级IP地址,如:
这种结构使我们可以在Internet上很方便的寻址,即:先按网络号找到网络,再按主机号找到主机。所以IP地址并不只是一个计算机代号,而是指出了连接到某网络上的某个主机。
IP地址分为五类,即A类到E类,如图
地址类别 | IP范围 | 容纳主机 |
---|---|---|
A类地址 | 1.0.0.1-126.255.255.254 | 可用的A类网络有126个,每个网络能容纳1600多万个主机 |
B类地址 | 128.0.0.0 ~ 191.255.255.255 | 可用的B类网络有16382个,每个网络能容纳6万多个主机 |
C类地址 | 192.0.0.0 ~ 223.255.255.255 | C类网络可达209万余个,每个网络能容纳254个主机 |
D类地址 | 224.0.0.0 ~ 239.255.255.255 | 它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。多为操作系统使用。 |
E类地址 | 240.0.0.0 ~ 247.255.255.255 | 为将来使用保留。 |
- 一些特殊的IP地址
0.0.0.0
将IP地址中的主机地址全设置为0,即该局域网的网络号,这个IP地址代表这个局域网。
192.168.0.255
将IP地址中的主机地址全设置为1,可以变成广播地址,这个广播地址可以给同一个链路中互相连接的所有主机发送数据包
127.*
的IP地址用于本地环回测试,通常是127.0.0.1,测试本机网络配置,能ping通则说明本机的IP协议安装没问题
例如:
192.168.1.5
是一个私有IP地址,属于内网(私网)使用范围,通常用于家庭或企业内部网络中的设备分配。以下是关于其网络地址和主机地址的解析:
-
- 网络地址
当子网掩码为默认的 255.255.255.0 时,192.168.1.5 的网络地址为 192.168.1.0(即IP地址与子网掩码按位与运算的结果)。
该地址用于标识整个子网,是路由决策的关键依据2。
- 网络地址
-
- 主机地址
主机地址即IP地址中标识具体设备的部分。192.168.1.5 的主机部分是.5
,表示该子网内的第5台设备。
同一子网(192.168.1.0/24)下,主机地址范围为 1~254(0和255为网络地址和广播地址,不可用)。
- 主机地址
-
- 其他相关地址
广播地址:同一子网下的广播地址为 192.168.1.255。
网关地址:通常为 192.168.1.1,用于跨子网通信
- 其他相关地址
- 子网及子网掩码
两级IP地址的缺点:
- IP地址空间的利用率有时很低
随着Internet的发展,使用前四位是否为1来分类的方案弊端开始显现:那就是很多子网的申请者都会去申请B类网络地址,因为A类根本用不完,而C类不够用。导致B类的网络地址很快就被分配完了。而申请了A类的网络又会浪费大量的IP地址
- 给每一个物理网络分配一个网络号会使路由表变得太大,因而使网络性能变差
划分子网
在IP地址中增加一个’subnet-id
’字段,使两级IP地址变成三级IP地址,这种做法叫做划分子网(subnetting)。划分子网属于一个单位内部的事情,单位对外仍表现出未划分子网的网络。因此子网号subnet-id
是从两级IP地址的主机号
部分借用的若干位。
当外面的分组进入本单位网络后,本单位路由器如何确定应转发的子网呢?这就是子网掩码的作用了。将子网掩码和IP地址进行按位与
,所得到的结果就是网络地址。这里的网络地址显然使net-id
部分和subnet-di
部分不变,而host-id
部分全为0
。
子网掩码告知路由器,IP地址的前多少位是网络地址,后多少位(剩余位)是主机地址,使路由器正确判断任意IP地址是否是本网段的,从而正确地进行路由。
例如,有两台主机,主机一的IP地址为
222.21.160.6
,子网掩码为255.255.255.192
,主机二的IP地址为222.21.160.73
,子网掩码同样为255.255.255.192
。主机一要给主机二发送数据,先要判断两个主机是否在同一网段。
主机一的十进制形式为(网络地址):222.21.160.0
十进制 | 二进制 |
---|---|
222.21.160.6 | 11011110.00010101.10100000.00000110 |
255.255.255.192 | 11111111.11111111.11111111.11000000 |
按位逻辑与运算结果为 222.21.160.0 | 11011110.00010101.10100000.00000000 |
主机二的十进制形式为(网络地址):222.21.160.64
十进制 | 二进制 |
---|---|
222.21.160.73 | 11011110.00010101.10100000.01001001 |
255.255.255.192 | 11111111.11111111.11111111.11000000 |
按位逻辑与运算结果为 222.21.160.64 | 11011110.00010101.10100000.01000000 |
本例中的两个IP地址为C类地址,通常C类地址判断前三位是否相同,即可确定2个IP地址是否在同一网段内。
但本例中的222.21.160.6与222.21.160.73不在同一网段,因为这两个C类IP地址已经做了子网划分
,就不能只判断前三个字节是否相同就确认这两个IP是否在同一网段。本例中可以看到net-id
为222.21.160,subnet-id
为从网络号中的前两位,host-id
为后六位,即
其中
主机一(222.21.160.6)在222.21.160.1-222.21.160.62 段
主机二(222.21.160.73)在222.21.160.65-222.21.160.126 段
所以不在同一网段,如果要通信需要通过路由器转发。
2. Internet 路由协议
路由器上的路由表是根据路由协议生成的,路由协议的核心就是路由算法
在计算机网络中,路由表(routing table)或称路由择域信息库(RIB, Routing Information Base),是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的拓扑信息。路由表建立的主要目标是为了实现路由协议和静态路由选择。
由于Internet 规模太大,所以常把它划分成许多较小的自治系统(Autonomous System,AS)。通常把自治系统内部的路由协议称为内部网关协议(IGP),自治系统之间的协议称为外部网关协议。常见的内部网关协议有RIP协议和OSPF协议;外部网关协议有BGP协议。
1. 路由信息协议 RIP(Routing Information Protocol)
RIP(Routing Information Protocol)是一种内部网关协议(IGP),其中文名是路由信息协议。RIP是一种分布式的基于距离向量的路由选择协议,它位于应用层(考虑到和上下协议的相关性,所以放在这里讨论)。该协议所定义的距离就是经过的路由器数目,距离最短的路由就是最好的路由。它允许一条路径最多只能包含15个路由器(限制了网络的规模),距离为16则表示不可达(可见RIP协议只适用于小型网络)。
RIP不能在两个网络之间同时使用多条路由来进行负载均衡。
RIP通过计算到达目的网络的跳数(即经过的路由器数量)来选择路由,优先选择跳数最少的路径。即使存在跳数相同但时延更低的路径,RIP仍会优先使用跳数更少的路径。这种机制导致RIP无法实现非等价路径的负载均衡。
这里的“距离”的含义是:从当前路由器到目的路由器的路径中所经过的路由器的数量加1。因此,RIP协议的“距离”又称"跳数"(hop count),因为每经过一个路由器,跳数加一。RIP协议认为最好路由路径就是它通过的路由器的数目是最少的。
RIP协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录,并以此来形成自己的路由表。且按固定时间(一般为30秒)和相邻路由器交换路由表。
RIP路由表中的主要信息是:到达某个网络的距离与下一跳地址。如下图所示:
距离向量算法
对于每一个相邻路由器发送过来的RIP报文,进行如下操作:
- 对相邻路由器B发过来的RIP报文,修改该报文中的所有表项。将“下一跳”字段中的地址都改为B,并把所有“距离”字段的值加1。
该步操作如下图所示:
-
对修改后的RIP报文中的每一项,进行如下步骤:
① 若本路由器的路由表中没有目的网络N,则把该项添加到路由表中;
② 否则,若网络N的下一跳地址为B,则用该表项替代(因为路由信息更新了);
③ 如网络N的下一跳地址不为B,则将本路由器中网络N表项的距离D与该表项的距离d比较,若d<D,则用改表项替代(发现了更短的路径);
④ 否则,什么都不做。 -
若超过3分钟还未收到相邻路由器的路由表,则将此路由器标记未不可达,即将距离设置为16。
距离向量算法的基础是
Bellman-Ford
算法,其要点是:设X是节点A到B的最短路径上的一个节点。若将路径A→B
拆成两端路径A→X
与X→B
,则每段路径A→X
与X→B
都分别是节点A到X和节点X到B的最短路径。
RIP协议属于应用层协议,它使用传输层的用户数据报UDP(User Datagram Protocol)进行传送。协议格式:
RIP报文中的字段
字段 | 描述 |
---|---|
命令(Command) | 指出了报文的意义 |
版本(Version) | 指出RIP的版本 |
必为0 | 为了4字节对齐,填充0 |
地址族标识符(Address Family) | 地址类别,标志所使用的地址协议 |
路由标记 | 指出自治系统号 |
网络地址 | 目的地址 |
子网掩码 | 如名所示 |
下一跳路由器 | 如名所示 |
距离 | 从当前路由器到达目的路由器的距离 |
2. 开放最短路径优先协议 OSPF(Open Shortest Path First)
OSPF路由协议是用于网际协议(IP)网络的链路状态路由协议。该协议使用链路状态路由算法的内部网关协议(IGP),在单一自治系统(AS)内部工作。
OSPF 协议是分布式的链路状态路由协议。链路在这里代表了该路由器和哪些路由器是相邻的,即通过一个网络是可以连通的。链路状态说明了该通路的连通状态以及距离、时延和带宽等参数。在该协议中,只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送路由信息。所发送的信息是本路由相邻的所有路由器的链路状态。为了保存这些链路状态信息,每个路由器都建立有一个链路状态数据库,因为路由器交换信息时使用的洪泛法,所以每个路由器都存有所有全网的链路状态信息,也就是说每个路由器都知道整个网络的连通情况和拓扑结构。这样每个路由器都可以根据链路状态数据库的信息来构造自己的路由表。
为了及时了解链路的状态情况,每个路由器需要定时(10秒
)向邻居路由器发送Hello
分组。如果40秒
还没有收到邻居的Hello
信息,则认为邻居是不连通的,应该立即修改链路状态数据库所对应的记录,并要重新计算路由表。
OSPF协议还有五种分组:
组名 | 含义 |
---|---|
问候(Hello)分组 | OSPF使用Hello分组建立和维护邻接关系。在一个路由器能够给其他路由器分发它的邻居信息前,必须先问候它的邻居们。 |
数据库描述(Data base Description,DBD )分组 | DBD分组不包含完整的“链路状态数据库”信息,只包含数据库中每个条目的概要。当一个路由器首次连入网络,或者刚刚从故障中恢复时,它需要完整的“链路状态数据库”信息。此时,该路由器首先通过hello分组与邻居们建立双向通信关系,然后将会收到每个邻居反馈的DBD分组。新连入的这个路由器会检查所有概要,然后发送一个或多个链路状态请求分组,取回完整的条目信息。 |
链路状态请求(Link State Request,LSR 分组 | LSR分组用来请求邻居发送其链路状态数据库中某些条目的详细信息。当一个路由器与邻居交换了数据库描述分组后,如果发现它的链路状态数据库缺少某些条目或某些条目已过期,就使用LSR分组来取得邻居链路状态数据库中较新的部分。 |
链路状态更新(Link State Update,LSU )分组 | LSU分组被用来应答链路状态请求分组,也可以在链路状态发生变化时实现洪泛(flooding)。在网络运行过程中,只要一个路由器的链路状态发生变化,该路由器就要使用LSU,用洪泛法向全网更新链路状态。 |
链路状态确认(Link State Acknowledgment,LSA ck)分组 | LSAck分组被用来应答链路状态更新分组,对其进行确认,从而使得链路状态更新分组采用的洪泛法变得可靠。 |
通过这四种分组达到全网链路数据库的同步。
- 链路状态更新分组是正常情况下,当链路状态发生变化时使用洪泛法所发送的分组;
- 链路状态确认分组是对链路状态更新分组的确认;
- 链路状态描述分组是当路由器启动一条新的通路时,向邻居路由器所发送的分组;
- 链路状态请求分组是在与邻居路由器交换了数据库描述分组后,还需要其他自己缺少的信息时所使用的分组。
协议格式:
字段名 | 长度(字节) | 功能描述 |
---|---|---|
Version | 1 | OSPF协议版本,目前为2(OSPFv2)或3(OSPFv3)。 |
Type | 1 | 报文类型,标识报文的种类(Hello、DD、LSR、LSU、LSAck)。 |
Packet Length | 2 | 整个OSPF报文的长度,包括OSPF头部。 |
Router ID | 4 | 发送该报文的路由器的ID。 |
Area ID | 4 | 报文所属的区域ID,0表示骨干区域。 |
Checksum | 2 | 校验和,用于检测报文在传输过程中是否出错。 |
AuType | 2 | 认证类型,标识使用的认证方式(0:无认证,1:简单密码,2:MD5)。 |
Authentication | 8 | 认证信息,根据AuType字段的不同,可以是密码或MD5摘要。 |
OSPF协议核心工作原理
1. 邻居发现与关系建立。
- 路由器通过发送Hello报文(组播地址224.0.0.5)发现邻居,报文包含Router-ID、区域ID等信息。
- 邻居关系经历7个状态(Down→Init→2-Way→ExStart→Exchange→Loading→Full),最终完成数据库同步。
- Down状态:当前的路由器运行了OSPF,端口刚起来的一瞬间的状态,还没有收到Hello包时的状态。
- Attempt状态:只存在于NBMA网络中。当一台设备试图通过Hello报文去联系自己的邻居,但是没有收到回应报文时,就会将它的邻居关系设置为Attempt状态。
- Init状态:一旦发送Hello包出去,就会进入初始状态。
- 2-Way状态:收到邻居的Hello包了,然后在邻居的Hello包当中看到自己的Router ID了,则会进入2-Way状态,双方建立邻居关系。2-Way状态会选DR(指定路由器)和BDR(备份指定路由器),怎么来选?先比较所有路由器的优先级,谁的优先级大,谁就是DR。然后再看RID,谁的优先级大,谁就是DR,次大的就是BDR,其它就是DROTHER。
2. 链路状态数据库(LSDB)同步。
- 路由器通过交换DBD(数据库描述包)、LSR(链路状态请求)、LSU(链路状态更新)和LSACK(确认)报文,同步LSDB。
- LSDB包含全网拓扑信息,由不同类型的LSA(链路状态通告)描述,如Type-1(路由器LSA)、Type-2(网络LSA)等。
3. 最短路径计算。
- 每台路由器以自身为根节点,使用Dijkstra算法(SPF算法)计算最短路径树,生成路由表。
区域划分
OSPF 协议通过将自治系统划分成不同的区域(Area)来解决上述问题。区域是从逻辑上将路由器划分为不同的组,每个组用区域号(Area ID)来标识。区域的边界是路由器,而不是链路。一个网段(链路)只能属于一个区域,或者说每个运行OSPF 的接口必须指明属于哪一个区域。
路由表的生成与选择
从路由器B到终端E,从拓扑图上来看有两条路径可达。但是每条链路有自己的开销值,这个值一般是根据链路是带宽来计算的,反映的是真实的链路传输能力,因此开销值越小,链路传输能力越强,传输速率越快,所以,在最终的路由表形成时,会选择开销值最小的路径作为最终的路由路径。
有兴趣可以看看ospf?
3. 边界网关协议 BGP(Border Gateway Protocol)
BGP(Border Gateway Protocol,边界网关协议)是一个距离矢量路由协议,和传统的基于下一跳的IGP协议不同,它是基于AS(自治系统)的外部网关协议EGP(Exterior Gateway Protocol),即AS之间使用的路由协议。BGP属于外部网关路由协议,它解决的是AS之间的选路问题,也正是这样,它更适合用于互联网。BGP的关键在于理解BGP的报文,邻居的建立、BGP路由属性、选路原则等。
每个AS(自治系统)的管理员要选择至少一个路由器作为该自治系统的“BGP发言人(BGP Speaker)”。BGP发言人往往就是BGP边界路由器,但也可以不是。通常两个BGP发言人都是通过一个共享网络连接在一起。当一个BGP发言人与其他自治系统中的BGP发言人交换路由信息时,首先要建立TCP连接,然后在此连接上交换BGP报文以建立BGP会话(session),利用BGP会话交换路由信息。在BGP刚刚运行时,BGP的邻站交换整个BGP路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和较少路由器的处理开销方面都有好处。
BGP发言人互相交换网络可达信息后,各BGP发言人就可以找到到达各自自治系统比较好的路由。
BGP使用如下四种消息类型:
消息类型 | 说明 |
---|---|
Open消息 | 打开报文,Open消息是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。 |
Keepalive消息 | 保活报文,BGP会周期性地向对等体发出Keepalive消息,用来保持连接的有效性。 |
Update消息 | 更新报文,Update消息用于在对等体之间交换路由信息。它既可以发布可达路由信息,也可以撤销不可达路由信息。 |
Notification消息 | 通知报文,当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。 |
BGP协议格式
BGP状态
类型 | 备注 |
---|---|
Idle | 初始,路由器查找路由表,是否有到达邻居的路由 |
Connect | 发起TCP连接,等待TCP连接完成 |
Active | TCP连接失败,继续尝试TCP连接 |
Open Sent | TCP连接成功,已发送Open包 |
Open Confirm | 已收到对方正确的Open包如果没有收到,会进入Active |
Established | 邻居建立完成,开始传递路由 |
- IBGP(Internal/Interior BGP):同一个AS中的两个或多个对等实体之间运行的BGP被称为IBGP
- EBGP(External/Exterior BGP):归属不同的AS的对等实体之间运行的BGP
- 边界网关(Border Gateway)/边界路由器(Border Router):两个AS利用BGP交换信息的路由器
BGP对网络拓扑结构没有限制,特点包括:
- 实现自治系统间通信,传播网络可达信息
- 多个BGP路由器间的协调
- BGP支持基于策略的选路(policy-base routing)。BGP可以实现由本地管理员选择策略,BGP路由器可以为域内和域间的网络可达性配置不同策略
- 可靠的传输。BGP路由信息的传输使用TCP协议
- 路径信息。
- 增量更新。路由更新除启动要交换一次完整信息外,后续路由只告知王的变化信息
- BGP支持无类型编址(CIDR)及VLSM方式。
- 路由聚集。BGP允许发送方把路由信息聚集在一起,用一个条目来表示多个相关的目的网络,以节约带宽。
- BGP还允许接收方对报文进行鉴别和认证。
详细参考BGP
协议对比
4. 自治系统 AS(Autonomous system)
在互联网中,一个自治系统(AS)是一个有权自主地决定在本系统中应采用各种路由协议的小型单位。这个网络单位可以是一个简单的网络也可以是一个由一个或多个普通的网络管理员来控制的网络群体,它是一个单独的可管理的网络单元(例如一所大学,一个企业或者一个公司个体)。一个自治系统有时也被称为是一个路由选择域(routing domain)。一个自治系统将会分配一个全局的唯一的16位号码,有时我们把这个号码叫做自治系统号(ASN)。
- 自治系统(AS)——单一技术管理下的一组网络。
- 16位编号(自2009年1月起使用32位编号),1至65535(私有AS:64512-65535)
- 互联网编号指派机构(IANA)会分配AS号。
- IGP在AS内运行。
- 自治系统间使用BGP。
- AS内部使用IGP来计算和发现路由,如OSPF,ISIS,RIP等。
- AS之间使用BGP来传递和控制路由。
5. 因特网组管理协议 IGMP(Internet Group Management Protocol)
IGMP是在多播环境下使用的协议,是TCP/IP协议族中负责IPv4组播成员管理的协议,通过主机与组播路由器之间的交互实现组成员关系管理。IP主机和相邻的路由器利用IGMP来创建多播组的组成员。像ICMP用于单播连接一样,IGMP也是IP多播说明的一个完整部分。 IGMP为互联网协议的一种,属于开放系统链接(OSI) 模块的第三层协议,IP主机用它将主机的多点发送成员人数报告给临近的多点发送路由器。
单播、多播(组播)和广播是网络通信中三种基本的数据传输方式,主要内容对比如下
类型 | 特点 | 应用 | 优缺点 |
---|---|---|---|
单播 (Unicast) | 一对一通信,数据仅发送给指定接收方,使用唯一目标地址确保安全性与准确性。 | 适用于需要实时响应或个性化服务的场景,如网页浏览、电子邮件、文件传输等。 | 服务器需对每个用户单独发送数据,导致带宽占用高;但能实现精准响应和个性化服务。 |
多播(Multicast) | 在大部分情况下,也可以称为组播。一对多通信,发送方将同一数据包复制并发给多个接收方,接收方需加入特定组播组。 | 适用于视频会议、直播、网络电视等场景,可减少重复传输并降低服务器压力。 | 相比单播更高效,但需维护组播地址和组成员管理;若部分成员离线仍占用资源。 |
广播(Broadcast) | 一对所有通信,数据发送至网络中所有设备,通常用于局域网内(如DHCP请求)。 | 主要用于局域网内IP地址分配与MAC地址解析。 | 网络成本低但效率极低,占用大量带宽且无法针对性服务;安全性最低。 |
IGMP使用IP数据报传递其报文,同时它也向IP提供服务。
字段 | 说明 |
---|---|
类型 | 8位字段,定义了查询、成员关系报告、退出报告三种报文类型,类型值分别为0x11、0x16、0x17。 |
响应时间 | 8位字段,定义了查询必须在多长时间内回答。它的值以十分之一秒位单位。在查询报文中这个值不是零,但在其他两种报文中则置为零。 |
检验和 | 16位字段,检验和在8字节的报文上计算。 |
组地址 | 在一般查询报文中这个字段的值为0,在特殊查询报文、成员关系报告报文以及退出报告报文中定义groupid(组多播地址)。 |
工作机制
- 主机主动报告:主机加入组播组后,主动发送成员报告给路由器
- 周期性查询:路由器以组播地址(224.0.0.1)周期性发送查询报文,主机响应以确认存活状态
- 组成员离开:主机通过发送特定报文告知路由器离开组播组
- 使得主机能够向本地路由器表明自己希望加入或离开某个多播组。例如,在一个校园网环境中,部分学生希望接收来自特定服务器的多播视频流,这些学生的主机可以通过IGMP协议向校园网内的本地路由器发送加入多播组的消息,路由器就能知晓哪些主机对该多播内容感兴趣。
- 当主机不再需要接收多播数据时,通过IGMP发送离开消息,路由器可以及时调整转发策略,避免向不再需要的主机转发多播流量,从而优化网络资源的利用
3. 地址解析协议 ARP(Address Resolution Protocol)及RARP
网络中的一台机器具有逻辑地址和物理地址两种地址。逻辑地址是网络层的协议数据单元使用的地址,通常是IP地址。物理地址是数据链路层的协议数据单元 MAC(Media Access Control)帧使用的地址,也就是MAC地址。对于一台机器来说,网卡地址就是他的物理地址。
1. ARP协议
通常情况下,当我们通过网络访问一台机器时,一定可以知道它的逻辑地址,但物理地址却不一定能知道。如果不知道物理地址那么就不能把网络层的数据包封装成MAC帧,那么就不能由数据链路层及物理层进行传输。而ARP协议正是为了解决这个问题而设置的。
协议格式
分类 | 长度 | 说明 |
---|---|---|
硬件类型 | 2字节 | 表示网络类型,如以太网(值1)或令牌环网等。 |
协议类型 | 2字节 | 表示协议类型,如IPv4(值0x0800)或IPv6。 |
硬件地址长度 | 1字节 | 以太网通常为6字节。 |
协议地址长度 | 1字节 | IPv4通常为4字节。 |
操作类型 | 1字节 | 区分请求(0x01)或应答(0x02)。 |
源MAC地址 | 硬件类型指定长度 | 发送方的物理地址。 |
源IP地址 | 协议类型指定长度 | 发送方的IP地址。 |
目的MAC地址 | 硬件类型指定长度 | 目标设备的物理地址 |
目的IP地址 | 协议类型指定长度 | 目标设备的IP地址。 |
工作机制
在每台机器上,ARP协议都设置一个IP地址和硬件地址对应关系的高速缓存。当网络层的数据包要封装成MAC帧时,首先在高速缓存中查看有无该数据包首部的目的地址所对应的硬件地址。若有,则将该硬件地址写入MAC帧的目的地址中,完成数据报的封装。若无,ARP协议则将在本局域网上广播发出一个ARP请求分组。在ARP请求分组中,发送方的IP地址和发送方硬件地址,以及目标IP地址都是应该写入已知的数据,要寻找的目标硬件地址全写入0。当该请求分组到达每一个机器上时,每一台机器都要拿自己的IP地址和请求分组中的目标IP地址进行比较,如果不同则不做任何动作;若相同则发送一个ARP相应分组给请求方。在相应分组中发送方写明了自己的硬件地址。当这一通信过程完成时,通信双方都要对自己的ARP高速缓存进行修改,添加该记录。
详细参考 OSI开放系统互联参考模型及一些相关协议
2. 反向地址解析协议 RARP(Reverse Address Resolution Protocol)
RARP (Reverse Address Resolution Protocol,反向地址解析协议)是一种网络层协议,主要用于将物理地址(如MAC地址)转换为网络层地址(如IP地址)。它通过广播请求和单播响应机制实现地址映射,广泛应用于无盘工作站启动时获取IP地址。
工作机制
RARP采用广播请求与单播响应模式:
- 请求阶段:设备启动时发送包含自身MAC地址的广播请求,询问局域网内其他设备该MAC地址对应的IP地址。
- 响应阶段:网关服务器查询预设的MAC-IP映射表,若存在匹配项则单播响应,返回对应IP地址。
- 配置完成:设备收到响应后使用该IP地址进行网络通信。
应用场景
- 无盘工作站启动:无盘系统无法自行配置IP地址,通过RARP从网关服务器获取IP地址。
- 动态网络接入:新设备接入局域网时自动获取IP地址。
局限性
- 仅支持IP地址分配,无法提供子网掩码、网关等扩展参数;
- 依赖预先配置的RARP服务器,管理复杂且存在安全风险;
- 已被更先进的 DHCP 协议取代。
4. Internet 控制报文协议 ICMP(Internet Control Message Protocol)
ICMP( Internet Control Message Protocol )是 TCP/IP协议族 的网络层协议,用于在主机与路由器之间传递控制消息,包括网络状态检测、错误报告等。
ICMP 协议允许路由器报告差错情况和提供有关异常情况的报告。当数据报不能正确到达目的站点,或当路由器没有足够的缓存空间,又或者当路由器能够向主机提供更短的路由时,ICMP协议会及时将这些信息发送出去。就像网上的“交通警察”及时解决交通中的问题和“事故”,保证交通快速、顺畅一样。
ICMP报文有ICMP差错报文和ICMP查询报文两种:
- 差错报文:包括终点不可达、源点抑制、时间超过等,用于处理网络异常(如路由器拥塞或主机不可达)。
- 询问报文:主要用于网络探测(如 Ping 命令),通过发送请求报文测试网络连通性。
常见应用
- 网络诊断工具:Ping命令通过发送ICMP Echo Request报文检测网络连通性, Traceroute 利用ICMP追踪数据传输路径。
- 安全机制:ICMP报文可能被用于网络攻击(如 ICMP洪水攻击 ),需通过防火墙等设备进行防护
ICMP报文格式:
字段 | 说明 |
---|---|
类型 | 占1字节,标识ICMP报文的类型,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文 |
代码 | 占1字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型 |
校验和 | 占2字节,这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错 |
内容 | 占8字节,字段的长度和内容,取决于消息的类型和代码 |
ICMP报文类型及代码
类型Type | 代码Code | 描述 |
---|---|---|
0 | 0 | 回显应答(ping应答) |
3 | 0 | 网络不可达 |
3 | 1 | 主机不可达 |
3 | 2 | 协议不可达 |
3 | 3 | 端口不可达 |
3 | 4 | 需要进行分片但设置不分片比特 |
3 | 5 | 源站选路失败 |
3 | 6 | 目的网络不认识 |
3 | 7 | 目的主机不认识 |
3 | 8 | 源主机被隔离(作废不用) |
3 | 9 | 目的网络被强制禁止 |
3 | 10 | 目的主机被强制禁止 |
3 | 11 | 由于TOS,网络不可达 |
3 | 12 | 由于TOS,主机不可达 |
3 | 13 | 由于过滤,通信被强制禁止 |
3 | 14 | 主机越权 |
3 | 15 | 优先权中止生效 |
4 | 0 | 源端被关闭 |
5 | 0 | 对网络重定向 |
5 | 1 | 对主机重定向 |
5 | 2 | 对服务类型和网络重定向 |
5 | 3 | 对服务类型和主机重定向 |
8 | 0 | 请求回显(ping请求) |
9 | 0 | 路由器通告 |
10 | 0 | 路由器请求 |
11 | 0 | 传输期间生存时间为0 |
11 | 1 | 在数据报组装期间生存时间为0 |
12 | 0 | 坏的IP首部 |
12 | 1 | 缺少必须的选项 |
13 | 0 | 时间戳请求(作废不用) |
14 | 0 | 时间戳应答(作废不用) |
15 | 0 | 信息请求(作废不用) |
16 | 0 | 信息应答(作废不用) |
17 | 0 | 地址掩码请求 |
18 | 0 | 地址掩码应答 |