第九周至第十周作业题

目录

1. 总结DNS服务工作原理

2. DNS完整的查询流程,包括递归和迭代查询

3. 总结DNS域名三级结构

4. 总结防火墙分类

5. 总结iptables的5表5链和基本使用以及扩展模块

5表

5链

基本使用

查询表支持的链

Filter表中的INPUT规则

基本验证

扩展模块

常用的扩展模块

6. 总结iptables规则优化最佳实践以及规则保存和恢复

iptables规则优化最佳实践

规则保存和恢复以及开机自动重载

持久保存规则

加载恢复规则

开机自动重载规则

7. 总结关系型数据库相关概念,关系,行,列,主键,唯一键,域

8. 总结关联类型,1对1,1对多,多对多关系

9. 总结mysql设计范式

第一范式(1NF)

第二范式(2NF)

第三范式(3NF)

10. 总结NAT转换原理, DNAT/SDNAT原理

NAT转换原理

SNAT转换原理

DNAT转换原理


1. 总结DNS服务工作原理

DNS(Domain Name System,域名系统)是一种将域名转换为IP地址的分布式系统。当用户在Web浏览器中输入一个URL时,此URL会被送往DNS服务器,返回一个IP地址。这个IP地址可以让浏览器知道如何访问所请求的网站。

DNS服务的详细工作原理:

  1. 用户输入URL。

  2. 查询本地缓存是否有该URL对应的IP地址。如果本地缓存有该URL对应的IP地址,则直接使用此IP访问。

  3. 否则,浏览器发起DNS查询请求,浏览器向配置的DNS代理服务器发出请求。

  4. 如果配置的DNS代理服务器缓存中具有该URL对应的IP地址,则它将其发送给浏览器。否则,它将向根DNS服务器中发送请求获取该URL对应的IP地址。

  5. 根DNS服务器存储的是一级域名(顶级域名)服务器的地址,无法获取权威服务器的地址,所以它会返回该URL对应的一级域名的IP地址,配置的DNS代理服务器通过此地址发送请求访问该URL对应的一级域名。

  6. 该URL对应的一级域名DNS服务器存储的是二级域名服务器的地址,无法获取权威服务器的地址,所以它会返回该URL对应的二级域名的IP地址,配置的DNS代理服务器通过此地址发送请求访问该URL对应的二级域名。

  7. 该URL对应的二级域名DNS服务器存储的是三级域名服务器的地址,改地址位权威服务器的地址,它存储了该URL对应的IP地址,配置的DNS代理服务器通过此地址发送请求访问该URL对应的三级域名。

  8. 通过层层访问,最后访问到该URL对应的三级域名服务器地址,也就是权威服务器,该URL对应的三级域名服务器将该URL对应的IP地址返回给配置的DNS代理服务器

  9. 配置的DNS代理服务器将获取到的IP地址缓存起来,并将其返回给浏览器。

  10. 浏览器将使用该IP地址来访问该网站并做本地缓存

2. DNS完整的查询流程,包括递归和迭代查询

查询流程(包括递归和迭代查询)

DNS完整的查询请求经过的流程

  • Client

  • hosts文件

  • Client DNS Service Local Cache

  • DNS Server(recursion递归查询)

  • DNS Server Cache

  • DNS iteration(迭代查询)

  • 根DNS

  • 顶级域名DNS

  • 二级域名DNS

  • 三级域名DNS (权威服务器)、

递归和迭代查询区别

  • 递归查询

    • 递归查询是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。

    • 如果DNS服务器本地没有存储与之对应的信息,则该服务器需要询问其它服务器,并将返回的查询结果提交给用户

    • 一般客户机和本地DNS服务器之间属于递归查询

    • 此查询的源和目标保持不变,为了查询结果只需要发起一次查询

  • 迭代查询

    • 迭代查询是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果

    • 而是告诉另一台DNS服务器的地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果

    • 一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询

    • 此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询

3. 总结DNS域名三级结构

DNS域名三级结构

-------------------------------------------------------------------------------------------------------------------------

DNS域名通常由多个部分组成,每个部分用点号(.)进行分隔。下面是DNS域名的三级结构的总结:

  • 第一级 - 顶级域名(TLD)

顶级域名是DNS名称层次结构中的最高级别,它通常表示与国家和地理区域相关的标识符,例如.com、.org、.edu等。每个顶级域名由一个顶级域名服务器管理。

  • 第二级 - 域名注册商(Domain Registrar)

第二级域名是在顶级域名下创建的唯一标识符,例如google.com、apple.com等。这些域名由域名注册商进行管理,并向公众提供域名注册服务。

  • 第三级 - 主机名(Hostnames)

主机名是在第二级域名下创建的唯一标识符。 它通常表示特定计算机或网络上的服务,例如www.google.com、mail.apple.com等。在DNS中,主机名映射到IP地址,将请求路由到正确的服务器。

4. 总结防火墙分类

  • 按保护范围划分

        主机防火墙:服务范围为当前一台主机

        网络防火墙:服务范围为防火墙一侧的局域网

  • 按实现方式划分

        硬件防火墙

        软件防火墙

  • 按网络协议划分

        网络层防火墙/包过滤防火墙

        应用层防火墙/代理服务器

5. 总结iptables的5表5链和基本使用以及扩展模块

5表

  • Filter(过滤)表:该表用于过滤网络数据包,并根据规则进行决策来允许或拒绝数据包通过。
  • Nat(网络地址转换)表:该表用于进行网络地址转换,如端口映射等。
  • Mangle(操作)表:该表用于对数据包头进行修改,如更改TTL值等。
  • Raw(原始)表:该表用于设置包拦截前的处理流程,如连接跟踪等。
  • Security(安全)表:该表用于进行SELinux相关的规则管理。

5链

  • INPUT(输入)链:用于处理到达本机的数据包。
  • OUTPUT(输出)链:用于处理从本机发出的数据包。
  • FORWARD(转发)链:用于处理通过本机的转发数据包。
  • PREROUTING(预路由)链:用于在路由之前处理数据包。
  • POSTROUTING(后路由)链:用于在路由之后处理数据包。

基本使用

查询表支持的链

[root@Rocky8 ~]#iptables -t filter -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Filter表中的INPUT规则

[root@Rocky8 ~]#iptables -t filter -A INPUT -s 192.168.0.207 -j DROP
[root@Rocky8 ~]#iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       192.168.0.207        0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

基本验证

#207----->206
[root@Rocky8 ~]#ping 192.168.0.206
PING 192.168.0.206 (192.168.0.206) 56(84) bytes of data.

[root@Rocky8 ~]#tcpdump -i eth0 -nn icmp
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:53:50.621732 IP 192.168.0.207 > 192.168.0.206: ICMP echo request, id 1, seq 70, length 64
14:53:51.645914 IP 192.168.0.207 > 192.168.0.206: ICMP echo request, id 1, seq 71, length 64
14:53:52.669741 IP 192.168.0.207 > 192.168.0.206: ICMP echo request, id 1, seq 72, length 64

#206----->207
[root@Rocky8 ~]#ping 192.168.0.207
PING 192.168.0.207 (192.168.0.207) 56(84) bytes of data.
[root@Rocky8 ~]#tcpdump -i eth0 -nn icmp
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:55:42.847781 IP 192.168.0.206 > 192.168.0.207: ICMP echo request, id 2, seq 7, length 64
14:55:42.849230 IP 192.168.0.207 > 192.168.0.206: ICMP echo reply, id 2, seq 7, length 64
14:55:43.261835 IP 192.168.0.207 > 192.168.0.206: ICMP echo request, id 1, seq 180, length 64
14:55:43.872450 IP 192.168.0.206 > 192.168.0.207: ICMP echo request, id 2, seq 8, length 64
14:55:43.873472 IP 192.168.0.207 > 192.168.0.206: ICMP echo reply, id 2, seq 8, length 64
14:55:44.285809 IP 192.168.0.207 > 192.168.0.206: ICMP echo request, id 1, seq 181, length 64
14:55:44.896435 IP 192.168.0.206 > 192.168.0.207: ICMP echo request, id 2, seq 9, length 64
14:55:44.896973 IP 192.168.0.207 > 192.168.0.206: ICMP echo reply, id 2, seq 9, length 64
14:55:45.309772 IP 192.168.0.207 > 192.168.0.206: ICMP echo request, id 1, seq 182, length 64

注意:

        207到206是206设置了规则,丢弃了来自207的包,有来无回,所以不通。

        206到207是有来有回,但回来的包是来自207的,被206丢弃,所以不通。

扩展模块

扩展模块列表

[root@Rocky8 ~]#rpm -ql iptables /usr/lib64/xtables/libxt_AUDIT.so /usr/lib64/xtables/libxt_CHECKSUM.so /usr/lib64/xtables/libxt_CLASSIFY.so /usr/lib64/xtables/libxt_CONNMARK.so /usr/lib64/xtables/libxt_CONNSECMARK.so /usr/lib64/xtables/libxt_CT.so /usr/lib64/xtables/libxt_DSCP.so /usr/lib64/xtables/libxt_HMARK.so /usr/lib64/xtables/libxt_IDLETIMER.so /usr/lib64/xtables/libxt_LED.so /usr/lib64/xtables/libxt_MARK.so /usr/lib64/xtables/libxt_NFLOG.so /usr/lib64/xtables/libxt_NFQUEUE.so /usr/lib64/xtables/libxt_NOTRACK.so /usr/lib64/xtables/libxt_RATEEST.so /usr/lib64/xtables/libxt_SECMARK.so /usr/lib64/xtables/libxt_SET.so /usr/lib64/xtables/libxt_SYNPROXY.so /usr/lib64/xtables/libxt_TCPMSS.so /usr/lib64/xtables/libxt_TCPOPTSTRIP.so /usr/lib64/xtables/libxt_TEE.so /usr/lib64/xtables/libxt_TOS.so /usr/lib64/xtables/libxt_TPROXY.so /usr/lib64/xtables/libxt_TRACE.so /usr/lib64/xtables/libxt_addrtype.so /usr/lib64/xtables/libxt_bpf.so /usr/lib64/xtables/libxt_cgroup.so /usr/lib64/xtables/libxt_cluster.so /usr/lib64/xtables/libxt_comment.so /usr/lib64/xtables/libxt_connbytes.so /usr/lib64/xtables/libxt_connlabel.so /usr/lib64/xtables/libxt_connlimit.so /usr/lib64/xtables/libxt_connmark.so /usr/lib64/xtables/libxt_conntrack.so /usr/lib64/xtables/libxt_cpu.so /usr/lib64/xtables/libxt_dccp.so /usr/lib64/xtables/libxt_devgroup.so /usr/lib64/xtables/libxt_dscp.so /usr/lib64/xtables/libxt_ecn.so /usr/lib64/xtables/libxt_esp.so /usr/lib64/xtables/libxt_hashlimit.so /usr/lib64/xtables/libxt_helper.so /usr/lib64/xtables/libxt_ipcomp.so /usr/lib64/xtables/libxt_iprange.so /usr/lib64/xtables/libxt_ipvs.so /usr/lib64/xtables/libxt_length.so /usr/lib64/xtables/libxt_limit.so /usr/lib64/xtables/libxt_mac.so /usr/lib64/xtables/libxt_mark.so /usr/lib64/xtables/libxt_multiport.so /usr/lib64/xtables/libxt_nfacct.so /usr/lib64/xtables/libxt_osf.so /usr/lib64/xtables/libxt_owner.so /usr/lib64/xtables/libxt_physdev.so /usr/lib64/xtables/libxt_pkttype.so /usr/lib64/xtables/libxt_policy.so /usr/lib64/xtables/libxt_quota.so /usr/lib64/xtables/libxt_rateest.so /usr/lib64/xtables/libxt_recent.so /usr/lib64/xtables/libxt_rpfilter.so /usr/lib64/xtables/libxt_sctp.so /usr/lib64/xtables/libxt_set.so /usr/lib64/xtables/libxt_socket.so /usr/lib64/xtables/libxt_standard.so /usr/lib64/xtables/libxt_state.so /usr/lib64/xtables/libxt_statistic.so /usr/lib64/xtables/libxt_string.so /usr/lib64/xtables/libxt_tcp.so /usr/lib64/xtables/libxt_tcpmss.so /usr/lib64/xtables/libxt_time.so /usr/lib64/xtables/libxt_tos.so /usr/lib64/xtables/libxt_u32.so /usr/lib64/xtables/libxt_udp.so

常用的扩展模块

  • multiport 指定多端口

  • iprange 指定IP地址范围

  • mac 指定源MAC地址

  • string 字符串检测

  • time 指定时间范围

  • connlimit 限制每客户端IP并发连接数

  • limit 限制流量

  • state 指定模块状态

6. 总结iptables规则优化最佳实践以及规则保存和恢复

iptables规则优化最佳实践

  1. 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条,效率更高。

  2. 谨慎放行入站的新请求。

  3. 有特殊目的访问,限制访问功能,要在放行规则之前加以拒绝。

  4. 同类规则(访问同一应用,比如:http),匹配范围小的放在前面,用于特殊处理。

  5. 不同类的规则(访问不同应用,一个是http,一个是mysql),匹配范围大的放在前面,效率更高。

  6. 应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量,提高检查效率。

  7. 设置默认策略,建议白名单(只放行特定连接)

            iptables -P,不建议使用,容易出现自杀现象。

            规则的最后定义规则做为默认策略,推荐使用,放在最后一条。

规则保存和恢复以及开机自动重载

持久保存规则

  • Centos6

#将规则覆盖保存至/etc/sysconfig/iptables文件中
service iptables save
  • Centos7和8

iptables-save > 规则存储路径(可指定)

加载恢复规则

  • Centos6

#会自动从/etc/sysconfig/iptables重新载入规则
service iptables restart
  • Centos7和8

iptables-restore < 规则存储路径

开机自动重载规则

1. 用脚本保存各个iptables命令,让此脚本开机后自动运行

/etc/rc.d/rc.local文件中添加此脚本绝对路径

2. 用规则文件保存各个规则,开机时自动载入此规则文件中的规则

/etc/rc.d/rc.local文件中添加 iptables-restore < 规则存储路径

3. 定义Unit File,Centos7和8可以安装iptables-services以实现iptables.services服务

#保存现在的规则到文件中方法一
/usr/libexec/iptables/iptables.init save
#保存现在的规则到文件中方法二
iptables-save > /etc/sysconfig/iptables
#开机启动
systemctl enable iptables.service

7. 总结关系型数据库相关概念,关系,行,列,主键,唯一键,域

以下是关系型数据库相关概念的简要总结:

  • 关系:关系是一张数据表,每个表可以包含多行和多列。表中的每一行表示一个实体或记录,而表中的每一列表示实体或记录的属性。
  • 行:行也称为元组或记录,表示关系表中的一个记录或实例。它由一组有序的值组成,这些值对应于该行中的各个属性或字段。
  • 列:列也称为属性或字段,表示关系表中的一个特定类型的数据。每个字段都有一定的数据类型,并且所有相同名称的字段共享相同的数据类型(例如,所有“姓名”字段都是字符串类型)。
  • 主键:主键是关系表中用于唯一标识每个记录的一列或多列。主键必须具有唯一性,也就是说,在整个表中,任何两个记录都不能具有相同的主键值。常用来作为关系之间关联的依据。
  • 唯一键:唯一键是关系表中具有唯一性的一列或多列,但它们不一定要成为主键。唯一键可以用来保证表中没有重复的记录,但是它们不提供唯一标识每个记录的功能。
  • 域:域指的是在关系表中每一列可以取到的数据范围,它是由数据类型和数据范围两部分组成。例如,“年龄”列的域可能是介于0-120之间的整数值。

8. 总结关联类型,1对1,1对多,多对多关系

关联类型可以分为三种:1对1,1对多和多对多。

  • 1对1关系:指两个实体之间的关系是唯一的。例如,一个人只有一个身份证号码,一个身份证号码也只对应一个人。在面向对象编程中,这种关系通常通过将一个类的实例作为另一个类的属性来实现。比如,一个人类实例包含一个身份证类实例的引用。
  • 1对多关系:指一个实体与另一个实体存在“一对多”的关系。例如,一个学校有多个学生,但每个学生只能属于一个学校。在面向对象编程中,这种关系通常通过将一个类的实例作为另一个类的属性列表来实现。比如,一个学校类实例包含一个学生类实例的列表。
  • 多对多关系:指两个实体之间的关系是可重复的。例如,一个学生可以选修多个课程,而一个课程也可以被多个学生选修。在面向对象编程中,这种关系通常需要创建一个连接表(join table),该表包含连接两个实体的信息,比如一个学生和一门课程之间的关联。

9. 总结mysql设计范式

MySQL设计范式是关系型数据库中的一种规范化设计标准,主要目的是保证数据的完整性、减少冗余和提高查询效率。常见的MySQL设计范式有以下三种:

第一范式(1NF)

第一范式要求每个字段都是原子性的,不可再分解。也就是说,每一列的值只能是一个单一的值或者是一个简单的值域,不能包含多个值。如下面这个例子就不符合第一范式:

ID课程名称
1数学, 英语, 物理

将其拆分为多个表,每个课程对应一条记录:

ID课程名称
1数学
2英语
3物理

第二范式(2NF)

第二范式要求每一个非主键列都要完全依赖于主键,而不是部分依赖。也就是说,如果一个表中存在组合主键,那么除了主键外的所有列必须和组合主键一起作为主键才满足第二范式。

例如,下面的订单表:

订单号商品编号商品名数量单价
10001001苹果23.5
10001002橙子34.0

订单号和商品编号组合作为主键,但商品名只依赖于商品编号而不是订单号和商品编号,因此不符合第二范式。需要将其拆分成两个表:

订单表:

订单号商品编号数量单价
1000100123.5
1000100234.0

商品表:

商品编号商品名
001苹果
002橙子

第三范式(3NF)

第三范式要求每一个非主键列都不能依赖于其它非主键列。也就是说,不能存在传递依赖关系。如果存在传递依赖关系,则需要进一步拆分表,将非主键列与其它非主键列放在不同的表中。

例如,下面的学生表:

学号姓名班级班主任性别
001张三一班李老师
002李四二班王老师
003王五一班李老师

班级和班主任都依赖于班级,因此存在传递依赖关系。需要将其拆分为两个表:

学生表:

学号姓名班级
001张三一班
002李四二班
003王五一班

班级表:

班级班主任
一班李老师
二班王老师

10. 总结NAT转换原理, DNAT/SDNAT原理

NAT转换原理

NAT(Network Address Translation)是一种网络协议,它允许私有网络中的设备通过一个公共IP地址访问互联网。在NAT转换过程中,路由器在其WAN接口上使用公共IP地址,并将私有IP地址映射到公共IP地址。

NAT转换的原理如下:

  1. 私有IP地址:私有IP地址是指在本地局域网内使用的IP地址,它们通常是在以下地址范围内分配:10.0.0.0/8、172.16.0.0/12和192.168.0.0/16。这些地址是不可路由的,所以它们不能直接连接到Internet。

  2. 公共IP地址:公共IP地址是指连接到Internet的设备使用的IP地址。这些地址是唯一的,可以全球范围内访问。

  3. NAT设备:NAT设备是指一个路由器或防火墙,可以在私有IP地址与公共IP地址之间进行转换。

  4. NAT表:NAT表记录了私有IP地址与公共IP地址之间的映射关系。

  5. 端口映射:端口映射是指将一个私有IP地址的端口映射到一个公共IP地址和端口。这样,在Internet上的设备就可以访问私有IP地址的端口。

基于这些原理,当一个设备从私有IP地址向Internet发送数据包时,NAT设备会将源IP地址和端口号更改为公共IP地址和随机端口号,并在NAT表中添加一条映射记录。当收到来自Internet的响应时,NAT设备会根据该记录将目标IP地址和端口号更改为私有IP地址和端口号,然后将响应发送到请求的设备。

这就是NAT转换的原理。它允许私有网络中的设备通过一个公共IP地址访问互联网,同时也提供了一定程度的安全保护,因为Internet上的设备无法直接访问私有IP地址。

SNAT转换原理

SNAT(Source Network Address Translation)指源地址转换,是一种网络地址转换的技术。它通过修改IP数据包头中的源地址,将内部私有网络的IP地址转换为外部公共网络的IP地址。在计算机网络中,SNAT被广泛应用于网络安全、负载均衡等领域。

SNAT转换原理主要包括以下几个步骤:

  1. 当内部网络中的主机向外部网络发起请求时,请求经过本地路由器或网关。

  2. 路由器或网关根据配置表中设定的规则,将源地址替换成一个可以访问互联网的公共IP地址,同时在NAT表中记录该映射关系。

  3. 在响应数据包返回时,路由器或网关会根据NAT表中的映射关系,将目标地址还原成内网地址,并将响应数据包发送到相应的内部主机。

  4. 内部主机收到响应数据包后,会认为是从外部网络发来的响应,实现了内部主机与外部网络的交互。

需要注意的是,SNAT只对源地址进行转换,而不涉及目标地址。因此,SNAT只能解决内部网络访问外部网络的问题,而无法解决外部网络访问内部网络的问题。如果需要解决外部网络访问内部网络的问题,就需要使用DNAT(Destination Network Address Translation)技术。

DNAT转换原理

DNAT是一种网络地址转换(NAT)技术,用于将公共IP地址映射到私有IP地址。私有IP地址通常在内部网络中使用,而公共IP地址可在Internet上进行路由。

DNAT的转换原理非常简单。当用户在外部网络上访问公共IP地址时,DNAT会将这个请求转换为一个指向内部网络中特定设备的请求。在这个过程中,源IP地址和端口号从公共IP地址变成了私有IP地址,目标IP地址和端口号则是指向内部设备的IP地址和端口号。

DNAT通常被用于以下场景:

  1. 公共IP地址的数量有限,但需要将多个内部设备连接到Internet上。DNAT可以通过将每个设备的私有IP地址映射到单个公共IP地址来解决这个问题。

  2. 内部网络中的某些设备需要被限制访问Internet上的某些服务或网站。DNAT可以设置规则,只允许特定设备访问特定的服务或网站,从而提高网络安全性。

总之,DNAT是一种常用的网络地址转换技术,可以将公共IP地址映射到私有IP地址,并且在实现过程中可以实现多种功能,如网络安全性和资源共享等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值