CN 计算机网络 学习笔记

文章目录

  • 计算机网络
    • [▶ OSI 七层模型 和 TCP/IP模型](#▶ OSI 七层模型 和 TCP/IP模型)
    • [▶ 输入网址到显示网页的流程](#▶ 输入网址到显示网页的流程)
    • [▶ DNS 解析的过程](#▶ DNS 解析的过程)
    • [▶TCP 三次握手的过程](#▶TCP 三次握手的过程)
    • [▶ TCP 握手为何是3次,不是2次、4次?](#▶ TCP 握手为何是3次,不是2次、4次?)
    • [▶ TCP第一次握手可以传输数据吗?](#▶ TCP第一次握手可以传输数据吗?)
    • [▶ TCP 三次握手时数据发送失败该怎么办?](#▶ TCP 三次握手时数据发送失败该怎么办?)
    • [▶ 为什么TCP挥手中 TIME_WAIT 等待的时间是 2MSL](#▶ 为什么TCP挥手中 TIME_WAIT 等待的时间是 2MSL)
    • [▶ TCP 四次挥⼿的过程](#▶ TCP 四次挥⼿的过程)
    • [▶ 为什么是四次挥⼿?](#▶ 为什么是四次挥⼿?)
    • [▶ TCP 中 CLOSE_WAIT状态还能收到报文吗?](#▶ TCP 中 CLOSE_WAIT状态还能收到报文吗?)
    • [▶ TCP 和 UDP 的区别](#▶ TCP 和 UDP 的区别)
    • [▶ TCP 流量控制 与 滑动窗口](#▶ TCP 流量控制 与 滑动窗口)
    • [▶ TCP 拥塞控制](#▶ TCP 拥塞控制)
    • [▶ TCP 的长连接和短连接](#▶ TCP 的长连接和短连接)
    • [▶ 长连接是如何维持的?心跳机制是什么?](#▶ 长连接是如何维持的?心跳机制是什么?)
    • [▶ 两台服务器之间可以建立多条TCP连接吗?](#▶ 两台服务器之间可以建立多条TCP连接吗?)
    • [▶ TCP序列号机制](#▶ TCP序列号机制)
    • [▶ TCP 粘包问题](#▶ TCP 粘包问题)
    • [▶ 子网掩码](#▶ 子网掩码)
    • [▶ MAC地址和IP地址](#▶ MAC地址和IP地址)
    • [▶ 什么是丢包和延迟?如何处理?](#▶ 什么是丢包和延迟?如何处理?)
    • [▶ 端口的有效范围](#▶ 端口的有效范围)
    • [TCP 的 nagle 算法,nagle会带来什么坏处?](#TCP 的 nagle 算法,nagle会带来什么坏处?)
    • [▶ 什么是MTU?如何处理MTU过小的问题?](#▶ 什么是MTU?如何处理MTU过小的问题?)
      • [处理 MTU 过小问题的方法](#处理 MTU 过小问题的方法)
    • [▶ IPV4 和 IPV6的区别](#▶ IPV4 和 IPV6的区别)
    • [▶ 什么是 NAT](#▶ 什么是 NAT)
    • [▶ 为什么要IP分片?](#▶ 为什么要IP分片?)
    • [▶ 什么是多路复用?如何使用select/poll/epoll?](#▶ 什么是多路复用?如何使用select/poll/epoll?)
    • [▶ 如何通过Socket实现可靠数据传输?](#▶ 如何通过Socket实现可靠数据传输?)
    • [▶ 什么是HTTPS?与HTTP的区别?](#▶ 什么是HTTPS?与HTTP的区别?)
    • [▶ 什么是 SSL/TLS?基本工作流程是什么?](#▶ 什么是 SSL/TLS?基本工作流程是什么?)
      • [SSL/TLS 的基本工作流程](#SSL/TLS 的基本工作流程)
    • [▶ HTTP 1.1、2.0、3.0之间的区别](#▶ HTTP 1.1、2.0、3.0之间的区别)
    • [▶ HTTP1.0 和 HTTP1.1 的区别](#▶ HTTP1.0 和 HTTP1.1 的区别)
    • [▶ HTTP2.0 和 HTTP1.1 的区别](#▶ HTTP2.0 和 HTTP1.1 的区别)
    • [▶ webSocket是什么?与HTTP的区别](#▶ webSocket是什么?与HTTP的区别)
    • 计网性能和优化
    • QoS服务质量
    • [CDN 内容分发网络](#CDN 内容分发网络)

计算机网络

▶ OSI 七层模型 和 TCP/IP模型

OSI 层级 TCP/IP 层级 作用
物理层 网络接口层 传输原始比特流,通过**物理媒介**传输数据。
数据链路层 节点之间的可靠数据传输,数据帧的发送与接收。MAC 寻址
网络层 网络层 数据包的封装、分片、路由和转发,实现网络间的通信。 比如:IP、 ICMP
传输层 传输层 提供**端到端的通信服务**,确保数据的完整传输(** TCP、UDP**)。
会话层 应用层 管理会话和连接,负责向⽤户提供⼀组应⽤程序,⽐如 HTTP、 DNS、 FTP
表示层 数据格式转换、加密解密、数据压缩。
应用层 提供网络服务和应用程序接口(HTTP、FTP、SMTP等)。

▶ 输入网址到显示网页的流程

  1. 浏览器接收到⽤户请求,先检查浏览器本地缓存⾥是否有缓存该资源,如果有直接返回;如果没有进⼊下⼀步⽹络请求。

  2. ⽹络请求前,进⾏ DNS解析 获取请求域名的 IP地址

    • DNS解析时会按本地浏览器缓存->本地 Host ⽂件->路由器缓存-> DNS 服务器->根 DNS 服务器的顺序查询域名对应 IP ,直到找到为⽌。
    • 如果 请求协议是 HTTPS ,那么还需要建⽴TLS连接 。
  3. 浏览器与服务器IP建⽴TCP连接 。连接建⽴后,浏览器端会构建请求⾏、请求头等信息,并把和该域名相关的 Cookie 等数据附加到请求头中,向服务器构建请求信息

  4. 服务器接收到请求信息,服务器根据请求⽣成响应数据发送

  5. 浏览器解析响应头

    若响应头状态码为 301、302 ,会重定向到新地址;

    若响应数据类型是字节流类型,⼀般会将请求提交给下载管理器;

    若是HTML类型,会进⼊下⼀部渲染流程。

  6. 浏览器 解析 HTML ⽂件 ,创建 DOM 树,解析 CSS 进⾏样式计算,然后将CSS和DOM合并,构建渲染树;最后 浏览器布局和绘制** 渲染 树, 完成⻚⾯展示**。

▶ DNS 解析的过程

  • DNS(Domain Name System) 解析是将**域名转换为IP地址**的过程。

DNS解析的过程可以分为以下步骤

  • (1) 客户端缓存
    当用户在浏览器中输入域名(例如:www.google.com)时,浏览器首先会**检查本地DNS缓存**,看看是否有对应的IP地址。如果有,则直接使用缓存中的IP地址,不再进行后续的查询。
  • (2) 操作系统缓存
    如果浏览器缓存中没有找到对应的IP地址,会 检查操作系统缓存
  • (3) 本地hosts文件
    如果操作系统缓存也没有找到对应的IP地址,操作系统会 检查本地的hosts文件 是否有对应的条目。
  • (4) 本地DNS服务器(递归解析器)
    如果以上步骤都未能找到对应的IP地址,浏览器会将查询请求发送到配置的本地DNS服务器进行检查 (通常是ISP提供的DNS服务器或公司内部的DNS服务器)。
    本地DNS服务器会先检查自身的缓存:如果缓存中有对应的IP地址,则返回给客户端。
  • (5) 根DNS服务器
    如果本地DNS服务器的缓存中没有对应的IP地址,它会向 根DNS服务器发出查询请求。 根DNS服务器(.) 会告诉本地DNS服务器应该查询的顶级域名服务器。(例如 .com或.net 顶级域名服务器)
  • (6) 顶级域名服务器(TLD服务器)
    本地DNS服务器接到根DNS服务器的响应后,会向相应的 顶级域名服务器发出查询请求。 顶级域名服务器(.com) 告诉本地DNS服务器应该查询的权威DNS服务器(例如 baidu.com 域的DNS服务器)。
  • (7) 权威DNS服务器
    本地DNS服务器接到顶级域名服务器的响应后,会向权威DNS服务器发出查询请求。 权威DNS服务器(baidu.com) 会返回最终的IP地址给本地DNS服务器
  • (8) 返回结果给客户端
    本地DNS服务器接到权威DNS服务器的响应后,会 将IP地址缓存起来,并返回给客户端(浏览器)
  • (9) 浏览器建立连接
    浏览器接到本地DNS服务器返回的IP地址后,会** 使用该IP地址与目标服务器建立连接**,发送HTTP请求,获取网页内容。

▶TCP 三次握手的过程

  1. 第1次握手
    客户端 随机初始化自己的序列号 Client_ISN、向服务器发送 SYN 报⽂ ,然后客户端 进⼊SYN_SEND 已发送状态,等待服务器确认
  2. 第2次握手
    服务端 接收到客户端的SYN报文后,发送 ACK(ACK=Client_ISN+1)应答 + ⾃⼰初始化序列号 Server_ISN 的 SYN 报⽂ ,然后服务端 进⼊SYN_RECV已接收状态
  3. 第3次握手
    客户端 接收到服务端的 SYN+ACK 报⽂,发送ACK(ACK=Server_ISN+1)应答进⼊ ESTABLISHED 建立状态
    然后 服务器端接收到ACK后进⼊ ESTABLISHED 状态,完成 TCP 三次握⼿。

▶ TCP 握手为何是3次,不是2次、4次?

  • 三次握手的优点

    • 三次握手是为了建立连接,确保双方都有能力进行数据传输,防止历史的重复连接请求。
    • 确认双方状态:三次握手能够 保证双⽅都知道连接的存在,并且确认彼此的接收和发送能力,确保连接的可靠性。
    • 避免旧连接误判:通过三次握手,可以避免旧的连接请求被误认为是新的连接。
  • 两次握手的问题

    • **旧连接请求问题:**如果 使用两次握手,旧的连接请求(可能因为网络延迟而滞留的SYN包)可能被误认为是新的连接请求,从而导致连接状态的不一致。
    • 确认机制不足: 两次握手无法确保双方都确认了连接的存在。例如,客户端发送SYN包后崩溃重启,服务器可能仍然认为连接存在,而客户端已经不再维护这个连接。
  • 四次握⼿

    四次握手可以优化为三次。

▶ TCP第一次握手可以传输数据吗?

不能。

  • 连接未完全建立:在第一次握手时, 连接尚未建立,服务器还未确认客户端的连接请求
  • 缺乏确认机制:在第一次握手时, 客户端无法确定服务器是否已收到SYN包,无法保证数据的可靠传输
  • 安全性考虑:如果在第一次握手时传输数据, 可能导致旧的连接请求(例如,网络延迟导致的滞留SYN包)被误认为是新的连接,造成数据传输混乱。

数据传输的时机:

  • **第三次握手之后:**数据传输通常在第三次握手之后进行,因为只有此时连接才被完全建立,双方都确认了彼此的接收和发送能力。
  • **连接建立:**在三次握手完成后,客户端和服务器之间的连接被正式建立,数据可以在此基础上进行可靠传输。

▶ TCP 三次握手时数据发送失败该怎么办?

  • (1) 多次重传机制
    在客户端发送SYN包后,如果**在设定的超时时间内未收到服务器的SYN-ACK包,客户端将重发SYN包**。
    重试次数有一个上限,例如5次,如果重试次数达到上限,客户端将放弃连接请求。
  • (2) 超时重传机制
    设定一个合理的**超时时间重传**,例如2秒,客户端在发送SYN包后等待这个时间,如果未收到SYN-ACK包,则进行重试。

▶ 为什么TCP挥手中 TIME_WAIT 等待的时间是 2MSL

  • MSL 是 Maximum Segment Lifetime, 报⽂最⼤⽣存时间 ,它是任何报⽂在⽹络上存在的最⻓时间,超过这个时间报⽂将被丢弃。
    TIME_WAIT 等待 2 倍的 MSL,⽐较合理的解释是: ⽹络中可能存在来⾃发送⽅的数据包,当这些 发送⽅的数据包被接收⽅处理后⼜会向对⽅发送响应,所以⼀来⼀回需要等待 2 倍的时间

(1) 确保被动关闭方收到 ACK

  1. 当一方(主动关闭方)发送最后一个 ACK 报文时,这个 ACK 报文段可能会丢失。如果被动关闭方没有收到这个 ACK,它会重新发送 FIN 报文段。
  2. 主动关闭方必须等待一段时间,以确保它能够接收到这个可能重发的 FIN 报文段,并再次发送 ACK 确认。
  3. 如果没有 2MSL 的等待时间,主动关闭方可能会在重新发送的 FIN 报文段到达时无法处理,从而导致连接不正常关闭。

(2) 确保旧的报文段在网络中消失

  1. 在 2MSL 时间内,网络中的所有旧的、重复的报文段都会超时并被丢弃。这确保了下一次新的连接不会收到前一个连接的旧报文段,从而避免数据混乱和连接错误。
  2. 如果不等待 2MSL,新的连接可能会收到前一个连接遗留的报文段,这会导致数据混乱和协议错误。

▶ TCP 四次挥⼿的过程

  1. 第1次挥手
    客户端发送 FIN 报⽂给服务端,表示⾃⼰没有数据要传送 (不再发送数据了但是还能接收数据),这个报⽂中会指定⼀个序列号 (seq_Client=x) 。然后,客户端 进⼊ FIN_WAIT_1 状态
  2. 第2次挥手
    • 服务端收到 FIN 报⽂后,回复 ACK 应答报⽂给客户端 ,且把客户端的序列号值 +1 ,作为 ACK 报⽂的序列号 (seq_Server=x+1) 。然后,服务端 进⼊ CLOSE_WAIT 状态,表示服务端已经接收到命令但是正在需要时间处理剩余数据。表示服务器仍然可能有数据要发送
    • 客户端接收到服务器的应答后,进⼊ FIN_WAIT_2 状态,表示正在等待服务器端处理完的关闭请求
  3. 第3次挥手
    **服务端处理完数据确定要断开连接时,发送 FIN 报⽂**给客户端,这个报⽂中会指定⼀个序列号 (seq_Server=y) ,随后服务端 进⼊ LAST_ACK 状态
  4. 第四次挥手
    • 客户端收到 FIN 报⽂后,发出 ACK 报⽂进⾏应答 ,其中,把服务端的序列号值 +1 作为 ACK 报⽂的序列号 (seq_Client=y+1) 。此时客户端 进⼊ TIME_WAIT 状态
      如果客户端等待 2MSL 没有收到回复,才关闭连接。 以确保所有报文在网络中被正确处理,避免旧的重复数据包干扰新连接。
    • 服务端在收到客户端的 ACK 报⽂后进⼊ CLOSE 状态

TIME-WAIT状态:客户端在进入TIME-WAIT状态后,需等待2MSL(Maximum Segment Lifetime,最大报文生存时间) 以确保所有报文在网络中被正确处理,避免旧的重复数据包干扰新连接

▶ 为什么是四次挥⼿?

  • TCP 是 全双⼯通信 ,可以双向传输数据,任何⼀⽅都可以在数据传送结束后独立发出连接释放的通知,待对⽅确认后进⼊半关闭状态 。两次握⼿可以释放⼀端到另⼀端的 TCP 连接,完全释放连接⼀共需要四次握⼿,确保双方都完全关闭了 TCP 连接

▶ TCP 中 CLOSE_WAIT状态还能收到报文吗?

  • 在CLOSE_WAIT状态下,接收方的连接并未完全关闭,仍然可以接收来自发送方的数据包
    (2)继续接收数据:
    虽然接收方已进入CLOSE_WAIT状态,但连接的发送方向仍然可以发送数据包。接收方可以继续处理这些数据,直到应用层决定关闭连接。接收方在处理完所有数据并调用close()关闭连接后,会发送FIN包请求关闭连接。
    (3)连接完全关闭:
    当接收方的应用层调用close()关闭连接后,会发送FIN包给发送方,表示自己也准备关闭连接。发送方接收到FIN包后,发送ACK包确认关闭请求,连接完全关闭,双方进入CLOSED状态。

▶ TCP 和 UDP 的区别

特性 TCP UDP
连接类型 面向连接(需要建立连接 无连接(无需建立连接
传输形式 字节流 数据报文段
传输可靠性 可靠传输,提供 确认、重传 和流量控制 不可靠传输,不保证数据到达
数据顺序 保证数据按序到达 数据可能乱序到达
速度、效率 较慢 较快
是否支持广播 只支持点对点通信 支持一对一、一对多、多对多
适用场景 文件传输、HTTP、邮件 视频流、VoIP、DNS

▶ TCP 流量控制 与 滑动窗口

流量控制

  • TCP 流量控制是通过滑动窗口机制实现的,确保发送方不会淹没接收方的处理能力
  • 滑动窗口机制
    • 发送窗口:发送方维护一个发送窗口,用于控制可以发送但未确认的数据量。发送窗口由已发送但未确认的数据和可以发送的最大数据量组成。
    • 接收窗口:接收方维护一个接收窗口,用于控制可以接收但未处理的数据量。接收窗口由接收到但未处理的数据 和可以接收的最大数据量组成。
  • 窗口大小的控制
    • **1)发送方根据接收窗口大小发送数据:**发送方在发送数据时,会根据接收方的接收窗口大小来控制发送的数据量,确保不会超出接收方的处理能力。
    • **2)接收方通知发送方当前窗口大小:**接收方在接收到数据后,会通过ACK包通知发送方当前的接收窗口大小,表示接收方可以继续接收的数据量。
    • **3)零窗口的处理:**当接收方的接收窗口为0时,发送方会停止发送数据,直到接收到非零窗口通知。发送方可以周期性地发送窗口探测包,询问接收方的接收窗口大小。

滑动窗口过大的情况

  • 优点:在 高带宽、低延迟 的网络环境中,较大的滑动窗口可以允许发送方在不等待ACK确认的情况下 发送更多数据,充分利用带宽,减少传输时间
  • 缺点:在 高延迟或高丢包率 的网络环境中,较大的滑动窗口可能导致 大量未确认数据堆积,一旦发生丢包或错误,需要重传的数据量大,浪费带宽,可能导致网络拥塞

滑动窗口过小的情况

  • 优点:在 高延迟或高丢包率 的网络环境中,较小的滑动窗口可以**限制未确认数据的数量,减少重传的数据量,降低网络拥塞** 的风险。
  • 缺点:在高带宽、低延迟 的网络环境中,较小的滑动窗口**限制了发送方的数据传输速率**,频繁等待ACK确认,导致带宽利用率低,传输效率下降。

▶ TCP 拥塞控制

TCP拥塞控制 机制通过慢启动、拥塞避免、快重传和快恢复来防止网络拥塞。

  • (1)慢启动在连接刚开始时,发送⽅会逐渐增加发送窗⼝⼤⼩,以指数增⻓的速度增加发送的数据量
    • 初始阶段:当连接刚建立时,拥塞窗口(cwnd)从1开始,慢启动阈值(ssthresh)通常设为64。
    • 指数增长:每次收到一个ACK,拥塞窗口(cwnd)加倍,直到达慢启动阈值(ssthresh)。
  • (2) 拥塞避免 :⼀旦慢启动阶段过去,发送⽅进⼊拥塞避免阶段:发送⽅逐渐增加发送窗⼝的⼤⼩,但增加速率较慢,避免过快增加导致⽹络拥塞
    • 达到阈值:当拥塞窗口(cwnd)达到慢启动阈值(ssthresh)后,进入拥塞避免阶段。
    • 线性增长:每次收到一个ACK,拥塞窗口(cwnd)增加1,避免网络拥塞。
  • (3)超时重传 :如果 发送⽅在超时时间内未收到确认,它会认为数据包丢失,并重传这些数据包 。这是拥塞控制的最后⼿段,⽤于**检测和处理⽹络中的丢包或拥塞**情况,当⽹络出现拥塞,也就是会发⽣数据包重传。
  • (4)快速重传、快速恢复 :当**发送⽅发送的数据包丢失或⽹络出现拥塞时,接收⽅会发送重复确认 通知发送⽅有数据包丢失,当发送⽅收到⼀定数量的重复确认时,它会⽴即重传丢失的数据包,⽽不是等待超时,这样可以减少⽹络的拥塞程度**。
  • (5)拥塞窗口调整发送⽅根据⽹络的拥塞程度动态调整发送窗⼝的⼤⼩,通过监测⽹络延迟和丢包情况来确定合适的发送速率,以避免⽹络拥塞。

▶ TCP 的长连接和短连接

(1) 长连接

  • 定义:在 TCP连接建立后,保持连接状态,进行多次请求和响应,而不是每次请求后立即关闭连接
  • **实现:**服务器和客户端在第一次连接后保持连接,通过 心跳包 等机制维持连接状态。
  • **应用场景:**适用于需要频繁通信的场景,如数据库连接、消息队列等。

(2) 短连接

  • 定义:每次请求和响应后,立即关闭连接,下一次请求时重新建立连接。
  • **实现:**每次请求和响应完成后,客户端和服务器立即关闭连接。
  • **应用场景:**适用于请求频率较低、每次请求独立的场景,如HTTP 1.0请求。

▶ 长连接是如何维持的?心跳机制是什么?

长连接广泛应用于需要频繁通信的场景,如即时通讯、在线游戏、实时数据传输等。

  • (1) 保持长连接的方法
    1. **定期发送心跳包:**设置定时器,定期发送心跳包,保持连接活跃。
    2. **连接超时检测:**设置合理的超时时间,检测连接状态,及时进行重连操作。
    3. **资源管理:**确保系统 资源合理分配,避免长时间保持大量连接导致资源耗尽
  • (2) 心跳机制
    1. 心跳包(PING)客户端和服务器之间定期发送心跳包,以检测连接状态,确保连接在空闲时依然保持活跃
    2. 心跳回应 (PONG):接收方收到心跳包后,立即发送心跳回应,通知发送方连接状态正常
    3. 超时检测 :如果 发送方未能在规定时间内接收到心跳回应,则认为连接已断开,进行重连操作

▶ 两台服务器之间可以建立多条TCP连接吗?

**可以:**两台服务器之间可以同时建立多条TCP连接。

  • (1) TCP连接的唯一性
    每个TCP连接都是由四元组(源IP地址、源端口号、目的IP地址、目的端口号)唯一标识。只要这四个元素中有一个不同,就可以建立新的TCP连接。
  • (2) 多条TCP连接的实现方法
    • **使用不同的端口号:**可以在服务器A和服务器B上分别使用不同的端口号来建立多条连接。
    • **使用同一端口的多个套接字:**可以在同一个端口上创建多个套接字,每个套接字对应一个独立的TCP连接。

▶ TCP序列号机制

TCP序列号机制的概念

  • 序列号(Sequence Number):每个TCP数据包都包含一个序列号,用于标识数据包的顺序,确保数据包按正确顺序组装
  • 确认号(Acknowledgment Number):每个TCP数据包都包含一个确认号,表示接收方期望接收到的下一个数据包的序列号,用于确认已接收到的数据

序列号机制的作用

  • **数据包排序:**通过 序列号可以保证接收方可以按正确顺序组装数据包,即使数据包顺序错乱。
  • 丢包检测: 通过确认号,发送方可以检测到数据包是否丢失,并进行重传,确保数据包的可靠传输。

▶ TCP 粘包问题

  • TCP粘包 :由于 TCP是面向流的协议,发送的数据没有边界,接收方可能在一次读取操作中接收到多个发送方的数据包,导致数据 "粘" 在一起

解决方法:

  1. 定长消息:发送方每个消息固定长度,接收方按固定长度读取数据
  2. 分隔符:在每个消息之间添加特殊字符作为分隔符接收方 按分隔符拆分数据
  3. 消息头标识长度:在每个消息前添加一个消息头,消息头包含该消息的长度,接收方根据长度读取完整消息。

▶ 子网掩码

  • 子网掩码 (Subnet Mask)是用来确定一个IP地址中哪部分用于标识网络,哪部分用于标识主机 的32位二进制数字。子网掩码的作用是 通过与IP地址进行逻辑与运算,将IP地址划分为网络地址部分和主机地址部分
  • 具体来说,子网掩码是一个32位的二进制数,通常用四个8位的十进制数表示,例如255.255.255.0。
类别 默认子网掩码
A类 255.0.0.0
B类 255.255.0.0
C类 255.255.255.0

▶ MAC地址和IP地址

特性 MAC地址 IP地址
层级 数据链路层 网络层
长度 48位 32位(IPv4)/128位(IPv6)
唯一性 全球唯一 网络内唯一
固定性 硬件固定,不易更改 可配置和更改

▶ 什么是丢包和延迟?如何处理?

  • 丢包 :丢包是指 **数据包在传输过程中丢失,导致接收方未能收到**数据。
  • 延迟 :延迟是指 数据从发送方到接收方的时间延迟

(1) 丢包处理

  • **增加带宽:**通过升级网络设备和服务增加带宽,减少丢包率。
  • **优化网络设备:**使用高性能路由器、交换机等设备,确保数据包顺利传输。
  • **使用可靠传输协议:**如TCP协议,通过确认和重传机制保证数据传输的可靠性。
  • **重传机制:**在检测到丢包时,重新发送数据包。

(2) 延迟处理

  • **优化路由和网络路径:**选择 最优路径 传输数据,减少中间节点和跳数。
  • **使用内容分发网络(CDN):**在接近用户的位置缓存内容,减少传输距离和时间。
  • **减少中间节点:**通过直连方式减少数据传输中的中间节点,降低延迟。

▶ 端口的有效范围

范围 描述
0-1023 系统保留端口(知名服务)
1024-49151 用户端口(注册服务和应用)
49152-65535 动态端口(临时连接)

TCP 的 nagle 算法,nagle会带来什么坏处?

  • (1) Nagle算法的目的
    • 减少小包:通过 将小数据包合并成大包发送,减少网络中小包的数量
    • 提高效率:减少每个包的协议开销,提高传输效率,减少网络拥塞
  • (2) Nagle算法的工作原理
    发送策略:当发送方有小数据包需要发送时,如果前一个数据包的ACK未收到,新的小数据包会被缓冲,等待前一个包的ACK到达或缓冲区积累到足够大的数据量再发送
  • (3) Nagle算法的坏处
    **增加延迟:**在实时性要求高的应用中,如在线游戏、即时通讯等,Nagle算法的延迟会影响用户体验。

▶ 什么是MTU?如何处理MTU过小的问题?

MTU (最大传输单元)指网络层协议数据包在数据链路层的最大传输字节数**。典型值为1500字节(以太网)。

  • **MTU 的重要性:**MTU 的大小直接影响网络的效率和性能。
    如果 数据包大于 MTU,必须进行分片传输,分片会增加额外的开销,并可能导致重组的负担
    过小的 MTU 会导致数据包数量增加,增加了网络负担

处理 MTU 过小问题的方法

(1) 路径MTU发现(Path MTU Discovery,PMTUD)

  • 描述: 路径 MTU 发现是一个动态确定路径上最小 MTU 的过程,通过发现路径上的所有路由器的 MTU 大小,确定最小的 MTU 以避免分片
  • **工作原理:**发送带有 DF(Don't Fragment)标志的数据包,如果某个路由器无法转发这个数据包,它会丢弃该数据包并返回一个 ICMP "需要分片但设置了 DF 标志"的消息。源主机根据此消息调整 MTU 大小,直到找到合适的 MTU。
  • **优点:**动态调整 MTU,避免不必要的分片,提高网络效率。
  • **缺点:**依赖于 ICMP 消息,某些网络环境下 ICMP 消息可能被过滤或丢弃,导致路径 MTU 发现失败。

(2) 手动调整 MTU

  • 描述:手动设置网络接口的 MTU 值以匹配网络环境。
  • 适用场景:在已知的网络环境中,可以手动配置适当的 MTU 值,避免分片问题。
  • 优点:简单直接,可以在网络设备上直接配置。
  • 缺点:需要对网络环境有明确的了解,不灵活。

(3) MSS(Maximum Segment Size)调整

  • **描述:**TCP 协议中使用 MSS 来指定传输层能够发送的最大数据段大小,MSS 通常设置为 MTU 减去 TCP/IP 头部的大小。
  • **工作原理:**在建立 TCP 连接时,通过 TCP 握手过程协商 MSS,确保数据段不会超过接收端的 MTU,避免分片。
  • **优点:**在 TCP 层面进行控制,适用于 TCP 连接。
  • **缺点:**仅适用于 TCP 连接,无法解决其他协议的 MTU 问题。

(4) 使用较小的 MTU 值

  • **描述:**为网络接口配置较小的 MTU 值,以确保所有路径上的 MTU 都大于等于该值,避免分片。
  • **适用场景:**在不确定路径 MTU 的情况下,可以设置保守的 MTU 值,以确保数据包不会被分片。
  • **优点:**简单易行,能够避免分片。
  • **缺点:**可能降低网络传输效率,增加数据包数量。

▶ IPV4 和 IPV6的区别

IPV4 IPV6
地址空间 32位地址 ,约43亿个地址,面临 地址耗尽 问题。 128位地址,支持约340万亿亿个地址,解决地址耗尽问题。
安全性: 无内置安全性,依赖外部协议(如IPsec)提供安全性。 内置IPsec协议,提供更好的**安全**性。
NAT支持 由于地址耗尽问题,广泛 使用NAT(网络地址转换)。 地址丰富,无需NAT,支持端到端通信。
其他特性 支持自动配置、多播、任播,更高效的路由和报头格式。

▶ 什么是 NAT

  • 网络地址转换(NAT) :在路由器或防火墙上,将私有网络地址转换为公有网络地址,允许多个设备共享一个公有IP地址
  • NAT的作用
    • 解决IPv4地址耗尽问题:通过地址转换,多个设备共享一个公有IP地址,缓解IPv4地址短缺。
    • 提高网络安全性:隐藏内部网络结构,防止外部攻击。

▶ 为什么要IP分片?

(1) IP分片的概念
将大于MTU的数据包分割成多个小包传输,在接收方重新组装成完整的数据包。
(2) 需要IP分片的原因

  • 适应不同MTU: 不同网络设备可能有不同的MTU,分片确保数据包能够通过所有网络设备
  • 避免数据包丢弃:****如果数据包过大而无法通过某个网络设备,分片可以避免数据包被丢弃

▶ 什么是多路复用?如何使用select/poll/epoll?

多路复用 (Multiplexing)允许一个单独的进程同时监控多个文件描述符 ,以查看是否有任何一个文件描述符准备好了进行I/O操作 。这种技术在需要同时处理大量并发连接的网络服务器中非常有用 ,因为它可以有效地提高系统的资源利用率和响应速度

常见的多路复用机制:select、poll、epoll:

select

  • **1)**创建一个文件描述符集合(fd_set)。
  • **2)**将需要监控的文件描述符添加到集合中。
  • **3)**调用 select 函数,并传递文件描述符集合和超时时间。
  • **4)**select 函数返回准备好进行 I/O 操作的文件描述符数量。
  • **优点:**简单易用,几乎在所有平台上都可用。
  • **缺点:**在处理大量文件描述符时性能较差,因为每次调用 select 都需要遍历所有文件描述符。

Poll

  • **1)**创建一个 pollfd 结构数组,并将需要监控的文件描述符添加到数组中。
  • **2)**调用 poll 函数,并传递文件描述符数组和超时时间。
  • **3)**poll 函数返回准备好进行 I/O 操作的文件描述符数量。
  • **优点:**没有文件描述符数量限制。
  • **缺点:**在处理大量文件描述符时性能仍然较差,因为每次调用 poll 都需要遍历整个数组

Epoll

  • **1)**使用 epoll_create 创建一个 epoll 实例。
  • **2)**使用 epoll_ctl 添加、修改或删除需要监控的文件描述符。
  • **3)**使用 epoll_wait 等待事件,并获取准备好进行 I/O 操作的文件描述符。
  • **优点:**性能优越,适用于大量并发连接的场景;不需要每次调用都遍历所有文件描述符。
  • **缺点:**仅在 Linux 系统上可用。

▶ 如何通过Socket实现可靠数据传输?

(1) 序列号和确认号

  • **序列号:**标识数据包的顺序,确保接收方按正确顺序组装数据。
  • **确认号:**接收方发送确认号,通知发送方已成功接收的数据。

(2) 超时重传

  • **超时机制:**在指定时间内未收到确认,发送方重传数据包,确保数据到达。

(3) 流量控制

  • **接收窗口:**接收方通过接收窗口通知发送方当前可接收的数据量,避免缓冲区溢出。

(4) 拥塞控制

  • **拥塞窗口:**发送方根据网络状况调整拥塞窗口大小,避免网络拥塞,提高传输效率。

▶ 什么是HTTPS?与HTTP的区别?

  • **HTTPS (HyperText Transfer Protocol Secure,超文本传输协议安全版)**是安全版的 HTTP。它通过 SSL/TLS 协议对数据进行加密,确保数据在客户端和服务器之间的传输过程中不会被窃听或篡改。
  • HTTPS 的工作原理
    1. **建立连接:**客户端(浏览器)向服务器发送 HTTPS 请求。服务器返回 SSL/TLS 证书,包含公钥和服务器身份信息。
    2. **身份验证:**客户端验证服务器的证书是否由可信的 CA(证书颁发机构)签发,并且证书是否有效。
    3. **加密密钥协商:**客户端生成一个会话密钥,并使用服务器的公钥加密这个会话密钥,然后发送给服务器。服务器使用自己的私钥解密会话密钥,双方都拥有相同的会话密钥。
    4. **加密通信:**双方使用会话密钥对数据进行加密和解密,确保传输的数据不会被窃听或篡改。
特性 HTTP HTTPS
协议 超文本传输协议 超文本传输协议安全版
端口 80 443
安全性 数据以明文形式传输,容易被窃听和篡改 数据通过 SSL/TLS 加密传输 ,确保数据的**安全性**和完整性
证书 不需要证书 需要 SSL/TLS 证书来验证服务器身份
开销 较低的处理开销 加密和解密过程增加了一定的处理开销
SEO 搜索引擎对 HTTP 站点的排名较低 搜索引擎更倾向于 HTTPS 站点,排名较高
应用场景 适用于一般的非敏感数据传输 适用于需要保护敏感数据的传输,如银行、电子商务等

▶ 什么是 SSL/TLS?基本工作流程是什么?

  • SSL 安全套接层 (Secure Sockets Layer)和 TLS 传输层安全 (Transport Layer Security)是用于在网络上建立安全连接的协议。SSL/TLS 通过 加密数据传输、认证服务器和客户端身份、并保证数据完整性,确保通信的安全性。
  • TLS 是 SSL 的升级版本,提供了更强的安全性。

SSL/TLS 的基本工作流程

1)客户端问候(Client Hello)

客户端 向服务器发送一个 "Client Hello" 消息,消息中包含客户端支持的 SSL/TLS 协议版本、加密算法列表、压缩方法以及一个随机数(Client Random)。

2)服务器问候(Server Hello)

服务器 接收到 "Client Hello" 消息后,选择一个协议版本、加密算法和压缩方法,并将这些选择通过 "Server Hello" 消息返回给客户端。同时,服务器也会生成一个随机数(Server Random)。

3)服务器证书(Server Certificate)

服务器 向客户端发送其 SSL/TLS 证书,证书中包含服务器的公钥以及由 CA(证书颁发机构)签名的服务器身份信息。

4)服务器密钥交换(Server Key Exchange)

如果使用的加密算法需要,服务器 还会发送一个 "Server Key Exchange" 消息,包含 Diffie-Hellman 参数或其他密钥交换信息。

5)服务器问候完成(Server Hello Done)

服务器 发送一个 "Server Hello Done" 消息,表示服务器端的问候阶段已完成。

6)客户端密钥交换(Client Key Exchange)

客户端 生成一个预主密钥(Pre-Master Secret),用服务器的公钥加密该预主密钥,然后发送给服务器。

7)会话密钥生成(Session Key Generation)

客户端和服务器 分别使用之前的 Client Random、Server Random 和预主密钥生成主密钥(Master Secret),并从主密钥中派生出会话密钥(Session Keys),这些密钥用于对后续的数据传输进行加密。

8)客户端完成(Client Finished)

客户端 发送一个 "Finished" 消息,包含所有握手消息的哈希值并用会话密钥加密,表示客户端的握手阶段已完成。

9)服务器完成(Server Finished)

服务器 接收到 "Client Finished" 消息后,也发送一个 "Finished" 消息,包含所有握手消息的哈希值并用会话密钥加密,表示服务器的握手阶段已完成。

10)加密数据传输(Encrypted Data Transfer)

客户端和服务器 使用会话密钥对后续的数据进行加密和解密,确保数据传输的机密性和完整性。

▶ HTTP 1.1、2.0、3.0之间的区别

(1) HTTP/1.1

1)持久连接:

​ **描述:**HTTP/1.0 每次请求需要建立一个新的 TCP 连接,而 HTTP/1.1 引入了持久连接,允许多个请求和响应复用一个 TCP 连接,减少了连接建立和关闭的开销。

​ **优点:**减少了频繁建立和关闭连接的开销,提升了传输效率。

​ **缺点:**等待一个请求的响应结束才能发送下一个请求,会出现头阻塞问题。

2)管道化:

​ **描述:**允许客户端在发送第一个请求之后,未等待其响应就发送第二个请求。虽然理论上可以提高效率,但在实际中由于中间节点和服务器对管道化支持不佳,头阻塞问题严重,因此并未广泛采用。

​ **优点:**可以提高请求的并发性,减少整体响应时间。

​ **缺点:**头阻塞问题严重,实际应用中支持不佳。

3)分块传输编码:

​ **描述:**服务器在响应体未知大小时可以使用分块传输编码,将数据分成若干块进行传输,每个块都有自己的大小标识,接收端根据块大小逐一接收并组装。

​ **优点:**支持大文件和流式数据的传输。

4)缓存机制:

​ **描述:**提供了丰富的缓存控制头部字段,如 Cache-Control、ETag、Expires 等,用于控制客户端和代理服务器的缓存行为。

​ **优点:**提升了资源的利用效率,减少了重复请求。

(2)HTTP/2.0

1)二进制协议:

​ **描述:**相较于 HTTP/1.1 的文本协议,HTTP/2.0 使用二进制格式传输,解析更高效且减少了协议解析中的错误。

​ **优点:**提高了数据传输的效率和可靠性。

2)多路复用:

​ **描述:**在一个 TCP 连接上同时发送多个请求和响应(并行传输),每个请求/响应对应一个流 (Stream),通过流标识区分不同的请求和响应,避免了 HTTP/1.1 中的头阻塞问题。

​ **优点:**解决了头阻塞问题,提高了连接的利用率。

3)头部压缩:

​ **描述:**使用 HPACK 算法对头部进行压缩,显著减少了头部大小,尤其是对于频繁重复的头部字段,如 Cookie。

​ **优点:**减少了头部信息的传输开销,提高了传输速度。

4)服务器推送:

​ **描述:**服务器可以在客户端未明确请求时主动推送资源,提高页面加载速度。例如,服务器在响应 HTML 文档时,可以同时推送相关的 CSS、JS 文件。

​ **优点:**减少了客户端的请求次数,提升了用户体验。

5)流优先级:

​ **描述:**客户端可以为每个流设置优先级,告诉服务器哪些资源更重要,应该优先传输,提升关键资源的加载速度。

​ **优点:**提升了重要资源的传输速度。

(3)HTTP/3.0

1)基于 QUIC:

​ **描述:**HTTP/3.0 使用基于 UDP 的 QUIC 协议而不是 TCP,QUIC 提供了类似 TCP 的可靠传输和连接管理,但具备更低的延迟和更好的抗丢包性能。QUIC 的握手结合了传输层和 TLS 的握手过程,使得连接建立速度更快。

​ **优点:**避免了 TCP 层的头阻塞问题,提高了连接建立速度和抗丢包性能。

2)内置加密:

​ **描述:**默认使用 TLS 1.3 加密,QUIC 协议本身包含加密机制,提供更高的安全性,简化了配置和部署。

​ **优点:**提供了更高的安全性和隐私保护。

3)无头阻塞:

​ **描述:**QUIC 的多路复用特性避免了 TCP 中的头阻塞问题,即使某个流的数据丢失,也不会阻塞其他流的数据传输。

​ **优点:**提高了整体数据传输的效率和可靠性。

4)更快的连接建立:

​ **描述:**QUIC 通过结合 TLS 和传输层握手,通常只需一次往返时间 (RTT) 就能完成连接建立,相比 TCP+TLS 通常需要两次往返时间,大幅减少了连接建立时间。

​ **优点:**显著减少了连接建立时间,提升了用户体验。

5)改进的错误恢复:

​ **描述:**QUIC 协议中,每个数据包都有独立的序列号,丢包时可以仅重传丢失的数据包,不像 TCP 需要重传整个窗口的数据,提高了网络效率。

​ **优点:**提高了数据传输的可靠性和效率。

(4)底层原理详细解析

1)持久连接和多路复用

HTTP/1.1 持久连接: 使用 Connection: keep-alive 头部字段来保持连接,多个请求复用一个 TCP 连接,减少了频繁建立和关闭连接的开销。

HTTP/2.0 多路复用: 基于帧 (Frame) 的概念,每个 HTTP 消息被拆分成多个帧,每个帧都有流标识 (Stream Identifier),这些帧可以在一个 TCP 连接中并行传输,接收端根据流标识重新组装。

2)头部压缩

HTTP/1.1: 每个请求和响应的头部字段都是完整的文本格式,容易造成冗余,尤其是在多次请求相同资源时。

HTTP/2.0: 使用 HPACK 算法,对头部字段进行动态表 (Dynamic Table) 和静态表 (Static Table) 压缩,大大减少了重复头部字段的传输开销。

3)QUIC 和 TCP 的区别

TCP: 基于连接的传输协议,提供可靠的数据传输,但建立连接需要三次握手,且丢包时整个连接受影响。

QUIC: 基于 UDP,但提供类似 TCP 的可靠性和顺序保证,同时结合 TLS 加密,减少连接建立时间,具备更好的抗丢包性能,适用于高延迟和不稳定的网络环境。

▶ HTTP1.0 和 HTTP1.1 的区别

  • ⻓连接:使⽤⻓连接的⽅式改善了 HTTP/1.0 短连接造成的性能开销
    HTTP1.1 ⽀持⻓连接,每⼀个TCP连接上可以传送多个HTTP请求和响应,
    HTTP1.0 默认为短连接,每次请求都需要建⽴⼀个TCP连接。
  • 支持管道化网络传输:只要第⼀个请求发出去了,不必等其回来,就可以发第⼆个请求出去,可以减少整体的响应时间
    基于 HTTP1.1 的⻓连接,使得请求管线化成为可能。管线化使得请求能够"并⾏"传输,但是响应必须按照请求发出的顺序依次返回,性能在⼀定程度上得到了改善。
  • 缓存
    HTTP1.0 主要使⽤ If-Modified-Since/Expires 来做为缓存判断的标准
    HTTP1.1 则引⼊了更多的缓存控制策略例如 Entity tag / If-None-Match 等更多可供选择的缓存头来控制缓存策略。
  • 增加Host字段
    使得⼀个服务器能够⽤来创建多个 Web 站点。
  • 状态码
    新增了24个错误状态响应码
  • 带宽优化
    HTTP1.0 中,存在⼀些浪费带宽的现象,例如客户端只是需要某个对象的⼀部分,⽽服务器却将整个对象送过来了,并且不⽀持断点续传功能
    HTTP1.1 则在请求头引⼊了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content)

▶ HTTP2.0 和 HTTP1.1 的区别

HTTP/2 协议是基于 HTTPS 的

  • (1)⼆进制分帧
    HTTP/2 不再像 HTTP/1.1 ⾥的纯⽂本形式的报⽂,⽽是采⽤了⼆进制格式,收到报文后直接解析⼆进制报⽂,这增加了数据传输的效率。
    头信息和数据体都是⼆进制,并且统称为帧(frame): 头信息帧(Headers Frame)和数据帧(Data Frame) 。
  • (2)多路复⽤/并发传输
    同⼀个连接中, HTTP 完成⼀个事务(请求与响应),才能处理下⼀个事务,也就是说在发出请求等待响应的过程中,是没办法做其他事情的,如果响应迟不来,那么后续的请求是⽆法发送的,也造成了队头阻塞的问题。
    允许同时通过单⼀的 HTTP/2 连接发起多个的请求-响应消息,HTTP/2 可以并⾏交错地发送请求和响应。这个强⼤的功能则是基于"⼆进制分帧"的特性。
  • (3)⾸部压缩:支持对头部数据压缩,减少数据量、提高速度
    若同时发出多个请求,他们的头是⼀样的或是相似的,那么,协议会帮
    你消除重复的部分。
    HTTP1.1 不⽀持 header 数据的压缩, HTTP/2.0 使⽤ HPACK 算法对 header的数据进⾏压缩,这样数据体积⼩了,在⽹络上传输就会更快。⾼效的压缩算法可以很⼤的压缩 header ,减少发送包的数量从⽽降低延迟。
  • (4)服务端推送
    在 HTTP/2 中,服务器可以对客户端的⼀个请求发送多个响应,即 服务器可以额外的向客户端推送资源,⽽⽆需客户端明确的请求

▶ webSocket是什么?与HTTP的区别

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,允许服务器和客户端之间进行实时、双向的数据传输**,特别适用于需要频繁更新数据的应用,如在线聊天、游戏、股票行情推送等。

WebSocket 的工作原理

**1)建立连接:**WebSocket 连接从 HTTP 请求开始,客户端发送一个带有特殊头部字段的 HTTP 请求到服务器,表示希望升级到 WebSocket 协议。这个请求被称为"握手"请求。服务器响应握手请求,确认可以切换协议。握手成功后,HTTP 连接升级为 WebSocket 连接。

**2)数据传输:**建立连接后,客户端和服务器之间可以通过这个单一的 WebSocket 连接进行双向通信。WebSocket 使用帧(frame)来传输数据。帧可以包含文本数据或二进制数据,且通信时无须每次都携带头部信息,减少了传输开销。

**3)关闭连接:**连接可以由客户端或服务器任意一方主动关闭,通过发送一个关闭帧。另一方收到关闭帧后,会发送一个关闭帧以确认关闭,然后连接被终止。

特性 HTTP WebSocket
通信模式 请求-响应模式,单向通信 全双工通信,双向通信
连接方式 每个请求/响应需要独立的 TCP 连接 通过单个长连接进行多次数据传输
头部信息 每个请求和响应都包含完整的头部信息 仅在握手阶段有头部信息,之后的帧通信无需头部信息
实时性 由于每次请求都需要建立连接,实时性较差 长连接方式,实时性强
数据传输效率 头部开销大,每次请求都需要传输完整头部信息 帧的开销小,适合高频率、低延迟的数据传输
使用场景 适合普通的网页浏览和静态内容获取 适合实时数据传输和需要频繁更新数据的应用,例如聊天、游戏、股票行情等
连接状态保持 无状态协议,每次请求都是独立的 有状态协议,保持连接状态,支持状态管理

计网性能和优化

负载均衡及其常见方法

  • 负载均衡 (Load Balancing)是一种分布式计算技术,通过 将工作负载和请求分配到多个服务器(或其他计算资源)上,来优化资源使用、提高响应速度、增加系统的可用性和稳定性负载均衡器 (Load Balancer)是执行这一任务的设备或软件,其主要目标是 确保没有单一服务器被过度使用,从而避免性能瓶颈和系统故障。
算法 描述 优点 缺点
轮询 依次将请求分配给每台服务器 简单易实现,适用于负载均衡需求较低的场景 不考虑服务器的当前负载和处理能力,可能导致负载不均衡
加权轮询 为每台服务器分配权重,权重高的接收更多请求 考虑了服务器的处理能力,能更好地分配负载 权重设置和调整需要根据实际情况优化
最小连接数 将请求分配给当前活动连接数最少的服务器 动态调整,适合长连接的场景 需要持续跟踪服务器的连接数,计算量较大
加权最小连接数 在最小连接数的基础上引入权重概念 结合了权重和最小连接数的优点,能更精确地分配负载 需要实时跟踪服务器状态,增加了一定的复杂性
源地址哈希 根据客户端IP地址的哈希值将请求分配到固定的服务器 适用于需要会话保持的场景 服务器数量变化时,哈希算法可能导致请求重新分配
随机 随机选择一台服务器处理请求 简单易实现,适用于负载均衡需求较低的场景 不考虑服务器的当前负载和处理能力,可能导致负载不均衡
最小响应时间 将请求分配给平均响应时间最短的服务器 能动态适应服务器的负载情况,适用于对响应时间要求较高的场景 需要实时监控和统计服务器的响应时间,增加了实现复杂性

常见的网络性能瓶颈

(1)带宽不足

​ **1)描述:**网络链路的带宽不足以支持当前的流量需求,导致拥塞和延迟增加。

​ **2)解决方案:**升级带宽、优化流量管理、实施 QoS(服务质量)策略。
(2)高延迟

​ **1)描述:**数据包在网络中传输的时间过长,影响应用程序的响应时间和用户体验。

​ **2)解决方案:**优化路由、减少中间节点、使用 CDN 加速内容分发。
(3)丢包

​ **1)描述:**网络中数据包的丢失会导致重传,增加延迟并降低传输效率。

​ **2)解决方案:**检查和修复网络设备和链路故障、优化网络配置、实施流量控制策略。
(4)网络设备性能不足

​ **1)描述:**路由器、交换机或防火墙等网络设备的性能不足,无法处理当前的流量负载。

​ **2)解决方案:**升级网络设备、优化设备配置、分布流量负载。
(5)网络抖动

​ **1)描述:**数据包延迟的变化不稳定,特别是对于实时应用(如语音、视频)影响较大。

​ **2)解决方案:**优化网络路径、实施 QoS 策略、减少网络拥塞。
(6)DNS 解析慢

​ **1)描述:**DNS 服务器的响应时间过长,导致域名解析延迟。

​ **2)解决方案:**使用更快的 DNS 服务器、实施 DNS 负载均衡、优化 DNS 缓存。

网络带宽及其优化方法

(1) 网络带宽

  • 网络带宽 是指网络能够传输数据的最大速率 ,通常以**比特每秒(bps)**为单位表示。带宽越大,网络传输能力越强

(2) 优化方法

  • **增加带宽:**升级网络设备,如交换机、路由器等。购买更高带宽的网络服务。
  • **数据压缩:**使用压缩技术减少传输的数据量,从而提高有效带宽利用率。
  • **负载均衡:**使用负载均衡技术将流量分配到多个服务器上,避免单点过载。
  • **网络缓存:**使用缓存技术减少重复传输的内容,提高传输效率。
  • 流量控制:实施 流量控制策略,防止网络拥塞,确保重要数据优先传输。

如何优化网络性能?

(1) 增加带宽

​ **1)升级网络带宽:**根据需求升级带宽,以支持更高的数据传输速率,减少拥塞和延迟。

​ **2)链路聚合(Link Aggregation):**将多个网络接口绑定在一起,形成一个逻辑接口,提高带宽和冗余性。
(2)优化网络设备

​ **1)升级网络设备:**使用性能更高的路由器、交换机、防火墙等设备,支持更高的吞吐量和并发连接数。

​ **2)合理配置设备:**调整设备配置以支持QoS(服务质量)、流量控制和负载均衡等功能,确保关键应用的性能。
(3)实施QoS策略

​ **1)定义优先级:**通过QoS策略,为不同类型的流量(如语音、视频、数据)分配优先级,确保关键应用的带宽和响应时间。

​ **2)流量整形:**限制低优先级流量的带宽使用,防止其影响高优先级流量。
(4)使用CDN(内容分发网络)

​ **1)内容缓存:**将静态内容(如图片、视频、文件等)缓存到离用户更近的CDN节点,减少传输延迟,提高访问速度。

​ **2)分布式负载:**通过CDN将流量分布到多个节点,减轻源服务器的负载,提高整体性能。
(5)优化协议

​ **1)HTTP/2和HTTP/3:**使用更高效的HTTP协议版本(如HTTP/2和HTTP/3),支持多路复用、头部压缩和服务器推送,减少延迟和开销。

​ **2)TCP优化:**调整TCP窗口大小、使用SACK(Selective Acknowledgement)和TFO(TCP Fast Open)等技术,提高传输效率。

​ **3)UDP优化:**对于实时应用(如语音、视频),使用QUIC等基于UDP的高效传输协议。
(6)减少延迟

​ **1)路径优化:**选择最优的路由路径,减少中间节点和跳数,降低传输延迟。

​ **2)DNS优化:**使用快速的DNS服务器、启用DNS缓存和负载均衡,减少域名解析时间。
(7)减少丢包率

​ **1)网络可靠性:**检查和修复网络设备和链路,确保硬件的稳定性和可靠性,减少丢包。

​ **2)流量控制:**避免网络过载,使用流量整形和拥塞控制技术,减少丢包率。
(8)使用压缩技术

​ **1)数据压缩:**在传输数据前进行压缩,减少传输的数据量,提高传输效率。

​ **2)协议压缩:**如HTTP压缩(gzip、brotli),压缩HTTP头部和内容,提高传输速度。

如何确保数据传输的安全性

  • (1) 加密
    • TLS/SSL: 使用 TLS/SSL 协议加密传输层的数据,确保数据在传输过程中不被窃听和篡改。
    • 端到端加密(E2EE): 在发送端对消息进行加密,在接收端进行解密,确保只有通信双方能够查看消息内容。
  • (2) 身份验证
    • **OAuth:**使用 OAuth 协议进行 身份验证和授权,确保只有经过授权的用户才能访问资源。
    • **JWT(JSON Web Token):**使用 JWT 进行身份验证,确保请求的合法性和安全性。
  • (3) 安全协议
    • **HTTPS:**使用 HTTPS 协议传输数据,确保传输层的安全性。
    • **IPsec:**使用 IPsec 协议在网络层对数据进行加密和认证,确保数据包的完整性和保密性。
  • (4) 安全实践
    • **防火墙和入侵检测系统(IDS):**部署防火墙和 IDS,检测和防止网络攻击。
    • **安全审计和监控:**定期进行安全审计和监控,及时发现和修复安全漏洞。

QoS服务质量

  • QoS(Quality of Service,服务质量) 是一种技术,用于管理和保证网络服务的性能、可靠性和可用性。QoS 的主要目标是提供不同级别的服务质量,以满足不同应用和用户的需求。QoS 通过优先级调度、流量整形、带宽管理等机制,确保关键应用和服务的优先传输。
  • 机制
    (1)优先级调度(Priority Scheduling)
    **1)描述:**基于数据包的优先级(如高、中、低)进行调度,确保高优先级的数据包优先通过网络。
    **2)作用:**提高关键应用的响应速度和可靠性。
    (2)流量整形(Traffic Shaping)
    **1)描述:**控制流量的传输速率,使其符合预设的带宽限制,避免突发流量
    **2)作用:**平滑流量,防止链路过载。
    (3)带宽管理和分配(Bandwidth Management and Allocation)
    **1)描述:**为不同的应用和服务分配预定的带宽,确保关键应用有足够的带宽使用。
    **2)作用:**保证关键业务的带宽需求,防止低优先级流量占用过多带宽。

CDN 内容分发网络

  • CDN (Content Delivery Network,内容分发网络)是一种通过在全球范围内部署多个服务器节点,帮助用户更快速、更稳定地访问网站内容的技术 。CDN 的主要目标是提高内容传输的速度和可靠性,减小服务器负载,提升用户体验
  • CDN 的优势
    • **加速内容传输:**通过将内容缓存到靠近用户的节点,减少了传输延迟,提高了访问速度。
    • **减轻源站负载:**大量请求由 CDN 节点处理,减少了源站服务器的压力,提高了网站的稳定性。
    • **提高可用性:**CDN 节点分布在全球各地,即使某些节点发生故障,其他节点仍可以继续提供服务,保证网站的高可用性。
    • **安全性增强:**CDN 可以提供 DDoS 攻击防护、WAF(Web 应用防火墙)等安全功能,保护源站服务器免受恶意攻击。
    • **带宽优化:**通过缓存和内容优化,减少了冗余数据传输,节省了带宽资源。
相关推荐
8125035331 小时前
计算机网络全栈连载计划
linux·网络·网络协议·计算机网络
崎岖Qiu10 小时前
【计算机网络 | 第十二篇】「网络层」概述与服务模型
网络·笔记·计算机网络
崎岖Qiu13 小时前
【计算机网络 | 第十三篇】网络层服务的两种实现方式:无连接和面向连接
网络·笔记·计算机网络
一切顺势而行17 小时前
计算机网络基础
网络·计算机网络
2401_8883135020 小时前
【程序人生-Hello’s P2P】
计算机网络·ubuntu
小叮当⇔1 天前
计算机网络实验——华为eNSP模拟器常用命令总结
服务器·计算机网络·华为
崎岖Qiu2 天前
【计算机网络 | 第十一篇】图解交换机的自学习功能
网络·学习·计算机网络
REDcker2 天前
DNS技术详解
服务器·后端·计算机网络·互联网·dns·服务端
月明长歌2 天前
网络原理初识:从“几台电脑各干各的”到“数据包跨网段飞奔”的一整套思维模型
网络·计算机网络·电脑·php