每日一篇——23秋招计算机网络面经(1)
⭐说一下HTTP协议
HTTP(超文本传输协议)是一种用于在网络上发送和接收超文本的应用层协议。它使用请求-响应模型,客户端通过发送请求方法(如GET、POST)与服务器交互,获取或更改资源。HTTP请求由请求行、请求头部和请求体组成,而HTTP响应由状态行、响应头部和响应体组成。常见的请求方法有GET、POST、PUT和DELETE,每个方法用于指示对资源的不同操作。HTTP是一种无状态协议,服务器不保持与客户端的连接状态,每个请求都是相互独立的,为了实现用户会话管理,可以使用Cookie和Session等机制来跟踪用户状态。HTTP本身是明文传输的,为了保证通信的安全性,可以使用HTTPS(基于SSL/TLS的HTTP)。此外,HTTP支持缓存机制,通过设置合适的缓存策略和使用相关的头部字段,可以优化前端性能。
⭐什么是HTTPS?它与HTTP有什么区别?
HTTPS(Hypertext Transfer Protocol Secure)是在HTTP的基础上加入了SSL/TLS(Secure Sockets Layer/Transport Layer Security)协议,用于保护数据传输的安全性和完整性。
HTTPS与HTTP的主要区别包括:
- 数据传输方式:HTTP使用明文进行数据传输,而HTTPS使用SSL/TLS加密来保护数据传输的安全性,通过加密数据可以防止中间人攻击和窃听。
- 端口号:HTTP使用默认的端口号80进行通信,而HTTPS使用默认的端口号443。这一区别是为了区分HTTP和HTTPS的请求。
- 安全性:HTTPS提供了身份认证、数据加密和数据完整性校验等安全机制,能够有效防止数据被篡改和窃取;而HTTP不提供加密和身份验证功能,不适合传输敏感信息。
- 使用的协议:HTTP使用TCP作为传输协议,而HTTPS在HTTP的基础上加入了SSL/TLS协议,通过SSL/TLS建立安全的通信通道。
- SSL证书:HTTPS需要服务器上的SSL证书来验证服务器的身份,并启用SSL/TLS加密。SSL证书由受信任的第三方机构颁发,用于确认服务器的真实性和完整性。
通过使用HTTPS,可以保证数据在传输过程中的安全性和完整性,有效地防止了窃听、篡改和数据泄露等安全风险。因此,在需要保护用户隐私和敏感信息的场景下,推荐使用HTTPS协议进行数据传输。
⭐三次挥手过程
第一次握手(SYN): 客户端发送一个带有 SYN(同步序列编号)标志的连接请求报文段给服务器。客户端进入 SYN_SENT 状态,等待服务器的确认。
第二次握手(SYN + ACK): 服务器收到客户端的连接请求报文后,如果同意建立连接,则会发送一个带有 SYN/ACK(同步序列编号和确认)标志的报文段作为响应,确认客户端的请求。服务器进入 SYN_RCVD 状态。
第三次握手(ACK): 客户端收到服务器的确认后,会发送一个带有 ACK 标志的报文段给服务器,表示连接已建立。服务器收到此确认报文段后,也进入 ESTABLISHED 状态。从此,客户端与服务器之间可以开始传输数据。
⭐四次挥手过程
四次挥手是指在TCP连接断开时,客户端和服务器之间的通信关闭的过程。以下是四次挥手的过程:
- 第一次挥手(FIN):
- 客户端向服务端发送一个带有 FIN(Finish)标志的段,表示客户端不再发送数据。
- 客户端进入FIN_WAIT_1状态,等待服务端的确认。
- 第二次挥手(ACK):
- 服务端收到客户端发送的段后,向客户端发送一个确认序号(ACK)为客户端发送的序号加1的段,表示已经收到了客户端的关闭请求,TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
- 服务端进入CLOSE_WAIT状态,等待自己发送完所有的数据。
- 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文
- 第三次挥手(FIN+ACK):
- 服务端发送完数据后,向客户端发送一个带有 FIN 和确认序号的段,表示服务端也准备断开连接。
- 服务端进入LAST_ACK状态,等待客户端的确认。
- 第四次挥手(ACK):
- 客户端收到服务端的段后,向服务端发送一个确认序号的段,表示已经收到了服务端的关闭请求。
- 客户端进入TIME_WAIT状态,等待一段时间后关闭连接。
- 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
双方都需要经历四次挥手的过程来完成连接的关闭。在第四次挥手之后,等待一段时间后(通常是两倍的最大段生命周期,以确保所有可能出现的重复报文段都被丢弃),客户端和服务端会分别进入 CLOSED 状态,表示连接彻底关闭。
同样地,需要注意的是,四次挥手过程中可能会出现超时、重传等情况,以确保数据的可靠传输和连接的可靠关闭。此外,如果双方同时发送关闭请求,在某一方先接收到对方的关闭请求后,可以简化为三次挥手的过程。