1.http和https的区别
安全性:http是一个简单的请求-响应协议,无状态且明文传输,而https则是http加上SSL协议组合形成的一种加密传输协议,因为ssl协议的存在,会对网站与客户端之间传输的数据进行加密,不存在数据泄露的问题。
响应速度:理论上,http的响应速度更快,这是因为http只需三次握手,也就是3个包即可建立连接,而https除了三次握手外,还需进行ssl握手,一共需要12个包。
端口:http和https采用两种完全不同的连接方式,前者采用的是80端口,后者则是443端口。 消耗资源:https是构建在SSL之上的http协议,因此会消耗更多的服务器资源。 展示方式:由于http是一种没有加密的协议,各大浏览器厂商开始支持https站点。
总结来说,https比http更安全、但响应速度较慢且消耗更多资源。
2.http的请求过程
HTTP请求的过程通常包括以下步骤:
建立TCP连接:客户端通过DNS解析得到服务器的IP地址,然后通过TCP/IP协议建立与服务器的一个TCP连接。
发送请求命令:客户端向服务器发送请求命令,例如GET或POST。
发送请求头信息:客户端向服务器发送请求头信息,包括一些客户端环境信息、身份验证信息等。
服务器应答:服务器接收到请求后,进行相应的处理,然后生成响应报文。 发送应答头信息:服务器向客户端发送应答头信息。
发送数据:服务器向客户端发送数据,这可以是HTML、CSS、JavaScript等网页内容,也可以是图片、视频等二进制数据。
关闭TCP连接:当数据传输完成后,浏览器和服务器会关闭TCP连接。
3.https的请求过程
HTTPS是一种通过计算机网络进行安全通信的传输协议。它是在HTTP上建立的加密通信。下面是一个HTTPS请求的一般过程:
客户端发起请求:客户端(通常是Web浏览器)通过DNS解析得到服务器的IP地址,然后通过TCP/IP协议建立与服务器的一个TCP连接。
服务器返回证书:当连接建立后,服务器会返回一个证书给客户端。这个证书包含了服务器的公钥和一些其他信息,由一个权威的证书颁发机构(CA)签名。
客户端验证证书:客户端会使用本地存储的CA公钥来验证证书的签名。这确保了证书的来源是可靠的,并且没有被篡改。
客户端生成会话密钥:基于服务器返回的证书,客户端生成一个会话密钥(通常是AES对称加密算法的密钥),并使用服务器的公钥进行加密。
客户端发送加密的会话密钥:客户端将加密的会话密钥发送给服务器。
服务器解密会话密钥:服务器使用自己的私钥解密收到的加密会话密钥,得到原始的会话密钥。
服务器和客户端使用会话密钥进行通信:从这一步开始,服务器和客户端使用相同的会话密钥进行加密和解密通信。HTTPS协议确保了通信内容在传输过程中的安全性。
关闭连接:当通信结束后,客户端和服务器会关闭TCP连接。
(可能还会问,对称加密和非对称加密算法的区别)
对称加密算法:对称加密算法是一种加密算法,它使用相同的密钥进行加密和解密,因此也被称为密钥加密算法、单密钥算法、共享密钥算法。这种算法的原理是通过一种特殊的变换,将原始数据(明文)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,需要使用相同的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。对称加密算法的缺点是加解密双方密钥分发困难
非对称加密算法:非对称加密算法是一种密钥的保密方法,需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
区别
- 密钥生成和使用:对称加密算法使用相同的密钥进行加密和解密,因此密钥的生成、存储和分发都需要特别小心,以防止密钥泄露。非对称加密算法使用公钥和私钥对数据进行加密和解密,公钥可以公开共享,而私钥必须保持机密。
- 安全性:对称加密算法在传输的过程中容易被窃听,而非对称加密算法可以很好地避免这个问题。此外,非对称加密算法的数字签名功能也可以用于数字鉴别,而对称加密算法则不能。
- 速度:对称加密算法的加密速度较快,但需要安全的通道共享密钥。非对称加密算法的密钥成对生成,公钥对外发布,但对大数据的加解密速度比对称算法慢。
4. 说一说 HTTPS、UDP、Socket 之间的区别?
TCP(Transmission Control Protocol,传输控制协议)与UDP(User Data Protocol,用户数据协议)是互联网传输数据较为常用的协议,我们熟知的HTTP就是基于TCP的.
而HTTPS就是HTTP 加上SSL的加密方式:
UDP是非面向连接的协议,发送数据时不管对方状态直接发送,无需建立连接,如同微信发送一个消息或者语音信息,对面在不在线无所谓.
Socket不属于协议范畴,别名套接字通过调用Socket,才能使用TCP/IP协议,Socket连接是长连接,理论上客户端和服务器端一旦建立连接将不会主动断开此连接。Socket连接属于请求-响应形式,服务端可主动将消息推送给客户端。
5. 谈一谈 TCP/IP 三次握手、四次挥手过程?
三次握手
- 第一次握手:客户端向服务器发送一个带有SYN标志的数据包,表示请求建立连接。客户端将随机生成一个初始序列号(ISN)并将其放入SYN字段中。
- 第二次握手:服务器接收到客户端的请求后,会发送一个带有SYN和ACK标志的数据包作为响应。服务器将确认序列号(ACK)设置为客户端的ISN加一,并生成自己的初始序列号。
- 第三次握手:客户端收到服务器的响应后,会发送一个带有ACK标志的数据包作为确认。客户端将确认序列号设置为服务器的ISN加一。
思考:为什么是三次握手而不是两次或四次呢?
如果只有两次握手,那么在某些情况下可能会导致不可靠的连接建立。例如,客户端发送了一个建立连接的请求,但由于网络延迟或其他原因,该请求在传输过程中被延迟到达服务器。服务器此时会误认为客户端要建立连接,于是发送确认响应。然而,客户端并未发送过请求,因此不会回复确认。这样就会导致服务器一直等待客户端的回复,浪费资源。
通过引入第三次握手,可以解决上述问题。在第一次握手时,客户端发出建立连接的请求,服务器接收到后进行响应。但是如果响应丢失了,客户端会再次发送请求,即第二次握手。服务器接收到后再次响应,这样就确保了双方都能正确地建立连接。
至于为什么不是四次握手,主要是因为虽然四次握手也可以实现可靠地同步双方的初始序列号,但由于第二步和第三步可以合并为一步,所以最终演变成了三次握手。而两次握手只能保证一方的初始序列号被对方成功接收,无法保证双方的初始序列号都能被确认接收。因此,三次握手是为了确保TCP连接的稳定性和可靠性而采取的最佳选择。
四次挥手
-
第一次挥手:客户端发送一个带有FIN(结束)标志的数据包,表示自己已经没有数据要发送了,请求关闭连接。
-
第二次挥手:服务器接收到客户端的结束请求后,会发送一个带有ACK(确认)标志的数据包作为响应,表示已收到客户端的结束请求。
-
第三次挥手:服务器发送一个带有FIN标志的数据包,表示自己也没有数据要发送了,请求关闭连接。
-
第四次挥手:客户端接收到服务器的结束请求后,会发送一个带有ACK标志的数据包作为确认,表示已收到服务器的结束请求。
思考:为什么是四次挥手而不是三次?
在关闭连接时,需要确保双方都完成了数据的传输和接收,以防止数据丢失或错误。如果只有三次挥手,可能会导致一些问题。
假设只有三次挥手,当客户端发送结束请求后,服务器收到后会发送确认,表示已收到客户端的结束请求。但是在此过程中,服务器可能还有未发送完的数据,如果直接关闭连接,那么这些数据就会丢失。因此,引入第三次挥手,服务器在发送结束请求前,先发送所有未发送完的数据,并等待客户端的确认。客户端接收到服务器的结束请求后,会确认并处理完未接收的数据,然后发送确认,表示自己已准备好关闭连接。
通过四次挥手,可以确保双方都能正确地结束连接,并处理未发送和未接收的数据,保证数据的完整性和可靠性。因此,关闭连接需要四次挥手。
6. 网络分为哪几层?
-
物理层:电脑连接起来的物理方式,有光缆、电缆、双绞线、无线电波等方式,负责传输0,1信号。
-
链接层:确定0和1的分组方式。链接层的以太网协议规定每组电信号构成一个数据包,称为“帧”,每个帧由标头(18字节)和数据包(64~1518字节)组成。
-
网络层:负责将IP数据报封装成合适在物理网络上传输的帧格式并传输,或将从物理网络接收到的帧解封,取出IP数据报交给网络层。
-
传输层:负责提供通信服务,应用进程之间的通信,为应用进程提供端到端的逻辑通信。
-
应用层:负责处理特定的应用程序细节。