TCP / IP 协议族
概念
一系列协议所组成一个网络分层模型
为什么要分层?
因为网络的不稳定性
如果我们传一个50M的数据,如果失败,每次都将需要重新传50M,但我们把它分成多块,失败时候只需重新传输失败的那一块。
具体分层:
Application Layer 应⽤层:HTTP、FTP、DNS
Transport Layer 传输层:TCP、UDP
Internet Layer 网络层:IP
Link Layer 数据链路层:以太网、Wi-Fi
发送方应用程序的数据总是从最上层开始,层层向下,最终经由物理层发送出去;相应的,在接收方的物理层接收到数据后,层层向上,最终经由应用层分发到具体的应用程序进程中。
在数据层向下的过程中,每一层都会对数据进行一些封装处理(如打包或者编码);而在数据层向上的过程中,每一层都会对数据进行一些逆处理(如解包或者解码)。这些对数据的处理和逆处理的过程就是为了实现该层的服务。
TCP 连接
什么叫做连接
通信双方建立确认「可以通信」,不会将对方的消息丢弃,即为「建立连接」
TCP 连接的建立——三次握手
三步:
1. 客户端:「我要向你发送消息」
2. 服务器:「好的。我要向你发送消息」
3. 客户端:「好的。
TCP 连接的关闭——四次挥手
四步:
1. 客户端:「我不再给你发送消息」
2. 服务端:「好的」
3. 服务端:「我不再给你发送消息」
4. 客户端:「好的」
为什么 TCP 连接在断开时是四次挥手而不是三次?
因为在客户端停止向服务器发送消息时,也许服务器还有消息需要向客户端发送,因此在它对客户端的「我不再给你发送消息」消息进行回应时,不需要立即附加上「我也不再向你发送消息」。在稍后服务器的消息发送完毕之后,才需要向客户端发送通知。
长连接
为什么要长连接?
因为移动网络并不在 Internet 中,而是在运营商的内网,并不具有真正的公网 IP,因此当某个 TCP连接在一段时间不通信之后,网关会出于网络性能考虑而关闭这条 TCP 连接和公网的连接通道,导致这个 TCP 端口不再能收到外部通信消息,即 TCP 连接被动关闭。
长连接的实现方式
心跳。即在一定间隔时间内,使用 TCP 连接发送超短无意义消息来让网关不能将自己定义为「空闲连接」,从而防止网关将自己的连接关闭。
HTTPS
定义
HTTP over SSL 的简称,即工作在 SSL (或 TLS)上的 HTTP。说白了就是加密通信的 HTTP。
工作原理
在客户端和服务器之间通过非对称加密协商出一套对称密钥,以后每次发送信息之前将内容加密,收到之后解密,达到内容的加密传输
为什么不直接用非对称加密?
非对称加密由于使用了复杂了数学原理,因此计算相当复杂,如果完全使用非对称加密来加密通信内容,会严重影响网络通信的性能
HTTPS 连接建立的过程
1. Client Hello
客服端对服务端说要建立连接,并附加:支持的TLS版本、支持的对称加密算法、支持的非对称加密算法、支持的hash算法、一个随机数
2. Server Hello
服务端对客服端说好的,并对客服端发来的信息里选出一组TLS版本、对称加密算法、非对称加密算法、hash算法、以及一个随机数,发还客户端
3. 服务器证书 信任建立
服务端对客服端发证书,证书里包含公钥
4. Pre-master Secret
客户端利用持有的客户端随机数和服务端随机数,通过唯一一次的非对称加密,生产出一个叫做 Pre-master Secret的随机数传给服务器,双方用这三个随机数计算出Master Secret,利用Master Secret计算出客户端加密秘钥,服务端加密秘钥,客户端MAC Secret,服务端端MAC Secret(MAC Secret是用来做hash以验证身份的)
5. 客户端通知:将使用加密通信
6. 客户端发送:Finished
将前面的所有内容打包,加密发给对方
7. 服务器通知:将使用加密通信
8. 服务器发送:Finished
将前面的所有内容打包,加密发给对方