文章目录
-
- 1 计算机网络基础
- 2 HTTP
-
- 2.1 从输入 URL 到页面展示到底发生了什么?🔥
- 2.2 HTTP 状态码有哪些?
- 2.3 HTTP Header 中常见的字段有哪些?
- 2.4 HTTP 和 HTTPS 有什么区别?🔥
- 2.5 HTTPS 建立连接过程
- 2.6 HTTP/1.0 和 HTTP/1.1 有什么区别?
- 2.7 HTTP/1.1 和 HTTP/2.0 有什么区别?🔥
- 2.8 HTTP/2.0 和 HTTP/3.0 有什么区别?
- 2.9 HTTP 是不保存状态的协议, 如何保存用户状态?
- 2.10 URI 和 URL 的区别是什么?
- 2.11 Cookie 和 Session 有什么区别?🔥
- 2.12 GET 和 POST 的区别
- 3 TCP 与 UDP🔥
-
- 3.1 TCP 与 UDP 的区别
- 3.2 什么时候选择 TCP,什么时候选 UDP?
- 3.3 HTTP 基于 TCP 还是 UDP?
- 3.4 使用 TCP 的协议有哪些?使用 UDP 的协议有哪些?
- 3.5 建立连接时 TCP 三次握手的过程
- 3.6 什么是半连接队列和全连接队列?
- 3.7 为什么要三次握手?
- 3.8 不使用 「两次握手」和「四次握手」的原因
- 3.9 第 2 次握手传回了 ACK,为什么还要传回 SYN?
- 3.10 三次握手过程中可以携带数据吗?
- 3.11 断开连接时 TCP 四次挥手的过程
- 3.12 为什么要四次挥手?为什么不能把服务端发送的 ACK 和 FIN 合并起来,变成三次挥手?
- 3.13 什么情况会出现三次挥手?
- 3.14 如果第二次挥手时服务端的 ACK 没有送达客户端,会怎样?
- 3.15 为什么第四次挥手客户端需要等待 2\*MSL(报文最长寿命)时间后才进入 CLOSED 状态?
- 3.16 TCP 如何保证传输的可靠性?
- 3.17 TCP 如何实现流量控制?
- 3.18 为什么需要流量控制 ?
- 3.19 TCP协议是如何处理网络拥塞
- 4 IP
- 5 WebSocket
- 6 PING
- 7 DNS
- 8 ARP
主要参考:JavaGuide,同时加上网上搜索整理和个人理解总结
1 计算机网络基础
1.1 网络分层模型
1.1.1 OSI 七层模型是什么?每一层的作用是什么?
OSI 七层模型 是国际标准化组织提出的一个网络分层模型,其大体结构以及每一层提供的功能如下图所示:
OSI 的七层体系结构概念清楚,理论也很完整,但是它比较复杂而且不实用,而且有些功能在多个层中重复出现。
1.1.2 TCP/IP 四层模型是什么?每一层的作用是什么?
TCP/IP 四层模型 是目前被广泛采用的一种模型,我们可以将 TCP / IP 模型看作是 OSI 七层模型的精简版本,由以下 4 层组成:
- 应用层:应用层主要提供两个终端设备上的应用程序之间信息交换的服务,它定义了信息交换的格式,消息会交给下一层传输层来传输。
- 传输层:传输层的主要任务就是负责向两台终端设备进程之间的通信提供通用的数据传输服务。
- 网络层:网络层负责为分组交换网上的不同主机提供通信服务。网络层的还有一个任务就是选择合适的路由,使源主机运输层所传下来的分组,能通过网络层中的路由器找到目的主机。
- 网络接口层:可以把网络接口层看作是数据链路层和物理层的合体。数据链路层的作用是将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异
需要注意的是,我们并不能将 TCP/IP 四层模型 和 OSI 七层模型完全精确地匹配起来,不过可以简单将两者对应起来,如下图所示:
1.1.3 为什么网络要分层?
- 各层之间相互独立:各层之间相互独立,各层之间不需要关心其他层是如何实现的,只需要知道自己如何调用下层提供好的功能就可以了(可以简单理解为接口调用)。这个和我们对开发时系统进行分层是一个道理。
- 提高了灵活性和可替换性:每一层都可以使用最适合的技术来实现,你只需要保证你提供的功能以及暴露的接口的规则没有改变就行了。并且,每一层都可以根据需要进行修改或替换,而不会影响到整个网络的结构。这个和我们平时开发系统的时候要求的高内聚、低耦合的原则也是可以对应上的。
- 大问题化小:分层可以将复杂的网络问题分解为许多比较小的、界线比较清晰简单的小问题来处理和解决。这样使得复杂的计算机网络系统变得易于设计,实现和标准化。 这个和我们平时开发的时候,一般会将系统功能分解,然后将复杂的问题分解为容易理解的更小的问题是相对应的,这些较小的问题具有更好的边界(目标和接口)定义。
1.2 常见网络协议
1.2.1 应用层有哪些常见的协议?
- HTTP(Hypertext Transfer Protocol,超文本传输协议):基于 TCP 协议,是一种用于传输超文本和多媒体内容的协议,主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候,我们网页就是通过 HTTP 请求进行加载的。
- SMTP(Simple Mail Transfer Protocol,简单邮件发送协议):基于 TCP 协议,是一种用于发送电子邮件的协议。注意 ⚠️:SMTP 协议只负责邮件的发送,而不是接收。要从邮件服务器接收邮件,需要使用 POP3 或 IMAP 协议。
- POP3/IMAP(邮件接收协议):基于 TCP 协议,两者都是负责邮件接收的协议。IMAP 协议是比 POP3 更新的协议,它在功能和性能上都更加强大。IMAP 支持邮件搜索、标记、分类、归档等高级功能,而且可以在多个设备之间同步邮件状态。几乎所有现代电子邮件客户端和服务器都支持 IMAP。
- FTP(File Transfer Protocol,文件传输协议) : 基于 TCP 协议,是一种用于在计算机之间传输文件的协议,可以屏蔽操作系统和文件存储方式。注意 ⚠️:FTP 是一种不安全的协议,因为它在传输过程中不会对数据进行加密。建议在传输敏感数据时使用更安全的协议,如 SFTP。
- Telnet(远程登陆协议):基于 TCP 协议,用于通过一个终端登陆到其他服务器。Telnet 协议的最大缺点之一是所有数据(包括用户名和密码)均以明文形式发送,这有潜在的安全风险。这就是为什么如今很少使用 Telnet,而是使用一种称为 SSH 的非常安全的网络传输协议的主要原因。
- SSH(Secure Shell Protocol,安全的网络传输协议):基于 TCP 协议,通过加密和认证机制实现安全的访问和文件传输等业务
- RTP(Real-time Transport Protocol,实时传输协议):通常基于 UDP 协议,但也支持 TCP 协议。它提供了端到端的实时传输数据的功能,但不包含资源预留存、不保证实时传输质量,这些功能由 WebRTC 实现。
- DNS(Domain Name System,域名管理系统): 基于 UDP 协议,用于解决域名和 IP 地址的映射问题。
1.2.2 传输层有哪些常见的协议?
- TCP(Transmission Control Protocol,传输控制协议 ):提供 面向连接 的,可靠 的数据传输服务。
- UDP(User Datagram Protocol,用户数据协议):提供 无连接 的,尽最大努力 的数据传输服务(不保证数据传输的可靠性),简单高效。
1.2.3 网络层有哪些常见的协议?
- IP(Internet Protocol,网际协议):TCP/IP 协议中最重要的协议之一,属于网络层的协议,主要作用是定义数据包的格式、对数据包进行路由和寻址,以便它们可以跨网络传播并到达正确的目的地。目前 IP 协议主要分为两种,一种是过去的 IPv4,另一种是较新的 IPv6,目前这两种协议都在使用,但后者已经被提议来取代前者。
- ARP(Address Resolution Protocol,地址解析协议):ARP 协议解决的是网络层地址和链路层地址之间的转换问题。因为一个 IP 数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但 IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 协议解决了 IP 地址转 MAC 地址的一些问题。
- ICMP(Internet Control Message Protocol,互联网控制报文协议):一种用于传输网络状态和错误消息的协议,常用于网络诊断和故障排除。例如,Ping 工具就使用了 ICMP 协议来测试网络连通性。
- NAT(Network Address Translation,网络地址转换协议):NAT 协议的应用场景如同它的名称——网络地址转换,应用于内部网到外部网的地址转换过程中。具体地说,在一个小的子网(局域网,LAN)内,各主机使用的是同一个 LAN 下的 IP 地址,但在该 LAN 以外,在广域网(WAN)中,需要一个统一的 IP 地址来标识该 LAN 在整个 Internet 上的位置。
- OSPF(Open Shortest Path First,开放式最短路径优先) ):一种内部网关协议(Interior Gateway Protocol,IGP),也是广泛使用的一种动态路由协议,基于链路状态算法,考虑了链路的带宽、延迟等因素来选择最佳路径。
- RIP(Routing Information Protocol,路由信息协议):一种内部网关协议(Interior Gateway Protocol,IGP),也是一种动态路由协议,基于距离向量算法,使用固定的跳数作为度量标准,选择跳数最少的路径作为最佳路径。
- BGP(Border Gateway Protocol,边界网关协议):一种用来在路由选择域之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议,具有高度的灵活性和可扩展性。
2 HTTP
2.1 从输入 URL 到页面展示到底发生了什么?🔥
类似的问题:打开一个网页,整个过程会使用哪些协议?
- 在浏览器中输入指定网页的 URL。
- 浏览器通过 DNS 协议,获取域名对应的 IP 地址。
- 浏览器根据 IP 地址和端口号,向目标服务器发起一个 TCP 连接请求。
- 浏览器在 TCP 连接上,向服务器发送一个 HTTP 请求报文,请求获取网页的内容。
- 服务器收到 HTTP 请求报文后,处理请求,并返回 HTTP 响应报文给浏览器。
- 浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示。
- 浏览器在不需要和服务器通信时,可以主动关闭 TCP 连接,或者等待服务器的关闭请求。
2.2 HTTP 状态码有哪些?
- 1xx Informational(信息性状态码)
- 100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。
- 2xx Success(成功状态码)
- 200 OK:请求被成功处理。比如我们发送一个查询用户数据的 HTTP 请求到服务端,服务端正确返回了用户数据。这个是我们平时最常见的一个 HTTP 状态码。
- 201 Created:请求被成功处理并且在服务端创建了一个新的资源。比如我们通过 POST 请求创建一个新的用户。
- 202 Accepted:服务端已经接收到了请求,但是还未处理。
- 204 No Content:服务端已经成功处理了请求,但是没有返回任何内容。
- 3xx Redirection(重定向状态码)
- 301 Moved Permanently:资源被永久重定向了。比如你的网站的网址更换了。
- 302 Found:资源被临时重定向了。比如你的网站的某些资源被暂时转移到另外一个网址。
- 4xx Client Error(客户端错误状态码)
- 400 Bad Request:发送的 HTTP 请求存在问题。比如请求参数不合法、请求方法错误。
- 401 Unauthorized:未认证却请求需要认证之后才能访问的资源。
- 403 Forbidden:直接拒绝 HTTP 请求,不处理。一般用来针对非法请求。
- 404 Not Found:你请求的资源未在服务端找到。比如你请求某个用户的信息,服务端并没有找到指定的用户。
- 409 Conflict:表示请求的资源与服务端当前的状态存在冲突,请求无法被处理。
- 5xx Server Error(服务端错误状态码)
- 500 Internal Server Error:服务端出问题了(通常是服务端出 Bug 了)。比如你服务端处理请求的时候突然抛出异常,但是异常并未在服务端被正确处理。
- 502 Bad Gateway:我们的网关将请求转发到服务端,但是服务端返回的却是一个错误的响应。
2.3 HTTP Header 中常见的字段有哪些?
- Host 字段:客户端发送请求时,用来指定服务器的域名。
- Content-Length 字段:服务器在返回数据时,会有
Content-Length
字段,表明本次回应的数据长度。 - Connection 字段:
Connection
字段最常用于客户端要求服务器使用「HTTP 长连接」机制,以便其他请求复用。- HTTP 长连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。(HTTP 1.1默认)
- Content-Type 字段:
Content-Type
字段用于服务器回应时,告诉客户端,本次数据是什么格式。 - Content-Encoding 字段:
Content-Encoding
字段说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式