网络分层
1.OSI与TCP/IP各层的结构与功能?
TCP/IP 四层模型 是目前被广泛采用的一种模型,我们可以将 TCP / IP 模型看作是 OSI 七层模型的精简版本
- 1.应用层:应用层位于传输层之上,主要提供两个终端设备上的应用程序之间信息交换的服务,它定义了信息交换的格式,消息会交给下一层传输层来传输
- 2.传输层:传输层的主要任务就是负责向两台终端设备进程之间的通信提供通用的数据传输服务
- 3.网络层:网络层负责为分组交换网上的不同主机提供通信服务
- 4.网络接口层:包括数据链路层和物理层。数据链路层的作用是将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。
2.为什么要网络分层?
复杂的系统需要分层,因为每一层都需要专注于一类事情。网络分层的原因也是一样,每一层只专注于做一类事情。
- 各层之间相互独立:各层之间相互独立,各层之间不需要关心其他层是如何实现的,只需要知道自己如何调用下层提供好的功能就可以了
- 提高了灵活性和可替换性:每一层都可以使用最适合的技术来实现,你只需要保证你提供的功能以及暴露的接口的规则没有改变就行了。
- 大问题化小: 这个和我们平时开发的时候,一般会将系统功能分解,然后将复杂的问题分解为容易理解的更小的问题是相对应的,这些较小的问题具有更好的边界(目标和接口)定义。
3.OSI与TCP/IP各层都有哪些协议?
- 应用层:
- HTTP(Hypertext Transfer Protocol,超文本传输协议)
- SMTP(Simple Mail Transfer Protocol,简单邮件发送协议)
- DNS(Domain Name System,域名管理系统)
- FTP(File Transfer Protocol,文件传输协议)
- SSH(Secure Shell Protocol,安全的网络传输协议)
- 传输层:
- TCP(Transmission Control Protocol,传输控制协议 ):提供 面向连接 的,可靠 的数据传输服务
- UDP(User Datagram Protocol,用户数据协议):提供 无连接 的,尽最大努力 的数据传输服务(不保证数据传输的可靠性),简单高效。
- 网络层:
- IP(Internet Protocol,网际协议)
- ARP(Address Resolution Protocol,地址解析协议)
- ICMP(Internet Control Message Protocol,互联网控制报文协议)
HTTP(重要)👍
4.HTTP状态码有哪些?
- 常见的状态码:
- 200 OK:请求被成功处理。
- 404 Not Found:你请求的资源未在服务端找到。比如你请求某个用户的信息,服务端并没有找到指定的用户。
- 500 Internal Server Error:服务端出问题了(通常是服务端出 Bug 了)。比如你服务端处理请求的时候突然抛出异常,但是异常并未在服务端被正确处理。
- 502 Bad Gateway:我们的网关将请求转发到服务端,但是服务端返回的却是一个错误的响应。
5.一次完整的HTTP请求所经过的步骤?(从输入url到页面展示发生了什么?)👍
- 1.在浏览器中输入指定网页的URL。
- 2.浏览器通过DNS协议,获取域名对应的IP地址。
- 3.浏览器根据IP地址和端口号,向目标服务器发起一个TCP连接请求。
- 4.浏览器在TCP连接上,向服务器发送一个HTTP请求报文,请求获取网页的内容。
- 5.服务器收到HTTP请求报文后,处理请求,并返回HTTP响应报文给浏览器。
-
- HTML中的其他资源的URL (如图片、CSS、JS等),再次发起HTTP请求,获取这些资源的内容,直到网页完全加载显示。
- 7.浏览器在不需要和服务器通信时,可以主动关闭TCP连接,或者等待服务器的关闭请求。
6.HTTP协议了解吗?HTTP是基于TCP还是UDP的?
HTTP协议是超文本传输协议。是基于TCP的
7.HTTP报文的内容简单说一下!HTTP请求报文和响应报文中有哪些数据?
- HTTP报文是在客户端和服务器之间传输的数据载体,它分为请求报文和响应报文两种类型
- 请求报文:请求行、请求头部、空行、请求体
- 响应报文:状态行、响应头部、空行、响应体
8.HTTP和HTTPS有什么区别?👍
- 端口号:HTTP 默认是 80,HTTPS 默认是 443。
- URL 前缀:HTTP 的 URL 前缀是 http://,HTTPS 的 URL 前缀是 https://。
- 安全性和资源消耗:HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。
- SEO(搜索引擎优化):搜索引擎通常会更青睐使用 HTTPS 协议的网站,因为 HTTPS 能够提供更高的安全性和用户隐私保护。使用 HTTPS 协议的网站在搜索结果中可能会被优先显示,从而对 SEO 产生影响。
9.HTTPS的安全性体现在什么方面?😢
- HTTPS通过使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议来加密传输的数据
- 数据加密、身份验证、数据完整性、安全扩展性
10.HTTPS 的加密过程是怎样的?😢
- 1.客户端向服务器发送 HTTPS 请求。(包括请求的URL、HTTP请求头和请求体)
- 2.服务器将公钥证书发送给客户端。
- 3.客户端验证服务器的证书。
- 4.如果验证通过,客户端生成一个用于会话的对称密钥。
- 5.客户端使用服务器的公钥对对称密钥进行加密,并将加密后的密钥发送给服务器。
- 6.服务器使用私钥对客户端发送的加密密钥进行解密,得到对称密钥。
- 7.服务器和客户端使用对称密钥进行加密和解密数据传输。
11.HTTP/1.0 和 HTTP/1.1 有什么区别?
- 连接方式 : HTTP/1.0 为短连接,HTTP/1.1 支持长连接。
- 状态响应码 : HTTP/1.1 中新加入了大量的状态码,光是错误响应状态码就新增了 24 种。比如说,100 (Continue)——在请求大资源前的预热请求,206 (Partial Content)——范围请求的标识码,409 (Conflict)——请求与当前资源的规定冲突,410 (Gone)——资源已被永久转移,而且没有任何已知的转发地址
- 缓存机制 :
- 带宽:
- Host 头(Host Header)处理 :HTTP/1.1 引入了 Host 头字段,允许在同一 IP 地址上托管多个域名,从而支持虚拟主机的功能。而 HTTP/1.0 没有 Host 头字段,无法实现虚拟主机。
12.HTTP/1.1 和 HTTP/2.0 有什么区别?
- 多路复用(Multiplexing):HTTP/2.0 在同一连接上可以同时传输多个请求和响应(可以看作是 HTTP/1.1 中长链接的升级版本),互不干扰。
- 二进制帧(Binary Frames):HTTP/2.0 使用二进制帧进行数据传输,而 HTTP/1.1 则使用文本格式的报文。二进制帧更加紧凑和高效,减少了传输的数据量和带宽消耗。
- 头部压缩(Header Compression):HTTP/1.1 支持Body压缩,Header不支持压缩。HTTP/2.0 支持对Header压缩,使用了专门为Header压缩而设计的 HPACK 算法,减少了网络开销。
- 服务器推送(Server Push):HTTP/2.0 支持服务器推送,可以在客户端请求一个资源时,将其他相关资源一并推送给客户端,从而减少了客户端的请求次数和延迟。而 HTTP/1.1 需要客户端自己发送请求来获取相关资源。
13.HTTP/2.0 和 HTTP/3.0 有什么区别?
- 传输协议:HTTP/2.0 是基于 TCP 协议实现的,HTTP/3.0 新增了 QUIC(Quick UDP Internet Connections) 协议来实现可靠的传输,提供与 TLS/SSL 相当的安全性,具有较低的连接和传输延迟。
- 连接建立:HTTP/2.0 需要经过经典的 TCP 三次握手过程,QUIC 在最佳情况下不需要任何的额外往返时间就可以建立新连接
- 队头阻塞:HTTP/2.0 多请求复用一个 TCP 连接,一旦发生丢包,就会阻塞住所有的 HTTP 请求。HTTP/3.0 在一定程度上解决了队头阻塞(Head-of-Line blocking, 简写:HOL blocking)问题,一个连接建立多个不同的数据流,这些数据流之间独立互不影响,某个数据流发生丢包了,其数据流不受影响(本质上是多路复用+轮询)。
- 错误恢复:HTTP/3.0 具有更好的错误恢复机制,当出现丢包、延迟等网络问题时,可以更快地进行恢复和重传。而 HTTP/2.0 则需要依赖于 TCP 的错误恢复机制。
- 安全性:HTTP/2.0 和 HTTP/3.0 在安全性上都有较高的要求,支持加密通信,但在实现上有所不同。HTTP/2.0 使用 TLS 协议进行加密,而 HTTP/3.0 基于 QUIC 协议,包含了内置的加密和身份验证机制,可以提供更强的安全性。
WebSocket
14.什么是 WebSocket?
WebSocket 是一种基于 TCP 连接的全双工通信协议,即客户端和服务器可以同时发送和接收数据。常用于实时消息推送、实时游戏对战、社交聊天等场景。
15.WebSocket 和 HTTP 有什么区别?
WebSocket 和 HTTP 两者都是基于 TCP 的应用层协议,都可以在网络中传输数据。
- WebSocket 是一种双向实时通信协议,而 HTTP 是一种单向通信协议。HTTP 协议下的通信只能由客户端发起,服务器无法主动通知客户端。
- WebSocket 可以支持扩展,用户可以扩展协议,实现部分自定义的子协议,如支持压缩、加密等。
- WebSocket 通信数据格式比较轻量,用于协议控制的数据包头部相对较小,网络开销小,而 HTTP 通信每次都要携带完整的头部,网络开销较大(HTTP/2.0 使用二进制帧进行数据传输,还支持头部压缩,减少了网络开销)。
16.WebSocket 的工作过程是什么样的?
- 1.客户端先向服务器发送一个 HTTP 请求,表示要求升级协议为 WebSocket
- 2.服务器收到这个请求后,会进行升级协议的操作
- 3.客户端和服务器之间建立了一个 WebSocket 连接,可以进行双向的数据传输
17.SSE 与 WebSocket 有什么区别?
- SSE 与 WebSocket 作用相似,都可以建立服务端与浏览器之间的通信
- SSE 是基于 HTTP 协议的,WebSocket 需单独服务器来处理协议
- SSE 单向通信,WebSocket 全双工通信,即通信的双方可以同时发送和接受信息。
- SSE 实现简单开发成本低,只能传送文本消息,二进制数据需要经过编码后传送;WebSocket 默认支持传送二进制数据。
PING
18.PING 命令的作用是什么?
PING 命令是一种常用的网络诊断工具,经常用来测试网络中主机之间的连通性和网络延迟。
19.PING 命令的工作原理是什么?😢
PING 基于网络层的 ICMP(Internet Control Message Protocol,互联网控制报文协议),其主要原理就是通过在网络上发送和接收 ICMP 报文实现的。
DNS👍
20.DNS 的作用是什么?解决了什么问题?是哪一层的协议?
- DNS(Domain Name System)域名管理系统,是当用户使用浏览器访问网址之后,使用的第一个重要协议。DNS 要解决的是域名和 IP 地址的映射问题。
- DNS 是应用层协议,它可以在 UDP 或 TCP 协议之上运行,端口为 53 。
21.DNS能解析端口吗?
DNS是域名解析协议,只能将域名和IP地址相互映射,不能指定端口。如果想要通过域名访问特定端口的服务,可以通过Nginx反向代理(也可以使用其他反向代理服务器)。
22.DNS 服务器有哪些?根服务器有多少个?
- DNS 服务器自底向上可以依次分为以下4个层级
- 1.根 DNS 服务器:提供 TLD 服务器的 IP 地址
- 2.顶级域 DNS 服务器:指域名的后缀,如com、org、net和edu等
- 3.权威 DNS 服务器
- 4.本地 DNS 服务器
23.DNS 解析的过程是什么样的?😢
DNS的查询解析过程分为两种模式:迭代和递归。(比较复杂)
请求主机到本地 DNS 服务器的查询是递归的,其余的查询时迭代的。
24.DNS 劫持了解吗?如何应对?😢
DNS 劫持是一种网络攻击,它通过修改 DNS 服务器的解析结果,使用户访问的域名指向错误的 IP 地址,从而导致用户无法访问正常的网站,或者被引导到恶意的网站。DNS 劫持有时也被称为 DNS 重定向、DNS 欺骗或 DNS 污染。
应对:在网络层面准备两个以上的域名,或者手动修改DNS
TCP与UDP👍
25.TCP 三次握手?👍👍👍
- 建立一个 TCP 连接需要“三次握手”,缺一不可:
- 一次握手:客户端发送带有 SYN(SEQ=x) 标志的数据包 -> 服务端,然后客户端进入 SYN_SEND 状态,等待服务器的确认;
- 二次握手:服务端发送带有 SYN+ACK(SEQ=y,ACK=x+1) 标志的数据包 –> 客户端,然后服务端进入 SYN_RECV 状态
- 三次握手:客户端发送带有 ACK(ACK=y+1) 标志的数据包 –> 服务端,然后客户端和服务器端都进入ESTABLISHED 状态,完成 TCP 三次握手。
- 当建立了 3 次握手之后,客户端和服务端就可以传输数据
26.为什么要三次握手?
- 三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
- 第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
- 第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
- 第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常
27.第 2 次握手传回了 ACK,为什么还要传回 SYN?
服务端传回发送端所发送的 ACK 是为了告诉客户端:“我接收到的信息确实就是你所发送的信号了”,这表明从客户端到服务端的通信是正常的。回传 SYN 则是为了建立并确认从服务端到客户端的通信。
28.为什么要四次挥手?
- 断开一个 TCP 连接则需要“四次挥手”,缺一不可:
- 第一次挥手:客户端发送一个 FIN(SEQ=x) 标志的数据包->服务端,用来关闭客户端到服务器的数据传送。然后客户端进入 FIN-WAIT-1 状态。
- 第二次挥手:服务器收到这个 FIN(SEQ=X) 标志的数据包,它发送一个 ACK (ACK=x+1)标志的数据包->客户端 。然后服务端进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。
- 第三次挥手:服务端发送一个 FIN (SEQ=y)标志的数据包->客户端,请求关闭连接,然后服务端进入 LAST-ACK 状态。
- 第四次挥手:客户端发送 ACK (ACK=y+1)标志的数据包->服务端,然后客户端进入TIME-WAIT状态,服务端在收到 ACK (ACK=y+1)标志的数据包后进入 CLOSE 状态。此时如果客户端等待 2MSL 后依然没有收到回复,就证明服务端已正常关闭,随后客户端也可以关闭连接了。
- 只要四次挥手没有结束,客户端和服务端就可以继续传输数据
29.为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?
因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复 ACK,表示接收到了断开连接的请求。等到数据发完之后再发 FIN,断开服务器到客户端的数据传送。
30.如果第二次挥手时服务器的 ACK 没有送达客户端,会怎样?
客户端没有收到 ACK 确认,会重新发送 FIN 请求。
31.为什么第四次挥手客户端需要等待 2*MSL(报文段最长寿命)时间后才进入 CLOSED 状态?
第四次挥手时,客户端发送给服务器的 ACK 有可能丢失,如果服务端因为某些原因而没有收到 ACK 的话,服务端就会重发 FIN,如果客户端在 2*MSL 的时间内收到了 FIN,就会重新发送 ACK 并再次等待 2MSL,防止 Server 没有收到 ACK 而不断重发 FIN。
32.TCP 与 UDP 的区别及使用场景?
- 是否面向连接:UDP 在传送数据之前不需要先建立连接。而 TCP 提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。
- 是否是可靠传输:远地主机在收到 UDP 报文后,不需要给出任何确认,并且不保证数据不丢失,不保证是否顺序到达。TCP 提供可靠的传输服务,TCP 在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。
- 是否有状态:这个和上面的“是否可靠传输”相对应。TCP 传输是有状态的,这个有状态说的是 TCP 会去记录自己发送消息的状态比如消息是否发送了、是否被接收了等等。为此 ,TCP 需要维持复杂的连接状态表。而 UDP 是无状态服务,简单来说就是不管发出去之后的事情了(这很渣男!)。
- 传输效率:由于使用 TCP 进行传输的时候多了连接、确认、重传等机制,所以 TCP 的传输效率要比 UDP 低很多。
- 传输形式:TCP 是面向字节流的,UDP 是面向报文的。
- 首部开销:TCP 首部开销(20 ~ 60 字节)比 UDP 首部开销(8 字节)要大。
- 是否提供广播或多播服务:TCP 只支持点对点通信,UDP 支持一对一、一对多、多对一、多对多;
- 使用场景:
- UDP 一般用于即时通信,比如:语音、 视频、直播等等。这些场景对传输数据的准确性要求不是特别高,比如你看视频即使少个一两帧,实际给人的感觉区别也不大。
- TCP 用于对传输准确性要求特别高的场景,比如文件传输、发送和接收邮件、远程登录等等。
33.TCP是如何保证传输的可靠性?👍
34.使用 TCP 的协议有哪些?使用 UDP 的协议有哪些?
35.
36.