• 什么是企业级防火墙

    企业级防火墙是专为满足大型组织的需求而设计的防火墙。 与为小型办公室或家庭网络设计的基本防火墙不同,企业级防火墙具有更高级的功能和更大的处理能力,可以处理大量的网络流量,同时提供更深入的安全检查。 企业级防火墙通常包括以下功能: 入侵防御系统(IDS)和入侵防止系统(IPS):这些系统可以检测并阻止恶意活动和攻击。 虚拟私人网络(VPN):企业级防火墙通常包括VPN支持,允许远程用户安全地访问企业网络。 深度包检查:这是一种防火墙技术,可以检查网络流量的每个数据包的内容,以阻止恶意软件和攻击。 高可用性和负载均衡:企业级防火墙通常支持这些功能,以确保网络的持续可用性和性能。 集中管理和报告:这些功能使网络管理员能够更容易地管理防火墙,监控网络活动,并在发生安全事件时接收通知。 ...

    2023-11-13 211
  • 企业级防火墙的工作原理是什么

    企业级防火墙的工作原理,你就记住这几个关键字: 企业级防火墙通过访问控制和安全策略来管理网络流量。访问控制列表(ACL)是其中的一种常见机制,根据源地址、目标地址、端口号等因素,允许或禁止数据的传输。安全策略则定义了企业对网络流量的整体管理方针,规定了允许和禁止的活动。 虚拟专用网络是企业级防火墙中的一项关键功能。通过使用加密通道,VPN使得远程用户可以安全地访问企业网络。这对于分布式团队和远程办公的企业来说尤为重要,保障了远程用户的数据传输的安全性。 企业级防火墙具备深度数据包检查的高级功能。这意味着防火墙不仅仅停留在简单的报文头部检查,还能深入分析数据包的内容,以便更全面地识别和阻止潜在的威胁。这种深度的检查使得防火墙更加智能化和适应性强。 一些企业级防火墙集成了入侵检测和防御系统。这意味着防火墙不仅仅阻止已知的威胁,还能主动监测网络中的异常活动,及时响应和防范潜在的攻击。 企业级防火墙记录网络流量和安全事件的日志。这些日志对于审计、分析和识别潜在的安全威胁非常重要。通过仔细分析日志,企业可以更好地了解网络活动,及时发现异常并采取相应措施。 保护网络免受病毒、蠕虫和其他恶意软件的传播是企业级防火墙的重要任务之一。这通常包括实时的病毒扫描、恶意软件识别和隔离感染节点等功能,以确保网络的整体健康和安全。 ...

    2023-11-13 192
  • 企业级防火墙的类型有哪些

    企业级防火墙主要有以下几种类型: 硬件防火墙 这种防火墙是一种物理设备,通常安装在网络的边缘,作为网络和外部世界之间的主要防线。 硬件防火墙通常具有高性能,可以处理大量的网络流量,同时提供各种高级安全功能。 软件防火墙 这种防火墙是一种可以安装在服务器或其他网络设备上的软件。 软件防火墙提供了与硬件防火墙相同的基本功能,但通常更易于定制和管理。 虚拟防火墙 这种防火墙是一种软件防火墙,可以在虚拟化环境中运行,如云计算平台。 虚拟防火墙可以提供与硬件和软件防火墙相同的功能,同时还提供了更高的灵活性和可扩展性。 ...

    2023-11-13 210
  • ping和telnet有什么区别

    Ping和Telnet有什么区别 ping 是ICMP协议,只包含控制信息没有端口;telnet是TCP协议,有端口能承载数据; 不能telnet并不代表不能ping, 这是两种不同的数据包, 防火墙可以设置哪种数据包可以通过; 能telnet通,但是不能ping通,有可能是对方主机关闭了ping回显或者是对方防火墙阻止了ping发送的数据包; 如果别人不能telnet本机,最简单的测试办法是:telnet 127.0.0.1 如果失败说明本机的telnet服务没有开启,如果成功说明本机防火墙做了限制; Ping和Telnet的界面 下边这张图是使用了ping和telnet两个命令的效果图,可以看出使用ping更多返回的是对方机器的数据包,延时这类信息。 而使用telnet则是尝试远程连接对方的服务,所以两者其实还是有很明显的本质区别。 小结 ping是icmp探查消息,用于确定两个ip端点的网络层导通性。 telnet是一种远程登录软件工具,是运行在tcp层,使用23端口。 一般计算机部署的时候都会关闭掉telnet端口,以保证安全性,如果真的需要进行远程连接的话,建议使用ssh的方式去访问。 ...

    2023-11-13 209
  • HTTP和HTTPS的区别

    HTTPS是HTTP的安全版本,两者都用于在客户端和服务器之间传输数据,但HTTPS添加了加密和安全性层,以保护数据的机密性和完整性。 区别: 安全性: HTTP:HTTP是一种不安全的协议,数据在传输过程中以明文形式传输,容易受到窃听和篡改的风险。 HTTPS:HTTPS通过使用加密机制(通常是TLS/SSL)来保护数据的机密性,使数据在传输过程中加密,从而提供更高的安全性。 端口: HTTP:HTTP默认使用端口80进行通信。 HTTPS:HTTPS默认使用端口443进行通信。 加密: HTTP:HTTP不提供加密,数据可以在网络上传输时被窃听。 HTTPS:HTTPS使用TLS/SSL协议进行数据加密和解密,确保数据在传输过程中的保密性。 证书: HTTP:HTTP不涉及数字证书的使用。 HTTPS:HTTPS需要服务器获得数字证书,并由权威的证书颁发机构(CA)签发,以验证服务器的身份。客户端可以使用证书来确保它们正在连接到合法的服务器。 认证和身份验证: HTTP:HTTP不提供身份验证机制,任何人都可以发送HTTP请求。 HTTPS:HTTPS提供了对服务器和(可选)客户端的身份验证,确保双方的合法性。 SEO(搜索引擎优化): HTTP:搜索引擎可能更喜欢使用HTTPS的网站,因为它们提供了更高的安全性,可以影响搜索排名。 ...

    2023-11-11 211
  • HTTP和TCP的关系和区别

    关系: HTTP建立在TCP之上:HTTP是一个应用层协议,而TCP是传输层协议。HTTP通常使用TCP作为它的传输层协议,以在网络上传输数据。HTTP与TCP之间的关系可以类比为在实体之上建立一个通信通道。 HTTP利用TCP的可靠性:TCP提供了可靠的、面向连接的数据传输。HTTP利用TCP的可靠性来确保数据的正确传递,包括数据的分段和重新组装、错误检测和重传等。 区别: 层次:TCP是传输层协议,负责在两台计算机之间建立连接、可靠地传输数据流,以及处理数据分段和重传等传输细节。HTTP是应用层协议,负责定义数据的格式和如何在客户端和服务器之间传输数据。 功能:TCP关注于数据传输的可靠性和流控制,而HTTP关注于定义如何呈现和传输文档、图像、视频等内容。HTTP通过请求-响应模型允许客户端请求网络资源,并服务器响应这些请求。 端口:TCP使用端口来标识不同的应用程序或服务,允许多个不同的应用程序在同一台计算机上共享网络连接。HTTP默认使用TCP端口80(HTTP)或443(HTTPS)。 通信模式:TCP是一种点对点的通信协议,即两台计算机之间的通信。HTTP是一种客户端-服务器通信模式,客户端发送请求,服务器返回响应。 状态:TCP是无状态的协议,它不保留关于连接的持久状态信息。HTTP也是无状态的,每个HTTP请求和响应之间是相互独立的,不保留客户端之间的状态。 ...

    2023-11-11 193
  • 常见协议端口号

    HTTP:80(HTTP)和443(HTTPS)。 80端口用于HTTP通信,通常是未加密的。 443端口用于HTTPS通信,加密的HTTP通信。 FTP:21(控制连接)和20(数据连接)。 21端口用于FTP的控制连接,用于命令和控制操作。 20端口用于FTP的数据连接,用于实际文件传输。 SSH:22端口用于安全的远程登录和文件传输。 SMTP:25端口用于发送电子邮件。 POP3:110端口用于接收电子邮件。 IMAP:143端口也用于接收电子邮件,但提供了更多的功能和灵活性。 DNS:53端口用于域名解析,将域名映射到IP地址。 Telnet:23端口用于远程终端连接,通常是明文传输。 SMTPS:465端口用于通过加密通信的SMTP。 SNMP:161(SNMP)和162(SNMP Trap)。 161端口用于SNMP通信,允许管理和监视网络设备。 162端口用于SNMP陷阱,用于通知管理站点的事件。 HTTP Proxy:3128(常见代理端口)端口通常用于HTTP代理服务器。 RDP:3389端口用于远程桌面连接。 ...

    2023-11-11 161
  • 美国司法部称,两名南加州男子在暗网上销售了12.4万个芬太尼药丸

    两名南加州男子因涉嫌在暗网上销售提供含有芬太尼的药丸和甲基苯丙胺而面临数十年甚至终身监禁的联邦监禁。 美国司法部在一份新闻稿中表示,来自洛杉矶南部38岁的奥马尔·纳维亚(Omar Navia)和来自加登格罗夫27岁的阿丹·鲁伊斯(Adan Ruiz)被指控提供“含有芬太尼和其他麻醉品的假冒M30羟考酮药丸”在暗网上出售。 他们上个月被起诉,并于周四被捕。美国司法部表示,两人均对“串谋分发和持有并意图分发芬太尼和甲基苯丙胺”的指控表示不认罪。鲁伊斯还面临分销芬太尼的额外指控。 据检察官称,纳维亚和鲁伊斯充当贩毒组织的供应商,在暗网上并通过“Session”和“Signal”等加密消息应用程序进行交易。他们与两名已经认罪的人合作:38岁的休斯顿人拉吉夫·斯里尼瓦桑(Rajiv Srinivasan)和25岁的威斯敏斯特人迈克尔·塔(Michael Ta),他们去年因相关指控被联邦大陪审团起诉。检察官称,他们今年认罪,预计明年被判刑。 美国司法部表示,斯里尼瓦桑和塔均承认从事贩毒活动,并“承认他们的贩毒活动导致三人死亡,并且他们向另外两人出售了含有芬太尼的药片,两人很快就因吸毒过量死亡”。 据称,斯里尼瓦桑和塔从纳维亚和鲁伊斯那里采购毒品,然后使用在各个暗网市场上运营的供应商帐户“redlightlabs”将毒品出售给全美国50个州的买家。 调查人员发现的文件显示,该团伙据称在2022年销售了近124,000粒芬太尼药丸,以及20磅冰毒和“根据起诉书,少量芬太尼粉末、黑焦油海洛因和可卡因”。 纳维亚和鲁伊斯被关押,不得保释。他们的审判定于12月26日开始。 对于共谋罪,他们可能被判处终身监禁联邦监狱,而鲁伊斯的分配罪可能被判处最高20年徒刑。 据称,他们作为毒品供应商的报酬是通过各种货币渠道获得的。这些渠道包括加密货币、通过加密货币交易所传输的资金以及Apple Cash、CashApp、PayPal、Venmo和Zelle等移动支付​​应用程序。斯里尼瓦桑和塔将于明年在美国圣安娜地方法院法官戴维·卡特(David O. Carter)面前接受宣判。 斯里尼瓦桑和塔维护的一份电子文档记录了交付给全美国约1400个独特客户的约3800笔药品交易。该记录反映了2022年5月至11月的销售情况,包括123,688颗芬太尼药丸、略低于20磅的甲基苯丙胺以及少量的芬太尼粉末、黑焦油海洛因和可卡因。 对纳维亚和鲁伊斯的起诉是持续打击贩毒工作的一部分。由FBI管理的阿片类暗网犯罪联合执法小组(JCODE)为打击暗网供应商提供了大力帮助。FBI领导的团队自2018年成立以来,已逮捕了300多名在暗网上活动的毒贩,没收了超过4200万美元的毒品相关资金,缴获了800多公斤毒品,并查获了约145支枪支。这些统计数据可以在美国司法部新闻稿中找到。...

    2023-11-11 188
  • 塞尔维亚人承认经营暗网市场Monopoly Market,赚取了1800万美元

    根据美国司法部DoJ 周三发布的一份声明,一名 33 岁的塞尔维亚男子承认在暗网上经营一个名为“垄断市场Monopoly Market的贩毒平台,该市场通过出售超过 30 公斤的冰毒和大量其他毒品来换取各种加密货币,从而赚取了 1800 万美元。 33 岁的 Milomir Desnica 据称从 2019 年底开始启动并运营暗网市场 Monopoly Market,根据法庭记录,该市场是一个典型的网上贩毒商店,用户可以在其中浏览并购买大麻、摇头丸、阿片类药物、处方药和兴奋剂等类别的毒品。 客户被要求用加密货币(例如比特币或门罗币)从个体供应商那里购买药物,这些供应商对每笔销售都收取佣金。Milomir Desnica 的职责包括批准想要在暗网市场成为“供应商”的毒品供应商。 Desnica正在哥伦比亚特区受审,定于明年2月宣判。他可能面临最高终身监禁和经济处罚。 警方使用加密货币购买毒品并找到暗网市场的经营者 2021 年,美国执法部门在Monopoly Market中向不同供应商提交订单,当局在Monopoly Market暗网市场上订购了 100 多克甲基苯丙胺。通过调查,FBI 确定Monopoly Market在全球范围内促成了价值超过 1800 万美元的毒品销售,其中包括向美国客户出售了超过 30 公斤的甲基苯丙胺。 2021 年 12 月,美国执法部门与德国和芬兰的外国执法合作伙伴协调,查获了托管“Monopoly Market”暗网市场的计算机服务器并将其下线。通过对被扣押的服务器的分析,执法部门确定了毒品销售记录、记录Monopoly Market(与Monopoly Market相关的在线论坛)上加密货币支付的财务记录、Monopoly Market运营者与供应商的通信记录、佣金付款发票等。通过对这些记录的广泛分析,Desnica被确定为大富翁的运营商。 尽管Monopoly Market试图混淆其轨迹,但联邦调查局随后能够使用比特币支付的供应商发票来追踪非法资金。 奥地利当局于 2021 年 11 月找到并逮捕了 Desnica,没收了他的房子、汽车、超过 18,000 欧元、866 美元的 Tether (USDT) 和超过 400 美元的 ETH。Desnica承认,他被扣押的资金与加密货币全部来自Monopoly Market的收益。 这次取缔行动是针对暗网市场采取的最大规模的执法行动之一,最终逮捕了 288 名供应商,超过了 2021 年取缔 DarkMarket 后逮捕的 150 名供应商和 2019 年取缔 Wall Street Market 后逮捕的 179 名商贩。 执法部门除了没收了超过 5340 万美元的现金和虚拟货币,还查获了 850 公斤毒品。 Desnica去年 11 月在奥地利被捕,2023 年 6 月 23 日,Desnica被从奥地利引渡到美国,面临贩毒指控。 据称,Desnica至少使用了两种加密货币兑换服务来洗钱其非法收益。检察官在 6 月份的一份声明中表示,他随后将加密货币出售给塞尔维亚的点对点交易员,以换取法定货币,以“清洗”自己的收入。...

    2023-11-11 160
  • 浅拷贝和深拷贝的区别

    浅拷贝 浅拷贝仅复制对象本身,而不会递归复制其内部包含的对象或数据结构。 对于复杂对象,如包含指针或引用的对象,浅拷贝会导致多个对象共享相同的内部数据。 浅拷贝通常是通过复制对象的成员变量来实现的,但对于内部指针或引用,只是复制了指针或引用本身,而不是它们引用的对象。 深拷贝 深拷贝会递归地复制对象本身及其内部的所有对象和数据结构,确保每个复制的对象都是全新的,没有共享内部数据。 对于复杂对象,深拷贝可以消除共享数据的问题,每个对象都有自己的拷贝。 深拷贝需要在拷贝过程中为每个内部对象或数据结构创建全新的副本,通常需要更多的时间和内存。 总结 使用浅拷贝时,多个对象可能会出现数据不一致的问题,因为它们共享相同的内部数据。 深拷贝确保了每个对象都是独立的,但可能需要更多的资源。 ...

    2023-11-10 170
  • 索引失效场景有哪些

    使用函数或运算符处理列 当在查询条件中对列进行函数调用或进行运算时,索引通常会失效。 例如,WHERE DATE_FORMAT(column, '%Y-%m-%d') = '2023-11-10',这种情况下,无法使用列上的索引。 使用通配符前缀 当在查询条件中使用通配符前缀(如LIKE 'prefix%')时,通常无法使用索引。 使用OR条件 在WHERE子句中使用多个OR条件时,如果每个条件都没有适用的索引,那么索引可能会失效。 不等于条件 当使用不等于条件(!=或<>)时,索引通常会失效。 数据分布不均匀 如果索引列上的数据分布极不均匀,即某些值出现非常频繁,而其他值出现很少,索引可能会失效。这会导致查询优化器认为扫描整个表更快。 大数据表 当表非常大时,即使索引存在,查询优化器可能会选择执行全表扫描,因为扫描整个表可能比使用索引更快。 列数据类型不匹配 当查询条件中的列数据类型与索引列数据类型不匹配时,索引可能会失效。例如,对字符串列应用数值函数。 连接操作(JOIN) 在连接操作中,如果没有适用的索引来支持连接条件,索引可能会失效。 类型转换 当查询条件中的列需要进行类型转换以与索引列匹配时,索引通常会失效。 子查询 子查询可能会导致索引失效,尤其是当子查询结果集非常大时。 ...

    2023-11-10 153
  • b树与b+树的区别

    数据存储方式 B树:B树的每个节点既存储数据也存储索引。这意味着B树的非叶子节点既包含索引键也包含对应的数据。 B+树:B+树的非叶子节点仅存储索引键,而数据全部存储在叶子节点。B+树的所有叶子节点通过指针连接成一个有序链表,便于范围查询。 叶子节点关联性 B树:B树的叶子节点和非叶子节点没有直接关联,各自独立存在。 B+树:B+树的叶子节点之间通过链表相连,形成了一个有序的链表。这有助于范围查询,因为数据按顺序排列。 范围查询效率 B树:在B树上进行范围查询相对较慢,因为需要访问非叶子节点和叶子节点。 B+树:B+树在范围查询时非常高效,因为只需遍历叶子节点的链表。 非叶子节点的索引键 B树:非叶子节点的索引键可以是重复的,可能导致不必要的冗余数据。 B+树:B+树的非叶子节点的索引键一般是不重复的,确保了索引的唯一性。 叶子节点个数 B树:B树的叶子节点数量和数据记录数量相等。 B+树:B+树的叶子节点数量比数据记录数量多,因为叶子节点主要用于存储数据和维护链表,而非叶子节点用于索引。 B+树 B树 ...

    2023-11-10 152
  • TCP和UDP区别是什么

    连接导向 vs 无连接 TCP是一种面向连接的协议,它在数据传输前需要建立连接,确保数据的可靠性和有序性,然后在传输完成后释放连接。 UDP是一种无连接的协议,它不需要在传输数据前建立连接,也不维护连接状态,数据包之间相互独立,不会保证数据的可靠性和有序性。 可靠性 TCP提供可靠的数据传输。它使用序号、确认和重传机制来确保数据包的正确性,确保数据不丢失和按顺序传输。 UDP不提供可靠性。它只是简单地将数据包从源发送到目标,不提供确认、重传或错误检查。 数据量 TCP适用于大量数据的可靠传输,如文件传输、网页访问等。 UDP适用于需要快速传输和可以容忍一些数据丢失的应用,如实时音视频流、在线游戏等。 开销 TCP协议在建立和维护连接时有较高的开销,因为它需要进行三次握手、四次挥手等操作,以确保可靠性。 UDP协议的开销较低,因为它不涉及连接的建立和维护。 适用场景 TCP适用于需要可靠数据传输和流控制的场景,如HTTP、FTP等传统应用。 UDP适用于对实时性要求较高、可以容忍一些数据丢失的应用,如音频/视频流、在线游戏、DNS查询等。 总结 ...

    2023-11-10 162
  • get和post区别

    数据传输方式 GET:通过URL将数据附加在请求中,数据暴露在URL中,通常用于请求数据,对请求参数有长度限制,通常在2048字符以内。 POST:通过请求正文传输数据,数据不暴露在URL中,通常用于发送数据,对请求参数没有固定的长度限制,可以传输大量数据。 安全性 GET:传输的数据在URL中可见,因此不适合传输敏感信息,如密码。 POST:传输的数据在请求正文中,相对更安全,适合传输敏感信息。 缓存 GET:请求可以被缓存,对相同URL的多次GET请求可以从缓存中获取响应,具有幂等性(多次请求产生相同结果)。 POST:请求不能被缓存,每次POST请求都会向服务器发送数据,不具有幂等性。 幂等性 GET:GET请求通常应该是幂等的,即多次执行相同的GET请求应该产生相同的结果。 POST:POST请求通常不是幂等的,多次执行相同的POST请求可能会导致不同的结果。 书签和浏览器历史 GET:可以被添加为书签,可以在浏览器历史中记录。 POST:通常不会被添加为书签,不会出现在浏览器历史中。 数据类型 GET:通常用于请求资源,如网页、图片等。 POST:通常用于提交表单数据、上传文件等。 总结 ...

    2023-11-10 150
  • 什么是猴子补丁,有什么用

    一、什么是猴子补丁? 猴子补丁:Monkey Patch,主要功能就是动态的属性的替换,模块运行时替换的功能。 说直接点就是程序功能的追加或者变更。 二、Monkey Patch功能简介 Monkey Patch允许在程序运行期间动态的修改一个类或者模块。 三、举个例子 之前一个做游戏的,在很多地方都用了**import json,后来发现ujson比Python自带的json快很多,于是问题来了,几十几百个文件难道要一个一个的把import json替换成import ujson as json吗? 那也太痛苦了,其实只需要在进程开始的地方使用monkey patch**就行了,它是会影响整个进程空间的,同一进程空间中一个module只会被执行一次。 """ file:json_serialize.py """ import time import json # 时间测试装饰器 def run_time(func): def inner(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f'程序用时:{end_time - start_time}') return result return inner @run_time def json_dumps(obj): return json.dumps(obj) # 生成测试字典 test_dict = {i: 1 for i in range(1, 10000001)} 使用json模块执行原程序: """ file:run.py """ from json_serialize import json_dumps, test_dict print(f'json.dumps编码用时:', end='') r1 = json_dumps(test_dict) 原程序的性能太低,我们可以使用ujson将json替换掉! 使用monkey patch修改后: """ file:run.py """ import json import ujson from json_serialize import json_dumps, test_dict def monkey_patch_json(): json.dumps = ujson.dumps monkey_patch_json() print(f'使用猴子补丁之后json.dumps编码用时:', end='') json_dumps(test_dict) 这个时候在这个项目中json模块就被monkey patch修改为了ujson模块。 ...

    2023-11-09 137
  • 什么是端口,作用及范围

    在计算机网络中,数据通过网络传输,每个数据包都需要知道如何正确到达目的地。 为了实现这一目标,网络使用IP地址和端口号来定位目标设备上的特定应用程序或服务。 IP地址用于定位设备,而端口号用于定位设备上的特定应用程序或服务。 每个设备都有许多不同的端口,用于处理不同类型的数据流。 例如,Web服务器通常使用端口80来处理HTTP请求,而安全的Web服务器使用端口443来处理HTTPS请求。 电子邮件服务器使用端口25来接收传入的电子邮件,而端口110用于接收传出的电子邮件。 这些端口号是被广泛接受和约定的,以便不同设备和应用程序之间能够正确地通信。 端口的作用 端口的主要作用是将数据包正确地路由到目标应用程序或服务。当数据包到达设备时,操作系统使用目标端口号来确定将数据包传递给哪个应用程序或服务。这样,多个应用程序可以在同一设备上并行运行,而不会互相干扰。 此外,端口还可以用于实现安全性和访问控制。防火墙和路由器可以配置为允许或阻止特定端口上的数据流量,从而保护网络免受潜在的威胁。这是网络安全的一个重要方面。 端口号的范围 如前所述,端口号是一个16位的整数,范围从0到65535。 这个范围被划分为三个主要部分:   熟知端口(Well-Known Ports):端口号范围从0到1023。这些端口号已被互联网指定为特定的应用程序或服务,因此它们具有广泛的公认含义。例如,端口80用于HTTP服务,端口25用于SMTP服务,等等。 注册端口(Registered Ports):端口号范围从1024到49151。这些端口号通常由软件开发者或组织用于特定应用程序或服务。它们没有被广泛接受,但可以在需要时注册。 动态和私有端口(Dynamic and Private Ports):端口号范围从49152到65535。这些端口号通常用于动态分配,例如客户端应用程序用于与服务器通信时可以随机选择一个空闲的端口。 ...

    2023-11-07 162
  • MySQL常见的三种存储引擎是什么

    MyISAM MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器; 每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表明。 例如,我建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件: tb_demo.frm,存储表定义; tb_demo.MYD,存储数据; tb_demo.MYI,存储索引。 MyISAM表无法处理事务,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。 MyISAM存储引擎特别适合在以下几种情况下使用: 选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。 插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。 InnoDB InnoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案。 我的电脑上安装的MySQL 5.6.13版,InnoDB就是作为默认的存储引擎。 InnoDB还引入了行级锁定和外键约束,在以下场合下,使用InnoDB是最理想的选择: 更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。 事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。 自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。 外键约束。MySQL支持外键的存储引擎只有InnoDB。 支持自动增加列AUTO_INCREMENT属性。 一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。 MEMORY 使用MySQL Memory存储引擎的出发点是速度。 为得到最快的响应时间,采用的逻辑存储介质是系统内存。 虽然在内存中存储表数据确实会提供很高的性能,但当mysqld守护进程崩溃时,所有的Memory数据都会丢失。 获得速度的同时也带来了一些缺陷。它要求存储在Memory数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型,VARCHAR是一种长度可变的类型,但因为它在MySQL内部当做长度固定不变的CHAR类型,所以可以使用。 一般在以下几种情况下使用Memory存储引擎: 目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制Memory表的大小,设置此参数,就可以限制Memory表的最大大小。 如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中。 存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。 Memory同时支持散列索引和B树索引。 B树索引的优于散列索引的是,可以使用部分查询和通配查询,也可以使用<、>和>=等操作符方便数据挖掘。 散列索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了,因此散列索引值适合使用在=和<>的操作符中,不适合在<或>操作符中,也同样不适合用在order by子句中。 ...

    2023-11-07 165
  • 什么是SYN FLOOD洪水攻击,原理是什么?

    同Tear Drop泪滴攻击一样,SYN Flood也是一种拒绝服务攻击,其目标是通过发送大量伪造的TCP连接请求(SYN包)来消耗目标系统的资源,从而使得被攻击方资源耗尽而无法响应合法的连接请求的攻击方式。 SYN FLOOD攻击原理 SYN FLOOD攻击发生在OSI参考模型的传输层,它的攻击原理是利用TCP协议的三次握手过程协议缺陷来实现的。 正常情况下,客户端和服务器建立TCP连接三次握手过程是这样的:   1)建立连接时,客户端发送一个SYN同步报文给服务器端,该报文中包含了本端的初始化序列号,同时设置本段的连接状态为SYN-SENT。 2)服务器端收到SYN同步报文后,给客户端回应SYN+ACK 报文,该报文中包含本段的初始化序列号。同时设置本端连接状态为SYN-RCVD。 3)客户端收到服务器端的SYN+ACK后,向服务器端发送ACK报文进行确认,此包发送完毕,客户端和服务器进入ESTABLISHED状态。 三次握手的完成标志着一个TCP连接的成功建立。 但是,当客户端向服务器端发送SYN包后,对服务器端回应的SYN+ACK包不进行处理,会出现什么结果呢,如下图? 服务器端发送完SYN+ACK 报文后,会建立一个半连接状态的socket套接口,同时会启动一个定时器,若在超时时间内未收到客户端回应的ACK报文,服务器端将会进行超时重传SYN+ACK报文给客户端,默认重传次数为5次。 第1次重传:1秒 第2次重传:2秒 第3次重传:4秒 第4次重传:8秒 第5次重传:16秒 第5次重传后还要等待32秒,若仍收不到 ACK 报文,才会关闭连接。 这样等等待时间=(1+2+4+8+16)+32=63秒,也就是大于1分钟的时间。 这样,若客户端不停的发送SYN报文并对服务端回应的报文不回答,就会导致服务器端不停的创建半连接状态的**socket **而耗尽资源,从而服务器端无法处理正常的客户端的连接请求,造成拒绝服务攻击,即SYN FLOOD洪水攻击。 SYN FLOOD攻击的特点 攻击手段简单:SYN FLOOD攻击是一种常见的DoS攻击手段。 防不胜防:SYN FLOOD是一种难以防范的攻击方式,因为其攻击行为在某些情况下很难被察觉和区分。例如,一个SYN FLOOD攻击可能会伪造合法的IP地址,使得攻击行为看起来像是来自正常的网络流量。这使得防火墙、IDS等安全设备很难对其进行有效的检测和拦截。 攻击效果显著:SYN FLOOD攻击能够快速地使目标系统资源耗尽,导致其无法响应合法的连接请求。这使得攻击者能够成功地实施DoS攻击,使目标网站或服务完全瘫痪。 危害范围广泛:SYN FLOOD攻击不仅能够对主机进行攻击,还能够危害路由器、防火墙等网络系统。事实上,只要目标系统打开TCP服务,SYN FLOOD攻击就能够对其实施攻击。 ...

    2023-11-07 173
  • Redis主从复制原理详解

    众所周知,一个数据库系统想要实现高可用,主要从以下两个方面来考虑: 保证数据安全不丢失 系统可以正常提供服务 而 Redis 作为一个提供高效缓存服务的数据库,也不例外。 上期我们提到的 Redis 持久化策略,其实就是为了减少服务宕机后数据丢失,以及快速恢复数据,也算是支持高可用的一种实现。 除此之外,Redis 还提供了其它几种方式来保证系统高可用,业务中最常用的莫过于主从同步(也称作主从复制)、Sentinel 哨兵机制以及 Cluster 集群。 同时,这也是面试中出现频率最高的几个主题,这期我们先来讲讲 Redis 的主从复制。 2. 主从复制简介 Redis 同时支持主从复制和读写分离:一个 Redis 实例作为主节点 Master,负责写操作。 其它实例(可能有 1 或多个)作为从节点 Slave,负责复制主节点的数据。 2.1 架构组件 主节点Master 数据更新:Master 负责处理所有的写操作,包括写入、更新和删除等。 数据同步:写操作在 Master 上执行,然后 Master 将写操作的结果同步到所有从节点 Slave 上。 从节点Slave 数据读取:Slave 负责处理读操作,例如获取数据、查询等。 数据同步:Slave 从 Master 复制数据,并在本地保存一份与主节点相同的数据副本。 2.2 为什么要读写分离 1)防止并发 从上图我们可以看出,数据是由主节点向从节点单向复制的,如果主、从节点都可以写入数据的话,那么数据的一致性如何保证呢? 有聪明的小伙伴可能已经想到了,那就是加锁! 但是主、从节点分布在不同的服务器上,数据跨节点同步时又会出现分布式一致性的问题。而在高频并发的场景下,解决加锁后往往又会带来其它的分布式问题,例如写入效率低、吞吐量大幅下降等。 而对于 Redis 这样一个高效缓存数据库来说,性能降低是难以忍受的,所以加锁不是一个优秀的方案。 那如果不加锁,使用最终一致性方式呢? 这样 Redis 在主、从库读到的数据又可能会不一致,带来业务上的挑战,用户也是难以接受的。 业务为用户服务,技术为业务服务。 所以,为了权衡数据的并发问题和用户体验,我们只允许在主节点上写入数据,从节点上读取数据。 2)易于扩展 我们都知道,大部分使用 Redis 的业务都是读多写少的。所以,我们可以根据业务量的规模来确定挂载几个从节点 Slave,当缓存数据增大时,我们可以很方便的扩展从节点的数量,实现弹性扩展。 同时,读写分离还可以实现数据备份和负载均衡,从而提高可靠性和性能。 3)高可用保障 不仅如此,Redis 还可以手动切换主从节点,来做故障隔离和恢复。这样,无论主节点或者从节点宕机,其他节点依然可以保证服务的正常运行。 3. 主从复制实现 3.1 开启主从复制 要开启主从复制,我们需要用到 replicaof 命令。 当我们确定好主节点的 IP 地址和端口号,在从库执行 replicaof <masterIP> <masterPort> 这个命令,就可以开启主从复制。 注意,在 Redis5.0 之前,该命令为 slaveof 开启主从复制后,应用层采用读写分离,所有的写操作在主节点进行,所有读操作在从节点进行。 主从节点会保持数据的最终一致性:主库更新数据后,会同步给从库。 3.2 主从复制过程 那主从库同步什么时候开始和结束呢? 是一次性传输还是分批次写入?Redis 主从节点在同步过程中网络中断了,没传输完成的怎么办? 带着这些疑问我们来分析下,首先,Redis 第一次数据同步时分 3 个阶段。 1)建立连接,请求数据同步 主从节点建立连接,从库请求数据同步。 从服务器从 replicaof 配置项中获取主节点的 IP 和 Port,然后进行连接。 连接成功后,从服务器会向主服务器发送 PSYNC 命令,表示要进行同步。同时,命令中包含 runID 和 offset 两个关键字段。 runID:每个 Redis 实例的唯一标识,当主从复制进行时,该值为 Redis 主节点实例的ID。由于首次同步时还不知道主库的实例ID,所以该值第一次为 ? offset:从库数据同步的偏移量,当第一次复制时,该值为 -1,表示全量复制 主服务器收到 PSYNC 命令后,会创建一个专门用于复制的后台线程(replication thread),然后记录从节点的 offset 参数并开始进行 RDB 同步。 2)RDB 同步 主库生成 RDB 文件,同步给从库。 当从服务器连接到主服务器后,主服务器会将自己的数据发送给从服务器,这个过程叫做全量复制。主服务器会执行 bgsave 命令,然后 fork 出一个子进程来遍历自己的数据集并生成一个 RDB 文件,将这个文件发送给从服务器。 在这期间,为了保证 Redis 的高性能,主节点的主进程不会被阻塞,依旧对外提供服务并接收数据写入缓冲区中。 从服务器接收到 RDB 文件后,会清空自身数据,然后加载这个文件,将自己的数据集替换成主服务器的数据集。 3)命令同步 在第一次同步过程中,由于是全量同步,所以用时可能比较长,这期间主库依旧会写入新数据。 但是,在数据同步一开始就生成的 RDB 文件中显然是没有这部分新增数据的,所以第一次数据同步后需要再发送一次这部分新增数据。 这样,主服务器需要在发送完 RDB 文件后,将期间的写操作重新发送给从服务器,以保证从服务器的数据集与主服务器保持一致。 3.3 增量同步 1)命令传播 在完成全量复制后,主从服务器之间会保持一个 TCP 连接,主服务器会将自己的写操作发送给从服务器,从服务器执行这些写操作,从而保持数据一致性,这个过程也称为基于长连接的命令传播(command propagation)。 增量复制的数据是异步复制的,但通过记录写操作,主从服务器之间的数据最终会达到一致状态。 2)网络断开后数据同步 命令传播的过程中,由于网络抖动或故障导致连接断开,此时主节点上新的写命令将无法同步到从库。 即便是抖动瞬间又恢复网络连接,但 TCP 连接已经断开,所以数据需要重新同步。 从 Redis 2.8 开始,从库已支持增量同步,只会把断开的时候没有发生的写命令,同步给从库。 详细过程如下: 网络恢复后,从库携带之前主库返回的 runid,还有复制的偏移量 offset 发送 psync runid offset 命令给主库,请求数据同步; 主库收到命令后,核查 runid 和 offset,确认没问题将响应 continue 命令; 主库发送网络断开期间的写命令,从库接收命令并执行。 这时,有细心的小伙伴可能要问了,网络断开后,主库怎么知道哪些数据是新写入的呢? 这是个好问题,接下来我们详细说明一下。 3)增量复制的关键 Master 在执行写操作时,会将这些命令记录在 repl_backlog_buffer (复制积压缓冲区)里面,并使用 master_repl_offset 记录写入的位置偏移量。 而从库在执行同步的写命令后,也会用 slave_repl_offset 记录写入的位置偏移量。正常情况下,从库会和主库的偏移量保持一致。 但是,当网络断开后,主库继续写入,而从库没有收到新的同步命令,所以偏移量就停止了。所以,master_repl_offset 会大于 slave_repl_offset。 注意:主从库实现增量复制时,都是在 repl_backlog_buffer 缓冲区上进行。 网络断开前后,主从库的同步图如下:   repl_backlog_buffer 复制积压缓冲区是一个环形缓冲区,如果缓冲区慢了(比如超过 1024),则会从头覆盖掉前面的内容。 所以,当网络恢复以后,主节点只需将 master_repl_offset 和 slave_repl_offset 之间的内容同步给从库即可(图中 256~512 这部分数据)。 需要注意的是,主库的积压缓冲区默认为 1M,如果从库网络断开太久,缓冲区之前的内容已经被覆盖,这时主从的数据复制就只能采取全量同步了。 所以我们需要根据业务量和实际情况来设置 repl_backlog_buffer 的值。 4. 小结 面让架构易于扩展,另一方面防止单体故障:当主库挂了,可以立即拉起从库,不至于让业务停滞太久。 而首次主从复制包括建立连接,RDB 同步和命令同步三个阶段。 为了保证同步的效率,除了第一次需要全量同步以外,例如当主从节点断连后,则只需要增量同步,这是由主从库的复制偏移量以及主库的 repl_backlog_buffer 复制积压缓冲区来控制的。 好了,以上就是本文的所有内容了,希望今天的文章能让大家更深入地了解 Redis 主从复制,并在面试或者实际工作中学以致用,探索更多的细节。 ...

    2023-11-07 200
  • NTP时间同步过程

    NTP通过时间戳和网络延迟计算来调整本地时钟,以确保系统时钟与NTP服务器的时钟尽可能一致,实现高精度的时间同步。 第一步、NTP客户端发起时间请求 NTP客户端向NTP服务器发起时间请求,请求服务器的准确时间。这个请求通常包括客户端的当前时间戳。 通常,这是通过UDP协议的端口123完成的。NTP客户端可以是计算机、路由器、交换机或其他网络设备。 第二步、NTP服务器响应 NTP服务器收到客户端的请求,并在响应中包括自己的时间戳。服务器的时间通常比客户端的时间更准确。服务器的响应包括四个时间戳:T1、T2、T3、T4。 T1:客户端发送请求的时间。 T2:服务器接收到请求的时间。 T3:服务器发送响应的时间。 T4:客户端接收响应的时间。 NTP服务器可以是Stratum 1服务器(通常是高精度时间源,如原子钟或GPS时钟)或Stratum 2服务器,依次类推。 第三步、计算网络延迟 客户端使用T1、T2、T3、T4时间戳来计算网络延迟和时钟偏移。根据这些时间戳,客户端可以计算出网络延迟,即信号从客户端发送到服务器再返回所需的时间。你在示例中计算了延迟,这在NTP中非常重要,因为网络延迟会对时钟同步产生影响。 第四步、调整本地时钟 客户端使用计算得到的网络延迟和服务器的时间戳来调整自己的本地时钟。这个调整会将客户端的时钟与服务器的时钟对齐,以减小时钟偏移。 ?请记住:时间同步不是一次性事件,而是定期进行的。 客户端设备通常每隔一段时间(通常是每10分钟或每小时)与NTP服务器进行一次时间同步,以确保时钟的准确性。 此后的时间同步交换通常只需要一次消息交换,因为客户端已经与NTP服务器建立了时间校准。 ...

    2023-11-07 161

联系我们

在线咨询:点击这里给我发消息

QQ交流群:KirinBlog

工作日:8:00-23:00,节假日休息

扫码关注