4、网络层协议

article/2025/8/19 13:44:54

目录

IP协议

IPV4

IPv6

ARP协议

IGMP协议

ICMP协议

路由协议

OSPF协议

RIP协议

BGP协议(边界网关)


IP协议

网络层的IP协议是构成Internet的基础。网络上每一个节点都必须有一个独立的Internet地址(IP地址)。每个计算机必须有一个 IP 地址才能够连入因特网,每个 IP 包必须有一个地址才能够发送到另一台计算机。现在,通常使用的IP地址是一个32bit的数字,也就是我们常说的IPv4,这32bit的数字分成四组,即255.255.255.255的样式。IPv4地址被分为五类,我们常用的是B类地址。

IP协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应用程序中提供支持。

1、IP协议功能

(1)寻址和路由;(根据对方的IP地址,寻找最佳路径传输信息);

(2)传递服务:

不可靠(IP协议只是尽自己最大努力去传输数据包),可靠性由上层协议提供(TCP协议);② 无连接(事先不建立会话),不维护任何关于后续数据报的信息;

(3)数据包的分片和重组

IPV4

1、IPV4组成?

IPV4地址由网络地址主机地址两部分标识组成。网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP 地址的“主机标识”则不允许在同一个网段内重复出现。由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的 IP 地址都不会相互重叠。即 IP 地址具有了唯一性。

2、IP地址分类?

每个IP地址 都包括两个标识码(ID):网络ID、主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站、服务器、路由器等)有一个主机ID与其对应。Internet委员会定义了5种IP地址类型以适合不同容量的网络,即A类~E类。其中A、B、C类由Internet NIC在全球范围内统一分配,D、E类为特殊地址。

类别

最大网络数

IP地址范围

最大主机数

私有IP地址范围

A

126(2^7-2)

0.0.0.0-127.255.255.255

16777214

10.0.0.0-10.255.255.255

B

16384(2^14)

128.0.0.0.-191.255.255.255

65534

172.16.0.0-172.31.255.255

C

2097152(2^21)

192.0.0.0-223.255.255.255

254

192.168.0.0-192.168.255.255

A 类 IP 地址是首位以 “0” 开头的地址。从第 1 位到第 8 位是它的网络标识。用十进制表示的话,0.0.0.0~127.0.0.0 是 A 类的网络地址。A 类地址的后 24 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为16,777,214个。

B 类 IP 地址是前两位 “10” 的地址。从第 1 位到第 16 位是它的网络标识。用十进制表示的话,128.0.0.0~191.255.0.0 是 B 类的网络地址。B 类地址的后 16 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为65,534个。

C 类 IP 地址是前三位为 “110” 的地址。从第 1 位到第 24 位是它的网络标识。用十进制表示的话,192.0.0.0~223.255.255.0 是 C 类的网络地址。C 类地址的后 8 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为254个。

D 类 IP 地址是前四位为 “1110” 的地址。从第 1 位到第 32 位是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255 是 D 类的网络地址。D 类地址没有主机标识,常用于多播。

E类地址,不区分网络地址和主机地址,E类地址是保留地址用于以后使用。E类地址的第一个字节以1111开始。

在分配 IP 地址时关于主机标识有一点需要注意,即要用比特位表示主机地址时,不可以全部为 0 或全部为 1。因为全部为 0 只有在表示对应的网络地址或 IP 地址不可以获知的情况下才使用。而全部为 1 的主机通常作为广播地址。因此,在分配过程中,应该去掉这两种情况。这也是为什么 C 类地址每个网段 最多只能有 254( 2^8 - 2 = 254)个主机地址的原因。

广播地址(255.255.255.255):广播地址用于在同一个链路中相互连接的主机之间发送数据包。将 IP 地址中的主机地址部分全部设置为 1,就成了广播地址。广播分为本地广播直接广播两种。在本网络内的广播叫做本地广播;在不同网络之间的广播叫做直接广播。

环回地址(127.0.0.1):本机地址,主要用于测试。在Windows系统中,这个地址有一个别名“Localhost”。寻址这样一个地址,是不能把它发到网络接口的。除非出错,否则在传输介质上永远不应该出现目的地址为“127.0.0.1”的数据包。

3、子网划分?子网掩码计算?

网络号主机号

网络层引入了IP协议,IP地址使得我们能够区分两台主机是否同属一个网络。IP协议将这个32位的地址分为两部分,前面部分代表网络地址,后面部分表示该主机在局域网中的地址。如果两个IP地址在同一个子网内,则网络地址一定相同。为了判断IP地址中的网络地址,IP协议还引入了子网掩码,IP地址和子网掩码通过按位与运算后就可以得到网络地址。

网络号子网号主机号

一个叫做“子网掩码”的识别码通过子网网络地址细分出比 A 类、B 类、C 类更小粒度的网络。这种方式实际上就是将原来 A 类、B 类、C 类等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。对于A类地址来说,默认的子网掩码是255.0.0.0;对于B类地址来说默认的子网掩码是255.255.0.0;对于C类地址来说默认的子网掩码是255.255.255.0。

对于子网掩码,目前有两种表示方式。第一种是,将 IP 地址与子网掩码的地址分别用两行来表示。以 172.20.100.52 的前 26 位是网络地址的情况为例;• 第二种表示方式是,在每个 IP 地址后面追加网络地址的位数用 “/ ” 隔开。

4、IP数据报格式

IP数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍

  • 版本字段:4个bit,用来标识IP版本号。这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6。目前使用的IP协议版本号是4。
  • 首部长度:4个bit,标识包括选项在内的IP头部字段的长度数值是以4字节为单位的,最小值为5,即 首部长度最小是4*5=20字节,不带任何选项的IP首部,4位能表示的最大值是15,那么首部长度最大是40字节
  • TOS字段:8个bit。服务类型字段被划分成两个子字段:3bit的优先级字段和4bit TOS字段,最后一个位置为0。有3个位用于指定IP数据报的优先级(目前已废弃不用),还有4个位表示可选的服务类型(最小延迟、最大吞吐量、最大可靠性、最小成本)。4bit中只能将其中一个bit位置1。如果4个bit均为0,则代表一般服务。
  • 总长度:16个bit。IP数据报最长可达65535字节。整个数据报(包括IP首部、IP层payload)的字节数:接收者用IP数据报总长度减去IP报头长度就可以确定数据包数据有效负荷的大小。每传一个IP数据报,16位的标识加1,可用于分片和重新组装数据报
  • 标志:3个bit。用于标识数据报是否分片。第1位没有使用,第2位是不分段(DF)位。当DF位被设置为1时,表示路由器不能对数据包进行分段处理。如果数据包由于不能分段而未能被转发,那么路由器将丢弃该数据包并向源发送ICMP不可达。第3位是分段(MF)位。当路由器对数据包进行分段时,除了最后一个分段的MF位被设置为0外,其他的分段的MF位均设置为1,以便接收者直到收到MF位为0的分片为止。
  • 片偏移:13个bit。在接收方进行数据报重组时用来标识分片的顺序。用于指明分段起始点相对于报头起始点的偏移量。由于分段到达时可能错序,所以位偏移字段可以使接收者按照正确的顺序重组数据包。当数据包的长度超过它所要去的那个数据链路的MTU时,路由器要将它分片。数据包中的数据将被分成小片,每一片被封装在独立的数据包中。接收端使用标识符,分段偏移以及标记域的MF位来进行重组。
  • 生存时间TTL(Time to live):8个bit。源主机为数据包设定一个生存时间,比如64,每过一个路由器就把该值减1,如果减到0就表示路由已经太长了仍然找不到目的主机的网络,就丢弃该包,因此这个生存时间的单位不是秒,而是跳(hop)
  • 协议字段:8个bit。用于指示上层协议是TCP、UDP、ICMP还是IGMP。ICMP为1,IGMP为2,TCP为6,UDP为17,GRE为47,ESP为50。
  • 首部校验和:只校验IP首部,数据的校验由更高层协议负责。若结果不为全1,即校验和错误。
  • 源地址与目的地址:IPv4地址长度为32位。IP报文发送端的IP地址以及IP报文接收端的IP地址。
  • 选项:是数据报中的一个可变长的可选信息。选项字段以32bit为界,不足时插入值为0的填充字节。保证IP首部始终是32bit的整数倍。

5、IP分包与组包

每种数据链路的最大传输单元(MTU)都不尽相同,因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的 MTU 也就不同。以太网的MTU是1500。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据部分大于1472字节,就会出现分片现象。

任何一台主机都有必要对 IP 分片进行相应的处理。分片往往在网络上遇到比较大的报文无法一下子发送出去时才会进行处理。经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行。路由器虽然做分片但不会进行重组。

IP报文分片重组时,采用了一组重组定时器,片重组的控制主要根据数据首部中的标识、标志、偏移字段进行重组。分片重组策略如下:

  • 1)第一个分片的偏移值时0
  • 2)将第一个分片携带的数据长度除以8,结果就是第二个分片的偏移值
  • 3)将第一个和第二个分片携带数据的总长度除以8,结果就是第二个分片的偏移值
  • 4)继续以上过程。直到之后分片的MF标志位为0

6、路径 MTU 发现

分片机制也有它的不足。如路由器的处理负荷加重之类。因此,只要允许,是不希望由路由器进行 IP 数据包的分片处理的。为了应对分片机制的不足,“路径 MTU 发现” 技术应运而生。路径 MTU 指的是,从发送端主机到接收端主机之间不需要分片是最大 MTU 的大小。即路径中存在的所有数据链路中最小的 MTU 。

进行路径 MTU 发现,就可以避免在中途的路由器上进行分片处理,也可以在 TCP 中发送更大的包

7、路由控制表?

路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者也叫做静态路由控制,而后者叫做动态路由控制。

IP 协议始终认为路由表是正确的。然后,IP 本身并没有定义制作路由控制表的协议。即 IP 没有制作路由控制表的机制。该表示由一个叫做“路由协议”的协议制作而成。

IPv6

1、为什么需要IPv6?

IPv6(IP version 6)是为了根本解决 IPv4 地址耗尽的问题而被标准化的网际协议。IPv4 的地址长度为 4 个 8 位字节,即 32 比特。而 IPv6 的地址长度则是原来的 4 倍,即 128 比特,一般写成 8 个 16 位字节。

2、IPv6 的特点?

  • IP 地址的扩大与路由控制表的聚合。
  • 性能提升:包首部长度采用固定的值(40字节),不再采用首部检验码。简化首部结构,减轻路由器负担。路由器不再做分片处理。
  • 支持即插即用功能:即使没有DHCP服务器也可以实现自动分配 IP 地址。
  • 采用认证与加密功能:应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能。
  • 多播、Mobile IP 成为扩展功能。

3、IPv6 中 IP 地址的标记方法?

一般人们将 128 比特 IP 地址以每 16 比特为一组,每组用冒号(“:”)隔开进行标记。

而且如果出现连续的 0 时还可以将这些 0 省略,并用两个冒号(“::”)隔开。但是,一个IP 地址中只允许出现一次两个连续的冒号。

4、IPv6 地址的结构?

•      IPv6 类似 IPv4,也是通过 IP 地址的前几位标识 IP 地址的种类。

•      在互联网通信中,使用一种全局的单播地址。它是互联网中唯一的一个地址,不需要正式分配 IP 地址。

5、单播地址

全局单播地址:

  • 全局单播地址是指世界上唯一的一个地址。它是互联网通信以及各个域内部通信中最为常用的一个 IPv6 地址。
  • 格式如下图所示,现在 IPv6 的网络中所使用的格式为,n = 48,m = 16 以及 128 - n - m = 64。即前 64 比特为网络标识,后 64 比特为主机标识。

全局单播地址

链路本地单播地址:

  • 链路本地单播地址是指在同一个数据链路内唯一的地址。它用于不经过路由器,在同一个链路中的通信。通常接口 ID 保存 64 比特版的 MAC 地址。

链路本地单播地址

6、唯一本地地址?

  • 唯一本地地址是不进行互联网通信时所用的地址。
  • 唯一本地地址虽然不会与互联网连接,但是也会尽可能地随机生成一个唯一的全局 ID。
  • L 通常被置为 1
  • 全局 ID 的值随机决定
  • 子网 ID 是指该域子网地址
  • 接口 ID 即为接口的 ID

唯一本地地址

7、IPv6 分段处理?

  • IPv6 的分片处理只在作为起点的发送端主机上进行,路由器不参与分片。

IPv6 中最小 MTU 为 1280 字节,因此,在嵌入式系统中对于那些有一定系统资源限制的设备来说,不需要进行“路径 MTU 发现”,而是在发送 IP 包时直接以 1280 字节为单位分片送出。

ARP协议

ARP(Address Resolution Protocol):地址解析协议。是用来根据IP地址来查找对应的物理地址(mac地址),即以太网接口地址。其工作原理如下:ARP首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包会在链路层进行再次包装,生成以太网数据包,最终由以太网广播给子网内的所有主机,每一台主机都会接收到这个数据包,并取出标头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃该数据包。ARP接收返回消息,以此确定目标机的MAC地址;与此同时,ARP还会将返回的MAC地址与对应的IP地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

既然有根据IP查找mac地址的地址解析协议,也有根据mac地址查找IP地址的协议:逆地址解析协议RARP(Reverse Address Resolution Protocol)。

1、ARP协议属于那一层?

一般把ARP协议划分到网络层。和IP协议同层,实际上应该属于网络层的最下层,ARP协议是被IP协议使用,但又没有划到数据链路层,在网络层的最下层。

2、为什么说工作在数据链路层?

在同一局域网内,一个数据帧从一台主机或路由器/交换机(路由器和交换机其实不属于一层,一个在网络层,一个在链路层,现在的设备高端呀),发往目的主机,是根据以太网接口地址(物理地址,也就网卡的mac地址)来确定的。IP寻址是工作在路由器这一层(网络层),在交换机这一层寻址是通过mac地址的。设备驱动程序(如网卡驱动)不检查IP数据报中的目的IP地址。

3、ARP请求/应答数据报格式

共28个字节长度。这里没画出以太网帧首部,如果是arp请求/应答,以太网帧首部14个字节的最后2个字节表示帧类型的值是0x0806。

硬件地址是硬件地址类型,

协议类型分以太网地址类型和IP地址,因此协议地址长度的值可能为6或4。

OP是操作类型,有4种:arp请求、arp应答、rarp请求和rarp应答,对应的值分别为1、2、3、4。

4、免费ARP作用

免费arp有两个作用:1. 确定IP是否冲突:比如配置主机IP时候,发一个arp请求,如果局域网内不存在同样IP配置的主机,就不会有应答;2. 更新目的主机的arp缓存:这是协议规范,收到arp请求的主机会根据arp请求的源地址更新本地arp缓存。

第2个作用可以进行arp缓存中毒攻击,arp欺骗。比如:对局域内某台主机发送arp请求,源IP是网关地址,mac地址是我本机接口地址,这样另一台主机的arp表会更新网关地址的mac地址为我这台主机的mac地址。这样它向网关发送请求的时候,流量都会走到我这台电脑上。

查看另一个电脑的arp表:

可以看到网关的mac地址是我当前主机的mac地址了。

5、RARP协议(反地址解析)

       RARP---BOOTH---DHCP

RARP即为把MAC地址映射为IP地址,实际上无盘主机在开机后,网卡引导程序就不淡定了,它会通过广播的方式询问局域网所有主机,有谁知道我的IP地址啊?RARP服务器收到这个报文后就会告诉它你的IP地址是多少,这样无盘主机就有IP地址了,就可以使用FTP快乐的下载文件了,直到BOOTP的出现,什么?怎么不是DHCP,确实在1985年9月份BOOTP出现并取代了RARP协议,编号是RFC 951,然后就一直到1997年DHCP的出现。

三种可以分配IP地址的协议:RARP、BOOTP、DHCP,那这三种协议有什么区别呢?

  1. RARP的实现是在数据链路层实现的,BOOTP和DHCP的实现是在UDP传输层实现的,RARP工作在数据链路层就需要网卡去解析协议,而随着操作系统的发展,纯软件实现的网络协议内核比纯硬件网卡解析更加实惠,而BOOTP就是使用网络协议内核去解析的。
  2. RARP服务器只能提供简单的地址分配,而且这些IP地址和MAC地址必须要提前在RARP服务器上配置好,而BOOTP和DHCP有更多复杂的功能,比如租约周期、地址池、网关和DNS服务器等,没有DNS只有IP也是不能上网的,除非你手动指定DNS服务器。另外BOOTP在获取到IP地址后客户端还会通过TFTP或者FTP协议去网络服务器上下载一个引导镜像文件。
  3. DHCP是BOOTP的升级版本,增加了Option配置选项,而且DHCP可以分配之前已经分过的但当前没有使用的IP地址,提高了IP地址利用率。而BOOTP的IP地址和MAC地址的映射是事先配置好不能动态改变的。

IGMP协议

IGMP互联网组管理协议是TCP/IP 协议族中负责IP组播成员管理的协议用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系

到目前为止,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 模型。

1、组播模型分类?

根据接收者对组播源处理方式的不同,组播模型分为以下三类:

(1) ASM模型:Any-Source Multicast,任意信源组播

在ASM模型中,任意一个发送者都可以作为组播源向某组播组地址发送信息。众多接收者通过加入由该组播组地址标识的组播组以获得发往该组播组的组播信息。

在ASM模型中,接收者无法预先知道组播源的位置,但可以在任意时间加入或离开该组播组。

(2) SFM模型:Source-Filtered Multicast,信源过滤组播

该模型继承了ASM模型,从发送者角度来看,两者的组播组成员关系完全相同。SFM 模型在功能上对ASM 模型进行了扩展。

在SFM模型中,上层软件对收到的组播报文的源地址进行检查,允许或禁止来自某些组播源的报文通过。

因此,接收者只能收到来自部分组播源的组播数据。从接收者的角度来看,只有部分组播源是有效的,组播源被经过了筛选。

(3) SSM模型:Source-Specific Multicast,指定信源组播

在现实生活中,用户可能只对某些组播源发送的组播信息感兴趣,而不愿接收其它源发送的信息。该模型为用户提供了一种能够在客户端指定组播源的传输服务。

SSM模型与ASM模型的根本区别在于:SSM模型中的接收者已经通过其它手段预先知道了组播源的具体位置。SSM 模型使用与ASM/SFM模型不同的组播地址范围,直接在接收者与其指定的组播源之间建立专用的组播转发路径。

ICMP协议

ICMP即Internet Control Message Protocol(网际控制信息协议)。在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取差错信息并处理。为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文

1、报文格式?

ICMP所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。。

类型字段可以有15个不同的值,以描述特定类型的ICMP报文。某些ICMP报文还使用代码字段的值来进一步描述不同的条件。 

表示ICMP头部的数据结构

  • typedefstruct icmp_hdr
  • {   unsigned char icmp_type; //消息类型
  •      unsigned char icmp_code; //代码
  •      unsigned short icmp_checksum; //校验和
  •      unsigned short icmp_id; //ID号
  •      unsigned short icmp_sequence; //序列号
  •      unsigned long icmp_timestamp; //时间戳
  • }  ICMP_HDR,*PICMP_HDR;

2、报文类型

ICMP报文有不同类型,类型由报文中的类型字段和代码字段来共同决定,表明ICMP报文是一份查询报文还是一份差错报文。因为对ICMP差错报文有时需要作特殊处理,因此我们需要对它们进行区分。例如,在对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文(如果没有这个限制规则,可能会遇到一个差错产生另一个差错的情况,而差错再产生差错,这样会无休止地循环下去)。

当发送一份ICMP差错报文时,报文始终包含I P的首部和产生ICMP差错报文的I P数据报的前8个字节。这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来。

下面各种情况都不会导致产生ICMP差错报文:

  • 1) ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文)。
  • 2) 目的地址是广播地址或多播地址的I P数据报。
  • 3) 作为链路层广播的数据报。
  • 4) 不是I P分片的第一片。
  • 5) 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地
  • 址或多播地址。

这些规则是为了防止过去允许ICMP差错报文对广播分组响应所带来的广播风暴。

3、常见的ICMP报文

1)响应请求

日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。

2)目标不可到达、源抑制和超时报文

这三种报文的格式是一样的,目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。最后,无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。

3)时间戳

时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。

4、应用

1) ICMP地址掩码请求与应答

ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。系统广播它的ICMP请求报文(这一过程与无盘系统在引导过程中用R A R P获取I P地址是类似的)。无盘系统获取子网掩码的另一个方法是BOOTP协议。ICMP报文中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回。这样,发送端就可以把应答与请求进行匹配。发送给本机I P地址的数据报(140.252.12.33)实际上是送到环回接口。

ICMP地址掩码应答必须是收到请求接口的子网掩码(这是因为多接口主机每个接口有不同的子网掩码),因此两种情况下地址掩码请求都来自于环回接口。

 2) ICMP时间戳请求与应答

ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,协调的统一时间(Coordinated Universal Time, UTC)(早期的参考手册认为U T C是格林尼治时间)。这种ICMP报文的好处是它提供了毫秒级的分辨率,而利用其他方法从别的主机获取的时间(如unix系统提供的rdate命令)只能提供秒级的分辨率。由于返回的时间是从午夜开始计算的,因此调用者必须通过其他方法获知当时的日期,这是它的一个缺陷。

ICMP时间戳请求和应答报文格式如图所示。请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。但是,实际上,大多数的实现把后面两个字段都设成相同的值(提供三个字段的原因是可以让发送方分别计算发送请求的时间和发送应答的时间)。

UDP端口不可达返回报文

ICMP不可达报文

5、ICMP重定向

路由协议

首先通过IP协议来判断两台主机是否在同一个子网中,如果在同一个子网,就通过ARP协议查询对应的MAC地址,然后以广播的形式向该子网内的主机发送数据包;如果不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由。网关是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标IP所在的子网中,然后再通过ARP获取目标机MAC,最终也是通过广播形式将数据包发送给接收方。而完成这个路由协议的物理设备就是路由器,路由器扮演着交通枢纽的角色,它会根据信道情况,选择并设定路由,以最佳路径来转发数据包。

所以,网络层的主要工作是定义网络地址、区分网段、子网内MAC寻址、对于不同子网的数据包进行路由。

当一个 IP 包从一台计算机被发送,它会到达一个 IP 路由器。

IP 路由器负责将这个包路由至它的目的地,直接地或者通过其他的路由器。

在一个相同的通信中,一个包所经由的路径可能会和其他的包不同。而路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址。

OSPF协议

OSPF:开放式最短路径优先协议;

1、OSPF的5种数据包类型:

  • hello 包  
  • DBD包  -数据库描述包
  • LSR链路状态请求
  • LSU链路状态更新
  • LSack 链路状态确认 

2、SPF算法

  • 在同一个区域每台路由具有一致的LSDB
  • 每台路由器以自己为根计算到达每个目标的最短路径(最小cost值)
  • 必须区域划分

RIP协议

路由协议RIP(Routing Information  Protocol )

淘汰

1、距离矢量路由算法 DVR( Distance Vector Routing )

(1)、以跳数为代价单位;

(2)、每个路由器周期性的与相邻路由器交换若干二元组组成的路由信息,x表示可到达的目的站(主机或网络),d代表到目的站的距离(跳数);

(3)相邻路由器得到路由信息后,按照距离矢量算法(最短路径原则,实现最佳性),建立或更新路由表。

2、实现步骤

1)初始化:路由器启动时,对每个直接相连的网络生成一个路由表项,跳数为0。

2)路由信息交换:每个路由器周期性向相邻路由器报告自己的路由表,以二元组形式 。

3)路由表更新:依据距离矢量算法

4)路由表稳定:经过一定时间,路由表达到稳定,称为算法达到收敛状态。

3、RIP特点

 RIP基于距离矢量路由算法而开发的。RIP协议适用于中小型网络,有RIP-1和RIP-2。

优点: 实现比较简单,所需CPU和内存开销少

缺点: 

  • 由于每个路由器要将自己整个路由表发送给所有相邻路由器,路由信息量大,占较大的网络开销;
  • 好路由消息传播快,坏路由信息传播速度慢。网络出现故障,传播时间往往需要较长的时间(数分钟);
  • 存在路由同步(我的计算结果依赖于你,你的计算结果依赖于我),算法收敛速度慢,容易引发更新不一致;
  • 可扩展性不好,只能适用于小规模网络,一条路径上最多15个路由器;
  • 可产生路由环路,为避免路由环路需要特殊处理; 

4、环路解决办法

(1)触发更新

一旦发现网络链路断掉,立即将该条路由项设置为不可达,并立即发送路由更新报文,而不需要等到正常的路由更新周期到来再发送。

常与带毒性逆转的水平分割技术结合使用。    

(2)水平分割

路由向一个接口发送路由更新报文中不包含该接口获取的路由信息。

5、工程实际使用

1)源于一个linux下一个rounted应用程序

2)RIP协议最大有15跳,16跳为不可达(等价无穷大).

3)采用跨层设计思想:RIP协议工作在应用层,传输层调用UDP(UDP端口号为520)

6、RIP协议工作原理

     两种报文类型:

1)请求(request):向相邻路由器请求路由信息;

2)响应(response)更新:向相邻路由器通告本地路由信息;

7、工作原理

1)路由器启动时,RIP协议在接口上发送request报文, 等待相邻路由器的request和response,并予以应答;当收到response时,利用距离矢量算法进行路由更新.

2)路由器周期性发送response,定期通告本地路由信息给邻居路由器。

3)一个路由器路由信息发生变化,会主动发送response给邻居路由器。

 注:RIP协议的相关说明

1、仅和所有相邻的路由器交换信息。

2、交换的路由信息是当前本路由器所知道(除了从待交换方向的邻居路由器学习到的路由信息)的全部路由信息,即自己的路由表。

3、路由信息发送时机

请求交换:request, reponse;

周期交换:按固定的时间间隔周期交换路由信息,例如,每隔 30 秒;

触发交换:路由信息发送变化时自动告知邻居路由器。  

BGP协议(边界网关)

Border Gateway Protocol(当前使用的版本是 BGP-4)

动态路由协议可以按照工作范围分为IGP以及EGP。IGP工作在同一个AS内,主要用来发现和计算路由,为AS内提供路由信息的交换;而EGP工作在AS与AS之间,在AS间提供无环路的路由信息交换BGP则是EGP的一种

BGP是一种增强的路径矢量路由协议,同时BGP是拥有丰富的策略控制技术的外部网关协议。多运行于AS与AS之间。

1、BGP 着眼点不在于自动发现网络拓扑,而是在AS之间选择最佳路由和控制路由的传播

1)BGP使用传输层协议TCP监听端口号为179),提高了协议的可靠性,且不需要专门的机制来确保连接的可控性。

  • BGP进行域间的路由选择,对协议的稳定性要求非常高。因此用TCP协议的高可靠性来保证BGP协议的稳定性。
  • BGP的对等体之间必须在逻辑上连通,并进行TCP连接。目的端口号为179,本地端口号任意。

2)路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。

3)BGP从设计上避免了环路的发生。

  • AS之间:BGP通过携带AS路径信息来标记途经的AS,带有本地AS号的路由将被丢弃,从而避免了域间产生环路。
  • AS内部:BGP在AS内学到的路由不再通告给AS内的BGP邻居,避免了AS内产生环路。

4)支持CIDR 无类域间路由

5)BGP提供了丰富的路由策略;提供了防止路由振荡的机制;BGP也易于扩展

2、自治系统AS(Autonomous System )

AS是指在一个实体管辖下的拥有相同选路策略的IP网络。每个AS都有唯一的自治系统编号,这个编号是由IANA分配的。编号范围是1~65535(其中1到64511是注册的因特网编号,64512到65535是私有网络编号。

3、EBGP和IBGP(External BGP /Internal BGP)

IBGP:运行于同一AS内部的BGP称为IBGP。

EBGP:运行于不同AS之间的BGP称为EBGP。

4、BGP报文交互中的角色

  • Speaker:发送BGP消息的路由器称为BGP发言者,它接收或产生新的路由信息,并发布给其它BGP Speaker。
  • Peer:相互交换消息的BGP Speaker之间互称对等体(Peer),若干相关的对等体可以构成对等体组(Peer Group)。

5、BGP报文有5种消息类型及其应用

  • Open消息:是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。对等体在接收到Open消息并协商成功后,将发送Keepalive消息确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-Refresh消息的交换。
  • Update消息:用于在对等体之间交换路由信息。Update消息可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。
  • Keepalive消息:BGP会周期性的向对等体发出Keepalive消息,用来保持连接的有效性。
  • Notification消息:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。
  • Route-Refresh消息:通过OPEN消息告知BGP peer本地支持路由刷新能力(Route-Refresh capability)。

这5种消息的应用:

通过TCP建立BGP连接时,发送OPEN消息

连接建立后,如果有路由需要发送或路由变化时,发送UPDATE消息通告对端

稳定后要定时发送KEEPALIVE消息以保持BGP连接的有效性

当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对等体

ROUTE-REFRESH消息用来通知对等体自己支持路由刷新

6、报文格式

BGP报文中的报文头Header:

Marker(标记):16字节,固定为1。

Length(长度):两字节无符号整数。指定了消息的全长,包括头部。

Type(类型):1 字节,指示报文类型,如OPEN、UPDATE报文等

1 – OPEN
2 – UPDATE
3 –NOTIFICATION
4 – KEEPALIVE

例如:open消息的具体报文格式:

7、状态机

BGP有限状态机共有六种状态,分别是Idle、Connect、Active、OpenSent、OpenConfirm和Established。

8、BGP选路规则与负载分担

当到达同一目的地存在多条路由时,BGP采取如下策略进行路由选择:

  1. 如果此路由的下一跳不可达,忽略此路由
  2. 优选协议首选值(PrefVal)最高的路由 (华为设备特有属性)
  3. 优选本地优先级(Local_Pref)最高的路由
  4. 优选本地生成的路由
  5. 优选AS路径(AS_Path)最短的路由
  6. 比较Origin属性,依次优选Origin类型为IGP、EGP、Incomplete的路由
  7. 优选MED值最低的路由
  8. 优选从EBGP邻居学来的路由
  9. 优选到BGP下一跳IGP Metric较小的路由

当以上全部相同,则为“等价路由”,可以负载分担

注:AS_PATH必须一致;当负载分担时,以下3条原则无效

  • 优选Cluster_List最短的路由
  • 优选Originator_ID 或者Router ID最小的路由器发布的路由
  • 比较对等体的IP Address,优选从具有较小IP Address的对等体学来的路由

9、9个影响BGP选路的重要参数

根据BGP的选路原则以及BGP常用的路径属性:

  • Preferred Value
  • LOCAL_PREF
  • AS_PATH
  • ORIGIN
  • MED
  • 邻居类别是EBGP还是IBGP
  • IGP内部开销值
  • Cluster List /ROUTER_ID
  • COMMUNITY

以上参数都能直接地影响BGP的路径选择,其中我们常用的参数分别为LOCAL_PREF, AS_PATH和MED属性

10、BGP扩展特性

安全特性;路由衰减

11、BGP安全特性

MD5:BGP使用TCP作为传输层协议,为提高BGP的安全性,可以在建立TCP连接时进行MD5认证。但BGP的MD5认证并不能对BGP报文认证,它只是为TCP连接设置MD5认证密码,由TCP完成认证。如果认证失败,则不建立TCP连接。

GTSM(Generalized TTL Security Mechanism 即通用TTL安全保护机制):使能BGP的GTSM策略后,接口板对所有BGP报文的TTL值进行检查。根据实际组网的需要,对于不符合TTL值范围的报文,GTSM可以设置为通过或丢弃。配置GTSM缺省动作为丢弃时,可以根据网络拓扑选择合适的TTL有限值范围,不符合TTL值范围的报文会被接口板直接丢弃,这样就避免了网络攻击者模拟的“合法”BGP报文占用CPU。该功能与EBGP多跳互斥。

限制从对等体接收的路由数量:防止资源耗尽性攻击。

AS_Path长度保护:通过在入口和出口两个方向对AS_Path的长度进行限定,直接丢弃AS_Path超限的报文

注:部分文字图片来源于网络!

如有错误侵权,请联系作者更改删除!!!


http://chatgpt.dhexx.cn/article/hrhS3eUa.shtml

相关文章

【网络】网络层协议——IP

目录 网络层IP协议IP基础知识IP地址IP报头格式网段划分CIDR 特殊的IP地址IP地址的数量限制私有IP地址和公有IP地址 路由IP总结 网络层 在复杂的网络环境中确定一个合法的路径。 IP协议 IP协议作为整个TCP/IP中至关重要的协议,主要负责将数据包发送给最终的目标计…

网络层协议 IP

目录 IP协议 基本概念 协议头格式(重要) 分片了如何组装: 那么判断是否片偏移就是: 分片对UDP和TCP有影响吗? 总结 网段划分(重要) 下面有两个例子: 特殊的IP地址 …

网络层协议协议介绍

网络层协议协议介绍 文章目录 网络层协议协议介绍一、网络层的功能二、IP数据包的格式三、ICMP协议(internet控制报文协议)3.1icmp协议3.2ICMP协议的封装3.3 Ping命令的用法 四、ARP协议介绍4.1什么是ARP协议4.2ARP协议的作用4.3ARP工作原理 一、网络层的功能 1、定义了基于IP…

IP 协议(网络层协议)

IP协议 IP 协议作用地址管理动态分配 IP 地址NAT 机制IPv6IP 地址的组成 路由选择 IP 协议作用 主要有两点 : 地址管理 为每个上网的设备分配一个唯一地址. 路由选择 两台主机间的信息交互, 具体走哪条线路. 地址管理 先来看看 IP协议 报文格式 : IP 协议最主要就是 32 位的…

网络层协议总结

网络层,说简单点,就是在复杂的网络环境中确定一个合适的路径。 有四个协议:ARP协议,IP协议,ICMP协议,IGMP协议。 IP协议 1、概念(协议内容即设定ip地址,实现数据传输) I…

Java--三目运算符

文章目录 前言内容总结end 前言 在判断这方面我们经常用到的有if / if ... else / if ... else if / switch case之类的,有一种非常简单的,能将if原本需要几行代码才能总结出来的内容,只需要一行代码就能书写出来的,这就是今天我要介绍的三目运算符. 内容 先给出一个输入的例…

python和java中的三目运算符

前言: 作者:神的孩子在歌唱 大家好,我叫智 Python 三元运算符用于根据条件选择两个值之一。它是 if-else 语句的一个缩影,它将两个值之一分配给一个变量。Python 三元运算符的语法是: [statement_1] if [expression] …

java使用三目运算符来判断成绩

**题目:**利用条件运算符的嵌套来完成此题:学习成绩>90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 程序分析:(a>b)?a:b这是条件运算符的基本例子。 三目运算符: (判断式…

java运算符(算数运算符、三目运算符、位运算符)

java运算符 1 运算符:算术运算符%:求余运算符。/:除法运算符。自增运算符三目运算符 (条件表达式)?表达式1:表达式2;练习题位运算符 2 程序流程控制2.1 if-else结构2.2 switch-case结构2.3 循环结构之for循环2.4 循环…

js三目运算符

三木元算符样式: 条件判断 ? A(是) : B(否) 并返回值 判断条件是否成立,若成立返回A,若不成立返回B 三目运算符极大的简化了if语句,同时又可以直接对判断的值进行返回,基本等同于在if else …

Java三目运算符易错题

先看一道题,下述代码的输出是什么? public static void main(String[] args) {char alpha A;int foo 65;boolean trueExp false;System.out.println(trueExp ? alpha : 0);System.out.println(trueExp ? alpha : foo);}答案如下: A 65 …

Java中三目运算符不为人知的坑

一、思考题 以下代码可能有什么错误&#xff1f;为什么&#xff1f; import java.util.HashMap; import java.util.Map;public class OneMoreStudy {public static void main(String[] args) {Map<String, Integer> map new HashMap<>();map.put("heihaozi…

JavaScript:三目运算符

HELLO 大家好&#xff01; 三目运算符是一个非常简单且使用的运算符。 是由两个运算符连接的三个操作数据或者表达式 条件表达式?表达式1:表达式0 当条件表达式为true则选择表达式1,反之false则选择表达式0 举个栗子 var age15; console.log(age<18?未成年:成年);结果为…

什么是三目运算符?三目运算符怎么使用?

1. 什么是三目运算符? 三目运算符又称为“三元运算符”和“条件运算符”&#xff0c;在java、C、C、python、JavaScript、PHP等编程语言中都有三目运算符。三目运算符的作用就是判断&#xff0c;可以理解为if条件判断的简化版。 2. 三目运算符的运算规则 三目运算符语法 布…

Java中的三目运算符

Java中的三目运算符 Java中的三目运算符关于三目运算符的面试题注意事项 Java中的三目运算符 1、三目运算符&#xff1a;又称之为三元运算符 2、格式&#xff1a;(关系表达式)?表达式1:表达式2; 3、如果关系表达式的结果为true&#xff0c;运算后的结果是表达式1&#xff1…

广义线性模型——Logistic回归模型(1)

广义线性模型&#xff08;GLM&#xff09;是线性模型的扩展&#xff0c;它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。 广义线性模型拟合的形式为&#xff1a; 其中g(μY)是条件均值的函数&#xff08;称为连接函数&#xff09;。另外&#xff0c;你…

机器学习-线性模型及广义线性模型

线性模型&#xff08;linear model&#xff09; 线性模型试图学得一个通过属性的线性组合来进行预测的函数&#xff0c;即&#xff1a; ... (其中;...;为输入属性&#xff0c;;...;和b为模型参数) 向量表示为&#xff1a; (其中为输入属性向量&#xff0c;和b为模型参数) 线性…

广义线性模型到底是个什么鬼?

以下文章内容摘自网络&#xff1a;说人话的统计学 原标题&#xff1a;广义线性模型到底是个什么鬼&#xff1f; ❉说人话的统计学❉ 从逻辑回归模型开始&#xff0c;我们连续讲了好多集有些相似又特点各异的几种统计模型。它们有个统一的旗号&#xff0c;叫做「广义线性模型」(…

线性模型(一)--广义线性模型(GLM)简介

我们从初中开始接触线性方程&#xff0c;线性关系是变量间最简单的关系&#xff0c;所以我打算从线性模型入手开始介绍机器学习的基本算法。广义线性模型&#xff08;General Linear Model,GLM&#xff09;是线性回归模型的推广形式&#xff0c;由广义线性模型可以推导出线性回…