version:1.0
文章目录
- 计算机网络
- 网络分层模型
- 🙎♂️面试官:网络为什么要分层?
- 🙎♂️面试官:TCP/IP 各层的结构与功能?
- 🙎♂️面试官:OSI体系模型的结构和功能?
- 🙎♂️面试官:OSI 与 TCP/IP 各层都有哪些协议?
- HTTP
- 🙎♂️面试官: HTTP协议了解吗?
- 🙎♂️面试官: HTTP 状态码有哪些?
- 🙎♂️面试官: 一次完整的 HTTP 请求所经的步骤?
- 🙎♂️面试官: HTTP 是基于 TCP 还是 UDP 的?
- 🙎♂️面试官: HTTP 请求报文和响应报文中有哪些数据?
- 🙎♂️面试官:HTTP 和 HTTPS 的区别了解么?
- 🙎♂️面试官:HTTP/1.0 和 HTTP/1.1 有什么区别?
- 🙎♂️面试官: HTTP/1.1 和 HTTP/2.0 有什么区别?
- 🙎♂️面试官:HTTP/2.0 和 HTTP/3.0 有什么区别?
- 🙎♂️面试官:HTTP 长连接和短连接了解么?
- 🙎♂️面试官: Cookie 和 Session 的关系?
- 🙎♂️面试官: URI 和 URL 的区别是什么?
- TCP与UDP
- 🙎♂️面试官: TCP 的三次握手与四次挥手的内容?
- 🙎♂️面试官: TCP 为什么连接是三次握手而断开是四次挥手?
- 🙎♂️面试官: TCP 与 UDP 的区别及使用场景?
- 🙎♂️面试官: TCP 是如何保证传输的可靠性?
- IP
- 🙎♂️面试官: IP 协议的作用是什么?
- 🙎♂️面试官: 什么是 IP 地址?IP 寻址如何工作?
- 🙎♂️面试官: IPv4 和 IPv6 有什么区别?
- PING
- 🙎♂️面试官:PING 命令的工作原理是什么?
计算机网络
网络分层模型
🙎♂️面试官:网络为什么要分层?
🙋♂答:
TCP/IP网络模型采用分层的思想,
- 使网络更加模块化和可拓展:每个层级专注于本身特定的功能,使得网络设计和实现更加清晰、可管理和可扩展。
- 简化复杂性:使复杂的网络通信变得简单易于理解。
- 抽象化和隔离性:上层对下层的实现细节进行屏蔽。
- 促进标准化:使每一层都有自己的协议和规范。
🙎♂️面试官:TCP/IP 各层的结构与功能?
🙋♂答:
自顶向下:
- 应用层:直接为用户提供服务,比如提供应用协议(HTTP)、提供网络服务(DNS)、确保用户身份验证和安全性(HTTPS)、实现网络应用程序。
- 传输层:为应用层提供网络支持,主要使用TCP和UDP两个协议。比如TCP协议可以实现可靠传输,还可以进行超时重传、流量控制、拥塞控制。
- 网络层:使用IP协议,使数据包通过路由器找到目的主机。可以实现数据在网络中的路由和转发。
- 网络接口层:将数据包转换为比特流,使用MAC地址,负责在局域网这样的范围传输数据。
🙎♂️面试官:OSI体系模型的结构和功能?
🙋♂答:
TCP/IP体系是直接应用于互联网的,而OSI体系模型是一种理论层面的参考模型。
OSI七层网络体系中,将应用层继续划分:
- 应用层:提供HTTP等协议。
- 表示层:负责传输格式的转换。
- 会话层:对主机间会话进程的管理。
OSI七层网络体系中,将网络接口层划分为数据链路层和物理层:
-
数据链路层:使用MAC地址,在相邻节点的链路中传输数据。
-
物理层:将数据转换为比特流,为网络设备提供传输的数据链路。
🙎♂️面试官:OSI 与 TCP/IP 各层都有哪些协议?
🙋♂答:
TCP模型:
- 应用层:HTTP、FTP、DNS(域名解析系统)
- 传输层:TCP、UDP
- 网络层:IP、ARP(地址解析协议)
- 网络接口层:以太网、Wi-Fi。
OSI体系模型【不同点】:
- 应用层:HTTP、FTP、DNS(域名解析系统)
- 表示层:TLS(传输层安全协议)
- 会话层:RPC(远程过程调用)
- 传输层:TCP、UDP
- 网络层:IP、ARP(地址解析协议)
- 数据链路层:MAC(介质访问控制)、PPP(点对点协议)、Wi-Fi(无线局域网)、以太网。
- 物理层:IEEE 规范,比如 IEEE 802.3(以太网)
HTTP
🙎♂️面试官: HTTP协议了解吗?
🙋♂答:
HTTP是超文本传输协议,也就是HyperText Transfer Protocol。
具体来说,HTTP协议是在计算机网络中的两点之间传输超文本的一种约定和规范。
🙎♂️面试官: HTTP 状态码有哪些?
🙋♂答:
2xx
类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。
-
「 200 OK」是最常见的成功状态码,表示一切正常。
-
「204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但没有返回实体内容。
-
「206 Partial Content」该状态码表示客户端进行了范围请求,而服务器成功执行了部分的GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。
3xx
类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。
-
「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。
-
「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。
301 和 302 都会在响应头里使用字段
Location
,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。 -
「304 Not Modified」该状态码表示资源未被修改,客户端可以继续使用缓存资源,用于缓存控制。
4xx
类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。
-
「400 Bad Request」表示客户端请求报文中有语法错误。
-
「**401 ** Unauthorized」该状态码表示客户端发送的 请求需要有通过 HTTP 认证的认证信息(可能服务器会发送一个基于表单的认证信息,来确认用户身份)。另外若之前已进行过 1 次请求,则表示用户认证失败。
-
「403 Forbidden」表示服务器禁止访问资源,比如未获得文件系统的访问授权,访问权限出了问题。
-
「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
5xx
类状态码表示服务器处理时内部发生了错误,属于服务器端的错误码。
-
「500 Internal Server Error」该状态码表明服务器端在执行请求时发生了错误。也有可能是 Web应用存在的 bug 或某些临时的故障。
-
「501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。
-
「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
-
「503 Service Unavailable」表示服务器当前很忙,暂时无法响应客户端,类似“网络服务正忙,请稍后重试”的意思。
🙎♂️面试官: 一次完整的 HTTP 请求所经的步骤?
🙋♂答:
- 解析URL:提取出主机名和路径。
- DNS解析:将主机名解析为对应的IP地址,为了后续建立TCP连接。
- TCP连接建立:客户端通过使用目标服务器的IP地址和默认的HTTP端口(通常是80)建立与目标服务器的TCP连接。
- 客户端发起HTTP请求、服务器处理请求并返回响应。
- 客户端处理HTTP响应、进行页面的渲染和数据的处理。
- 关闭TCP连接,释放资源。
🙎♂️面试官: HTTP 是基于 TCP 还是 UDP 的?
🙋♂答:
是基于TCP的,因为UDP是提供一种无连接的不可靠传输协议,适合对于实时性要求较高,但是对于可靠性要求较低的应用。但是HTTP需要可靠的数据和连接进行传输,因此TCP的传输更适合HTTP的需求。
🙎♂️面试官: HTTP 请求报文和响应报文中有哪些数据?
🙋♂答:
HTTP请求报文
- 请求行:请求方法(GET、POST)、URI、HTTP协议版本。
- 请求头:Host字段【标识服务器域名】、Accept字段【标识处理的媒体类型】等。
- 请求体:对于POST请求,可能包含表单提交的数据,JSON数据等。
HTTP响应报文
- 状态行:HTTP协议版本、状态码。
- 响应头:Content-Type【响应类型】、Content-Length【响应长度】。
- 响应体:HTML页面、JSON数据。
🙎♂️面试官:HTTP 和 HTTPS 的区别了解么?
🙋♂答:
-
建立连接方面:HTTP建立连接比较简单,只需要TCP三次握手后便可以进行进行HTTP报文传输;但是HTTPS在经过TCP三次握手后,还需要进行SSL握手过程,才可以进行报文加密传输。
-
传输数据方面:HTTP的传输是明文传输,存在安全问题。而HTTPS在TCP层和HTTP层之间加入了SSL安全协议,可以使报文加密传输。
-
HTTPS协议需要申请CA证书,确保服务器的身份。
-
两者端口号也不同,前者是80,后者是443。
🙎♂️面试官:HTTP/1.0 和 HTTP/1.1 有什么区别?
🙋♂答:
- 性能开销。HTTP/1.1使用长连接的方式改善了HTTP/1.0短连接造成的性能开销。
- 请求的流水线机制。支持管线化网络传输,第一个请求发送,不必等待响应,就可以发第二个请求。
HTTP/1.1的性能瓶颈:
请求/响应头部未经压缩就发送,首部信息越多延迟就越大,只能压缩主体部分。【HTTP/2解决】
请求只能从客户端开始,服务器端接收。【HTTP/2解决】
会造成队头阻塞【HTTP/3彻底解决了队头阻塞问题】
🙎♂️面试官: HTTP/1.1 和 HTTP/2.0 有什么区别?
🙋♂答:
-
头部压缩
HTTP/2会压缩请求头,如果多个请求头是一样的或者相似的,会消除重复的部分。
使用了HPACK算法,在客户端和服务器同时维护头信息表,将字段存入信息表中,生成索引号,以后只发送索引号即可。
-
二进制格式
HTTP/2全面采用二进制格式,头部信息和数据体都是二进制,并且统称为帧:头部帧和数据帧。
收到报文后,无需将明文转为二进制,而是直接解析二进制报文即可。增加了数据传输的效率。
-
并发传输
HTTP/2引入了Stream的概念,多个Stream复用在同一条TCP的连接上。
不同的HTTP请求,都有独一无二的StreamID,接收端可以通过StreamID来组装HTTP消息。
不同的Stream的帧可以乱序发送,所以HTTP/2可以并行交错的发送请求和响应。
一个TCP连接中包含多个Stream,Stream里可以包含多个Message,Message就对应HTTP/1中的请求和响应。Message里可以包含一条或多个Frame(帧)。
-
服务器推送
服务器不再被动的响应,而是可以主动地向客户端发送消息。
主要是因为客户端和服务端都可以建立Stream,StreamID也做了区分,客户端的StreamID必须是奇数,而服务器建立的StreamID必须是偶数号。
🙎♂️面试官:HTTP/2.0 和 HTTP/3.0 有什么区别?
🙋♂答:
HTTP/3将TCP协议改为了UDP协议。UDP协议不管顺序,也不管丢包。
-
无队头阻塞
基于UDP的QUIC协议实现了类似TCP的可靠传输。当某个流发生丢包时,只会阻塞这个流,其他流不会收到影响,因此不存在队头阻塞的问题。
-
更快建立连接
HTTP/1和HTTP/2协议,TCP和TLS是分层的,难以合并在一起,需要分批次来握手。
但是HTTP/3的QUIC协议内部包含了TLS。会在发送帧的同时携带TLS的记录,再加上QUIC使用的是TLS/1.3,仅需一个RTT就可以同时完成建立连接与密钥协商。
-
连接迁移
QUIC 协议没有用TCP四元组的方式来“绑定”连接,而是通过连接 ID来标记通信的两个端点,客户端和服务器可以各自选择一组 ID 来标记自己,因此即使移动设备的网络变化后,导致 IP 地址变化了,只要仍保有上下文信息(比如连接 ID、TLS 密钥等),就可以“无缝”地复用原连接,消除重连的成本,没有丝毫卡顿感,达到了连接迁移的功能。
🙎♂️面试官:HTTP 长连接和短连接了解么?
🙋♂答:
HTTP/1.1实现了长链接(KeepAlive),不需要每次请求都重新建立和断开TCP连接。减轻了服务器端的压力。性能得到提升。
🙎♂️面试官: Cookie 和 Session 的关系?
🙋♂答:
cookie是客户端存储数据的一种方式。当服务器要向客户端保存一些数据时,可以在HTTP响应中设置Cookie来将数据发送给客户端。客户端收到cookie后会保存到本地。并且在后续的请求中,会在HTTP请求头中携带Cookie发送给服务器。
session是服务端存储用户数据的一种方式。当客户端向服务器发送请求时,服务器生成一个唯一的session标识,并将该标识发送到客户端,通常以cookie的形式保存到客户端。当客户端再次发送请求,服务器会用session标识来查找存储在服务器中的用户数据,从而实现用户身份的跟踪。
但是session无法解决分布式部署中的问题,因为分布式部署中存多台服务器,用户登录后,session只保存在了某一台服务器上,当请求分发到另外的服务器时,服务器中没有session数据,就会产生重新登录的问题。
🙎♂️面试官: URI 和 URL 的区别是什么?
🙋♂答:
URI是一个广泛的概念,用于唯一标识和命名资源,URL是URI的子集,也可以说URL是URI的一种具体实现,它提供了资源的位置信息,使得客户端可以通过URL来定位和访问资源。
TCP与UDP
🙎♂️面试官: TCP 的三次握手与四次挥手的内容?
🙋♂答:
TCP三次握手:
第一次握手(SYN):客户端向服务端发送SYN(同步)标志的TCP数据包,并指定客户端的初始化序列号(ISN)。
第二次握手(SYN + ACK):服务端收到客户端发送的包后,会向客户端发送一个带有SYN + ACK(确认)标志的数据包,同时指定服务器的初始化序列号(ISN)。
第三次握手(ACK):客户端收到服务器发送的包后,向服务器发送带有ACK标志的包作为响应,表示客户端已经收到了服务器的响应,建立连接成功。
TCP四次挥手:
第一次挥手(FIN):客户端向服务端发送FIN(关闭连接)标志的TCP数据包,客户端进入FIN_WAIT_1状态。
第二次挥手(ACK):服务端收到客户端发送的包后,会向客户端发送一个带有ACK(确认)标志的数据包,同时服务端进入CLOSE_WAIT状态。客户端收到后进入FIN_WAIT_2状态。
第三次挥手(FIN):服务端处理完数据,发送带有FIN(关闭连接)标志的数据包,服务端进入LAST_ACK状态。
第四次挥手(ACK):客户端收到服务端发送的包后,向服务端发送ACK(确认)标志的数据包,同时客户端进入TIME_WAIT状态。服务端收到后进入CLOSE状态,服务器关闭连接。
最后,客户端在经过2MSL时间后,自动进入CLOSE状态,客户端关闭连接。
🙎♂️面试官: TCP 为什么连接是三次握手而断开是四次挥手?
🙋♂答:
三次握手是为了保证连接的可靠性,可以防止旧的重复连接初始化造成混乱。并且可以同步双方的初始化序列号。
四次挥手是因为在服务端收到FIN报文后,可能还有一些数据要进行处理,所以先回复ACK报文。等待服务端把数据处理完毕后,返回FIN报文。
所以ACK和FIN报文是分为两次发送的,就需要四次挥手。
🙎♂️面试官: TCP 与 UDP 的区别及使用场景?
🙋♂答:
区别:
- 可靠性方面:TCP提供可靠传输,通过序列号、确认和重传机制来确保连接的可靠性;UDP是无连接的传输,没有确认和重传机制,所以也就不保证可靠性。
- 适用性方面:TCP适合大数据量的传输,可以将数据分段进行传输,同时提供拥塞控制机制,可以避免网络拥堵而造成的性能下降;UDP没有TCP的连接建立和断开的开销,以及拥塞控制等机制,因此具有较低的延迟和较高的效率。
应用场景:
- UDP适用于对实时性要求比较高、可以容忍数据丢失的应用:游戏、音视频通话等媒体;
- TCP适用于需要可靠性,顺序性的应用:比如网页连接、文件传输等。
🙎♂️面试官: TCP 是如何保证传输的可靠性?
🙋♂答:
- 序列号与确认应答。 TCP将要发送的数据进行分段,并为每个分段分配一个序号。接收方收到数据后会发送确认(ACK)给发送方,确认已经成功接收到的数据。
- 超时重传。如果发送方经过一段时间没有收到确认应答,就会认为数据丢失,触发超时重传机制。
- 滑动窗口。TCP引入了滑动窗口机制,用于流量控制和拥塞控制。滑动窗口确定了发送方可以连续发送的数据量,接收方根据自身的接收能力来控制窗口的大小。滑动窗口机制可以防止发送方发送过多的数据,导致接收方无法及时处理。
- 确认机制。TCP使用累计确认机制,接收方只需要发送收到报文中的最大序列号,发送方收到后,表示该序列号之前的报文都被正确接收。
- 拥塞控制:TCP具有拥塞控制机制,通过动态调整发送方的发送速率来避免网络拥塞。当网络拥塞时,TCP会降低发送速率,以避免造成更严重的拥塞和数据丢失。
IP
🙎♂️面试官: IP 协议的作用是什么?
🙋♂答:
每个设备都被分配了一个唯一的IP地址。IP协议负责网络中数据包的传输,将数据包发送给最终的目的地。
MAC地址负责一个区间之间的通信传输,也就是数据包在网络中传输的过程中,MAC地址一直是变化的,而IP地址始终不变。
🙎♂️面试官: 什么是 IP 地址?IP 寻址如何工作?
🙋♂答:
IP地址用来标识网络中的唯一一台设备。
IP 地址(IPv4 地址)由 32 位正整数来表示,IP 地址在计算机是以二进制的方式处理的。IP使用点分十进制来表示,也就是8位一组,共4组,用.
分割,再将每组转换为十进制。
IP寻址工作如下:
- 发送方发送数据,设置目标设备的IP地址作为数据包的目的地。
- 路由:如果目标设备与发送方不再同一个子网内,发送方将数据包发送到默认网关中(路由器)。之后路由器查询路由表,根据目的地址转发给下一跳,直到数据包到达目标设备所在的子网。
- 目标设备的子网接收到数据包后,根据目标IP地址确定目标设备,最终设备接收并处理数据。
🙎♂️面试官: IPv4 和 IPv6 有什么区别?
🙋♂答:
- 地址表示不同。IPv4 地址长度共 32 位,是以每 8 位作为一组,并用点分十进制的表示方式;IPv6 地址长度是 128 位,是以每 16 位作为一组,每组用冒号 「:」 隔开。
- IPv4中的自动地址分配通常使用动态主机配置协议(DHCP),需要中央服务器进行地址分配。而IPv6引入了一种称为“无状态自动配置”的机制,使得设备可以根据网络前缀和MAC地址自动分配和配置IPv6地址,无需中央服务器的参与,即插即用。
- IPv6 有应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能,大大提升了安全性。
总之,IPv6的提出主要是为了解决IPv4地址用完的问题,同时也提供了更好的扩展性和功能。
PING
🙎♂️面试官:PING 命令的工作原理是什么?
🙋♂答:
PING命令的工作原理如下:
-
发送ICMP请求:PING命令会向目标主机发送一个ICMP回显请求消息(Echo Request)。该消息包含一个唯一的标识符和序列号,以及一些其他的控制信息。
-
目标主机响应:目标主机接收到ICMP请求消息后,会将其解析并生成一个ICMP回显应答消息(Echo Reply)。回显应答消息中包含与请求消息相同的标识符和序列号,以及其他的控制信息。
PING命令基于ICMP协议,利用ICMP回显请求和回显应答消息来进行连通性测试。通过发送请求并等待应答,PING命令可以确定目标主机是否可达、往返时间以及丢包率等信息。 PING命令的工作原理简单直观,是一种常用的网络诊断工具。
(ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议)
完。