某游戏大厂计算机网络面试问题深度解析(一)
计算机网络是每个技术岗位都不可避免的基础知识之一,尤其在一些大厂的技术面试中,网络相关的面试题经常出现在各种岗位的面试中,特别是对于涉及到系统架构、后端开发等岗位。本文将详细解析一些常见的计算机网络面试问题,帮助大家更好地准备面试。
---
## HTTP还是HTTPS请求?有什么区别?
**HTTP**(超文本传输协议)和**HTTPS**(安全超文本传输协议)都是用于在客户端和服务器之间传输超文本的协议。两者的主要区别如下:
1. **加密与安全**:
- **HTTP**是明文传输协议,不对传输的数据进行加密,因此数据在传输过程中可能被窃取或篡改。
- **HTTPS**是在HTTP的基础上加入了SSL/TLS加密协议,保证数据传输的机密性和完整性,防止中间人攻击和数据篡改。
2. **端口号**:
- **HTTP** 默认使用 **80端口**。
- **HTTPS** 默认使用 **443端口**。
3. **性能**:
- 因为HTTPS需要建立加密连接,存在一定的计算开销,相比HTTP略微慢一些。但随着硬件和算法的进步,这种差距越来越小。
4. **认证**:
- **HTTPS** 会进行服务器的身份认证,客户端可以验证服务器的合法性,避免连接到伪造的服务器上。
---
## HTTP过程的四次挥手?
**四次挥手**是TCP协议断开连接时的过程。四次挥手(四次握手)是为了保证数据的完整传输,确保双方都知道连接关闭。过程如下:
1. **第一次挥手**:客户端发送一个 `FIN`(finish)标志位的包,表示客户端没有数据发送给服务器了,请求断开连接。
2. **第二次挥手**:服务器收到 `FIN` 包后,向客户端发送一个确认包(`ACK`)。此时服务器进入**关闭等待**状态,等待将数据发送完毕。
3. **第三次挥手**:服务器发送完数据后,发送一个 `FIN` 包,表示它也没有数据要发送,准备关闭连接。
4. **第四次挥手**:客户端收到 `FIN` 包后,回复确认包 `ACK`,进入 **TIME_WAIT** 状态,等待确认。
在这个过程的最后,连接被完全关闭。
---
## TIME_WAIT的作用?
**TIME_WAIT** 是TCP连接断开时客户端进入的一种状态。它有两个主要作用:
1. **确保数据完全传输**:当客户端发送完关闭连接的请求后,处于 `TIME_WAIT` 状态的客户端会等待一定时间(通常是2倍的最大段生存时间,MSL)。这是为了确保服务器能够接收到客户端最后一个确认包,防止数据丢失。
2. **避免旧连接干扰新连接**:如果客户端直接关闭连接,新的连接请求可能会和旧连接的数据包冲突。通过在 `TIME_WAIT` 状态中等待,客户端确保旧的连接已完全消失,不会干扰新的连接。
---
## Cookie的作用?
**Cookie** 是在客户端存储的小块数据,主要作用有:
1. **会话管理**:Cookie 可用于存储用户登录状态,保持用户会话(如用户登录、购物车状态等)。
2. **个性化设置**:网站可以使用 Cookie 存储用户的偏好设置或语言选择,提供定制化的用户体验。
3. **跟踪和分析**:Cookie 可以用于跟踪用户的行为,进行用户行为分析、广告定向等。
---
## 腾讯和百度两个网页能获取对方的cookie吗?
不能。在现代浏览器中,**同源策略**(Same-Origin Policy)限制了不同源之间的交互。因此,**腾讯和百度**两个网页属于不同的域名,它们不能访问对方的 Cookie 数据。每个网页只能访问自己域下的 Cookie。
---
## 在百度里搜索abc的过程?
1. **DNS解析**:首先,浏览器会解析“www.baidu.com”域名,向DNS服务器发送请求,将域名解析为IP地址。
2. **建立TCP连接**:浏览器使用TCP协议建立与百度服务器的连接,通常通过三次握手完成。
3. **发送HTTP请求**:建立连接后,浏览器通过HTTP协议向百度服务器发送请求,带上搜索的关键词“abc”作为参数。
4. **服务器响应**:百度服务器接收到请求后,处理搜索请求,并返回相关的搜索结果页面(HTML数据)。
5. **渲染页面**:浏览器收到响应后,将HTML、CSS、JS等内容进行解析,渲染成页面显示给用户。
6. **关闭连接**:当数据传输完成,TCP连接关闭,完成数据交换。
---
## 搜索的时候,数据包是怎么交给网卡的?(7层 5层网络模型)层层封包都加的是什么内容?
在数据传输过程中,数据从应用层通过七层协议逐层封装,最终通过网卡发送出去。具体过程如下:
1. **应用层(第7层)**:HTTP协议生成请求,包含用户搜索关键词“abc”。
2. **传输层(第4层)**:TCP协议将HTTP请求封装在TCP段中,加入源端口、目标端口、序列号等信息。
3. **网络层(第3层)**:IP协议对TCP段进行封装,加入源IP地址、目标IP地址等路由信息。
4. **数据链路层(第2层)**:数据包被封装为帧,加入MAC地址等物理传输信息,准备通过网卡发送。
5. **物理层(第1层)**:数据转化为电信号或光信号,通过网络物理介质传输。
---
## 网卡怎么知道数据是发送给百度服务器的,怎么找到服务器的?
网卡根据数据包中的目标 **IP地址** 来确定数据的目的地。在发送数据包时,操作系统会选择合适的网络接口,并通过路由表找到到达目的地的最优路径。网卡根据路由表中的信息,判断目标地址并选择正确的路径,将数据包发送到正确的网络设备(例如交换机或路由器),最终到达百度服务器。
---
## 计算机网络分层,各层的协议
计算机网络分层通常采用OSI七层模型或TCP/IP四层模型。以下是TCP/IP模型的各层及常用协议:
1. **应用层**(HTTP, FTP, DNS, SMTP, POP3)
2. **传输层**(TCP, UDP)
3. **网络层**(IP, ICMP, ARP)
4. **数据链路层**(Ethernet, PPP, MAC)
5. **物理层**(光纤、铜缆、无线信号等)
---
## HTTP流量控制,拥塞避免如何实现?
1. **流量控制**:通过 **窗口机制**(Sliding Window)控制发送方的发送速率,避免接收方缓存溢出。TCP会根据接收方的接收能力动态调整发送窗口的大小。
2. **拥塞避免**:TCP使用**慢启动**、**拥塞避免**算法,如 **加法增大、乘法减小**(AIMD)来避免网络发生拥塞。它通过逐渐增加窗口大小来避免快速增加负载造成的拥塞。
---
## 多少种请求方式,GET和POST区别?
常见的HTTP请求方法有:
1. **GET**:用于请求资源,不会修改服务器上的资源,数据通过URL传递。
2. **POST**:用于提交数据,可能修改服务器上的资源,数据通过请求体传递。
3. **PUT**、**DELETE**、**PATCH**、**OPTIONS**等。
**GET与POST的区别**:
- **GET**用于获取资源,数据通过URL传递,长度有限;而 **POST** 用于提交数据,数据通过请求体传递,没有长度限制。
- **GET**是安全的(无副作用),而 **POST** 可能会改变服务器数据(如创建、更新)。
- **GET** 会将数据暴露在URL中,适用于传输不敏感的数据;而 **POST** 将数据放在请求体中,适用于传输较大的数据或敏感信息。
---
## HTTPS端口443以及实现流程
1. **端口**:HTTPS协议使用**443端口**,而HTTP使用的是80端口。
2. **实现流程**:
- 客户端发起HTTPS请求时,首先通过 **TCP三次握手** 建立连接。
- 然后,客户端与服务器进行 **SSL/TLS握手**,通过加密算法协商出会话密钥。
- 服务器发送其**数字证书**,客户端验证证书合法性。
- 完成握手后,客户端和服务器使用对称加密算法(会话密钥)加密数据,
