背景知识

1. TCP/IP协议族

以后可能会写TCP/IP的笔记,大概…
通常使用的网络是在TCP/IP协议族的基础上运行的,HTTP属于其子集。

1.1 TCP/IP分层管理

分层的优势

各层次接口调整好后,每个层次内部可以自由改动。

分层

  1. 应用层
    应用层决定向用户提供应用服务时通信的活动。HTTP属于该层。
  2. 传输层
    传输层提供处于网络连接中的两台计算机的数据传输,有两个性质不同的协议:TCP(Transmission control protocol)与UDP(User data protocol)。
  3. 网络层
    网络层规定了到达用户计算机并传输数据的传输路线。
  4. 链路层
    即硬件部分。

1.2 TCP/IP数据传输流

客户端<->层<->服务器
发送端传输数据时,每经过一层必定被打上一个该层所属的首部信息,反之,接收端接收数据时,每经过一层必定会把对应的首部消去。这种方法称为封装

1.3 与HTTP关系密切的协议:IP, TCP与DNS

IP(Internet protoc)

IP协议的作用是传送数据包,确保传送两个最重要的条件是IP地址和MAC地址(Media access control address):

  • IP地址指明节点被分配的地址,可以变换。
  • MAC地址是网卡所属的固定地址,一般不会更改。

IP间通信时,利用下一站中转设备的MAC地址搜索下一个中转目标,通过ARP协议(Address resolution protocol),根据对方IP地址反查MAC地址。
网络设备在到达中转目标的过程中,只能很粗略地获悉传输路线。这种机制称为路由选择(Routing)。换言之,不可能掌握互联网中的细节。

TCP

TCP协议的作用是提供可靠的字节流服务。

字节流服务(Byte stream protocol):将大块数据分成以报文段(Segment)为单位的数据包进行管理,TCP协议可以确定数据是否到达。

三次握手(three-way handshaking)策略:使用带TCP的标志(flag)————SYN(synchronize)与ACK(acknowledgement)进行传输————发送端发送带SYN的数据包,接收端收到后回传带有SYN/ACK标志的数据包,最后发送端回传带ACK标志的数据包。

DNS

DNS服务提供从域名到IP的解析服务:通过域名查找IP地址,或从IP地址反查域名。

2. URI与URL

(属于TCP/IP族,但还是分开了…)

URI(Uniform resource identifier)

URI用字符串标识某一互联网资源。

URL

表示资源的地点,是URI的子集。

URI的格式

  • 绝对URI:涵盖全部必要信息
  • 绝对URL
  • 相对URL

HTTP基础

HTTP用于客户端和服务器之间的通信,HTTP协议能够明确区分客户端与服务器。

请求和响应

HTTP协议规定,请求从客户端发出,服务器响应请求————通信从客户端开始建立。

HTTP是一种无状态(stateless)协议,不对请求和响应之间的通信状态进行保存

如需保存状态,需要cookie技术。

Cookie状态管理

Cookie技术通过在请求/响应报文中写入Cookie信息控制客户端状态。
过程:Cookie根据服务器发送的响应报文内的Set-Cookie首部字段信息通知客户端保存Cookie,下次客户端再次发送请求时会自动加入Cookie信息。服务端收到客户端发来的Cookie后,会检查是哪个客户端的记录,接着对比服务器记录,得到之前的状态信息。

HTTP1.1新特性

恒久连接(Persistent connections)

HTTP1.1中所有连接默认为恒久连接,即任意一方未提出断开连接时保持TCP的连接状态。
这样做减少了服务器开销。

管线化(pipelining)

同时并行发送多个请求,不必等待响应。


HTTP报文内的信息

报文是HTTP通信基本单位,由8位组字节流组成。

HTTP报文的结构

  1. 报文首部(请求/状态行,请求/响应首部字段,通用首部字段,实体首部字段)
  2. 空行;
  3. 主体。

实体由实体首部和主体组成,作为请求和响应的补充项。

提升传输效率

  • 内容编码压缩传输;
  • 分块传输编码;
  • 范围请求。

HTTP的安全漏洞

  1. 窃听;
  2. 伪装;
  3. 篡改。
    (安全经典三漏洞…)

HTTP Secure

HTTPS就是被SSL(secure socket layer)/TLS协议代替通信接口部分的HTTP。
HTTPS=HTTP+加密+认证+完整性保护。

通信加密

  • SSL(secure socket layer)
    是独立的协议,其他运行在应用层的协议都可以配合SSL使用。

    公开密钥加密:在这种方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。
    共享密钥加密:共享密钥加密是加密和解密都是用相同密钥的一种加密方式,这种算法也被称为“对称加密”
    证书可以验证密钥正确性。

浏览器提示你证书不正确/已过期时发生了什么?

  • 浏览器提示证书不正确或已过期时,实际上发生了以下情况:

    1. 浏览器向服务器发起HTTPS请求,服务器会返回自己的SSL证书。

    2. 浏览器会对服务器返回的SSL证书进行验证,验证证书的颁发机构、证书的有效期、证书中的主题等等,以确保证书的真实性和有效性。

    3. 如果证书验证失败,浏览器会弹出提示框,告诉用户证书不正确或已过期,并提示用户是否继续访问该网站。如果用户选择继续访问,浏览器会继续建立HTTPS连接,但会在地址栏中显示警告信息,提醒用户存在风险。

SSL的速度问题:

没有根本的解决方案,只能使用SSL加速器(专用服务器)改善问题。

  • TLS(transport layer security)

验证身份

使用SSL可以验明通信方,使用一种叫证书的手段。
证书由第三方机构颁发。

验证完整性

遭到攻击者拦截并篡改内容的攻击:中间人攻击。

防止篡改

使用散列值校验方法:MD5,SHA-1。
提供下载服务的网站也会提供PGP(完美隐私)创建的数字签名。
都需要用户亲自验证,浏览器无法自动检查。

⬆︎TOP