(二)网络

网络

1、URL从输入到响应的流程

image-20250211134614161

image-20250211134701302

  • 用户浏览器输入URL(https://www.example.com
  • URL 解析
    • 浏览器解析 URL,提取以下信息
      • 协议(如 https):决定使用哪种协议与服务器通信
      • 域名(如 www.example.com):需要解析为服务器的 IP 地址
      • 端口(如 443,默认隐藏):决定访问服务器的哪个服务
      • 路径(如 /index.html):指定请求的资源路径
      • 查询参数(如 ?id=123):传递给服务器的额外数据
  • DNS 解析
    • 缓存判断
      • 浏览器检查请求的资源是否在缓存中,在的话,直接使用缓存
    • 不在缓存中,浏览器向本地 DNS 服务器发送域名解析请求
      • 本地 DNS 服务器逐级查询,最终返回目标服务器的 IP 地址
  • 建立TCP连接
    • 通过 IP 地址和端口与服务器建立 TCP 连接
    • 三次握手
      • 客户端发送 SYN 包(同步请求)到服务器
      • 服务器回复 SYN-ACK 包(同步确认)
      • 客户端发送 ACK 包(确认),连接建立
    • 如果是HTTPS
      • 在 TCP 连接建立后,进行 TLS/SSL 握手,协商加密算法和交换密钥,建立安全连接
  • 发送HTTP请求
    • 浏览器向服务器发送 HTTP 请求:
      • 请求行:包含请求方法(如 GET)、路径和协议版本
      • 请求头:包含浏览器信息、缓存策略、Cookie 等
      • 请求体(如 POST 请求):包含提交的数据
  • 服务器处理请求并返回响应
    • 服务器根据请求内容处理请求
      • 如果是静态资源,直接读取文件
      • 如果是动态资源,执行相关程序生成响应
    • 服务器返回 HTTP 响应,包含状态码、响应头和响应体(如 HTML 文件)
  • 浏览器渲染页面
    • 浏览器解析响应内容(如 HTML、CSS、JavaScript),渲染页面并显示给用户

注意:为什么需要MAC地址

  • 数据包在网络中传输时,既需要 IP 地址 来确定目标设备的位置,也需要 MAC 地址 来完成实际的物理传输。

  • 两者分层使用

    • 网络层 使用 IP 地址 进行逻辑寻址,决定数据包的传输路径
    • 数据链路层 使用 MAC 地址 进行物理寻址,确保数据包在本地网络中正确传递
  • 因此,即使知道了 IP 地址,仍然需要通过 ARP 协议 获取 MAC 地址,才能完成数据包的发送。

    类比理解

    可以将 IP 地址 比作邮寄地址(如“北京市海淀区xx路xx号”),而 MAC 地址 比作收件人的身份证号。邮递员(路由器)根据邮寄地址找到正确的街道(网络),但最终需要身份证号(MAC 地址)确认收件人(设备)的身份,才能将信件(数据包)准确送达。

  • 1问:TCP连接除了IP地址还需要什么?

    • 端口号用于标识一个主机上的特定服务或进程
  • 2问:流程在传输层做了什么事情?

    • 建立连接:TCP三次握手,这个过程会确定双方的初始序列化和滑动窗口大小
      • SYN
      • SYN-ACK
      • ACK
    • 数据传输:
      • 数据分段:TCP将应用层数据分割成较小的段,并为段添加TCP头
      • 发送数据:客户端发送TCP段给服务器
      • 确认接收:发送ACK确认
      • 流量控制:客户端根据服务器的ACK和窗口大小调整发送速度
      • 超时重传:若客户端未收到ACK,会在超时重传后重传丢失的TCP段
    • 关闭连接:四次挥手
      • FIN:客户端 -> 请求关闭
      • ACK:服务器 -> 确认收到
      • FIN:服务器 -> 请求关闭
      • ACK:客户端 -> 确认收到
  • 3问:流程在网络层做了什么事情?

    • 将TCP段封装成IP数据包:TCP 段 → IP 数据包,设置 IP 地址和头部
      • 传输层的TCP段,传输到网络层,将其封装成IP数据包,设置源IP地址和目的IP地址,并添加IP头部信息
    • 路由选择与分片:根据路由表转发,超过 MTU 则分片
      • 路由器根据目标IP地址和路由表进行路由选择
      • 如果数据包大小超过MTU(最大传输单元),路由器会将其分片
    • 数据包传输:经过多个路由器,TTL 递减
      • 数据包在网络中传输,经过多个路由器
      • 每个路由器根据路由表转发数据包,并递减 TTL(生存时间)
      • 如果 TTL 减为 0,数据包被丢弃
    • 数据包到达目的主机
      • 目的主机接收 IP 数据包,重组分片,传递 TCP 段
  • 4问:TCP有TCP的分段,IP层有IP分片。这两个有什么区别?现在用的是哪个

    • TCP分段
      • 发生位置:传输层
      • 触发条件:当应用层数据超过 MSS(最大段大小)
      • 操作:将大数据块分成多个较小的 TCP 段,每个段包含 TCP 头部
      • 重组:接收方根据序列号将 TCP 段重新组装成完整数据,传递给应用层
    • IP分片
      • 发生位置:网络层
      • 触发条件:当 IP 数据包超过链路层的 MTU(最大传输单元)
      • 操作:将 IP 数据包分成多个较小的分片,每个分片包含 IP 头部
      • 重组:目的主机根据标识、标志和片偏移将分片重组为原始 IP 数据包,传递给传输层
    • TCP 如何避免 IP 分片
      • 原因
        • IP 分片后,只有第一个分片包含 TCP 头部,丢失一个分片会导致整个数据包重传,效率低
        • 多次分片和重组增加网络设备开销
      • 方法
        • TCP 在建立连接时协商 MSS(通常为 MTU 减去 IP 和 TCP 头部长度,如以太网中 MSS = 1460 字节)
        • 将数据分成 MSS 大小的段,避免 IP 分片

2、拥塞控制

慢启动、拥塞避免
超时重传
对超时重传进行优化,即快速重传,外加快速恢复
快速重传是为了优化超时重传机制,快速重传可以单独使用,后面也可以接着快速恢复一块使用。

总结--TCP拥塞控制

  • 核心目标是避免网络拥塞,同时充分利用网络带宽;动态调整拥塞窗口来控制发送方的发送速率

    • 慢启动(指数增长)

    • 拥塞避免(线性增长)

      • 达到慢启动门限
    • 快速重传

      • 触发条件:发送方收到 3 个重复的 ACK
      • 调整窗口
        • 将 ssthresh 设置为当前 cwnd 的一半
        • 将 cwnd 设置为 ssthresh + 3 MSS(因为收到 3 个重复 ACK)
        • 然后进入快速恢复阶段
    • 快速恢复

      • 目标:在快速重传后,避免将拥塞窗口(cwnd)直接降到 1(像超时重传那样),而是尝试保持较高的发送速率

      • 具体操作:

        1. 调整窗口:

          • 每收到一个重复 ACK,cwnd 增加 1 MSS

          • 每收到一个新数据的 ACK,cwnd 设置为 ssthresh

            每次收到重复 ACK,意味着一个报文已离开网络(被接收方确认),此时增加 cwnd 可以立即填充空缺,避免带宽浪费。
            
            在快速恢复阶段:
            每收到一个重复 ACK:cwnd += 1 MSS
            (理由:一个报文已确认离开网络,允许发送一个新报文)
            每收到一个新数据的 ACK:cwnd = ssthresh
            (理由:确认丢失的报文已重传成功,退出快速恢复,进入拥塞避免阶段)
            
        2. 结束条件

          1. 当收到新数据的 ACK 后,退出快速恢复,进入拥塞避免阶段
    • 超时重传

      • 目标:当网络拥塞严重时,通过超时机制重新调整发送速率
      • 流程
        1. 检测超时:发送方未收到 ACK,触发超时重传
        2. 调整窗口:
          • 将 ssthresh 设置为当前 cwnd 的一半
          • 将 cwnd 重置为 1 MSS
        3. 重新开始慢启动
  • 为什么这样设计?

    • 快速重传:通过重复 ACK 快速检测丢包,避免等待超时重传计时器,减少延迟。

    • 快速恢复:

      • 避免将 cwnd 降到 1,保持较高的发送速率,充分利用网络带宽

      • 通过调整 ssthresh 和 cwnd,平滑过渡到拥塞避免阶段,避免网络拥塞

  • 连接建立,cwnd = MSS,进入慢启动阶段,每收到一个 ACK,cwnd 翻倍,发送数据量不断增加。

image-20250211160129765

  • 当 cwnd 达到 ssthresh,进入拥塞避免阶段,cwnd 线性增长。

    image-20250211160237053

  • 如果发生超时,ssthresh 减半,cwnd 重置为 MSS(1 个MSS),重新进入慢启动。

image-20250211160408746

  • 当发送方收到三个重复的 ACK 时,认为数据包丢失,但不是因为网络拥塞,而是可能某个数据包的乱序。在快速重传之后,发送方进入快速恢复阶段。通常将 ssthresh 减半,cwnd 设置为 ssthresh 加上 3 倍的 MSS(因为收到了三个重复的 ACK),并继续发送新数据。

    image-20250211160858579

    image-20250324232308000

快速重传是为了优化超时重传机制,快速重传可以单独使用,后面也可以接着快速恢复一块使用。

3、计网分层结构

  • OSI七层模型
    • 物理层
      • 负责在物理网络中传输数据帧(比特流)
      • 想象物理层就像电线、光纤等物理介质,负责传输0和1的比特流
    • 数据链路层
      • 负责数据的封帧、差错检测和MAC寻址
      • 数据链路层就像邮局的打包员,负责将数据打包成帧,并检查是否有错误
    • 网络层
      • 负责数据的路由、转发和分片
      • 网络层就像快递公司的调度员,负责决定数据包的最佳路径
    • 传输层
      • 负责端到端的数据传输,确保数据的可靠性和完整性
      • 传输层就像快递员,确保数据从发送方准确无误地送到接收方
    • 会话层
      • 负责建立、管理和终止会话
      • 会话层就像电话接线员,负责建立和维持通信会话
    • 表示层
      • 负责数据的格式转换、加密和解密
      • 表示层就像翻译官,负责将数据转换成对方能理解的格式
    • 应用层
      • 负责为应用程序提供统一的接口
      • 应用层就像用户界面,直接与用户交互
  • TCP/IP四层模型
    • 网络接口层
      • 负责通过物理介质传输数据
      • 网络接口层就像网络的基础设施,负责实际的物理连接
    • 网络层
      • 负责IP寻址和路由
      • 网络层就像导航系统,负责找到数据包的最佳路径
    • 传输层
      • 负责端到端的通信,主要协议有TCP和UDP
      • 传输层就像快递员,确保数据准确送达
    • 应用层
      • 负责应用程序之间的通信,常见协议有HTTP、FTP、SMTP等
      • 应用层就像用户界面,直接与用户交互
  • 两者区别
    • OSI模型
      • 通用的、理论化的框架,适用于所有类型的网络通信
      • 由于过于理想化,OSI模型在实际实现中显得复杂且不够灵活
    • TCP/IP模型
      • 解决实际的网络通信问题,特别是跨网络的数据传输
      • 更注重实用性和效率,设计上更加简洁,去掉了OSI模型中一些不必要的层次

4、TCP三次握手|四次挥手|为什么

  • 三次握手
    • 第一次 SYN
      • 客户端发送一个 SYN 报文(SYN=1,seq=x)给服务端,表示请求建立连接
      • 客户端进入 SYN_SENT 状态
    • 第二次 SYN + ACK
      • 服务端收到 SYN 报文后,回复一个 SYN + ACK 报文(SYN=1,ACK=1,seq=y,ack=x+1)
      • 服务端进入 SYN_RCVD 状态
    • 第三次 ACK
      • 客户端收到 SYN + ACK 报文后,回复一个 ACK 报文(ACK=1,seq=x+1,ack=y+1)
      • 客户端和服务端都进入 ESTABLISHED 状态,连接建立成功
  • 三次原因
    • 防止历史连接初始化(核心原因)
      • 三次握手可以避免旧的重复连接请求(历史连接)被误认为是新的连接请求
      • 在两次握手的情况下,服务端没有中间状态给客户端来阻止历史连接,导致服务端可能建立一个历史连接,造成资源浪费
    • 同步双方的初始序列号
      • 三次握手确保客户端和服务端的初始序列号(ISN)能够被双方确认
      • 四次握手其实也能够可靠的同步双方的初始化序号,但由于第二步和第三步可以优化成一步,所以就成了「三次握手」
    • 避免资源浪费
      • 如果是两次握手,服务端在收到 SYN 报文后就会建立连接,如果客户端没有收到 ACK 报文,会重复发送 SYN 报文,导致服务端建立多个无效连接,浪费资源
  • 四次挥手
    • 第一次(FIN)
      • 客户端发送一个 FIN 报文(FIN=1,seq=u)给服务端,表示客户端不再发送数据
      • 客户端进入 FIN_WAIT_1 状态
    • 第二次(ACK)
      • 服务端收到 FIN 报文后,回复一个 ACK 报文(ACK=1,seq=v,ack=u+1)
      • 服务端进入 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态
    • 第三次(FIN)
      • 服务端发送一个 FIN 报文(FIN=1,seq=w,ack=u+1)给客户端,表示服务端也不再发送数据
      • 服务端进入 LAST_ACK 状态
    • 第四次(ACK)
      • 客户端收到 FIN 报文后,回复一个 ACK 报文(ACK=1,seq=u+1,ack=w+1)
      • 客户端进入 TIME_WAIT 状态,等待 2MSL 后关闭连接
      • 服务端收到 ACK 报文后,进入 CLOSED 状态
  • 四次原因
    • 四次不能合并为三次的原因?
      • 如果尝试将四次挥手合并为三次挥手,会导致服务端在收到客户端的 FIN 报文后,无法确保自己是否还有未发送完的数据。因此,服务端需要先发送 ACK 确认客户端的 FIN 报文,再发送自己的 FIN 报文
        • 服务端可能还有未发送完的数据,直接关闭连接会导致数据丢失
        • 客户端在收到 FIN + ACK 报文后,会认为连接已经关闭,但实际上服务端可能还在发送数据

image-20250116212535479

image-20250110193221039

image-20250110193259523

image-20250110193830454

image-20250110194730570

image-20250110195205197

image-20250110195239475

image-20250116195742540

image-20250116212721036

5、HTTP原理 | HTTPS

  • HTTP原理
    • 定义
      • HTTP 是应用层协议,用于在 Web 浏览器Web 服务器 之间传输超文本数据
    • 特点
      • 基于TCP协议
        • 依赖于 TCP 协议,发送 HTTP 请求前需要完成 TCP 三次握手
      • 请求-响应模型
        • 客户端(如浏览器)发送请求,服务器返回响应
        • 请求结构
          • 请求行、请求头、请求体
        • 响应结构
          • 状态行、响应头、响应体
      • 无状态协议
        • 无状态性:每个请求都是独立的,服务器不会记住之前的请求信息
        • 通过 CookieSession 等技术实现状态管理(如登录状态、购物车)
      • 支持多种数据类型
        • 通过 Content-Type 响应头指定数据类型,通过 Accept 请求头表达客户端需求
  • HTTP/1.1 请求拆包机制
    • 拆包原理
      • HTTP/1.1 通过 Content-Length 头字段 来指示请求正文的长度,服务器根据该长度正确接收和解析请求
    • 具体流程
      • 客户端发送请求
        • 在请求头中添加 Content-Length 字段,值为请求正文的字节数
      • 服务器接收请求
        • 根据 Content-Length 的值,从请求中读取相应数量的字节
        • 确保读取完整的请求内容,避免丢失或截断

image-20250126131318247

http和https的区别是什么?¥¥¥美团测试一面¥¥¥

区别主要有以下四点:

  • HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  • 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

6、TCP | UDP

  • 区别

    • 连接方式
      • TCP:面向连接,传输数据前需要先建立连接
      • UDP:无连接,直接传输数据
    • 服务对象
      • TCP:一对一,一条连接只有两个端点
      • UDP:支持一对一、一对多、多对多的交互通信
    • 可靠性
      • TCP:可靠交付,数据无差错、不丢失、不重复、按序到达
      • UDP:尽最大努力交付,不保证可靠性
    • 拥塞控制与流量控制
      • TCP:有拥塞控制和流量控制机制,保证数据传输安全
      • UDP:没有拥塞控制和流量控制,发送速率不受网络拥堵影响
    • 首部开销
      • TCP:首部较长,通常为 20 字节(可扩展)
      • UDP:首部固定为 8 字节,开销较小
    • 传输方式
      • TCP:流式传输,无边界,保证顺序和可靠
        • 无边界:发送方发送了 3 次数据(每次 100 字节),接收方可能一次性收到 300 字节,或者分多次收到(如 200 字节 + 100 字节)。TCP 只保证数据的顺序和完整性,不保证接收方按发送方的分段方式接收数据
      • UDP:数据包传输,有边界,可能丢包和乱序
  • UDP如何保证可靠性?

    • UDP 本身不可靠,但可以通过 QUIC 协议 实现类似 TCP 的可靠性传输(如 HTTP/3 使用 QUIC)
    • QUIC 的关键特性
      • 连接迁移:支持网络变化时快速迁移连接(如 WiFi 切换到移动数据)。
      • 重传机制:确保丢失的数据包能够重新发送。
      • 前向纠错:接收端修复部分丢失数据,减少重传需求。
      • 拥塞控制:动态调整传输速率,避免网络拥塞。

7、滑动窗口

  • 滑动窗口
    • 作用
      • 流量控制
        • 通过调整窗口大小,控制发送方的发送速率,避免接收方缓冲区溢出
        • 接收方通过告知发送方自己的可用缓冲区大小(窗口大小),来限制发送方的数据发送量
      • 可靠传输
        • 通过确认机制(ACK)和重传机制,确保数据能够按序、可靠地传输
        • 发送方只有在收到接收方的确认后,才会滑动窗口并发送新的数据
    • 概念
      • 窗口大小
        • 表示发送方可以连续发送的数据量,单位是字节
        • 窗口大小由接收方通过 TCP 报文中的窗口字段(Window Field)告知发送方
      • 发送窗口
        • 发送方维护的一个窗口,表示当前可以发送的数据范围
        • 三部分
          • 已发送并确认的数据:发送方已经发送且收到接收方确认的数据
          • 已发送但未确认的数据:发送方已经发送但尚未收到接收方确认的数据
          • 未发送的数据:发送方可以发送但尚未发送的数据
      • 接收窗口
        • 接收方维护的一个窗口,表示当前可以接收的数据范围
        • 三部分
          • 已接收并确认的数据:接收方已经接收并确认的数据
          • 未接收但可接收的数据:接收方可以接收但尚未接收的数据
          • 不可接收的数据:接收方缓冲区已满,无法接收的数据
    • 工作流程
      • 初始化
      • 发送数据
      • 接收数据
      • 确认数据
      • 窗口滑动

8、TCP中 TIME_WAIT 状态

2. 为什么需要 TIME_WAIT 状态?

TIME_WAIT 的核心目的是:

  1. 可靠终止连接:确保最后一个 ACK 能到达服务端(被动关闭方)。

    • 如果 ACK 丢失,服务端会重传 FIN,客户端需要保留状态以重新响应。
  2. 消除旧连接的残留报文:防止延迟或重复的报文干扰后续的新连接。

  • TIME_WAIT 状态的定义
    • 发生
      • 在 TCP 四次挥手中,主动关闭连接的一方在发送最后一个 ACK 报文后,会进入 TIME_WAIT 状态
      • 持续时间:通常持续 2MSL(最大报文段生存时间),MSL 是 TCP 报文在网络中的最大生存时间
    • 作用
      • 问题
        • 在网络中,TCP 连接由四元组(源 IP、源端口、目标 IP、目标端口)唯一标识。
        • 如果旧的连接关闭后,立即使用相同的四元组建立新连接,网络中可能还存在旧的延迟数据包,这些数据包可能会被错误地传递给新连接,导致数据混乱
      • 解决方案
        • 主动关闭方在 TIME_WAIT 状态期间,会等待 2MSL 时间,确保网络中所有旧的延迟数据包都被丢弃
        • 这样可以防止旧的数据包干扰新的连接

image-20250324220109330

9、为什么是2MSL,而不是1MSL

接上一个。

2MSL主要是为了,客户端在收到FIN之后,发送一个ACK,这个ACK传到服务器端需要一个MSL,如果没有传到,一个MSL之后,服务器端会再发送一个FIN报文,客户端收到这个,可能也需要一个MSL,所以2MSL 可以确保服务器端在未收到ACK之后,仍然能够接受到服务器端重发的FIN报文。

也就是下面的理解:
为什么要2MSL时间呢
	为了保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因而使处于在LAST-ASK状态的B收不到对己发送的FIN-ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。接着A重传一次确认,重新启动2MSL计时器,最后的A和B都正常进入CLOSED状态。

3. 为什么是 2MSL,而不是 1MSL?

2MSL 的等待时间是为了覆盖以下两种极端情况

  1. 客户端最后一个 ACK 丢失
    • 服务端未收到 ACK 会重传 FIN 报文。
    • FIN 报文最多存活 1MSL 到达客户端。
    • 客户端需要 再等待 1MSL 确保能处理这个重传的 FIN(即回复新的 ACK)。
    • 因此,总时间为 1MSL(FIN 存活) + 1MSL(ACK 存活) = 2MSL
  2. 旧连接的残留报文失效
    • 网络中可能残留旧连接的报文(如延迟的 FIN 或数据包)。
    • 等待 2MSL 可确保所有属于该连接的报文都已消失,避免被新连接误收。

4. 如果只等待 1MSL 会怎样?

  • 若客户端在 1MSL 后关闭连接,而服务端重传的 FIN 仍在网络中(存活时间 ≤1MSL),可能导致:
    • 客户端已关闭连接,无法响应重传的 FIN,服务端会一直处于 LAST_ACK 状态(资源泄漏)。
    • 残留报文可能被后续相同四元组(源/目的 IP+端口)的新连接接收,导致数据混乱。

10、TCP 中 CLOSE_WAIT 状态

¥¥¥美团测试一面¥¥¥
ESTABLISHED表示正在通信,TIME_WAIT表示主动关闭,CLOSE_WAIT表示被动关闭。
如果服务端主动关闭连接,那么服务端就会先发送fin,最后要有个2MSL的TIME-WAIT。如果服务端在一段时间内主动关闭的连接比较多,则服务端会有大量的TIME-WAIT状态的连接要等2MSL时间,在Windows下默认为4分钟。
CLOSE_WAIT是被动关闭连接是形成的。根据TCP状态机,服务器端收到客户端发送的FIN,则按照TCP实现发送ACK,因此进入CLOSE_WAIT状态。但如果服务器端不执行close(),就不能由CLOSE_WAIT迁移到LAST_ACK,则系统中会存在很多CLOSE_WAIT状态的连接。此时,可能是系统忙于处理读、写操作,而未将已收到FIN的连接,进行close。此时,recv/read已收到FIN的连接socket,会返回0。
TIME_WAIT 和CLOSE_WAIT状态socket过多
如果服务器出了异常,百分之八九十都是下面两种情况:

1.服务器保持了大量TIME_WAIT状态

2.服务器保持了大量CLOSE_WAIT状态,简单来说CLOSE_WAIT数目过大是由于被动关闭连接处理不当导致的。

因为linux分配给一个用户的文件句柄是有限的,而TIME_WAIT和CLOSE_WAIT两种状态如果一直被保持,那么意味着对应数目的通道就一直被占着,而且是“占着茅坑不使劲”,一旦达到句柄数上限,新的请求就无法被处理了,接着就是大量Too Many Open Files异常,Tomcat崩溃。
服务器A是一台爬虫服务器,它使用简单的HttpClient去请求资源服务器B上面的apache获取文件资源,正常情况下,如果请求成功,那么在抓取完资源后,服务器A会主动发出关闭连接的请求,这个时候就是主动关闭连接,服务器A的连接状态我们可以看到是TIME_WAIT。如果一旦发生异常呢?假设请求的资源服务器B上并不存在,那么这个时候就会由服务器B发出关闭连接的请求,服务器A就是被动的关闭了连接,如果服务器A被动关闭连接之后程序员忘了让HttpClient释放连接,那就会造成CLOSE_WAIT的状态了。

所以如果将大量CLOSE_WAIT的解决办法总结为一句话那就是:查代码。因为问题出在服务器程序里头啊。

9、DNS

  • DNS
    • 解析流程
      • 客户端向本地 DNS 服务器发起请求
      • 本地 DNS 服务器查询缓存
      • 根域名服务器响应
        • 根域名服务器不直接解析域名,但会告诉本地 DNS 服务器下一步该找谁
        • 根域名服务器发现 www.server.com 的后缀是 .com,于是返回 .com 顶级域名服务器的地址
      • 顶级域名服务器响应
        • 顶级域名服务器返回负责 server.com 的权威 DNS 服务器的地址
      • 权威 DNS 服务器响应
        • 权威 DNS 服务器返回 www.server.com 对应的 IP 地址
      • 本地 DNS 服务器缓存并返回结果
    • 使用协议
      • 使用 UDP 协议进行域名解析和数据传输
      • 尽管 UDP 存在丢包和数据包损坏的风险,但 DNS 通过以下机制提高可靠性
        • 查询超时重传:如果未收到响应,DNS 会重新发送请求
        • 请求重试:DNS 客户端可以配置多个 DNS 服务器,依次尝试
        • 缓存:DNS 服务器和客户端都会缓存解析结果,减少重复查询

image-20250117095742348

10、ping

¥¥¥美团测试一面¥¥¥
  • ping
    • 使用ICMP协议
      • ICMP 是专门为网络诊断设计的协议
        • ICMP 提供了内置的错误处理机制(如目标不可达、超时等),适合网络诊断
        • ping 命令通过发送 ICMP Echo 请求并等待 Echo 回应来测试网络连通性
      • UDP 不适合网络诊断
        • UDP 是无连接的协议,不提供内置的错误报告机制
        • 如果使用 UDP 实现类似 ping 的功能,需要应用程序自己实现错误检测和报告逻辑,增加了复杂性

11、TCP/IP 协议族

  • TCP/IP 协议族的四层模型

  •   端到端:传输层,即端口号
      点到点:网络接口层+网络层,即MAC地址和ip地址
    
    • TCP/IP 协议族通常分为四层,每一层负责不同的功能:

      层级 功能 典型协议
      应用层 提供应用程序之间的通信和数据交换 HTTP、HTTPS、FTP、SMTP、DNS、Telnet、SSH、SNMP 等
      传输层 提供端到端的数据传输服务,确保数据的可靠性和完整性 TCP(传输控制协议)、UDP(用户数据报协议)
      网络层 负责数据包的路由和转发,实现主机之间的通信 IP(互联网协议)、ICMP(互联网控制报文协议)、ARP(地址解析协议)、IGMP 等
      网络接口层 负责物理介质上的数据传输,包括硬件设备(如网卡)和数据链路协议 Ethernet(以太网)、Wi-Fi、PPP(点对点协议)等
  • 各层核心协议详解

    • 应用层
      • 功能:为应用程序提供网络服务接口。
      • 典型协议
        • HTTP/HTTPS:用于网页浏览。
        • FTP:文件传输。
        • SMTP/POP3/IMAP:电子邮件传输。
        • DNS:域名解析。
        • SSH:安全的远程登录。
        • SNMP:网络管理。
    • 传输层
      • 功能:提供端到端的通信服务,确保数据的可靠传输。
      • 典型协议
        • TCP
          • 面向连接,提供可靠的数据传输。
          • 支持流量控制、拥塞控制和错误恢复。
          • 适用于需要高可靠性的场景(如网页浏览、文件传输)。
        • UDP
          • 无连接,提供不可靠的数据传输。
          • 传输效率高,延迟低。
          • 适用于实时性要求高的场景(如视频流、在线游戏)。
    • 网络层
      • 功能:负责数据包的路由和转发,实现主机之间的通信。
      • 典型协议
        • IP
          • 提供无连接的数据包传输服务。
          • 分为 IPv4 和 IPv6 两个版本。
        • ICMP
          • 用于发送错误报告和控制消息(如 ping 命令)。
        • ARP
          • 将 IP 地址解析为物理地址(MAC 地址)。
        • IGMP
          • 用于组播通信。
    • 网络接口层
      • 功能:负责物理介质上的数据传输。
      • 典型协议
        • Ethernet:最常见的局域网技术。
        • Wi-Fi:无线局域网技术。
        • PPP:点对点通信协议。
  • TCP/IP 的工作流程

    1. 数据封装
      • 数据从应用层向下传递,每层添加自己的头部信息(封装)。
      • 最终通过网络接口层发送到物理介质。
    2. 数据传输
      • 数据通过网络设备(如路由器、交换机)转发到目标主机。
    3. 数据解封装
      • 目标主机从网络接口层向上传递,逐层解析头部信息(解封装)。
      • 最终将数据传递给目标应用程序。
posted @ 2025-04-09 13:25  墨羽寻觅  阅读(35)  评论(0)    收藏  举报