模型
OSI 七层模型
1、物理层: 比特,这一层定义物理设备标准。主要作用是传输比特,由01 转化为电流传输。
2、数据链路层: 帧,定义了如何让格式化数据进行传输,如何控制帧在物理信道上的传输,包括数据的错误检测。
3、网络层: 通过ip进行物理寻址。ip 协议进行传输,负责把数据从一台计算机传输到另外一台计算机上去。
4、传输层: 传输层单位为报文,分成几个组(段),为会话层提供可靠的端到端的传输。
5、会话层: 不参与传输,只进行控制。我们将进程间的数据通信称之为会话。
6、表示层: 为应用层提供数据的语法表示转换,不同编码的实现和数据的加解密。
7、应用层: 使得网络用户可以通过计算机访问网络资源,并在两个通信者之间进行网络匹配。
四层模型 (TCP/IP)体系结构
1、应用层(各种应用层协议如TELNET、FTP、SMTP)
2、传输层(TCP或UDP)
3、网际层IP
4、网络层接口
五层协议的体系结构
1、应用层
2、运输层
3、网络层
4、数据链路层
5、物理层
TCP 为什么需要三次握手四次挥手
很鸡肋的问题,用普通话讲,三次握手是为了在两边之间建立可靠的数据传输通道,四次挥手则是为了保证等数据被接收完再关闭连接。
三次握手
对于三次握手的具体步骤可以看图。(图是在网络上随便找的)
-
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态 ,等待服务器确认;SYN: 同步序列编号。
-
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
-
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
具体原因:
-
三次是确认对方主机状态及收发能力的最小次数.
-
降低被攻击的风险的最小次数。
一次握手的话,服务端可能会收到几万个主机的连接请求,每台主机通过for循环发送几十个连接请求,因为只握手一次,服务端全部接收,并且每次都创建一个新的文件结构体,这样的话,服务端的资源很快就会被耗尽。
两次握手也是一样,服务端收到一次连接,只要服务端发出一次ACK,就说明连接就建立起来了。如果服务端接收到一百万次连接,逐一发送ACK后,服务器依然要创建对应的结构体,此时依然要消耗服务器的资源。
三次握手的话,如果一个客户端一次发送大量的SYN,服务端当然会回复相应的ACK+SYN,但是此时服务端不会创建新的结构体,因为连接并没有建立成功。要想成功建立连接,客户端需要发送大量的ACK,一旦客户端发送一个ACK,客户端这边认为连接建立成功,就需要消耗大量资源来维护这个连接。服务器如果发现上百条连接都是来自同一个IP,那么也可以在应用层层面可以把这个IP地址加入黑名单,下次连接的时候,可以拒绝该主机的连接。这样的话,如果是想通过某种工具一次发大量SYN的话,第一次可能没问题,第二次就直接被拉黑了。
四次挥手
1.客户端发起fin位为1的FIN报文,此时客户端进入FIN_WAIT_1状态
2.服务端接收到FIN 报文后,发送ack应答报文,此时服务端进入close_wait状态
3.客户端接收到ack应答报文后,进入FIN_WAIT_2状态
4.服务端处理完数据后,向客户端发送FIN报文,此时服务端进入LAST_ACK状态
5.客户端接收到FIN报文后,客户端发送应答ack报文,进入TIME_WAIT阶段
6.服务端接收到ack报文后,断开连接,处于close状态
7.客户端过一段时间后,也就是2MSL后,进入close状态
1、防止客户端最后一次发给服务器的确认在网络中丢失以至于客户端关闭,而服务端并未关闭,导致资源的浪费。
2、等待最大的2msl可以让本次连接的所有的网络包在链路上消失,以防造成不必要的干扰:如果client直接closed,然后又向server发起了一个新连接,我们不能保证这个新连接和刚关闭的连接的端口号是不同的。假设新连接和已经关闭的老端口号是一样的,如果前一次滞留的某些数据仍然在网络中,这些延迟数据会在新连接建立后到达Server,所以socket就认为那个延迟的数据是属于新连接的,数据包就会发生混淆。所以client要在TIME_WAIT状态等待2倍的MSL,这样保证本次连接的所有数据都从网络中消失。
Http 缓存
Expires(缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点。)、Cache-Control(Cache-Control与Expires可以在服务端配置同时启用或者启用任意一个,同时启用的时候Cache-Control优先级高)、Last-Modifieds
HTTPS 采用的加密方式
- 使用非对称密钥加密方式,传输对称密钥加密方式所需要的 Secret Key,从而保证安全性;
- 获取到 Secret Key 后,再使用对称密钥加密方式进行通信,从而保证效率。(下图中的 Session Key 就是 Secret Key)
HTTPS 的报文摘要功能之所以安全,是因为它结合了加密和认证这两个操作。试想一下,加密之后的报文,遭到篡改之后,也很难重新计算报文摘要,因为无法轻易获取明文。