图解HTTP读书笔记

本文详细介绍了网络通信的基础知识,包括TCP/IP协议族的四层结构,HTTP协议的请求和响应报文,以及HTTP状态码的分类。此外,还讨论了HTTPS如何确保Web安全,涉及加密、认证和完整性保护。同时,提到了DNS解析过程、子网掩码和NAT协议的作用。文章还涵盖了网络的安全问题,如DoS攻击和认证机制,以及Web应用的安全威胁。

第一章 了解web及网络基础
TCP/IP 协议族按层次分别分 为以下 4 层:应用层、传输层、网络层和数据链路层

TCP/IP 协议族各层的作用如下。
应用层
TCP/IP 协议族内预存了各类通用的应用服务。比如,FTP和 DNS服务就是其中两类。
HTTP 协议也处于该层。

传输层
传输层对上层应用层,在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报 协议)。

网络层
网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数 据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。
与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所 起的作用就是在众多的选项内选择一条传输路线。

链路层(又名数据链路层,网络接口层)
用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱 动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等 物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。

HTTP 关系密切的协议 : IP、TCP 和 DNS
负责传输的 IP 协议
TCP/IP 协议族中的 IP 指的就 是网际协议,协议名称中占据了一半位置,其重要性可见一斑。可能 有人会把“IP”和“IP 地址”搞混,“IP”其实是一种协议的名称

IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方 那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC 地址(Media Access Control Address)。

IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定 地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC 地址基本上不会更改

为了准确无误地将数据送达目标处,TCP 协议采用了三次握手策略。

握手过程中使用TCP的标志(flag) —— SYN(synchronize) 和 ACK(acknowledgement)。 发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后, 回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发 送端再回传一个带 ACK 标志的数据包,代表“握手”结束。

若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包

负责域名解析的 DNS 服务

URI与URL
Uri为标识资源, 标识网络上的一个资源,比如xxx.html
url为定位符, 标识这资源在哪里

第二章 简单的HTTP协议
请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字段 和内容实体构成的。

响应报文基本上由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成

告知服务器意图的 HTTP 方法
GET :获取资源
POST:传输实体主体
PUT:传输文件
DELETE:删除文件
HEAD:获得报文首部 HEAD 方法和 GET 方法一样,只是不返回报文主体部分。用于确认 URI 的有效性及资源更新的日期时间等。
OPTIONS:询问支持的方法 OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。
在返回的allow中列出支持的方法, 如GET,POST
TRACE:追踪路径 TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方 法。Trace
CONNECT:要求用隧道协议连接代理 connect

持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或 HTTP connection reuse)的方法。持久连接的特点是,只要任意一端 没有明确提出断开连接,则保持 TCP 连接状态

管线化
持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术 出现后,不用等待响应亦可直接发送下一个请求。这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。

第三章 HTTP报文内的HTTP信息
HTTP 报文本身是由多行(用 CR+LF 作换行符)数据构成的字符串文本

HTTP 报文大致可分为报文首部和报文主体两块。两者由最初出现的 空行(CR+LF)来划分。

请求报文和响应报文的首部内容由以下数据组成。
请求行, 包含用于请求的方法,请求 URI 和 HTTP 版本。
状态行, 包含表明响应结果的状态码,原因短语和 HTTP 版本。
首部字段, 包含表示请求和响应的各种条件和属性的各类首部。一般有 4 种首部,分别是:通用首部、请求首部、响应首部和实体首部。
其他, 可能包含 HTTP 的 RFC 里未定义的首部(Cookie 等)。

压缩传输的内容编码 向待发送邮件内增加附件时,为了使邮件容量变小,我们会先用 ZIP 压缩文件之后再添加附件发送。HTTP 协议中有一种被称为内容编码 的功能也能进行类似的操作。内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。会消耗CPU
常用的内容编码有以下几种。
gzip(GNU zip) compress(UNIX 系统的标准压缩) deflate(zlib) identity(不进行编码)

分割发送的分块传输编码在 HTTP 通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面。在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主体分块的功能称为分块传输编码

获取部分内容的范围请求
指定范围发送的请 求叫做范围请求(Range Request)。 对一份 10000 字节大小的资源,如果使用范围请求,可以只请求 5001~10 000 字节内的资源。

第四章 返回结果的HTTP状态码
状态码的类别
类别 原因短语
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

HTTP 状态码 (RFC6585)等扩展,数量就达 60 余种。别看种类繁多,实际上经 常使用的大概只有 14 种。

2XX 成功

200 OK

204 No Content
该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中 不含实体的主体部分

206 Partial Content
该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。

3XX 重定向
3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请 求

301 Moved Permanently
永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后 应使用资源现在所指的 URI。也就是说,如果已经把资源对应的 URI 保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存

302 Found
临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望 用户(本次)能使用新的 URI 访问。

303 See Other
该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。303 状态码和 302 Found 状态码有着相同的功能,但 303 状态码明确 表示客户端应当采用 GET 方法获取资源,这点与 302 状态码有区 别。

307 Temporary Redirect 临时重定向。该状态码与 302 Found 有着相同的含义。尽管 302 标准禁止 POST 变换成 GET,但实际使用时大家并不遵守。 307 会遵照浏览器标准,不会从 POST 变成 GET。但是,对于处理响 应时的行为,每种浏览器有可能出现不同的情况

4XX 客户端错误
4XX 的响应结果表明客户端是发生错误的原因所在。

400 Bad Request
该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求 的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态 码。

401 Unauthorized
该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、 DIGEST 认证)的认证信息。另外若之前已进行过 1 次请求,则表示 用 户认证失败

403 Forbidden
该状态码表明对请求资源的访问被服务器拒绝了。权限问题

404 Not Found
该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服 务器端拒绝请求且不想说明理由时使用。

5XX 服务器错误
5XX 的响应结果表明服务器本身发生错误

500 Internal Server Error
该状态码表明服务器端在执行请求时发生了错误。也有可能是 Web 应用存在的 bug 或某些临时的故障

503 Service Unavailable
该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法 处理请求。

第五章 与HTTP协作的web服务器
一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路 径上的中转服务器提升传输效率。

用单台虚拟主机实现多个域名
HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点。这是因为利用了虚拟主机(Virtual Host,又称虚拟服务器)的功 能。
即使物理层面只有一台服务器,但只要使用虚拟主机的功能,则可以 假想已具有多台服务器。

代理
代理是一种有转发功能的应用程序,它扮演了位于服务器和客户 端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时 也接收服务器返回的响应并转发给客户端。

网关
网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请 求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客 户端可能都不会察觉,自己的通信目标是一个网关。

隧道
隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方 通信连接的应用程序。

第六章 HTTP首部
HTTP 请求报文 在请求中,HTTP 报文由方法、URI、HTTP 版本、HTTP 首部字段等 部分构成。

HTTP 响应报文 在响应中,HTTP 报文由 HTTP 版本、状态码(数字和原因短语)、 HTTP 首部字段 3 部分构成。

HTTP 首部字段是由首部字段名和字段值构成的,中间用冒号“:” 分 隔。

例如,在 HTTP 首部中以 Content-Type 这个字段来表示报文主体的 对 象类型。
Content-Type: text/html

另外,字段值对应单个 HTTP 首部字段可以有多个值,如下所示。
Keep-Alive: timeout=15, max=100

若 HTTP 首部字段重复了会如何 当 HTTP 报文首部中出现了两个或两个以上具有相同首部字段名时 会怎么样?这种情况在规范内尚未明确,根据浏览器内部处理逻辑 的不同,结果可能并不一致。有些浏览器会优先处理第一次出现的 首部字段,而有些则会优先处理最后出现的首部字段。

HTTP 首部字段根据实际用途被分为以下 4 种类型。
通用首部字段(General Header Fields)
请求报文和响应报文两方都会使用的首部。

请求首部字段(Request Header Fields)
从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加 内容、客户端信息、响应内容相关优先级等信息。

响应首部字段(Response Header Fields)
从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加 内容,也会要求客户端附加额外的内容信息。

实体首部字段(Entity Header Fields)
针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更 新时间等与实体有关的信息。

通用首部字段
Cache-Control, 通过指定首部字段 Cache-Control 的指令,就能操作缓存的工作机 制。
指令的参数是可选的,多个指令之间通过“,”分隔。首部字段 CacheControl 的指令可用于请求及响应时。Cache-Control: private, max-age=0, no-cache

Cache-Control: no-cache
使用 no-cache 指令的目的是为了防止从缓存中返回过期的资源。 客户端发送的请求中如果包含 no-cache 指令,则表示客户端将不会接 收缓存过的响应。于是,“中间”的缓存服务器必须把客户端请求转发 给源服务器。

其他Cache-Control指令参考原书

Connection
首部字段具备如下两个作用。
控制不再转发给代理的首部字段, Connection: 不再转发的首部字段名
管理持久连接, Connection: close

Date
首部字段 Date 表明创建 HTTP 报文的日期和时间。

Transfer-Encoding
首部字段 Transfer-Encoding 规定了传输报文主体时采用的编码方式。

Via
使用首部字段 Via 是为了追踪客户端与服务器之间的请求和响应报文 的传输路径。

请求首部字段

Accept
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.
Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体 类型的相对优先级。可使用 type/subtype 这种形式,一次指定多种媒 体类型。

Accept-Charset
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
Accept-Charset 首部字段可用来通知服务器用户代理支持的字符集及 字符集的相对优先顺序。另外,可一次性指定多种字符集。与首部字 段 Accept 相同的是可用权重 q 值来表示相对优先级

Accept-Encoding
Accept-Encoding: gzip, deflate
Accept-Encoding 首部字段用来告知服务器用户代理支持的内容编码及 内容编码的优先级顺序。可一次性指定多种内容编码。

Accept-Language
Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3
首部字段 Accept-Language 用来告知服务器用户代理能够处理的自然 语言集(指中文或英文等),以及自然语言集的相对优先级。可一次 指定多种自然语言集。

Authorization
Authorization: Basic dWVub3NlbjpwYXNzd29yZA==
首部字段 Authorization 是用来告知服务器,用户代理的认证信息(证 书值)。通常,想要通过服务器认证的用户代理会在接收到返回的 401 状态码响应后,把首部字段 Authorization 加入请求中。共用缓存 在接收到含有 Authorization 首部字段的请求时的操作处理会略有差 异。

Host
虚拟主机运行在同一个 IP 上,因此使用首部字段 Host 加以 区分
Host: www.hackr.jp
首部字段 Host 会告知服务器,请求的资源所处的互联网主机名和端 口号。Host 首部字段在 HTTP/1.1 规范内是唯一一个必须被包含在请 求内的首部字段。
首部字段 Host 和以单台服务器分配多个域名的虚拟主机的工作机制 有很密切的关联,这是首部字段 Host 必须存在的意义。

If-Match
形如 If-xxx 这种样式的请求首部字段,都可称为条件请求。服务器接 收到附带条件的请求后,只有判断指定条件为真时,才会执行请求

If-Range
首部字段 If-Range 属于附带条件之一。它告知服务器若指定的 IfRange 字段值(ETag 值或者时间)和请求资源的 ETag 值或时间相一 致时,则作为范围请求处理

Range
Range: bytes=5001-10000
对于只需获取部分资源的范围请求,包含首部字段 Range 即可告知服 务器资源的指定范围。上面的示例表示请求获取从第 5001 字节至第 10000 字节的资源。

User-Agent
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/2010010
首部字段 User-Agent 会将创建请求的浏览器和用户代理名称等信息传 达给服务器

响应首部字段
Accept-Ranges
Accept-Ranges: bytes
首部字段 Accept-Ranges 是用来告知客户端服务器是否能处理范围请 求,以指定获取服务器端某个部分的资源。

Location
使用首部字段 Location 可以将响应接收方引导至某个与请求 URI 位置 不同的资源。
基本上,该字段会配合 3xx :Redirection 的响应,提供重定向的 URI。

实体首部字段
Allow
Allow: GET, HEAD
首部字段 Allow 用于通知客户端能够支持 Request-URI 指定资源的所 有 HTTP 方法。当服务器接收到不支持的 HTTP 方法时,会以状态码 405 Method Not Allowed 作为响应返回。与此同时,还会把所有能支 持的 HTTP 方法写入首部字段 Allow 后返回

Content-Encoding
Content-Encoding: gzip
首部字段 Content-Encoding 会告知客户端服务器对实体的主体部分选 用的内容编码方式。内容编码是指在不丢失实体信息的前提下所进行 的压缩。

Content-Language
Content-Language: zh-CN
首部字段 Content-Language 会告知客户端,实体主体使用的自然语言 (指中文或英文等语言)。

Content-Length
Content-Length: 15000
首部字段 Content-Length 表明了实体主体部分的大小(单位是字 节)

Content-Type
Content-Type: text/html; charset=UTF-8
首部字段 Content-Type 说明了实体主体内对象的媒体类型。和首部字 段 Accept 一样,字段值用 type/subtype 形式赋值

为 Cookie 服务的首部字段
Set-Cookie
Set-Cookie: status=enable; expires=Tue, 05 Jul 2011 07:26:31 GMT; path
当服务器准备开始管理客户端的状态时,会事先告知各种信息。
下面的表格列举了 Set-Cookie 的字段值。

Cookie
Cookie: status=enable
首部字段 Cookie 会告知服务器,当客户端想获得 HTTP 状态管理支 持时,就会在请求中包含从服务器接收到的 Cookie。接收到多个 Cookie 时,同样可以以多个 Cookie 形式发送。

其他首部字段
X-Frame-Options
X-XSS-Protection
DNT
P3P

第七章 确保web安全的HTTPS
通信的加密
一种方式就是将通信加密。HTTP 协议中没有加密机制,但可以通过和 SSL(Secure Socket Layer,安全套接层)或 TLS(Transport Layer Security,安全层传输协议)的组合使用, 加密 HTTP 的通信内容。 用 SSL 建立安全通信线路之后,就可以在这条线路上进行 HTTP 通信了。与 SSL 组合使用的 HTTP 被称为 HTTPS(HTTP Secure,超文本传输安全协议)或 HTTP over SSL。

内容的加密
还有一种将参与通信的内容本身加密的方式。由于 HTTP 协议中 没有加密机制,那么就对 HTTP 协议传输的内容本身加密。即把 HTTP 报文里所含的内容进行加密处理。

虽然使用 HTTP 协议无法确定通信方,但如果使用 SSL 则可以。 SSL 不仅提供加密处理,而且还使用了一种被称为证书的手段, 可用于确定方。

HTTP+ 加密 + 认证 + 完整性保护 =HTTPS

我们把添加了加密及认证机制的 HTTP 称为 HTTPS(HTTP Secure)。

HTTPS 是身披 SSL 外壳的 HTTP

通常,HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通 信,再由 SSL 和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL 协议这层外壳的 HTTP。

在采用 SSL 后,HTTP 就拥有了 HTTPS 的加密、证书和完整性保护 这些功能。

公开密钥加密使用一对非对称的密钥。一把叫做私有密钥 (private key),另一把叫做公开密钥(public key)。

HTTPS 采用混合加密机制 HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密 机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开 密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处 理速度要慢。
所以应充分利用两者各自的优势,将多种方法组合起来用于通 信。在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。

遗憾的是,公开密钥加密方式还是存在一些问题的。那就是无法证明 公开密钥本身就是货真价实的公开密钥。比如,正准备和某台服务器 建立公开密钥加密方式下的通信时,如何证明收到的公开密钥就是原 本预想的那台服务器发行的公开密钥。或许在公开密钥传输途中,真 正的公开密钥已经被攻击者替换掉了。
为了解决上述问题,可以使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书。

此处认证机关的公开密钥必须安全地转交给客户端。使用通信方式 时,如何安全转交是一件很困难的事,因此,多数浏览器开发商发布 版本时,会事先在内部植入常用认证机关的公开密钥。

SSL 的慢分两种。一种是指通信慢。另一种是指由于大量消耗 CPU 及内存等资源。 和使用 HTTP 相比,网络负载可能会变慢 2 到 100 倍。除去和 TCP 连接、发送 HTTP 请求 • 响应以外,还必须进行 SSL 通信,

另一点是 SSL 必须进行加密处理。在服务器和客户端都需要进行 加密和解密的运算处理。
针对速度变慢这一问题,并没有根本性的解决方案,我们会使用 SSL 加速器这种(专用服务器)硬件来改善该问题。

为什么不一直使用 HTTPS 既然 HTTPS 那么安全可靠,那为何所有的 Web 网站不一直使用 HTTPS ?
其中一个原因是,因为与纯文本通信相比,加密通信会消耗更多的 CPU 及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。
因此,如果是非敏感信息则使用 HTTP 通信,只有在包含个人信息 等敏感数据时,才利用 HTTPS 加密通信。

第八章 确认访问用户身份的认证
HTTP 使用的认证方式 HTTP/1.1 使用的认证方式如下所示。
BASIC 认证(基本认证)
DIGEST 认证(摘要认证)
SSL 客户端认证
FormBase 认证(基于表单认证) 多基于此方式开发自定义认证

第九章 基于HTTP的功能追加协议

第十章 构建web内容的技术
Html,css,Java servlet等技术

第十一章 web的攻击技术
针对 Web 应用的攻击模式 对 Web 应用的攻击模式有以下两种。
主动攻击
被动攻击

以服务器为目标的主动攻击
主动攻击是指攻击者通过直接访问 Web 应用, 把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的 资源进行攻击,因此攻击者需要能够访问到那些资源。
主动攻击模式里具有代表性的攻击是 SQL 注入攻击和 OS 命令注 入攻击。

以服务器为目标的被动攻击
被动攻击是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标 Web 应用访 问发起攻击。
被动攻击通常的攻击模式如下所示。
步骤 1: 攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的 HTTP 请求。
步骤 2: 当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱。
步骤 3: 中招后的用户浏览器会把含有攻击代码的 HTTP 请求发 送给作为攻击目标的 Web 应用,运行攻击代码。
步骤 4: 执行完攻击代码,存在安全漏洞的 Web 应用会成为攻 击者的跳板,可能导致用户所持的 Cookie 等个人信息被窃取, 登录状态中的用户权限遭恶意滥用等后果。
被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求 伪造。

跨站脚本攻击
跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的 Web 网站注册用户的浏览器内运行非法的 HTML 标签或 JavaScript 进 行的一种攻击。动态创建的 HTML 部分有可能隐藏着安全漏洞。就 这样,攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一 不小心就会受到被动攻击。
比如输入用户名时输入 用户名这种, 通过嵌入的html改变用户的本意
XSS 是攻击者利用预先设置的陷阱触发的被动攻击
跨站脚本攻击属于被动攻击模式,因此攻击者会事先布置好用于 攻击的陷阱

SQL 注入攻击
通过sql漏洞, 拼接出违背原意的sql语句, 显示额外的信息

OS 命令注入攻击
可以从 Web 应用中通过 Shell 来调用操作系统命令。倘若调用 Shell 时存在疏漏,就可以执行插入的非法 OS 命令。

HTTP 首部注入攻击
认证cookie时, 改变攻击者的认证为通过

跨站点请求伪造
跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击 者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信 息或设定信息等某些状态更新,属于被动攻击。

跨站点请求伪造有可能会造成以下等影响。
利用已通过认证的用户权限更新设定信息等
利用已通过认证的用户权限购买商品
利用已通过认证的用户权限在留言板上发表言论

在页面上留下已经存在的html, 当用户访问时, 直接触发, 则形成了由已认证用户执行的html

密码破解
穷举法,
又称暴力破解法)是指对所有密钥 集合构成的密钥空间(Keyspace)进行穷举。

字典攻击
字典攻击是指利用事先收集好的候选密码(经过各种组合方式后 存入字典),枚举字典中的密码,尝试通过认证的一种攻击手 法。
还是举银行采用个人识别码是“4 位数字”的密码的例子,考虑到 用户使用自己的生日做密码的可能性较高,于是就可以把生日日 期数值化,如将 0101~1231 保存成字典,进行尝试。

DoS 攻击
DoS 攻击(Denial of Service attack)是一种让运行中的服务呈停止状 态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。DoS 攻击的对 象不仅限于 Web 网站,还包括网络设备及服务器等

主要有以下两种 DoS 攻击方式。
集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态。
通过攻击安全漏洞使服务停止。

多台计算机发起的 DoS 攻击称为 DDoS 攻击(Distributed Denial of Service attack)。DDoS 攻击通常利用那些感染病毒的计算机作为攻 击者的攻击跳板

扩展: 计算机网络
IP协议
IP地址的意义
IP地址是分配给每台主机或网络设备(路由器)的一个32位的二进制数字标识。

IP地址是由主机上的网卡(NIC)设置的,所以因为一个主机一般配置一个网卡,所以一般来说一个主机对应一个IP地址
因为一个路由器一般配置多个网卡,所以一般来说一个路由器对应多个IP地址

IP地址的结构
我们前面说过,IP地址是一个32位的二进制数字标识,但为了更好地为人们所接受,我们一般用点分十进制的转化方式去表示它。
点分十进制:将原来32位的IP地址每8位为1组,分成4组,中间用“.”隔开,然后将每组数转化为10进制数。
例子
10101100 00010100 00000001 00000001
加点分组得到:
10101100. 00010100. 00000001. 00000001
转化为10进制:
172.20.1.1

IP地址的总数量
因为IP地址有32位,由0或1的二进制数组成,所以一共有2^32 ≈ 43亿 个不同组成。也就是IP地址(IPv4)总量是43亿个左右。

IP地址的组成
IP地址由“网络地址”(网络标识)和“主机地址”(主机标识)两部分组成
网络地址和主机地址的划分,使我们能够清晰地区分 [不同的网段] 和 [同一网段内的不同主机]

不同的网段的网络地址不同
对同一网段的不同主机IP,网络地址相同,主机地址不同

IP地址的分类
IP地址的前5位用于标识地址的类型, 据此将IP地址划分为A类,B类,C类,D类和E类。如第一位为0代表A类地址,前两位为10代表B类地址,前三位为110代表C类地址

A/B/C类地址叫做主类地址,为用户使用的地址。D/E类地址叫做次类地址。

如下图所示,可以看到从A ->B -> C ,在IP地址中, 主机地址所占位数越来越少,而网络地址所占位数越来越多。因此,从A到C,IP地址所能允许的网络数量越来越多, 而每个网络里所能容纳的主机数则越来越少。

【注意】IP地址前几位用于是标识IP类型的数字,IP地址也可以看作由三部分组成:地址类型,网络地址和主机地址。

关于从A到C,IP地址所能允许的网络数量越来越多, 而每个网络里所能容纳的主机数则越来越少, 这一点做一个量化的描述:

使用A类地址的网络数上限126个(2^7 -2 = 126, 因为0和128两个地址有特殊作用), 每个网络能容纳主机数约为1700万个(2^24)。

使用B类地址的网络数上限1万6千个(2^14 = 16384), 每个网络能容纳主机数约为6万5千(2^16 = 65536)。

使用C类地址的网络数上限30万个(2^14 =297152), 每个网络能容纳主机数为256个(2^8)。

各类地址的特点
(1) A类 —— 主要用于拥有大量主机的网络,它的特点是网络数少而主机数多
(2) B类 —— 主要用于小型局域网络,它的特点是网络数和主机数大致相同(同一等级上)
(3) C类 —— 主要用于小型局域网络,它的特点是网络数多, 而主机数少
(4) D类 —— 主要用于已知的多点传送或组的寻址
(5) E类 —— 一个实验地址,保留给将来使用

子网和子网掩码
固定的IP分类的弊端
上面我们说到:主类IP地址可以分为A,B,C类。但这种固定的分类方式却导致了IP地址的浪费:例如一个需要1万个IP地址的机构,若使用C类地址显然不能满足需要(使用C类地址的网络最多容纳256个主机)但使用B类地址则又造成了5.5万个IP地址的浪费!(使用C类地址的网络最多容纳6万5千个主机) IP地址的利用率将低于20%。

这时候,我们意识到一个问题:我们需要细分出比A/B/C类更细粒度的网络, 而完成这项工作的,就是子网掩码。

子网掩码的作用
子网掩码的作用是屏蔽IP地址的一部分,从而更加灵活地指定网络地址的长度,实现网络地址和主机地址的进一步细分, 具体:

凡是IP地址的网络和子网地址部分, 用 1表示

凡是IP地址的主机地址部分, 用 0表示

可以看到, IP地址172.20.100.52 原是个B类的地址, 网络地址的长度为14位,但经过子网掩码的作用,扩展为24位。正因为子网掩码的作用,才能灵活地指定网络地址的长度,而不局限于A/B/C类的地址分类,从而提高IP地址的利用率

子网掩码的结构和表示方式
子网掩码是和IP地址结构相同的32位的二进制数字标识,也同样可以用点分十进制的方式表示

子网掩码有两种表示方式,例如以 172. 20. 100. 52为例

  1. 将IP地址和子网掩码的地址分别用两行来表示
  2. 在IP地址的后面追加网络地址的位数, 用 ”/“ 隔开

CIDR技术
CIDR是伴随着子网掩码出现的地址分配策略

放弃IP地址的分类, 而是采用任意长度分割IP地址的网络标识和主机标识。这种方式就是CIDR,即“无类型域间选路”

根据CIDR,连续多个C类地址就可以划分到一个较大的网络内
DHCP协议
DHCP是能够自动设置IP地址,并实行统一的管理。

我们有两种为主机设置IP地址的方式:
管理员手动设置主机的IP地址
通过DHCP自动设置IP地址

DHCP的作用
DHCP是一种即插即用的协议。实际上,我们在生活中经常享受着DHCP带来的便利:我们有时会携带笔记本电脑或手机到公共场所里例如图书馆,并且通过WiFi连上一个陌生的子网,但是我们并没有做重新为主机配置IP地址的工作!

DHCP服务器的工作流程
DHCP服务器管理着一个包含一系列IP地址的地址池
每当一台新的主机加入时,DHCP服务器就从其当前可用地址池中分配一个任意的地址给它
而每当一台主机离开的时候,其IP地址就被回收到地址池中
NAT协议
要描述NAT协议, 要先从私有地址和全局地址说起
私有地址和全局地址
先让我们思考一下:主机的IP地址是否必须是唯一的呢?

  1. 的确,在一开始的时候,任何一台主机或路由器都必须配有一个唯一的IP地址。
  2. 但随着IP地址不足的问题日益显著, 人们对IP地址做了新的处理方式:
    将IP地址分为私有IP地址和全局IP地址
    全局IP地址必须是唯一的

私有IP地址不需要是唯一的,只要在同一个域里保持唯一便可,在不同域里可以重复

下图所示的是私有IP地址的范围(A/B/C类各有一段,共三段)

NAT定义
NAT(Network Address Translator)也即网络地址转换,是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。

NAT工作流程
如下图所示, 以10.0.0.10的主机与163.221.120.9的主机的通信为例,利用NAT, 途中的NAT路由器将发送源地址从10.0.0.10转换为全局地IP地址(202.244.174.37)再发送数据。反之,当包从地址163.221.120.9发过来时,目标地址(202.244.174.37)先被转换成私有IP地址10.0.0.10以后再被转发。

NAT作用机理
在NAT路由器内部, 有一张自动生成的用于转换地址的表, 当1.0.0.10向163.221.120.9发送第一个包的时候生成这张表,并且按照表中的映射关系进行处理。

网站吞吐量
QPS、TPS、PV、UV、GMV、IP、RPS等各种名词,外行看起来很牛X,实际上对程序员来说都是必懂知识点。下面我来一一解释一下。

QPS
Queries Per Second,每秒查询数。每秒能够响应的查询次数。

TPS
Transactions Per Second 的缩写,每秒处理的事务数目。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。

PV(page view)即页面浏览量,通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。
PV 即 page view,页面浏览量。用户每一次对网站中的每个页面访问均被记录 1 次。用户对同一页面的多次刷新,访问量累计。

UV 访问数(Unique Visitor)指独立访客访问数,统计1天内访问某站点的用户数(以 cookie 为依据),一台电脑终端为一个访客。

IP(Internet Protocol)独立 IP 数,是指 1 天内多少个独立的 IP 浏览了页面,即统计不同的 IP 浏览用户数量。

GMV,是 Gross Merchandise Volume 的简称。只要是订单,不管消费者是否付款、卖家是否发货、是否退货,都可放进 GMV 。

RPS 代表吞吐率,即 Requests Per Second 的缩写。吞吐率是服务器并发处理能力的量化描述,单位是 reqs/s,指的是某个并发用户数下单位时间内处理的请求数。
DNS
解析
(1)我们在用chrome浏览器的时候,其实会先去浏览器的dns缓存里头查询,dns缓存中没有,再去调用gethostbyname函数
(2)gethostbyname函数在试图进行DNS解析之前首先检查域名是否在本地 Hosts 里,如果没找到再去DNS服务器上查

DNS中也有一个地方用到了TCP协议。那就是区域传送!
DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。主从同步时候就叫做区传送(zone transfer)

为什么域名解析用UDP协议?
因为UDP快啊!

针对第二问,为什么区域传送用TCP协议?
因为TCP协议可靠性好啊!你要从主DNS上复制内容
因为TCP协议传输的内容大啊,UDP最大只能传512字节的UDP协议

原理
先介绍linux下一个dig命令,以显示解析域名的过程。
为了便于说明,我们来dig一下天猫的过程
dig www.tmall.com

现在我们来读重点的两段。第一段代表请求参数如下图所示

这段为查询内容。
DNS的查询参数一般有三个
(1)域名:服务器、邮件服务器(邮件地址中 @ 后面的部分)的名称
(2)Class:在设置DNS方案时,互联网之外的网络也考虑到了,而Class就是用来识别网络的,不过现在只有互联网,所以它的值永远都是代表互联网的IN
(3)记录类型:标识域名对应何种类型的记录。类型为A,表示域名对应的IP地址。

dns怎么做域名解析的?
www.tmall.com对应的真正的域名为www.tmall.com.。末尾的.称为根域名,因为每个域名都有根域名,因此我们通常省略。
根域名的下一级,叫做"顶级域名"(top-level domain,缩写为TLD),比如.com、.net;
再下一级叫做"次级域名"(second-level domain,缩写为SLD),比如www.tmall.com里面的.tmall,这一级域名是用户可以注册的;
再下一级是主机名(host),比如www.tmall.com里面的www,又称为"三级域名",这是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的。

那么解析流程就是分级查询!
(1)先在本机的DNS里头查,如果存在就直接返回了。
(2)本机DNS里头发现没有,就去根服务器里查。根服务器发现这个域名是属于com域,因此根域DNS服务器会返回它所管理的com域中的DNS 服务器的IP地址
(3)本机的DNS接到又会向com域的DNS服务器发送查询消息。com 域中也没有www.tmall.com这个域名的信息,和刚才一样,com域服务器会返回它下面的tmall.com域的DNS服务器的IP地址。
以此类推,只要重复前面的步骤,就可以顺藤摸瓜找到目标DNS服务器
ps:温馨提醒,dig +trace www.tmall.com 可以看到解析过程。有兴趣的读者,自己实验一下。
扯了那么多东西,我们来看第二段内容,也就是响应体的部分!

很明显,第一行就是说www.tmall.com这个域名地址拥有一个别名是www.tmall.com.danuoyi.tbcache.com。那么,很显然,后面几行就是这个www.tmall.com.danuoyi.tbcache.com地址的真实IP。
为什么天猫要设一个别名到www.tmall.com.danuoyi.tbcache.com地址呢?
于是乎,又一道经典面试题出现

使用CNAME有什么好处?
说句实在话,我当初第一眼,见到这题的时候,我觉得应该是方便cdn配置。
回到我们的例子,如果烟哥的猜测正确,www.tmall.com.danuoyi.tbcache.com这个地址,应该是淘宝的一个cdn地址。
因此,我特意去查了域名备案记录。如下图所示
果然,就是一个淘宝的cdn环境。
那么这么配有什么好处呢?

cdn基本原理
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术GSLB将用户的访问指向距离最近的工作正常的缓存服务器上,
CDN的基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络

使用CNAME有什么好处?
使用别名记录,对于多网站、多域名的人来说,是一个非常方便的管理方法!特别是对租用虚拟主机的用户,更是简单。做一个别名记录后,就不用再去管服务器的IP怎么变了!
一.使用域名的别名记录(CNAME),让多域名管理轻松到极点!

别名记录(CNAME):也被称为规范名字。这种记录允许您将多个名字映射到同一台计算机。 通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为“host.mydomain.com”(A记录)。 它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL。 这两个别名的全称就是“www.mydomain.com”和“mail.mydomain.com”。实际上他们都指向“host.mydomain.com”。 同样的方法可以用于当您拥有多个域名需要指向同一服务器IP,此时您就可以将一个域名做A记录指向服务器IP然后将其他的域名做别名到之前做A记录的域名上,那么当您的服务器IP地址变更时您就可以不必麻烦的一个一个域名更改指向了 只需要更改做A记录的那个域名其他做别名的那些域名的指向也将自动更改到新的IP地址上了。如果你是租用虚拟主机的话,一般的服务商都会提供一个三级或者四级的域名给你,那个地址解析的IP永远是服务器的最新IP,所以,大家如果是租用虚拟主机的,就直接做别名记录指向到那个赠送的域名就可以了!

二.使用域名的别名记录(CNAME),让你的域名解析不再蜗牛。
  众所周知,国内很多域名注册机构的DNS服务器解析生效速度很慢,这便给很多人带来了麻烦,当网站需要更换IP或其他必须对域名重新解析的时候,如果存在大量网站,第一麻烦就是多域名的解析问题,我们可以通过第一条技巧轻松解决!但对于生效速度,通过普通的解析估计我们就无法解决了!
  其实,我们可以通过使用域名的别名(CNAME)另类使用达到加速解析的目的。首先我们最好选择一个主域名如:qqya.com,将该域名转移到国外(推荐:ENom)注册商平台下,解析速度与国内的注册商可不是一个两个等级的差别了,然后将其他的相关域名使用CNME记录:(www.abc.com.)切记最后有一英文状态下的“句号”!
  OK!以后当需要更换域名解析的时候,只需要变动abc.com,立即解决了所有问题,因为你其他的域名都已经跟随你的abc.com域名了,只要你解析了abc.com,其他也都相应变化,不再担心国内解析慢的问题了!

域名类型
A记录: 一个域名对应一个IP, 最基本的一种域名
NS记录: name server的简写, 主要用来指定其他域名服务器, 表示我这里没有你可以去这个ns指定的服务器去找找
MX: 邮件域名服务器
PTR,表示根据IP地址反查域名。
CNAME,表示查询域名相关别名。

相关技术
GSLB总结为:
高可用性
更快的响应时间
多版本分发

具体:
Disater recovery,发生故障时提供一个备用的位置来获取资源或者能提供可简易调整流量的装置,或两者都能提供。
Load sharing,基于多个地理位置的流量分发,可以做到:
a.尽量节省带宽
b.限制给定位置的能力
c.限制暴露断电,地理灾害等问题

Performance,将资源置于离用户更近的地方,增强用户体验。
多版本,根据本地政策提供不同版本的资源,或者根据自定义的规则提供为特殊用户提供特殊版本,如灰度交付等。

实现 GSLB
主流的技术实现
DNS
GSLB会替代最终的DNS的服务器从而实现自己的解析策略,返回给用户最合适的IP(列表)。

As-DNS-Server
一个普通的DNS请求:
① 用户提交域名
② 客户端解析域名
③ DNS服务器解析出IP
④ 客户端请求IP
⑤ 返回结束

加入了GSLB的请求:
① 提交域名
② 客户端解析域名
③ NS解析到GSLB-
④ GSLB解析并返回IP
⑤ 客户端请求IP
⑥ 返回结束

特点:
这个技术对原业务的侵入性最小,被商业ADC广泛实现,如A10,F5等。
但是可以得到的信息很有限,IP的定位只能靠Local DNS,因为得不到源IP.

其他实现参考https://www.jianshu.com/p/77064fde5787文章

FQDN:完全限定域名,即每个域在全球唯一,域不是域名,google.com 是域,www.google.com 是域名。
域可以分为根域(.)和顶级域(TLD)
顶级域又可以分为三类:

  1. 通用顶级域(.com 商业机构,.org 非营利性组织,.net 网络服务机构等)
  2. 国家顶级域(.cn 中国,.uk 英国,.us 美国,.jp 日本)
  3. 反向域(基础建设顶级域,.arpa)

DNS 监听 TCP 和 UDP 都是 53 端口。

搭建内网DNS
可以使用bind服务
参考文章https://www.cnblogs.com/Dy1an/p/11157152.html

搭建完成后可以使用dig命令本地测试
可以将windows机器的ipv4属性配置中输入首选的DNS服务器
或者如果大量的机器要修改上述操作,可以将路由器的DNS选择配上

企业实践
对域名的解析配置了GSLB全局负载, 通过地域亲和指向就近的F5上, 然后访问程序
往往还会在GSLB之后加入CDN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值