原文连接 blog
TCP / IP 基本概念
世界上几乎所有的 HTTP 协议都是由 TCP / IP 协议来承载的。它是互联网相关的各类协议族的总称(通常所说的规则,就是协议)。
从输入的 URL 里我们可以从中获取服务器端的 IP 地址与端口号,建立一条 TCP 连接。建立连接之后,在客户端和服务器端之间交换的报文,不会丢失,受损,或者失序。
分层
TCP / IP 协议族里最重要的特征就是分层,每一层都靠下一层的支持。TCP / IP 按层次分,分为四层:应用层、传输层、网络层、数据链路层。HTTPS 就是在应用层与传输层之间多了一层安全层。
分层之后,各层只需完成各自特定的问题,而不需要管其他,使得设计变的简单,同时,若某部分需要改变时,也只需改变对应的层,无需改变整体。
应用层
应用层决定了向用户提供应用服务时通信的活动(规定传输的数据格式)。
比如 FTP 文件传输协议,DNS 域名解析系统,HTTP 超文本传输协议也位于此层。
传输层
传输层提供处于网络连接中的两台计算机之间的数据传输,在传输层有两个不同的协议,TCP 和 UDP 协议。
网络层
网络层,用来处理网络上流动的数据包,数据包是网络传输的最小数据单位,该层规定了通过怎样的路径到达对方计算机,并把数据包传送给对方。
链路层
用来处理网络的硬件部分。如操作系统,设备驱动等。
TCP / IP 通讯传输
HTTP
以 HTTP 为例,在进行网络通信时,发送端会从应用层往下走,接收端则会往应用层往上走。
建立 TCP 连接之后,从客户端发送一条 HTTP 请求报文,会以流的形式,至传输层(TCP协议), 传输层会把从应用层出收到的请求报文进行分割,并在各个报文打上标记序号,及端口号转发给网络层。到达网络层(IP协议)后,增加作为通信目的地的 MAC 地址后转发给链路层。
作为接收端的服务器在链路层接收到数据之后,会一级一级往上传至应用层。
发送端在层与层之间传输数据时,每经过一层,会被打上属于该层的首部信息。
接收端在层与层之间传输数据时,会把每层对应的首部去掉。
HTTPS
HTTPS 方案的 URL 以 https:// 开头,而不是以 http:// 开头,使用 HTTPS时,所有的 HTTP 请求和响应数据在发送到网络之前,都要进行加密。
下图中,对比了 HTTP 与 HTTPS 的不同:
在发送已加密的 HTTP 报文之前,客户端和服务端会进行一次 SSL 握手,在这次握手过程中,他们主要完成以下工作:
- 交换协议版本号;
- 选择一个两端都了解的密码;
- 对两端身份验证;
- 生成临时的会话秘钥,以便加密通道。
实际过程可能更复杂。