网络安全面试-网络方面

1、理解模型

纵深防御网络模型。

参考 https://www.infoq.cn/article/Z0GyVFaa685qS79d3QE0

网络和物理安全策略之间的界限相当模糊,因为它们都旨在对恶意行为做出反应或先发制人的管理。纵深防御的目标是确保每层都知道如何在可疑的攻击事件中采取行动,限制恶意或意外破坏的机会,并最大限度地提高快速识别任何安全漏洞的机会

  • 防火墙
  • 入侵检测系统IDS
  • 监控/日志记录
    • 生成日志后还要监控日志并能对特殊情况作出反应
    • 帮助了解攻击的过程、原理,以及如何防止它再次发生。
  • 员工安全意识
  • 物理安全(防盗等)

2、理解第二层相关问题

参考 https://www.cnblogs.com/bakari/archive/2012/09/08/2677086.html

2.1 冲突域

连接在同一导线上的所有工作站的集合,或者说是同一物理网段上所有节点的集合或以太网上竞争同一带宽的节点集合。这个域代表了冲突在其中发生并传播的区域,这个区域可以被认为是共享段。在OSI模型中,冲突域被看作是第一层(数据链路层)的概念连接同一冲突域的设备有Hub,中继器Reperter或者其他进行简单复制信号、加强信号的设备。也就是说,用Hub或者Repeater连接的所有节点可以被认为是在同一个冲突域内,它不会划分冲突域。而第二层设备(网桥,交换机)第三层设备(路由器)都可以划分冲突域的,当然也可以连接不同的冲突域。简单的说,可以将Repeater等看成是一根电缆,而将网桥等看成是一束电缆。

在同一时刻,如果两台不同的设备试图发送数据包,就会发生冲突,此后,两台设备都必须重新发送数据包,同一时刻只能有一台设备发送。

  • 交换机则可以用来分割冲突域,但不能分割广播域。
  • 路由器路由既可以分割冲突域,同时也可以分割广播域。每个接口提供一个单独的广播域。

2.2 广播域

接收同样广播消息的节点的集合。如:在该集合中的任何一个节点传输一个广播帧,则所有其他能收到这个帧的节点都被认为是该广播帧的一部分。由于许多设备都极易产生广播,所以如果不维护,就会消耗大量的带宽,降低网络的效率。由于广播域被认为是OSI中的第二层(数据链路层)概念,所以像Hub,交换机等第一,第二层设备连接的节点被认为都是在同一个广播域。而路由器,第三层交换机则可以划分广播域,即可以连接不同的广播域。

2.3 交换与集线

参考 https://blog.csdn.net/shanyongxu/article/details/47957055

集线器

集线器就是将网线集中到一起的机器。集线器的主要功能是对接收到的信号进行同步整形放大,以扩大网络的传输距离。集线器在OSI/RM中的物理层。集线器的基本功能是信息分发,它把一个端口接收的所有信号向所有端口分发出去.一些集线器在分发之前将弱信号重新生成,一些集线器整理信号的时序以提供所有端口间的同步数据通信.

如果把一个集线器比作一个邮递员,那么这个邮递员是个不认识字的”傻瓜”----要他去送信,他不知道直接根据信件上的地址将信件送给收件人,只会拿着信分发给所有的人,然后让接受的人根据地址信息来判断是不是自己的。

交换机

交换机则是一个聪明的邮递员。交换机拥有一条高带宽的背部总线和内部交换矩阵.交换机的所有的端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口.目的MAC若不存在,交换机才广播到所有的端口,接受端口回应后交换机”学习”新的地址,并把它添加入内部地址表中.

  • 目标地址在MAC表,将数据包发生至目标
  • 目标地址不在MAC表,将数据广播;学习新地址并将新地址加到MAC表

2.4 端口安全

参考:https://blog.csdn.net/alone_map/article/details/51840512?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

Switch通过ARP泛洪来进行MAC地址的学习,并汇聚成一张"MAC address tables",一个端口下可以有多个MAC地址的学习,因为MAC地址表的本身是有限制的,如果超过了最大定义的MAC数量,那么以后发来的MAC寻址在网络中都会进行以ARP泛洪的形式进行通话,这样就可以在任意的主机上抓取通信的内容,安全性得不到最大的保障。另外端口安全与ARP绑定有类似的功能,灵活运用可以限制主机上网数量,总结一下端口安全配置及简单应用。端口安全可以通过限制MAC地址和广播控制的方式提高。下面内容将介绍MAC地址限制和广播控制。

2.4.1 MAC地址限制

1.首先进入需要绑定的端口,比如一个端口上接一个HUB,HUB下挂了几台主机,但是只允许其中一个主机通过该交换机的这个端口。
2.开启端口安全绑定策略
3.设置端口上允许通过的MAC地址的数量
4.选择绑定的模式,是静态绑定(指定MAC地址,在MAC地址表中也会自动添加绑定)还是动态绑定(即先访问此端口的MAC地址)。
5.设置端口上的安全策略,对没有被绑定的MAC地址流量想要通过此端口的处理方法,分为报警且不放行、不报警也不放行、报警并关闭端口。
6.查看端口安全设置及,安全MAC表的设置是否正确

端口安全配置命令如下:

1.interface f0/1
2.switchport mode access
3.switchport port-security
4.switchport port-security maximun 1
5.switchport port-security mac-address [0001.0001.0001\sticky]
6.switchport port-security violation   [protect\restrict\shutdown]
7.show port-security interface f0/1
8.show port-security address

策略关闭的端口可以设置为自动恢复,详细见端口广播风暴控制

L5(config)#errdisable recovery cause security-violation       为security-violation启用自动恢复
L5(config)#errdisable recovery interval 1800                  恢复时间为1800s后

L5#show errdisable recovery                                   查看哪些策略开启了自动恢复及恢复时间
2.4.2 端口广播风暴控制
什么是广播风暴

以太网交换机传送的第二层数据帧不像路由器传送的第三层数据包有TTL(Time To Live),如果有环路存在第二层帧不能被适当的终止,他们将在交换机之间永无止境的传递下去。

广播风暴抑制
switch(interface-if)#storm-control ?

	定义如果超过限定范围流量采取什么行为:
		broadcast  	Broadcast address storm control        	控制广播
		multicast  	Multicast address storm control        	控制组播
		unicast    		Unicast address storm control       控制单播

Switch4(config-if)#storm-control broadcast ?           
  level  Set storm suppression level on this interface  	定义风暴抑制级别

Switch4(config-if)#storm-control broadcast level ?    
	  <0.00 - 100.00>  Enter rising threshold          		定义端口带宽下线值      
	  bps  Enter suppression level in bits per second  		定义每秒流量传输的位(1字节=8位)数
	  pps  Enter suppression level in packets per second 	定义每秒包数量

Switch4(config-if)#storm-control broadcast level pps 50 40 ?  定义广播每秒超过50/s个则端口阻塞(blocking)小于40/s个则端口恢复(下线值貌似没什么用,也可以只写一个上限值就可以)
Switch4(config-if)#storm-control action ?          
定义包超过定义的最大数量时采取的行为,不定义此项就默认为block而不是shutdown,当广播小于40/s的时候端口又恢复通信,但是当配置了action为shutdown时当端口广播超过50/s就会被shutdown,就只能用下面的errdisable的恢复方法来恢复端口了。

	 shutdown  Shutdown this interface if a storm occurs 	当广播超过设置的流量时down
	 trap   Send SNMP trap if a storm occurs            	发送snmp给网管工作站(配置了snmp)

## 实例
Switch(config)#interface f0/1
Switch(config-if)#storm-control broadcast level 10 5
Switch(config-if)#storm-control action shutdown/trap(二选一)
Switch(config-if)#no sh
Switch(config-if)#do wr

2.5 生成树的相关主题

2.5.1 为什么要设计生成树

冗余链路中存在广播风暴、MAC地址表不稳定、重复帧拷贝等问题,生成树STP被设计出来用来解决这些问题。

广播风暴

以太网交换机传送的第二层数据帧不像路由器传送的第三层数据包有TTL(Time To Live),如果有环路存在第二层帧不能被适当的终止,他们将在交换机之间永无止境的传递下去。结合交换机的工作原理,来看一下下图中广播风暴是如何形成的:

1)PC1发出一个广播帧(可能是一个ARP查询),SW1收到这个广播帧,SW1将这个广播帧从除接收端口的其他端口转发出去(即发往fa0/2、fa0/23、fa0/24)。
2)SW2从自己的fa0/23和fa0/24都会收到SW1发过来的相同的广播帧,SW2再将这个广播帧从除接收端口外的所有其他接口发送出去(SW2将从fa0/23接收的广播帧发往其他三个端口fa0/24、fa0/1、fa0/2,从fa0/24接收到的也会发往其他三个端口fa0/23、fa0/1、fa0/2)。
3)这样这个广播帧又从fa0/23以及fa0/24传回了SW1,SW1再用相同的方法传回SW2,除非物理线路被破坏,否则PC1-4将不停的接收到广播帧,最终造成网络的拥塞甚至瘫痪。
在这里插入图片描述

MAC地址表不稳定

广播风暴除了会产生大量的流量外,还会造成MAC地址表的不稳定,在广播风暴形成过程中:

1)PC1发出的广播帧到达SW1,SW1将根据源MAC进行学习,SW1将PC1的MAC和对应端口fa0/1写入MAC缓存表中。
2)SW1将这个广播帧从除接收端口之外的其他端口转发出去,SW2接收到两个来自SW1的广播(从fa0/23和fa0/24),假设fa0/23首先收到这个广播帧,SW2根据源MAC进行学习,将PC1的MAC和接收端口fa0/23存入自己的MAC缓存表,但是这时候又从fa0/24收到了这个广播帧,SW1将PC1的MAC和对应的fa0/24接口存入自己的MAC缓存表。
3)SW2分别从自己的这两个接口再将这个广播帧发回给SW1,这样PC1的MAC地址会不停的在两台交换机的fa0/23和fa0/24之间变动,MAC地址缓存表也不断的被刷新,影响交换机的性能。

重复帧拷贝

冗余拓扑除了会带来广播风暴以及MAC地址的不稳定,还会造成重复的帧拷贝:

1)假设PC1发送一个单播帧给PC3,这个单播帧到达SW1,假设SW1上还没有PC3的MAC地址,根据交换机的原理,对未知单播帧进行泛洪转发,即发往除接收端口外的所有其他端口(fa0/2、fa0/23、fa0/24)。
2)SW2分从自己的fa0/23和fa0/24接收到这个单播帧,SW3知道PC3连接在自己的fa0/1接口上,所以SW1将这两个单播帧都转发给PC3。
3)PC1只发送了一个单播帧,PC3却收到了两个单播帧,这会给某些网络环境比如流量统计带来不精确计算等问题。

2.5.2 生成树原理

参考 https://blog.csdn.net/u012402276/article/details/49095823
参考 https://blog.csdn.net/broaden08/article/details/78151935?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

使冗余端口置于“阻塞状态”;网络中的计算机在通信时,只有一条链路生效;当原本的链路出现故障时,将处于“阻塞状态”的端口重新打开,从而确保网络连接稳定可靠。

STP将一个环形网络生成无环拓扑的步骤:

1. 选择根网桥(root bridge)

每个网络只能有一个根网桥,根网桥具有最低的桥ID,根网桥上的所有端口都是指派端口。一个根网桥ID是由8个字节组成的。(其中头2个字节是标识网络优先级,后6个字节标识网桥的MAC地址)

优先级在出厂的时候默认的都是32768,而优先级的取值范围则是0~65535

网桥的MAC地址简称为“基本MAC地址”也就是“基M”

(1). 所以选择根网桥,首先先比较优先级,谁的优先级最小就选谁作为根桥。但是交换机出厂的时候,它们的默认优先级都是32768

(2). 所以在优先级相同的情况下,就只能看网桥的MAC地址,谁的MAC地址最小小谁就可以作为根桥。

2. 选择根端口(root ports)

在非根网桥上选择一个到根网桥最近的端口作为根端口。选择根端口的依据是:

  • 根路径成本最低(比的是cost值)

    cost值也叫根路径成本。而根路径成本是指非根网桥到根网桥的路径上所有链路的成本之和。

  • 直连网桥的网桥ID最小(比的是Bridge ID)

  • 直连网桥的端口ID最小(比的是Ports ID)

    端口优先级默认是128,范围是0~255. 端口编号实际与端口号有很大的关系。

3. 选择指定端口(designated ports)

在每个网段(与IP无关)上,选择1个指定端口。这个网段指的是交换机之间的链路有几条,也就说每一条链路选定一个指定端口。

  • 根桥上的端口全是指定端口

  • 非根桥上的指定端口:

    根路径成本最低cost
    端口所在的网桥的ID值较小bridgeID
    直连网桥的端口ID值较小

从下图可以看出:
在这里插入图片描述

  • 根桥上的端口全是指定端口

    那么交换机A的上和右的两条链路网段上的指定端口就是交换机A的上方向和右方向端口。

  • 非根桥上的指定端口:

    1). 首先看路径成本cost值,交换机B上方向端口和交换机C右方向上端口的cost值,都是19+19=38,所以没有可比性,跳过,看下一条。

    2). 看端口所在网桥的bridgeID,结果交换机B的bridgeID小。所以这第三条网段上的指定端口就是交换机B上方向的端口。那么最终交换机C的右方向端口会被阻塞。

最后,根据STP的计算,最终的逻辑结构为无环拓扑。B-C直连路由将作为备份线路,当且仅当A-B或B-C的路由宕掉后,B-C路由才会启用。

2.5.3 桥协议数据单元BPDU

交换机是如何知道其他交换机的带宽cost值、bridgeID的呢?其实它们是通过“桥协议数据单元BPDU”来交换STP信息的。

BPDU分为2种类型:

  • 配置BPDU-用于生成树的计算

    开机的时候谁都会发送BPDU来计算阻塞端口,但是当计算配置完成以后,就只有根桥才会每隔2秒发送BPDU,其他的非根桥不会再发送BPDU。

  • 拓扑变更通告(TCN)BPDU- 用于通告网络拓扑的变化。

    只有在拓扑发生改变的时候才会发送TCN的BPDU。

C .
.  \
|    \
|      .	
.A.----.B

当三台交换机A\B\C互相连接的时候,

  • 刚开机,它们都会认为自己根桥,所以都会发送BPDU。而这个BPDU里面的bridgeID就是自己的bridgeID,路径成本处为0,发送网桥ID也是自己的bridgeID,从哪个端口发出去,就记录为哪个端口ID。

  • 如果B发出了BPDU,到了A这里,A发现自己的bridgeID比B的还小,就会将自己的bridgeID填写进去。而当B和C收到A发的BPDU以后,发现自己没有A小,那么也就只能做非根桥了。

  • B和C往外转发BPDU的时候,是会加上自己到根桥的cost值的,而不再是A发出的BPDU里面的cost值为0.

2.5.4 生成树计时器:
  • 交换机开机需要等待30秒的时间开始转发数据
  • 当某个正在使用的链路断掉,阻塞的端口需要50秒的时间开始转发数据。
2.5.5 生成树的端口状态:

1.转发forwarding 发送和接收用户数据
2.学习 learning 构建网桥表 构建好网桥表以后,再过15秒就会进入转发状态。
3.侦听 listening 构建“活动”拓扑选举根桥、根端口、指定端口 算生成树,算好以后,经过15秒进入学习状态。
4.阻塞 blocking 只接收BPDU 应该是每隔2秒会收到来自根桥的BPDU,如果20秒还没收到,就会进入侦听状态。
5.禁用 disable 强制关闭

在上面的五个状态里面,只有转发状态,可以接收和发送用户数据,其他的四个状态都是不可以发送和接收用户数据的。

【!】应该配置网络中比较稳定的交换机为根网桥

2.5.6 生成树实例

PVST是cisco私有的,为每个vlan构造一棵生成树。称为“每vlan生成树”。利用pvst实现网络的负载分担。

启用生成树的命令:
Switch(config)#spanning-tree vlan vlan-list

设置根网桥,设置为primary后,就相当与设置了主要根桥,优先级从默认的32768变成24576,设置为secondary后,就相当于设置成为备份根桥,优先级就从默认的32768变成为28672.
Switch(config)#spanning-tree vlan vlan-list rootprimary|secondary 

修改网桥的优先级:
Switch(config)#spanning-tree vlan vlan-list priority bridge-priority

如果要手工来指定优先级,那么bridge-priority的数字就必须是4096的倍数才可以。

修改端口成本:
Switch(config-if)#spanning-tree vlan vlan-list cost cost

修改端口优先级:
Switch(config-if)#spanning-tree vlan vlan-listport-priority priority 必须是16的倍数

配置上行速链路:
Switch(config-if)#spanning-tree uplinkfast

配置端口速链路:
Switch(config-if)#spanning-tree portfast

查看生成树的配置:
Switch#show spanning-tree

查看某个vlan的生成树的详细信息:
Switch#show spanning-tree vlan vlan-id detail

2.6 ARP协议

2.6.1 什么是ARP

ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。也就是说,ARP协议可以动态地在三层IP地址和二层MAC地址之间建立一种映射关系。可以用如下示意图来形象表示其作用:
在这里插入图片描述

2.6.2 ARP原理之广播请求单播回应

同一个局域网里面,当PC1需要跟PC2进行通信时,PC1是如何处理的?

如下图所示,根据OSI数据封装顺序,发送方PC1会自顶向下(从应用层到物理层)封装数据,然后发送出去,这里以PC1 ping PC2的过程举例。我们给PC1指令-“ping ip2”,这就告知了目的IP,此时PC1便有了通信需要的源目IP地址,但是PC1仍然没有通信需要的目的MAC地址。这就好比我们要寄一个快递,如果在快递单上仅仅写了收件人的姓名(IP),却没有写收件人的地址(MAC),那么这个快递就没法寄出,因为信息不完整。那么如何获取目标的MAC地址呢?

在这里插入图片描述

PC1会向网络中的所有主机广播一个ARP请求包。ARP请求包的完整信息是:我的IP地址是IP1,MAC地址是MAC1,请问谁是谁的ip是192.168.0.22,你的IP对应的MAC地址是多少?

PC2在收到广播的数据包后发现,诶自己的ip就是192.168.0.22,于是回一个包告诉请求方我的物理地址(MAC地址)是bb-...。PC1在收到PC2回复的包后,在缓存表中添加PC2的MAC地址信息,知道了PC2的物理地址信息后,两者就可以开始数据交互了。

简单来说,ARP请求首先有"自我介绍",然后才是询问。这样的话,PC2在收到请求之后,就可以将PC1的IP和MAC映射信息存储在本地的【ARP缓存表】,既然知道PC1在哪里,就可以返回ARP单播回应包。所以PC1发包是广播包,但是PC2发的单播包。

2.6.3 ARP投毒/欺骗

ARP协议信任以太网所有的节点,效率高但是不安全。这份协议没有其它字协议来保证以太网内部信息传输的安全,它不会检查自己是否接受或发送过请求包,只要它就收到的arp广播包,他就会把对应的ip-mac更新到自己的缓存表中。

ARP spoofing的过程和原理

参考 https://www.jianshu.com/p/97184899b216

ARP欺骗就是中间人欺骗pc机,告诉pc机它是网关。再欺骗网关,告诉网关它就是pc机。以致获取网关与pc机的会话信息。在这里插入图片描述

  1. 网关GW广播数据包,谁是192.168.0.22
  2. PC2回一个包说192.168.0.22对应的MAC地址是bb-…,此时PC3也回包说192.168.0.22对应的MAC地址是cc-…,不同地是PC3可以回大量的包。
  3. 网关收到回包后表示很蒙b,还有这操作?不管了,我选最新的!(后到优先)。于是网关GW的arp缓存表就会更新。

PC3可以以同样的方式欺骗PC2(或者局域网中的所有主机),PC2就会更新arp缓存表。这样原本PC2发送给网关GW的数据都将通过PC3的转发。形成一个中间人攻击。如果PC3直接不给PC2回数据,这样就变成了一个局域网断网攻击。

如何防御ARP投毒
小型局域网防御

防御原理很简单,就是不让攻击者肆意表明自己就是网关主机。我们进入网关主机(路由器后台地址),网络参数一栏一般有ip与mac绑定一栏,把网关的mac地址与网关地址绑定就好了。只要确定了对应关系,当攻击者发布arp相应包时,就不会更新相应的ip-mac缓存表。

另外知道攻击者的MAC和IP地址也很简单。利用 arp -a 命令,当找到有两个IP/MAC地址相同并且不是以.1结尾的时候,就是被ARP投毒了。

c:\> arp -a

Interface: 172.31.230.1 --- 0x6
  Internet Address      Physical Address      Type
  172.31.230.255        ff-ff-ff-ff-ff-ff     static
  224.0.0.22            01-00-5e-00-00-16     static
  224.0.0.251           01-00-5e-00-00-fb     static
  224.0.0.252           01-00-5e-00-00-fc     static
  239.255.255.250       01-00-5e-7f-ff-fa     static

大型局域网防御:动态ARP检测

动态ARP检测即DAI(Dynamic ARP Inspection),其原理可以用两句话简单概括:

①交换机记录每个接口对应的IP地址和MAC,即interface<->mac<->ip,生成DAI检测表;
②交换机检测每个接口发送过来的ARP回应包,根据DAI表判断是否违规,若违规则丢弃此数据包并对接口进行惩罚。

DAI表

interface mac ip
int 2 bb-… 192.168.0.22
int 3 cc-… 192.168.0.33
int 3 cc-… 192.168.0.22 (很明显和上条冲突了,所以丢弃不会存到表中)

我们知道,PC3是在交换机的interface3、MAC地址是MAC3,IP地址是IP3,所以本地DAI表项内容是<interface3-mac3-ip3>。当交换机从接口interface3收到ARP回应包,内容却是IP2和MAC3映射,即<interface3-mac3-ip2>

经判断,这个包就是虚假的欺骗包,交换机马上丢弃这个包,并且可以对接口做惩罚(不同设备的惩罚方式有所不同,可以直接将接口"软关闭",直接将攻击者断网;也可以"静默处理",仅丢弃欺骗包,其他通信正常)

DAI表的生成方式:

  • 手工静态绑定:即用户接入网络之后,管理员根据此用户电脑的MAC和IP地址,然后在接口上绑死,缺点就是用户数太多的话,手工绑定管不过来。

  • 第二种方式就是目前最主流的做法,即在交换机上开启DHCP侦听技术,当用户第一次通过DHCP获取到地址的时候,交换机就把用户电脑的IP、MAC、Port信息记录在DHCP侦听表,后面ARP检测直接调用这张DHCP侦听表即可。

2.7 MAC泛洪攻击

2.7.1 原理和过程

交换机mac表的空间有限,当mac表存满了mac地址的时候会报错,并且进入非正常状态。此时对于网络中那些事先没有在交换机的MAC地址表中留下记录的主机,它们之间的数据通信就会全部采用广播的方式进行,这样就可以用抓包工具把广播的信息抓到。

在kali linux下,可以使用macof工具发起MAC泛洪攻击。

2.7.3 如何防御

通过Port-Security(端口安全性)技术可以有效防范MAC泛洪攻击,Port-Security可以限制交换机端口上所允许的有效MAC地址的数量,这样交换机就不会无限制的从端口获取MAC条目。如果某个端口的有效MAC地址个数已经达到最大值,那么当该端口再次接收到新的MAC地址时,就被认为发生安全违规,交换机将自动采取相应的动作。

  1. 给交换机的的每个端口限制主机的数量,当一个端口学习的MAC数量超过这个限制的数量,则将超出的MAC地址舍弃。

    配置:

    1.[Quidway-Ethernet0/0/1] port-security enable
    2.[Quidway-Ethernet0/0/1] port-security mac-address sticky
    3.[Quidway-Ethernet0/0/1] port-security protect-action protect
    4.[Quidway-Ethernet0/0/1] port-security max-mac-num 20
    
  2. 规定端口能够通过什么样的MAC地址和学习什么样的MAC地址

  3. 对超过一定数量的MAC地址进行违背规则处理

3、理解第三层相关问题

3.1 IP路由协议

参考 http://blog.sina.com.cn/s/blog_c70e10380102w9cg.html

3.1.1 路由

1、路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程

2、路由工作在OSI参考模型第三层,TCP/IP协议族的第二层

3.1.2 路由协议

路由协议是在路由指导IP数据包发送过程中事先约定好的规定和标准。

3.1.3 路由器

路由器的作用是:

1、路由器是网络的核心
2、路由器负责在网络间将数据包从初始源位置发到最终目的地的
3、路由器可连接多个网络,这意味着它具有多个接口,每个接口属于不同的IP网络
4、路由器确定最佳路径,其方法是:
+ 确定发送数据包的最佳路径
+ 将数据包转发到目的地
5、路由器使用路由表来确定转发数据包的最佳路径
6、路由器使用静态路由和动态路由协议来获知远程网络和构建路由表
7、路由器经常会收到以某种类型的数据链路帧封装的数据包,当转发这种数据包时,路由器可能需要将其封装为另一种类型的数据链路帧。数据链路封装取决于路由器接口的类型及其连接的介质

路由器上的每个接口都是不同IP网络的成员,每个接口必须配置一个IP地址以及对应网络的子网掩码

3.1.4 动态路由表

动态路由表是指动态路由协议(如RIP)自动建立路由表,当你去掉一条连线时,它会自动去掉其路由。路由器的每一个接口对应不同的网络,而一条连接两个路由器连线的两个端点IP应该属于同一网络。设置IP地址时,如果路由器的其它端口已有这个网络了,则提示已有这个网络,并显示对应的端口

3.1.5 动态路由协议

1、路由器使用动态路由协议共享有关远程网络连通性和状态的信息,动态路由协议的功能包括:

  • 网络发现

  • 更新和维护路由表

2、常用的IP路由协议

路由协议大致可分为两类:用于同一自治系统各路由器之间的内部网关协议(Interior GatewayProtocol,IGP)和用于不同自治系统内部路由器通信的外部网关协议(Exterior GatewayProtocol,EGP)

IP 地址分为网络部分主机部分,他们有各自的分工。IGP 与 EPG 的关系类似 IP 地址的网络部分和主机部分的关系,就像根据 IP 地址的网络部分可以在网路之间进行路由选择、根据 IP 地址主机部分在链路内部进行主机识别一样。可以根据 EGP 在区域网络之间进行路由选择根据 IGP 在区域网络内部进行主机识别

IGP 协议主要有

  • RIP(RoutingInformation Protocol,路由信息协议)、RIP2
  • OSPF(Open Shortest Path First,开放式最短路径优先)

EGP 协议主要有

  • BGP(BorderGateway Protocol,边界网关协议)

3.2 内部网关协议

3.2.1 RIP v1/v2

参考 https://blog.csdn.net/u012243115/article/details/43449307

RIP 将路由信息定期(30秒一次)向全网广播,没有收到路由控制信息,连接就会被断开。没收到路由控制信息有可能是丢弃 IP 数据报所引起,因此 RIP 规定等待 5 次,若在第 6 次仍未收到路由控制信息,则真正将连接关闭。

RIP 协议是基于距离向量算法确定路径。距离的单位是“跳数”,跳数是指所经过路由器的个数。RIP 希望尽可能少的经过路由器将数据报发送到目的主机的 IP 地址。
RIP 的基本行为可总结如下:

  • 将自己所知道的路由控制信息定期进行广播
  • 一旦认为网络被断开,则数据无法流过该路由器,其他路由器也就可以得知该网络已断开
RIP V2

使用多广播:RIP 中当路由器之间交换路由信息采用广播形式,然而在 RIP2 采用多播,这不仅减少了网络流量,还缩小对无关主机的影响;

  • 支持子网掩码:RIP2 支持在交换路由信息时加入子网掩码信息;
  • 路由选择域:在同一个网络中可以使用多个逻辑上独立的 RIP;
  • 外部路由标志:通常用于把从 BGP 等获得的路由控制信息通过 RIP 传入到 AS 内;
  • 身份验证密钥:RIP 携带密钥,只有自己能够识别这个密钥时才接收数据,否则丢弃该 RIP 数据包;
3.2.2 OSPF

OSPF 协议克服了 RIP 协议的所有限制,OSPF 协议采用的是链路状态算法。路由器之间交换链路状态生成网络拓扑信息,然后根据这个拓扑信息生成路由控制表

OSPF有5中包类型,如下表所示:
在这里插入图片描述

  1. 通过发送问候包确认是否连接
  2. 每个路由器为了同步路由控制信息,利用数据库描述包相互发送路由摘要信息和版本信息
  3. 如果版本较老,则首先发出一个链路状态请求包请求路由控制信息
  4. 然后由路由链路状态更新包接收路由控制信息
  5. 最后通过链路状态确认应答包通知大家本地已接收到路由控制信息。这样可以减少网络流量,加快更新速度

3.3 外部网关协议

参考 https://zhuanlan.zhihu.com/p/25433049

3.3.1 BGP

BGP可以说是最复杂的路由协议。它是应用层协议,其传输层使用TCP,默认端口号是179。因为是应用层协议,可以认为它的连接是可靠的,并且不用考虑底层的工作,例如fragment,确认,重传等等。BGP是唯一使用TCP作为传输层的路由协议,其他的路由协议可能都还到不了传输层。

TCP连接的窗口是65K字节,也就是说TCP连接允许在没有确认包的情况下,连续发送65K的数据。而其他的路由协议,例如EIGRP和OSPF的窗口只有一个数据包,也就是说前一个数据包收到确认包之后,才会发送下一个数据包。当网络规模巨大时,需要传输的数据也相应变大,这样效率是非常低的。这也是它们不适合大规模网络的原因。而正是由于TCP可以可靠的传输大量数据,且互联网的路由信息是巨大的,TCP被选为BGP的传输层协议,并且BGP适合大规模网络环境。。

两个运行 BGP 的系统之间建立一条 TCP 连接,然后交换整个 BGP 路由控制表。BGP 是一个距离向量协议,但是与 RIP 不同的是,BGP 列举了到每个目的地址的路由。 BGP 系统的主要功能是和其他的 BGP 系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。这些信息有效地构造了 AS 互联的拓朴图并由此清除了路由环路,同时在 AS 级别上可实施策略决策。

自治系统AS:autonomous system

参考 https://www.cnblogs.com/cenmny/p/7159206.html

在互联网中,一个自治系统(AS)是一个有权自主地决定在本系统中应采用何种路由协议的小型单位。这个网络单位可以是一个简单的网络也可以是一个由一个或多个普通的网络管理员来控制的网络群体,它是一个单独的可管理的网络单元(例如一所大学,一个企业或者一个公司个体)。一个自治系统有时也被称为是一个路由选择域(routing domain)。一个自治系统将会分配一个全局的唯一的16位号码,有时我们把这个号码叫做自治系统号(ASN)。-----------------SPTN 自治系统号10(传统域) 自治系统号20(SDN域)

AS号是一个16bit的数字,全球共用这60000多个编号。1 – 64511 是全球唯一的,而 64512 – 65535 是可以自用的,类似于私网网段。每个自治网络都需要申请自己的AS编号,联通的AS号是9800。

3.4 网络地址转换 NAT

参考 https://blog.csdn.net/freeking101/article/details/77962312

3.4.1 NAT有三种类型
  • 静态NAT(Static NAT)(一对一)
    将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一直不变的。

  • 动态地址NAT(Pooled NAT)(多对多)
    将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定,随机的。所有被授权访问Internet的私有IP地址可随机转换为任何指定合法的IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态NAT转换。动态NAT是在路由器上配置一个外网IP地址池,当内部有计算机需要和外部通信时,就从地址池里动态的取出一个外网IP,并将他们的对应关系绑定到NAT表中,通信结束后,这个外网IP才被释放,可供其他内部IP地址转换使用,这个DHCP租约IP有相似之处。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式

  • 网络地址端口转换NAPT(Network Address Port Translation)(Port-Level NAT)(多对一)
    改变外出数据包的源端口并进行端口转换,采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,可以最大限度地节约IP地址资源。同时,也可以隐藏网络内部的所有主机,有效避免来自Internet的攻击。因此,目前网络中应用最多的就是PAT规则。这是最常用的NAT技术,也是IPv4能够维持到今天的最重要的原因之一,它提供了一种多对一的方式,对多个内网IP地址,边界路由可以给他们分配一个外网IP,利用这个外网IP的不同端口和外部进行通信。NAPT 与 动态NAT 不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的端口号。

    NAPT是使用最普遍的一种转换方式,在HomeGW中也主要使用该方式。它又包含两种转换方式:SNAT和DNAT。
    (1)源NAT(Source NAT,SNAT):修改数据包的源地址。源NAT改变第一个数据 包的来源地址,它永远会在数据包发送到网络之前完成,数据包伪装就是一具SNAT的例子。
    (2)目的NAT(Destination NAT,DNAT):修改数据包的目的地址。Destination NAT刚好与SNAT相反,它是改变第一个数据懈的目的地地址,如平衡负载、端口转发和透明代理就是属于DNAT。

3.4.2 NAT配置

Cisco路由器配置3中NAT的主要命令:

静态NAT:
	1、指定NAT内部接口
		在内网相应接口的接口配置模式下执行:ip nat inside
	2、指定NAT外部接口
		在外网相应接口的接口配置模式下执行:ip nat outside
	3、在内部本地地址与内部全局地址之间建立静态地址转换关系:
		ip nat insde source static 内部本地地址 内部全局地址

动态地址NAT:
	1、指定NAT内部接口
		在内网相应接口的接口配置模式下执行:ip nat inside
	2、指定NAT外部接口
		在外网相应接口的接口配置模式下执行:ip nat outside
	3、在全局配置模式下,定义一个标准的access-list规则,声明允许哪些内部本地地址可以进行动态地址转换:
		access-list list-number permit 源地址 通配符
		其中,list-number为1-99之间的一个任意整数。
	4、在全局配置模式下,定义内部全局地址池:
		ip nat pool 地址池名  起始IP地址  终止IP地址  netmask  子网掩码
	其中,地址池名可以任意设定,但最好有一定的说明意义。
	5、在全局配置模式下,定义符合先前定义的access-list规则的IP数据包与先前定义的地址池中的IP地址进行转换:
		ip nat inside source list list-number pool 内部全局地址池名

网络地址端口转换NAPT:
	1、指定NAT内部接口
		在内网相应接口的接口配置模式下执行:ip nat inside
	2、指定NAT外部接口
		在外网相应接口的接口配置模式下执行:ip nat outside
	3、在全局配置模式下,定义内部全局地址池:
		ip nat pool  地址池名  起始IP地址  终止IP地址  netmask  子网掩码
	其中,地址池名可以任意设定,但最好有一定的说明意义。
	4、在全局配置模式下,定义一个标准的access-list规则,声明允许哪些内部本地地址可以进行复用地址转换:
		access-list list-number permit 源地址 通配符
		其中,list-number为1-99之间的一个任意整数。
	5、在全局配置模式下,定义符合先前定义的access-list规则的IP数据包与先前定义的地址池中的IP地址进行复用地址转换:
		ip nat inside source list list-number pool 内部全局地址池名 overload

4、理解第四层相关问题

包含了TCP和UDP、会话的建立、报头和选项、端口地址转换以及常用端口

4.1 TCP 状态连接

参考 https://blog.csdn.net/goodboy1881/article/details/744534

Figure: TCP 状态连接图
在这里插入图片描述

  • 客户端的状态可以用如下的流程来表示:

    CLOSED -> SYN_SENT -> ESTABLISHED -> FIN_WAIT_1 -> FIN_WAIT_2 -> TIME_WAIT -> CLOSED

  • 服务器的状态可以用如下的流程来表示:

    CLOSED -> LISTEN -> SYN_RCVD -> ESTABLISHED -> CLOSE_WAIT -> LAST_ACK -> CLOSED

在建立连接的时候,服务器端是在第三次握手之后才进入数据交互状态,而关闭连接则是在关闭连接的第二次握手以后(注意不是第四次)。而关闭以后还要等待客户端给出最后的ACK包才能进入初始的状态。

三次握手:

参考 https://blog.csdn.net/qzcsu/article/details/72861891

  1. TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
  2. TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号
  3. TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号
  4. TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号
  5. 当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。

在这里插入图片描述

四次挥手

在这里插入图片描述
在这里插入图片描述

为什么客户端最后还要等待2MSL?
MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。

等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。

客户执行主动关闭并进入TIME_WAIT是正常的。服务器通常执行被动关闭,不会进入TIME_WAIT状态。这暗示如果一个客户终止一个客户程序,并立即重新启动这个客户程序,则这个新客户程序将不能重用相同的本地端口。这不会带来什么问题,因为客户使用本地端口,而并不关心这个端口号是什么。

为什么建立连接是三次握手,关闭连接确是四次挥手呢?

建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端

而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次

4.1.2 ACK , SYN, Seq, Ack的关系
  • Sequence Number (32 bits): 32 位序列号,有两个作用:

    • 在 SYN flag 置 1 时,此为当前连接的初始序列号(Initial Sequence Number, ISN),数据的第一个字节序号为此 ISN + 1
    • 在 SYN flag 置 0 时,为当前连接报文段的累计数据包字节数。
  • Acknowledgment number(32 bits):
    32 位确认序号,ACK flag 置 1 时才有效,指接收方期待的下一个报文段的序列号。

  • 确认ACK(1 bit),仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1;

  • 同步SYN(1 bit),在连接建立时用来同步序号。当SYN=1,ACK=0,表明是连接请求报文,若同意连接,则响应报文中应该使SYN=1,ACK=1;

为什么TCP客户端最后还要发送一次确认呢?
一句话,主要防止已经连接的连接请求报文突然又传送到了服务器,从而产生错误。

4.1.3 TCP的半连接状态

4.2 TCP协议和UDP协议的区别

5、理解五到七层相关问题

包含了应用漏洞、特洛伊/蠕虫/病毒、内容过滤和IDS/ISP/IDP.

5.1 DHCP

动态分配IP的过程是什么?它的原理是什么?

DHCP协议的功能?报文结构?

什么是DDOS攻击?和DOS攻击有什么区别?
ip报头格式是什么?
nat转换的原理是什么?和iptables的关系?

References

  1. C. L. Smith, “Understanding concepts in the defence in depth strategy,” IEEE 37th Annual 2003 International Carnahan Conference onSecurity Technology, 2003. Proceedings., Taipei, Taiwan, 2003, pp. 8-16.
发布了148 篇原创文章 · 获赞 136 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/DlMmU/article/details/104507738