计算机网络面经
1、说下计算机网络体系结构
计算机网络体系结构通过将复杂的网络通信分解成不同的层次来标准化交互的过程。常见的模型包括 OSI 七层模型、TCP/IP 四层模型和五层体系结构。
OSI 是理论上的网络通信模型,TCP/IP 是实际应用层面上的网络通信模型,五层结构是为了方便理解和记忆。
1.1 说说 OSI 七层模型?
OSI(Open System Interconnection)七层参考模型是一个网络架构模型,由国际标准化组织(ISO)提出,用于描述和标准化各种计算机网络的功能和过程。这七层从高到低分别是:
- 应用层:负责处理特定的应用程序细节。提供网络服务与用户应用软件之间的接口。例如,Web 浏览器。
- 表示层:负责数据的转换、压缩和加密。确保从一个系统发送的信息可以被另一个系统的应用层读取。
- 会话层:负责建立、维护和终止会话。控制网络上两个节点间的对话和数据交换的管理。
- 传输层:负责保证数据的完整性和正确顺序,提供端到端的通信服务。这一层包括 TCP 和 UDP 等。
- 网络层:负责在多个网络之间进行数据传输,确保数据能够在复杂的网络结构中找到从源到目的地的最佳路径。这层使用的是 IP(Internet Protocol)协议。
- 数据链路层:在物理连接中提供可靠的传输,负责建立和维护两个相邻节点间的链路。
- 物理层:负责在物理媒介上实现原始的数据传输,比如电缆、光纤和无线信号传输。
1.2 说说 TCP/IP 四层模型?
TCP/IP 四层模型是互联网通信的核心,定义了一系列协议和标准,确保设备间可以可靠地进行数据传输。
- 应用层:负责提供直接面向用户和应用程序的各种网络服务。包含了用于特定应用的协议和服务,如 HTTP(HyperText Transfer Protocol)、FTP(File Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)等。
- 传输层:负责提供端到端的通信服务,确保数据可靠传输。包括分段数据、流量控制、错误检测和纠正。常见的传输层协议有 TCP 和 UDP。
- 网络层:负责在多个网络之间进行数据传输,提供逻辑地址(IP 地址)和网络寻址功能。用于处理数据包的分组、转发和路由选择,确保数据可以从源端传输到目标端。
- 网络接口层:或者叫链路层,负责将数字信号在物理通道中准确传输,定义了如何在单一网络链路上传输数据,如何处理数据帧的发送和接收,包括物理地址(MAC 地址)的解析。
1.3 说说五层体系结构?
是对 OSI 和 TCP/IP 的折衷,它保留了 TCP/IP 的实用性,同时提供了比四层模型更细致的分层,便于教学和理解网络的各个方面。
- 应用层:负责提供直接面向用户和应用程序的各种网络服务。
- 传输层:负责提供进程到进程的通信管理,这一层确保数据按顺序、无错误地传输。主要协议包括 TCP 和 UDP。
- 网络层:负责数据包从源到目的地的传输和路由选择,可能跨越多个网络。使用逻辑地址(如 IP 地址)来唯一标识设备。路由器是网络层设备。
- 数据链路层:负责确保从一个节点到另一个节点的可靠、有效的数据传输。交换机、网桥是数据链路层设备。
- 物理层:电缆、光纤、无线电频谱、网络适配器等。
1.4 TCP 三次握手四次挥手工作在哪一层?
三次握手和四次挥手都是工作在传输层。传输层是 OSI 模型的第四层,负责提供端到端的通信服务,包括数据传输的建立、维护和终止。TCP 作为一种面向连接的协议,通过三次握手建立连接,通过四次挥手终止连接,确保数据传输的可靠性和完整性。
1.5 讲一下计算机网络?
计算机网络是指将多台计算机通过通信设备互联起来,实现资源共享和信息传递的系统。
2、说一下每一层对应的网络协议有哪些?
3、那么数据在各层之间是怎么传输的呢?
对于发送方而言,从上层到下层层层包装,对于接收方而言,从下层到上层层层解开包装。
- 发送方的应用进程向接收方的应用进程传送数据。
- AP 先将数据交给本主机的应用层,应用层加上本层控制信息 H5 就变成了下一层的数据单元。
- 传输层收到这个数据单元后,再加上本层的控制信息 H4,再交给网络层,成为网络层的数据单元。
- 到了数据链路层,控制信息被分成两部分,分别加到本层数据单元的首部 H2 和尾部 T2。
- 最后的物理层,进行比特流的传输。
4、从浏览器地址栏输入 url 到显示网页的过程了解吗?
- DNS 解析:浏览器会发起一个 DNS 请求到 DNS 服务器,将域名解析为服务器的 IP 地址。
- TCP 连接:浏览器通过解析得到的 IP 地址与服务器建立 TCP 连接。涉及到 TCP 的三次握手,确保双方都已准备好进行数据传输。
- 发送 HTTP 请求:浏览器构建 HTTP 请求,包括请求行、请求头和请求体;然后将请求发送到服务器。
- 服务器处理请求:服务器接收到 HTTP 请求后,根据请求的资源路径,经过后端处理,生成 HTTP 响应消息,响应消息包括状态行、响应头和响应体。
- 浏览器接收 HTTP 响应:浏览器接收到服务器返回的 HTTP 响应数据后,开始解析响应体中的 HTML 内容,构建 DOM 树、解析 CSS 和 JavaScript 文件等,最终渲染页面。
- 断开连接:TCP 四次挥手,连接结束。
4.1 各个过程都使用了哪些协议?
5、说说 DNS 的解析过程?
DNS 的全称是 Domain Name System,也就是域名解析系统,可以将域名映射到对应的 IP 地址上。
- 浏览器首先检查自己的缓存中是否有这个域名对应的 IP 地址,如果有直接返回。
- 如果没有,检查本地 DNS 缓存是否有该域名的记录。如果没有,向根域名服务器发送请求。根域名服务器将请求指向更具体的服务。
- 最终,浏览器使用获得的 IP 地址发起一个 HTTP 请求到目标服务器,然后该服务器返回所请求的网页内容。
6、说说 WebSocket 与 Socket 的区别?
- Socket:等于 IP 地址 + 端口 + 协议。
- WebSocket:持久化的协议,伴随 H5 而出,用来解决 http 不支持持久化连接的问题。
Socket 是一个是网络编程的标准接口,而 WebSocket 则是应用层通信协议。
7、说一下你了解的端口及对应的服务?
8、平常有抓包吗?
我平常使用最多的就是 chrome 浏览器自带的 network 面板了,可以看到请求的时间、请求的信息,以及响应信息。
9、说说 HTTP 常用的状态码及其含义?
HTTP 状态码用于表示服务器对请求的处理结果,可以分为 5 种:
- 1xx:服务器收到请求,需要进一步操作,例如 100 Continue。
- 2xx:请求成功处理,例如 200 OK。
- 3xx:重定向:需要进一步操作以完成请求;例如 304 Not Modified 表示资源未修改,客户端可以使用缓存。
- 4xx:客户端错误:请求有问题,例如 404 Not Found 表示资源不存在。
- 5xx:服务器错误:例如 500 Internal Server Error 表示服务器内部错误。
9.1 301 和 302 的区别?
- 301:永久性移动,请求的资源已被永久移动到新位置。服务器返回此响应时,会返回新的资源地址。
- 302:临时性性移动,服务器从另外的地址响应资源,但是客户端还应该使用这个地址。
用一个比喻,301 就是嫁人的新垣结衣,302 就是有男朋友的长泽雅美。
10、HTTP 有哪些请求方式?
HTTP 协议定义了多种请求方式,用以指示请求的目的。常见的请求方式有 GET、POST、DELETE、PUT。
- GET:请求检索指定资源。用于获取数据,并且是幂等的。
- POST:向指定资源提交数据,请求服务器进行处理(如提交表单或上传文件)。数据被包含在请求体中,可能会创建新的资源或修改现有资源。
- DELETE:删除指定的资源。
- PUT:用于替换指定的资源。如果指定的资源不存在,创建一个新资源。
- HEAD:类似于 GET 请求,用于获取报头。可以用于检查资源是否存在,验证资源的更新时间等。
- OPTIONS:用于获取服务器支持的 HTTP 请求方法。
- TRACE:回显服务器收到的请求,主要用于测试或诊断。
- CONNECT:建立一个到指定资源的隧道,用于在客户端和服务器之间进行加密的隧道传输。
10.1 HTTP 的 GET 方法可以实现写操作吗?
可以是可以,但是不推荐。使用 GET 执行写操作可能导致严重的安全问题,如跨站请求伪造(CSRF)。实际开发中,也应该杜绝使用 GET 方法执行写操作。在我的项目中,我在接口上明确的规定了应该使用哪种请求方式。客户端一旦使用错误,将会收到一个 405 Method Not Allowed 的响应。
10.2 什么是幂等?幂等方法了解哪些?
幂等(Idempotence)是一个数学概念,用于描述某些操作的特性,即无论操作执行多少次,结果都是相同的。换句话说,幂等操作可以重复执行而不会改变系统状态。如果一个操作是幂等的,那么对同一资源执行该操作一次和执行该操作多次的效果相同。在正确实现下,GET、DELETE、PUT 和 HEAD 等方法都是幂等的,而 POST 方法不是。
11、说⼀下 GET 和 POST 的区别?
- GET 请求主要用于获取数据,参数附加在 URL 中,存在长度限制,且容易被浏览器缓存,有安全风险。
- POST 请求主要用于提交数据,参数放在请求体中,适合提交大量或敏感的数据。
另外,GET 请求是幂等的,多次请求不会改变服务器状态;而 POST 请求不是幂等的,可能对服务器数据有影响。
12、GET 的长度限制是多少?
HTTP 中的 GET 方法是通过 URL 传递数据的,但 URL 本身其实并没有对数据的长度进行限制,真正限制 GET 长度的是浏览器。例如 IE 浏览器对 URL 的最大限制是 2000 多个字符,大概 2kb 左右,Chrome、Firefox 等浏览器支持的 URL 字符数更多,其中 FireFox 中 URL 的最大长度限制是 65536 个字符,Chrome 则是 8182 个字符。这个长度限制也不是针对数据部分,而是针对整个 URL。
13、HTTP 请求的过程与原理?
HTTP 是基于 TCP/IP 协议的应用层协议,它使用 TCP 作为传输层协议,通过建立 TCP 连接来传输数据。HTTP 遵循标准的客户端-服务器模型,客户端打开连接发出请求,然后等待服务器返回的响应。
- 在浏览器输入 URL 后,浏览器首先会通过 DNS 解析获取到服务器的 IP 地址,然后与服务器建立 TCP 连接。
- TCP 连接建立后,浏览器会向服务器发送 HTTP 请求。
- 服务器收到 HTTP 请求后,会根据请求的信息处理请求。
- 处理完请求后,服务器会返回一个 HTTP 响应给浏览器。
- 浏览器收到响应后,会根据响应的信息渲染页面。然后,浏览器和服务器断开 TCP 连接。
客户端发送一个请求到服务器,服务器处理请求并返回一个响应。这个过程是同步的,也就是说,客户端在发送请求后必须等待服务器的响应。在等待响应的过程中,客户端不会发送其他请求。
13.1 怎么利用多线程来下载一个数据呢?
可以采取分块下载的策略。首先,通过 HEAD 请求获取文件的总大小。然后,根据文件的大小和线程数,将文件进行切割。每个线程负责下载一个特定范围的数据。
13.2 如果只要下载数据的前十个字节呢?
只需要设置 Range 字段为 Range: bytes=0-9 即可。
14、说一下 HTTP 的报文结构?
HTTP 的报文结构分为:请求报文和响应报文。两者在结构上很相似,都包含了起始行、头部和消息正文。
14.1 说下 HTTP 的请求报文结构?
请求报文由请求行、请求头、空行和请求体组成。如下所示:
GET /index.html HTTP/1.1
Host: www.javabetter.cn
Accept: text/html
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
- 请求行:包括请求方法、请求 URL 和 HTTP 协议的版本。
- 请求头:包含请求的附加信息,如:客户端想要接收的内容类型、浏览器类型等。
- Host: www.javabetter.cn,表示请求的主机名。
- Accept: text/html,表示客户端可以接收的媒体类型。
- User-Agent: Mozilla/5.0,表示客户端的浏览器类型。
- Range:用于指定请求内容的范围,如断点续传时表示请求的字节范围。
- 空行:表示请求头结束。
- 消息正文:可选的,如 POST 请求中的表单数据;GET 请求中没有消息正文。
14.2 说下 HTTP 的响应报文结构?
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
<html><body>沉默王二很天真</body>
</html>
- 响应行:包括 HTTP 协议的版本、状态码(如 200、404)和状态消息(如 OK、NotFound)。
- 响应头:包含响应的附加信息,如:服务器类型、内容类型、内容长度等。
- Content-Type: text/plain,表示响应的内容类型。
- Content-Length: 137582,表示响应的内容长度。
- Expires: Thu, 05 Dec 1997 16:00:00 GMT,表示资源的过期时间。
- Last-Modified: Wed, 5 August 1996 15:55:28 GMT,表示资源的最后修改时间。
- Server: Apache 0.84,表示服务器类型。
- 空行:表示响应头结束。
- 消息正文:可选的,响应的具体内容,如 HTML 页面。不是所有的响应都有消息正文,如 204 No Content 状态码的响应。
15、URI 和 URL 有什么区别?
- URI:统一资源标识符 (Uniform Resource Identifier, URI),标识的是 Web 上每一种可用的资源,如 HTML 文档、图像、视频片段、程序等都是由一个 URI 进行标识的。
- URL:统一资源定位符(Uniform Resource Location),它是 URI 的一种子集,主要作用是提供资源的路径。
主要区别在于,URL 除了提供了资源的标识,还提供了资源访问的方式。这么比喻,URI 像是身份证,可以唯一标识一个人,而 URL 更像一个住址,可以通过 URL 找到这个人——人类住址协议://地球/中国/北京市/海淀区/xx 职业技术学院/14 号宿舍楼/525 号寝/张三.男。
16、说下 HTTP1.0,1.1,2.0 的区别?
HTTP 1.0 默认是短连接,HTTP 1.1 默认是长连接,HTTP 2.0 采用的多路复用。
16.1 说下 HTTP 1.0?
- 无状态协议:HTTP 1.0 是无状态的,每个请求之间相互独立,服务器不保存任何请求的状态信息。
- 非持久连接:默认情况下,每个 HTTP 请求/响应对之后,连接会被关闭,属于短连接。这意味着对于同一个网站的每个资源请求,如 HTML 页面上的图片和脚本,都需要建立一个新的 TCP 连接。可设置 Connection: keep-alive 强制开启长连接。
16.2 说下 HTTP 1.1?
- 持久连接:HTTP 1.1 引入了持久连接(也称为 HTTP keep-alive),默认情况不会立即关闭连接,可以在一个连接上发送多个请求和响应。极大减轻了 TCP 连接的开销。
- 流水线处理:HTTP 1.1 支持客户端在前一个请求的响应到达之前发送下一个请求,以提高传输效率。
16.3 说下 HTTP 2.0?
- 二进制协议:HTTP 2.0 使用二进制而不是文本格式来传输数据,解析更加高效。
- 多路复用:一个 TCP 连接上可以同时进行多个 HTTP 请求/响应,解决了 HTTP 1.x 的队头阻塞问题。
- 头部压缩:HTTP 协议不带状态,所以每次请求都必须附上所有信息。HTTP 2.0 引入了头部压缩机制,减少了冗余头部信息的带宽消耗。
- 服务端推送:服务器可以主动向客户端推送资源,而不需要客户端明确请求。