Networking

CDN

内容分发网络(Content Delivery Network,CDN)是建立并覆盖在承载网上,由不同区域的服务器组成的分布式网络。将源站资源缓存到全国各地的边缘服务器,供用户就近获取,降低源站压力。

——阿里云

CDN是构建在现有网络基础之上的智能虚拟网络,依靠 部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

——百度百科

个人理解,实际部署CDN中最重要的概念即 节点缓存服务器中心平台

  • 节点是指在足够广的范围内识别出合适数量的网络拓扑节点,这些节点往往处在网络所及最远之处的各地,能够有效分摊用户访问对主干网络的压力;
  • 而缓存服务器即“部署在各地的边缘服务器”,是指能够 制定规则 自动识别并缓存数据 以供用户快速访问,分担主干网络压力的实体。
  • 中心平台可以对缓存服务器实现负载均衡、内容分发和调度等功能。

工作原理

假设您的加速域名为www.a.com,接入CDN网络,开始使用加速服务后,当终端用户(北京)发起HTTP请求时,处理流程如下图所示。

  1. 当终端用户(北京)向www.a.com下的指定资源发起请求时,首先向LDNS(本地DNS)发起域名解析请求。
  2. LDNS检查缓存中是否有www.a.com的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。
  3. 当授权DNS解析www.a.com时,返回域名CNAME www.a.tbcdn.com对应IP地址。
  4. 域名解析请求发送至阿里云DNS调度系统,并为请求分配最佳节点IP地址。
  5. LDNS获取DNS返回的解析IP地址。
  6. 用户获取解析IP地址。
  7. 用户向获取的IP地址发起对该资源的访问请求。
    • 如果该IP地址对应的节点已缓存该资源,则会将数据直接返回给用户,例如,图中步骤7和8,请求结束。
    • 如果该IP地址对应的节点未缓存该资源,则节点向源站发起对该资源的请求。获取资源后,结合用户自定义配置的缓存策略,将资源缓存至节点,例如,图中的北京节点,并返回给用户,请求结束。配置缓存策略的操作方法,请参见缓存配置

img

——阿里云

应用场景

场景概述

CDN的业务使用场景分为 静态内容加速动态内容加速安全加速

静态内容(静态资源)

静态内容是指在不同请求中访问到的数据都相同的静态文件。例如:图片、视频、网站中的文件(html、css、js)、软件安装包、apk文件、压缩包文件等。

CDN加速的本质是 缓存加速。将您服务器上存储的静态内容缓存在阿里云CDN节点上,当您访问这些静态内容时,无需访问服务器源站,就近访问阿里云CDN节点即可获取相同内容。从而达到加速的效果,同时减轻服务器源站的压力。

动态内容(动态资源)

动态内容是指在不同请求中访问到的数据不相同的动态内容。例如:网站中的文件(asp、jsp、php、perl、cgi)、API接口、数据库交互请求等。

当您访问这些动态内容时,每次都需要访问您的服务器,由服务器动态生成实时的数据并返回给您。因此CDN的缓存加速不适用于加速动态内容,CDN无法缓存实时变化的动态内容。对于动态内容请求,CDN节点只能转发回您的服务器源站,没有加速效果。

如果您的网站或App应用有较多动态内容,例如需要对各种API接口进行加速,则需要使用 阿里云全站加速 产品。全站加速能同时加速动态和静态内容,加速方式如下:

  • 静态内容使用CDN加速。
  • 动态内容通过阿里云的 路由优化传输优化 等动态加速技术以最快的速度访问您的服务器源站获取数据。从而达到全站加速的效果。

——阿里云

全站加速

全站加速(Dynamic Route for Content Delivery Network)是阿里云自主研发的融合了动态加速和静态加速技术的CDN产品。该产品一站式解决了页面动静态资源混杂、跨运营商、网络不稳定、单线源站、突发流量、网络拥塞等诸多因素导致的响应慢、丢包、服务不稳定的问题,提升全站性能和用户体验。

工作原理

阿里云全站加速通过智能路由区分客户请求内容,实现动静态加速。通过架构图,您可以了解全站加速的工作原理。

  • 智能区分动静态内容:域名接入阿里云全站加速后,通过域名访问的动静态内容将被智能识别并区分。
  • 动静态内容同时加速:静态内容使用阿里云CDN加速,缓存在CDN节点上,供您就近访问。动态内容通过 智能路由优化协议优化 等动态加速技术快速回源获取。

全站加速与CDN对比

image-20210414100053078

SSH

SSH is a program for logging into a remote machine and for excuting commands on a remote machine.

It's intended to provide secure encrypted communications between two untrusted hosts over and insecure network.

X11 connections, arbitrary TCP ports and UNIX-domain sockets can also be forwarded over the secure channel.

Authentication

The OpenSSH SSH client supports SSH protocol 2.

Five available authentication methods: GSSAPI-based / host-based / public key / challenge-response and password.

Host-based

If the machine the user logs in from is listed in /etc/hosts.equiv or /etc/ssh/shosts.equiv on the remote machine, the user is non-root and the user names are the same on both sides, or if the files ~/.rhosts or ~/.shosts exist in the user's home directory on the remote machine and contain a line containing the name of the client machine and the name of the user on that machine, the user is considered for login. Additionally, the server must be able to verify the client's host key (see the description of /etc/ssh/ssh_known_hosts and ~/.ssh/known_hosts, below) for login to be permitted. This authentication method closes security holes due to IP spoofing, DNS spoofing, and routing spoofing.

[Note to the administrator: /etc/hosts.equiv, ~/.rhosts, and the rlogin/rsh protocol in general, are inherently insecure and should be disabled if security is desired.]

Public key

The scheme is based on public-key cryptography, using cryptosystems where encryption and decryption are done using separate keys, and it is unfeasible to derive the decryption key from the encryption key. The idea is that each user creates a public/private key pair for authentication purposes.

The server knows the public key, and only the user knows the private key. ssh implements public key authentication protocol automatically, using one of the DSA, ECDSA, Ed25519 or RSA algorithms. The HISTORY section of ssl(8) [i] on non-OpenBSD systems contains a brief discussion of the DSA and RSA algorithms.

The file ~/.ssh/authorized_keys lists the public keys that are permitted for logging in. When the user logs in, the ssh program tells the server which key pair it would like to use for authentication. The client proves that it has access to the private key and the server checks that the corresponding public key is authorized to accept the account.

The user should then copy the public key to ~/.ssh/authorized_keys in his/her home directory on the remote machine. The authorized_keys file corresponds to the conventional ~/.rhosts file, and has one key per line, though the lines can be very long. After this, the user can log in without giving the password.

ssh-keygen

To generate a public key for ssh, we need to use:

1
ssh-kegen -t rsa

The terminal will ask if /root/.ssh/id_rsa the file you save the key:

1
2
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

The terminal will require you to enter the passphrase twice.

1
2
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Identification is the private key used by the server(the remote machine). And the public key is generated for the client to authenticate while logging in the server.

1
2
3
4
5
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256: *******
The key's randomart imge is:

The user creates his/her key pair by running ssh-keygen(1).

This stores the private key in ~/.ssh/id_dsa (DSA), ~/.ssh/id_ecdsa (ECDSA), ~/.ssh/id_ecdsa_sk (authenticator-hosted ECDSA), ~/.ssh/id_ed25519 (Ed25519), ~/.ssh/id_ed25519_sk (authenticator-hosted Ed25519), or ~/.ssh/id_rsa (RSA) .

The the public key stores in ~/.ssh/id_dsa.pub (DSA), ~/.ssh/id_ecdsa.pub (ECDSA), ~/.ssh/id_ecdsa_sk.pub (authenticator-hosted ECDSA), ~/.ssh/id_ed25519.pub (Ed25519), ~/.ssh/id_ed25519_sk.pub (authenticator-hosted Ed25519), or ~/.ssh/id_rsa.pub (RSA) in the user's home directory.

Check and copy your .pub file to the local computer.

1
2
cd ~/.ssh/
vim id_rsa.pub
Permissions 0644

image-20210423135807684

1
chmod 0600 ~/.ssh/id_rsa

Login Format

user@hostname : root@qq.com

ssh://root@hostname:port : ssh://root@qq.com:666

SSL

基于 SSL 证书,可将站点由 HTTP(Hypertext Transfer Protocol)切换到 HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),即基于安全套接字层(SSL)进行安全数据传输的加密版 HTTP 协议。

SSL优势

  • 防流量劫持:全站 HTTPS 是根治运营商、中间人流量劫持的解决方案,不仅可以杜绝网页中显示的小广告,更可以保护用户隐私安全。

  • 提升搜索排名:采用 HTTPS 可以帮忙搜索排名的提升,提高站点的可信度和品牌形象。

  • 杜绝钓鱼网站:HTTPS 地址栏绿色图标可以帮助用户识别出钓鱼网站,保障用户和企业的利益不受损害,增强用户信任。

SSL证书签发

域名型证书由以下品牌提供自动审核认证,快速签发。

  • SecureSite:全球最大的信息安全厂商和服务商,最权威的数字证书颁发机构,为企业、个人用户和服务供应商提供广泛的内容和网络安全解决方案,全球500强中有93%选择了 VeriSign SSL 数字证书,目前均由 SecureSite 提供服务。
  • TrustAsia®(亚洲诚信):亚数信息科技(上海)有限公司应用于信息安全领域的品牌,是 SecureSite 的白金合作伙伴,专业为企业提供包含数字证书在内的所有网络安全服务。
  • GeoTrust:GeoTrust 是全球第二大数字证书颁发机构(CA),也是身份认证和信任认证领域的领导者,该公司各种先进的技术使得任何大小的机构和公司都能安全地低成本地部署 SSL 数字证书和实现各种身份认证。从2001年成立到2006年占领全球市场25%的市场份额,VeriSign 于2006年5月 - 2006年9月以1.25亿美元收购 GeoTrust,目前也同为 SecureSite 旗下 SSL 证书的性价比高的品牌。
  • GlobalSign: GlobalSign 成立于1996年,是一家声誉卓著,备受信赖的 CA 中s心和 SSL 数字证书提供商,在全球总计颁发超过2000万张数字证书。GlobalSign 的专业实力获得中国网络市场众多服务器、域名注册商、系统服务供应商的青睐,成为其数字证书服务的合作伙伴。
  • WoTrus(沃通):沃通电子认证服务有限公司(WoTrus CA Limited)是同时获得国内电子认证服务许可证(由工信部颁发)和通过国际认证的证书颁发机构(CA)。专业为企业提供权威第三方数字身份认证服务,颁发全球信任的各种数字证书产品。
  • DNSPod 品牌国密标准(SM2)证书:DNSPod 为腾讯云自有品牌,采用国密标准,并且是纯国产数字证书,由国内知名 CA 机构提供基础设置支撑,敏捷高效,同时满足国家监管需求。

SSL证书品牌差异

不同品牌的证书在浏览器地址栏、加密强度、赔付保障上均存在差异,最重要的差异点在于根证书。

例如,GeoTrust 通配符是 GeoTrust 根证书签发的,而 SecureSite 通配符是 SecureSite 根证书签发的。Digicert 根证书可以兼容市面上所有的浏览器,对移动端的支持也是最好的,而 Trustasia 通配符也是 Digicert 根证书签发的,GlobalSign 通配符是 GlobalSign 的根证书签发的,DNSPod 是由 Wotrus 的根证书签发的,Wotrus 通配符是 Sectigo 的根证书签发的。

通配符:

根证书:

单纯从技术角度,SecureSite(原 Verisign)和 GeoTrust 的区别如下:

  • 算法支持上 SecureSite(支持 RSA、DSA、ECC 三种算法)优于 GeoTrust(支持 RSA、DSA 两种算法)。
  • 兼容性 SecureSite 优于 GeoTrust,SecureSite 可兼容市面上所有的浏览器,对移动端的支持也是极好的。
  • OCSP 响应速度上 SecureSite 优于 GeoTrust。
  • CA 安全性方面 SecureSite 优于 GeoTrust,SecureSite 是国际知名安全厂商,CA 的安全级别也是国际第一的安全系数。
  • SecureSite 证书除实现加密传输以外,还另外有恶意软件扫描和漏洞评估的附加功能。
  • SecureSite 对证书有商业保险赔付保障,金额最高为175万美金,GeoTrust 最高为150万美金。

SSL证书格式

SSL证书分为 pemkey 这两种格式,分别存储的是 证书base64加密私钥base64加密 还有 格式分割符,也就是说pem存的是证书,key 存的是私钥。

如pem中的内容:

1
2
3
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----

-----BEGIN CERTIFICATE----------END CERTIFICATE----- 为分割分,表示在这两个中间存的是证书的base64编码

备注:

如key中的内容:

1
2
3
-----BEGIN RSA PRIVATE KEY-----

-----END RSA PRIVATE KEY-----

-----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY----- 为分割符号,表示在这两个中间存的是私钥的base64编码

备注:CERTIFICATE 单词代表证书的意思;PRIVATE KEY 单词代表 私钥、秘钥的意思。

SSL证书配置

以下以“阿里云OSS"及“腾讯云COS”的对象存储(bucket)与域名(name)绑定过程中,对SSL证书的配置为例,进行解释和说明,不对详细步骤进行描述,仅解释原理。

域名及Bucket绑定

阿里云及腾讯云都可以申请对象存储和域名,所申请的域名按正规流程均需要经过挂载至某个服务器进行备案(国内公安要求)后才可以与对象存储绑定,进而颁发证书给挂载至对象存储的域名。

SSL证书申请及配置

若域名互相绑定后未配置SSL则会导致https访问失败,配置SSL需要给自己的域名申请免费SSL证书,阿里云及腾讯云都可以免费申请为期一年的证书,按流程填写信息并等待审核下发即可;获得证书后需要选择“其他”类型的证书进行下载。证书中需要的 公钥.pem 格式文件,而 私钥.key 格式文件,分别填写到Bucket的域名管理页面内下的 证书上传 中。

流程大致如下:

graph LR
    开始 --> Bucket申请--可选CDN加速开启--> 获得Bucket域名或CDN加速域名 --CNAME解析-->域名绑定-->结束
    开始 --> 域名申请 --> 域名备案 --CNAME解析--> 域名绑定
    域名申请 --> SSL证书申请 --> 下载证书 --复制粘贴至Bucket的域名管理页面--> 证书上传--> 结束

DDos

常见流量攻击

SYN Flood

Flood即洪水之意,SYN是指TCP通信中用于建立连接时标志位之一。

此时需要用到 TCP Three-way Handshake的知识点,当需要建立连接时:

  • Client向Server 发去SYN标志
  • Server收到后向Client 回复SYN和ACK标志
  • Client收到由Server发过来的SYN和ACK后 回复一个ACK标志

以上即为三次握手协议的主要流程,其实只有Server收到该ACK时,才标志着双方建立连接。以下介绍几种”意外“情况。

情况一:当Client第一次收到SYN和ACK时,Client就单方面“认为”自己已经和Server建立连接了。但网络通信时并不能百分百保证可靠,假如Client发了ACK,但Server并未收到,则Server就并不”认为“自己与Client建立了连接。Server和Client都有自己的定时器,在发送数据之后就开始计时,不管如何,此时Client都已经发了ACK了,“觉得”自己已经建立了连接,而Server不然,Server就会再次发送SYN和ACK以请求Client的确认。

情况二:多个Client向Server同时发送SYN请求,Server收到信息后立即回复SYN和ACK,并且需要为每一个Client设立一个计时器以等待他们的ACK信息。假如此刻Client的数量非常多且每一个都发送了一次SYN请求,则Server的计时器则会立刻被用光,导致任何正常请求都无法连接。(针对此种攻击方式,提出了二次SYN当成一次SYN的防攻击手段,即Client需要连续发两次SYN在标明自己是真的“有意”连接,不是恶意发送攻击的,但此类二次验证方式比较简单,仍然容易被模仿)

ICMP Flood

ICMP也算是网络层协议的一员,封装在IP协议中,是IP协议的附属协议,可以直接被用户进程直接使用。

此处的ICMP Flood指的是利用集群设备在同一时间使用 ping 功能对目标主机发起请求,强制主机进行回复,致使目标主机瘫痪。

以下为ping的英文解释

PING - Send ICMP ECHO_REQUEST to network hosts

Ping uses the ICMP protocol's mandatory ECHO_REQUEST datagram to elicit an ICMP ECHO_RESPONSE from a host or gateway.

—— from 'manual of ping' in linux

选择数据库服务器的五个原则

  1)高性能原则

保证所选购的服务器,不仅能够满足运营系统的运行和业务处理的需要,而且能够满足一定时期业务量的增长。一般可以根据经验公式计算出所需的服务器TpmC值(Tpmc是衡量计算机系统的事务处理能力的程序),然后比较各服务器厂商和TPC组织公布的TpmC值,选择相应的机型。同时,用服务器的市场价/报价除去计算出来的TpmC值得出单位TpmC值的价格,进而选择高性能价格比的服务器。

结论:服务器处理器性能很关键,CPU的主频要高,要有较大的缓存

  2)可靠性原则

可靠性原则是所有选择设备和系统中首要考虑的,尤其是在大型的、有大量处理要求的、需要长期运行的系统上。考虑服务器系统的可靠性,不仅要考虑服务器单个节点的可靠性或稳定性,而且要考虑服务器与相关辅助系统之间连接的整体可靠性,如:网络系统、安全系统、远程打印系统等。在必要时,还应考虑对关键服务器采用集群技术,如:双机热备份或集群并行访问技术,甚至采用可能的完全容错机。

结论:服务器要具备冗余技术,同时像硬盘、网卡、内存、电源此类设备要以稳定耐用为主,性能其次。

  3)可扩展性原则

保证所选购的服务器具有优秀的可扩展性原则。因为服务器是所有系统处理的核心,要求具有大数据吞吐速率,包括:I/O速率和网络通讯速率,而且服务器需要能够处理一定时期的业务发展所带来的数据量,需要服务器能够在相应时间对其自身根据业务发展的需要进行相应的升级,如:CPU型号升级、内存扩大、硬盘扩大、更换网卡、增加终端数目、挂接磁盘阵列或与其他服务器组成对集中数据的并发访问的集群系统等。这都需要所选购的服务器在整体上具有一个良好的可扩充余地。一般数据库和计费应用服务器在大型计费系统的设计中就会采用集群方式来增加可靠性,其中挂接的磁盘存储系统,根据数据量和投资考虑,可以采用DAS、NAS或SAN等实现技术。

结论:服务器的IO要高,否则在CPU和内存都是高性能的情况下,会出现瓶颈。除此之外,服务器的扩展性要好,为的是满足企业在日后发展的需要。

  4)安全性原则

服务器处理的大都是相关系统的核心数据,其上存放和运行着关键的交易和重要的数据。这些交易和数据对于拥有者来说是一笔重要的资产,他们的安全性就非常敏感。服务器的安全性与系统的整体安全性密不可分,如:网络系统的安全、数据加密、密码体制等。服务器需要在其自身,包括软硬件,都应该从安全的角度上设计考虑,在借助于外界的安全设施保障下,更要保证本身的高安全性。

结论:首先从服务器的材料上来说要具备高硬度高防护性等条件,其次服务器的冷却系统和对环境的适应能力要强,这样才能够在硬件上满足服务器安全的要求。

  5)可管理性原则

服务器既是核心又是系统整体中的一个节点部分,就像网络系统需要进行管理维护一样,也需要对服务器进行有效的管理。这需要服务器的软硬件对标准的管理系统支持,尤其是其上的操作系统,也包括一些重要的系统部件。

结论:尽量选择支持系统多的服务器,因为服务器兼容的系统越多,你就可以拥有更大选择空间。

总结:首先数据库服务器的性能要求很高,所以在CPU,内存,以及硬盘等方面都有很高的要求,其次是存储,存储要具备良好的稳定性,来满足长期运作的服务器随时读取写入等操作不会出现错误。最后希望通过总结的以上五点,帮助你挑选你所需要的数据库服务器。

服务器产品结构

U是厚度要求,是一种表示服务器外部尺寸的单位,是unit的缩略语,详细的尺寸由作为业界团体的美国电子工业协会(EIA)所决定。 1U=4.445cm , 1U至7U的产品结构是指外形满足EIA规格、厚度为4.445cm-31.115cm的服务器。

多少U是指服务器的尺寸大小。在专业机房,托管的服务器一般是放在机柜里面的,机柜从上到下有很多单位格,我们叫一格为1U(U是unit的意思)。如果一个机柜是42U高,如果每2个服务器中间留1U空间,那么可以放21个1U的主机。同样情况放2U主机就只能放14台了。

很多机房托管费用会按所占U的多少来收费的。

NAT

NAT(Network Address Translation,网络地址转换)是1994年提出的。

当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。 这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上 安装NAT软件 。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。

这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在 NAT路由器 上将其本地地址转换成全球IP地址,才能和因特网连接。 另外,这种通过使用少量的全球IP地址(公网IP地址)代表较多的私有IP地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC 2663中有对NAT的说明。

举例

在内网下 192.168.0.100 这台电脑上开了一个http网站服务,那么端口默认是 80,在内网下你直接通过浏览器输入 http://192.168.0.100 直接打开网站,这个内网链接地址在外是打不开的。 通过内网穿透后平台 分配 一个公网地址(给内网的设备),比如 http://test123k.nat.nsloop.com 用户在外时就可以通过这个公网地址打开网站。

要使用内网穿透服务,需要先确定好 内网要映射的IP和端口 ,穿透成功后内网的IP+端口,映射成为公网的域名+端口(如需要IP,可以在CMD命令下PING 服务器的IP地址) 穿透前: 访问IP地址 192.168.0.100 端口 3389 穿透后:访问地址 s0.nsloop.com 端口 12843

内网穿透是通过服务器中继转发数据来实现的将内网端口映射到公网,速度上没有P2P直连的快。

异地组网

内网穿透

内网穿透(Intranet penetration),也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包 不被 NAT 设备屏蔽而正确路由到内网主机

UDP 内网穿透的实质是利用路由器上的NAT 系统。NAT 是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型 Internet 接入方式和各种类型的网络中。NAT可以完成重用地址,并且对于内部的网络结构可以实现对外隐蔽