计网相关面试题
1. 什么是 HTTP?
HTTP 全称超文本传输协议(HyperText Transfer Protocol),是一个用于传输超文本(例如 HTML)的应用层协议。基于 TCP 协议,默认端口号是 80。
HTTP 的工作原理是客户端向服务器发送请求,服务器接收到请求后,返回响应。
HTTP 请求报文内容包括:请求行、请求头、请求体。请求头和请求体之间用一个空行分隔。
- 请求行:包括请求方法、请求 URL、协议版本
- 请求头:键值对的形式,是一些附加的信息如
Cookie
、User-Agent
、Content-Type
等 - 请求体:请求的内容,如 POST 请求的参数
HTTP 响应报文内容包括:状态行、响应头、响应体。响应头和响应体之间用一个空行分隔。
- 状态行:包括协议版本、状态码、状态描述信息
- 响应头:键值对的形式,是一些附加的信息如
Set-Cookie
、Content-Type
等 - 响应体:响应的内容,如 HTML、JSON、图片视频二进制数据等
2. HTTP 和 HTTPS 有什么区别?如何实现 HTTPS?
- 安全性:HTTP 是超文本传输协议,是明文传输的,安全性较差。HTTPS 是在 HTTP 的基础上加入了 SSL/TLS 协议,是安全的 HTTP。
- 端口:HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
- 证书:HTTPS 需要向 CA 机构申请证书,而 HTTP 不需要。
实现 HTTPS 的步骤:
- 生成和获取证书
- 配置服务器
- 开启 HTTPS
- 重启服务器
3. TCP 为什么需要三次握手和四次挥手?少一次和多一次行吗?
首先 TCP 三次握手的过程为:
- 客户端发送 SYN 包(SYN=1, seq=x)给服务器,进入 SYN-SENT 状态
- 服务器接收到 SYN 包,回应一个 SYN/ACK 包(SYN=1, ACK=1, seq=y, ack=x+1),进入 SYN-RECEIVED 状态
- 客户端接收到 SYN/ACK 包,回应一个 ACK 包(ACK=1, seq=x+1, ack=y+1),进入 ESTABLISHED 状态
服务器在第二次握手的时候,会分配 TCP 缓冲区。而客户端在第三次握手的时候,才会分配 TCP 缓冲区。
三次握手的目的就是建立可靠的连接
如果只靠二次握手建立连接,假如发生了这样一种情况,客户端发送的 SYN 报文段由于超时而失效,服务器接收后,误以为客户端要建立连接,因此向客户端发送确认报文段,但由于客户端此时不想建立连接,故不理睬服务器的确认。如果只有两次握手,那么服务器就会认为连接已经建立,一直等待客户端的数据发送,从而浪费服务器的资源。采用三次握手可以防止这种情况。