目录
1. Scoket 链接和 HTTP 链接的区别
- HTTP 协议是基于 TCP 链接的,是应用层协议,主要解决如何包装数据。Socket 是对 TCP/IP 协议的封装,Socket 自己并非协议,而是一个调用接口(API),经过 Socket,咱们才能使用 TCP/IP 协议
- HTTP:短链接,客户端向服务器发送一次请求,服务器响应后链接断开,节省资源。服务器不能主动给客户端响应(除非采用 HTTP 长链接技术),iOS 目前主要使用类 NSURLSession
- Socket:长链接,客户端跟服务器端直接使用 Socket 进行链接,没有规定链接后断开,所以客户端和服务器段保持链接通道,双方能够主动发送数据,通常多用于游戏。Socket 默认链接超时时间是30秒,默认大小是8K(能够理解为一个数据包大小)
2. 关于 HTTP 的请求 GET 和 POST 的区别
传输数据的大小:浏览器
- GET 提交时,传输数据就会受到 URL 长度限制
- POST 因为不是经过 URL 传值,理论上不受限,但通常服务器对于请求数据量大小有限制
安全性:缓存
- POST 的安全性要比 GET 的安全性高
- 经过 GET 提交数据,用户名和密码将明文出如今 URL 上,好比登录界面有可能被浏览器缓存
- HTTPS:安全超文本传输协议(Secure Hypertext Transfer Protocol),它是一个安全通讯通道,基于 HTTP 开发,用于客户计算机和服务器之间交换信息,使用安全套结字层(SSI)进行信息交换,即 HTTP 的安全版
3. HTTPS 加密过程与原理
- 服务器端用非对称加密(RSA)生成公钥和私钥
- 而后把公钥发给客户端, 服务器则保存私钥
- 客户端拿到公钥后, 会生成一个密钥, 这个密钥就是未来客户端和服务器用来通讯的钥匙
- 而后客户端用公钥对密钥进行加密, 再发给服务器
- 服务器拿到客户端发来的加密后的密钥后, 再使用私钥解密密钥, 到此双方都得到通讯的钥匙
4. Socket 原理
-
Socket 概念: 套接字安全
-
套接字是通讯的基石,是支持 TCP/IP 协议的网络通讯的基本操做单元。它是网络通讯过程当中端点的抽象表示,包含进行网络通讯必须的五种信息:链接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口服务器
-
应用层经过传输层进行数据通讯时,TCP 会遇到同时为多个应用程序进程提供并发服务的问题。多个 TCP 链接或多个应用程序进程可能须要经过同一个 TCP 协议端口传输数据。为了区别不一样的应用程序进程和链接,许多计算机操做系统为应用程序与 TCP/IP 协议交互提供了套接字接口。应用层能够和传输层经过 Socket 接口,区分来自不一样应用程序进程或网络链接的通讯,实现数据传输的并发服务网络
-
Socket 创建链接:并发
- 创建 Socket 链接至少须要一对套接字,其中一个运行于客户端,称为 ClientSocket,另外一个运行于服务器端,称为 ServerSocket
- 套接字之间的链接过程分为三个步骤:服务器监听,客户端请求,链接确认
- 服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待链接的状态,实时监控网络状态,等待客户端的链接请求
- 客户端请求:指客户端的套接字提出链接请求,要链接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要链接的服务器的套接字,指出服务器端套接字的地址和端口号,而后就向服务器端套接字提出链接请求
- 链接确认:当服务器端套接字监听到或者说接收到客户端套接字的链接请求时,就响应客户端套接字的请求,创建一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式创建链接。而服务器端套接字继续处于监听状态,继续接收其余客户端套接字的链接请求
-
Socket 链接与 TCP 链接app
- 建立 Socket 链接时,能够指定使用的传输层协议,Socket 能够支持不一样的传输层协议(TCP或UDP),当使用 TCP 协议进行链接时,该 Socket 链接就是一个 TCP 链接
-
Socket 链接与 HTTP 链接加密
- 因为一般状况下 Socket 链接就是 TCP 链接,所以 Socket 链接一旦创建,通讯双方便可开始相互发送数据内容,直到双方链接断开。但在实际网络应用中,客户端到服务器之间的通讯每每须要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的链接而致使 Socket 链接断连,所以须要经过轮询告诉网络,该链接处于活跃状态
- 而 HTT P链接使用的是
“请求—响应”
的方式,不只在请求时须要先创建链接,并且须要客户端向服务器发出请求后,服务器端才能回复数据
- 不少状况下,须要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方创建的是 Socket 链接,服务器就能够直接将数据传送给 客户端;若双方创建的是 HTTP 链接,则服务器须要等到客户端发送一次请求后才能将数据传回给客户端,所以,客户端定时向服务器端发送链接请求,不只能够保持在线,同时也是在
“询问”
服务器是否有新的数据,若是有就将数据传给客户端
5. 关于 TCP 的慢启动特性
- TCP 在链接过程的三次握手完成后,开始传数据,并非一开始向网络通道中发送大量的数据包,这样很容易致使网络中路由器缓存空间耗尽,从而发生拥塞
- TCP 使用了一个叫慢启动阈值(
ssthresh
)的变量,一旦cwnd>=ssthresh
(大多数 TCP 的实现,一般大小都是65536)慢启动过程结束,拥塞避免阶段开始
- 拥塞避免:
cwnd
的值再也不指数级往上升,开始加法增长。此时当窗口中全部的报文段都被确认时,cwnd
的大小加1,cwnd
的值就随着 RTT 开始线性增长,这样就能够避免增加过快致使网络拥塞,慢慢的增长调整到网络的最佳值
联系方式
邮箱: adrenine@163.com
邮箱: holaux@gmail.com
邮箱: ledahapple@icloud.com