欢迎光临
我们一直在努力

计算机网络:从分层模型到 TCP/IP、HTTP 与网络排查

计算机网络的本质,是让不同设备在遵守同一套规则的前提下交换数据。我们平时访问网页、刷视频、发送消息、远程登录服务器、调用接口,本质上都是数据在网络中被拆分、封装、传输、转发、重组和解析的过程。

这篇文章会从整体视角介绍计算机网络的核心知识,包括网络分层、IP、TCP、UDP、DNS、HTTP、HTTPS、常见网络设备以及排查思路。

1. 为什么需要计算机网络

如果两台计算机彼此独立,它们只能处理本地数据。网络的出现,使计算机之间可以共享资源、传递消息和协同工作。

常见场景包括:

  • 浏览器访问网站
  • 手机 App 调用后端接口
  • 服务之间通过 RPC 或 HTTP 通信
  • 数据库远程连接
  • 文件上传下载
  • 即时通信、视频会议、直播
  • 云服务器、容器和微服务之间的通信

计算机网络解决的核心问题可以概括为:

  • 如何找到目标机器
  • 如何把数据发送过去
  • 如何保证数据不乱、不丢、不重复
  • 如何让不同程序识别彼此的数据格式
  • 如何在不可信网络中保证安全
  • 2. 网络分层模型

    网络通信非常复杂,所以通常会采用“分层”的方式理解和设计。

    经典模型有两个:

    • OSI 七层模型
    • TCP/IP 四层模型

    2.1 OSI 七层模型

    层级名称作用常见协议或设备
    第 7 层 应用层 面向应用程序,定义数据格式和交互规则 HTTP、FTP、SMTP、DNS
    第 6 层 表示层 数据编码、压缩、加密 TLS、JPEG、UTF-8
    第 5 层 会话层 管理会话连接 RPC 会话、登录状态
    第 4 层 传输层 端到端传输,处理可靠性和端口 TCP、UDP
    第 3 层 网络层 IP 寻址和路由转发 IP、ICMP、路由器
    第 2 层 数据链路层 局域网内传输,MAC 地址寻址 Ethernet、交换机
    第 1 层 物理层 电信号、光信号、无线信号传输 网线、光纤、网卡

    OSI 模型更偏理论,便于学习和定位问题。

    2.2 TCP/IP 四层模型

    实际工程中更常用 TCP/IP 模型。

    层级名称对应 OSI常见协议
    第 4 层 应用层 应用层、表示层、会话层 HTTP、DNS、SMTP
    第 3 层 传输层 传输层 TCP、UDP
    第 2 层 网络层 网络层 IP、ICMP
    第 1 层 网络接口层 数据链路层、物理层 Ethernet、Wi-Fi

    可以简单理解为:

    • 应用层:数据要表达什么
    • 传输层:数据如何送到对应进程
    • 网络层:数据如何送到对应主机
    • 网络接口层:数据如何在具体链路上传输

    3. 数据是如何被发送出去的

    假设你在浏览器访问:

    https://example.com/index.html

    大致过程如下:

  • 浏览器解析 URL
  • 通过 DNS 查询域名对应的 IP 地址
  • 与目标服务器建立 TCP 连接
  • 如果是 HTTPS,还要进行 TLS 握手
  • 浏览器发送 HTTP 请求
  • 服务器返回 HTTP 响应
  • 浏览器解析 HTML、CSS、JavaScript 并渲染页面
  • 连接复用或关闭
  • 数据在发送时会被逐层封装:

    应用层数据
    ↓ 加上 TCP 头
    TCP 报文段
    ↓ 加上 IP 头
    IP 数据包
    ↓ 加上以太网头和尾
    以太网帧
    ↓ 转换成电信号、光信号或无线信号
    物理传输

    接收方则按相反方向逐层解封装。

    4. IP 地址:网络中的主机标识

    IP 地址用于标识网络中的一台主机。

    常见的 IPv4 地址类似:

    192.168.1.10
    8.8.8.8

    IPv4 地址由 32 位二进制组成,通常写成四段十进制数字。

    4.1 公网 IP 和私网 IP

    公网 IP 可以在互联网中直接路由,私网 IP 通常只在局域网内部使用。

    常见私网地址范围:

    私网地址段示例
    10.0.0.0/8 10.1.2.3
    172.16.0.0/12 172.16.1.10
    192.168.0.0/16 192.168.1.100

    家用路由器、公司内网、容器网络中经常使用私网 IP。

    4.2 子网掩码与网段

    IP 地址通常会搭配子网掩码,用于判断两个地址是否在同一网段。

    例如:

    IP: 192.168.1.10
    掩码: 255.255.255.0
    CIDR: 192.168.1.10/24

    /24 表示前 24 位是网络号,剩余 8 位是主机号。

    同一网段中的机器可以直接通过二层网络通信;不同网段之间通信通常需要经过网关或路由器。

    5. MAC 地址:局域网中的设备标识

    IP 地址用于跨网络寻址,MAC 地址用于局域网内寻址。

    MAC 地址通常长这样:

    00:1A:2B:3C:4D:5E

    当一台机器要在局域网内发送数据时,需要知道目标 IP 对应的 MAC 地址。这时会使用 ARP 协议。

    5.1 ARP 的作用

    ARP 用于根据 IP 地址查询 MAC 地址。

    例如,主机 A 想找 192.168.1.20 的 MAC 地址,会在局域网广播:

    谁是 192.168.1.20?请告诉 192.168.1.10

    目标机器收到后回复自己的 MAC 地址。

    6. TCP:可靠的传输协议

    TCP 是面向连接、可靠、有序的传输协议。

    它常用于:

    • HTTP/HTTPS
    • MySQL
    • SSH
    • SMTP
    • FTP

    TCP 主要解决:

    • 数据是否送达
    • 数据是否有序
    • 数据是否重复
    • 网络拥塞时如何控制发送速度
    • 接收方处理不过来时如何进行流量控制

    6.1 TCP 三次握手

    TCP 通信前需要建立连接,这个过程叫三次握手。

    服务端客户端服务端客户端#mermaid-svg-k1e1wEGYIJUsPSdw{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-k1e1wEGYIJUsPSdw .error-icon{fill:#552222;}#mermaid-svg-k1e1wEGYIJUsPSdw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-k1e1wEGYIJUsPSdw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-k1e1wEGYIJUsPSdw .marker.cross{stroke:#333333;}#mermaid-svg-k1e1wEGYIJUsPSdw svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-k1e1wEGYIJUsPSdw p{margin:0;}#mermaid-svg-k1e1wEGYIJUsPSdw .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-k1e1wEGYIJUsPSdw text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-k1e1wEGYIJUsPSdw .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-k1e1wEGYIJUsPSdw .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-k1e1wEGYIJUsPSdw #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-k1e1wEGYIJUsPSdw .sequenceNumber{fill:white;}#mermaid-svg-k1e1wEGYIJUsPSdw #sequencenumber{fill:#333;}#mermaid-svg-k1e1wEGYIJUsPSdw #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-k1e1wEGYIJUsPSdw .messageText{fill:#333;stroke:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-k1e1wEGYIJUsPSdw .labelText,#mermaid-svg-k1e1wEGYIJUsPSdw .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .loopText,#mermaid-svg-k1e1wEGYIJUsPSdw .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-k1e1wEGYIJUsPSdw .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-k1e1wEGYIJUsPSdw .noteText,#mermaid-svg-k1e1wEGYIJUsPSdw .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-k1e1wEGYIJUsPSdw .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-k1e1wEGYIJUsPSdw .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-k1e1wEGYIJUsPSdw .actorPopupMenu{position:absolute;}#mermaid-svg-k1e1wEGYIJUsPSdw .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-k1e1wEGYIJUsPSdw .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-k1e1wEGYIJUsPSdw .actor-man circle,#mermaid-svg-k1e1wEGYIJUsPSdw line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-k1e1wEGYIJUsPSdw :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}SYNSYN + ACKACK

    简单理解:

  • 客户端:我想和你建立连接
  • 服务端:可以,我也准备好了
  • 客户端:确认,我们开始通信
  • 三次握手的目的,是确认双方的发送和接收能力都正常。

    6.2 TCP 四次挥手

    连接关闭通常需要四次挥手。

    服务端客户端服务端客户端#mermaid-svg-QVHFpsCLQFlp00eW{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QVHFpsCLQFlp00eW .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QVHFpsCLQFlp00eW .error-icon{fill:#552222;}#mermaid-svg-QVHFpsCLQFlp00eW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QVHFpsCLQFlp00eW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QVHFpsCLQFlp00eW .marker.cross{stroke:#333333;}#mermaid-svg-QVHFpsCLQFlp00eW svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QVHFpsCLQFlp00eW p{margin:0;}#mermaid-svg-QVHFpsCLQFlp00eW .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-QVHFpsCLQFlp00eW text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-QVHFpsCLQFlp00eW .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-QVHFpsCLQFlp00eW .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-QVHFpsCLQFlp00eW .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-QVHFpsCLQFlp00eW .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-QVHFpsCLQFlp00eW #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-QVHFpsCLQFlp00eW .sequenceNumber{fill:white;}#mermaid-svg-QVHFpsCLQFlp00eW #sequencenumber{fill:#333;}#mermaid-svg-QVHFpsCLQFlp00eW #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-QVHFpsCLQFlp00eW .messageText{fill:#333;stroke:none;}#mermaid-svg-QVHFpsCLQFlp00eW .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-QVHFpsCLQFlp00eW .labelText,#mermaid-svg-QVHFpsCLQFlp00eW .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-QVHFpsCLQFlp00eW .loopText,#mermaid-svg-QVHFpsCLQFlp00eW .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-QVHFpsCLQFlp00eW .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-QVHFpsCLQFlp00eW .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-QVHFpsCLQFlp00eW .noteText,#mermaid-svg-QVHFpsCLQFlp00eW .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-QVHFpsCLQFlp00eW .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-QVHFpsCLQFlp00eW .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-QVHFpsCLQFlp00eW .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-QVHFpsCLQFlp00eW .actorPopupMenu{position:absolute;}#mermaid-svg-QVHFpsCLQFlp00eW .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-QVHFpsCLQFlp00eW .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-QVHFpsCLQFlp00eW .actor-man circle,#mermaid-svg-QVHFpsCLQFlp00eW line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-QVHFpsCLQFlp00eW :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}FINACKFINACK

    因为 TCP 是全双工通信,双方都可以独立发送和关闭自己的数据流,所以关闭连接通常比建立连接多一步。

    6.3 TCP 为什么可靠

    TCP 的可靠性主要来自这些机制:

    • 序列号:标记数据顺序
    • 确认应答:接收方告诉发送方哪些数据收到了
    • 超时重传:超过时间未确认则重发
    • 滑动窗口:提升传输效率
    • 流量控制:避免接收方被压垮
    • 拥塞控制:避免网络被打满

    7. UDP:更轻量的传输协议

    UDP 是无连接、不保证可靠、不保证顺序的传输协议。

    它的特点是:

    • 开销小
    • 延迟低
    • 不需要建立连接
    • 不负责重传和排序

    常见使用场景:

    • DNS 查询
    • 视频直播
    • 语音通话
    • 在线游戏
    • QUIC/HTTP/3 底层传输

    UDP 并不是“不好”,而是把可靠性控制交给了应用层。对于实时音视频来说,偶尔丢一两个包可能比等待重传更可接受。

    8. TCP 和 UDP 对比

    对比项TCPUDP
    是否连接 面向连接 无连接
    可靠性 可靠传输 不保证可靠
    顺序 保证顺序 不保证顺序
    速度 相对较慢 相对较快
    开销 较大 较小
    典型场景 网页、数据库、SSH DNS、直播、游戏、语音

    选择 TCP 还是 UDP,本质取决于业务更看重可靠性还是实时性。

    9. DNS:把域名转换成 IP

    人更容易记住域名,计算机通信需要 IP 地址,所以需要 DNS。

    例如:

    www.example.com -> 93.184.216.34

    DNS 查询大致过程:

  • 查浏览器缓存
  • 查操作系统缓存
  • 查本地 hosts 文件
  • 请求本地 DNS 服务器
  • 递归查询根域名服务器、顶级域名服务器、权威域名服务器
  • 返回最终 IP 地址
  • DNS 常见记录类型:

    类型作用
    A 域名指向 IPv4 地址
    AAAA 域名指向 IPv6 地址
    CNAME 域名别名
    MX 邮件服务器
    TXT 文本记录,常用于验证
    NS 指定域名服务器

    10. HTTP:应用层通信协议

    HTTP 是浏览器和服务器之间最常见的应用层协议。

    一个 HTTP 请求通常包含:

    GET /index.html HTTP/1.1
    Host: example.com
    User-Agent: Mozilla/5.0
    Accept: text/html

    一个 HTTP 响应通常包含:

    HTTP/1.1 200 OK
    Content-Type: text/html
    Content-Length: 1024

    <html>
    <body>Hello</body>
    </html>

    10.1 常见 HTTP 方法

    方法含义
    GET 获取资源
    POST 创建资源或提交数据
    PUT 整体更新资源
    PATCH 局部更新资源
    DELETE 删除资源
    HEAD 只获取响应头
    OPTIONS 查询支持的方法或跨域预检

    10.2 常见 HTTP 状态码

    状态码含义
    200 请求成功
    201 创建成功
    301 永久重定向
    302 临时重定向
    400 请求参数错误
    401 未认证
    403 无权限
    404 资源不存在
    500 服务端内部错误
    502 网关错误
    503 服务不可用
    504 网关超时

    11. HTTPS:加密的 HTTP

    HTTPS 可以理解为:

    HTTPS = HTTP + TLS

    HTTP 明文传输,容易被窃听、篡改或伪装。HTTPS 通过 TLS 提供:

    • 加密:防止内容被窃听
    • 完整性校验:防止内容被篡改
    • 身份认证:确认访问的服务端是真的

    HTTPS 握手中会涉及证书、非对称加密、对称加密和密钥协商。

    简单理解:

  • 浏览器连接服务器
  • 服务器返回证书
  • 浏览器验证证书是否合法
  • 双方协商会话密钥
  • 后续数据使用对称加密传输
  • 12. 常见网络设备

    12.1 交换机

    交换机主要工作在数据链路层,用于连接同一局域网内的设备。

    它根据 MAC 地址转发数据帧。

    12.2 路由器

    路由器主要工作在网络层,用于连接不同网络。

    它根据 IP 地址和路由表决定数据包下一跳发往哪里。

    12.3 网关

    网关通常是当前网络访问其他网络的出口。

    例如家用网络中,电脑的默认网关一般是路由器地址:

    192.168.1.1

    12.4 防火墙

    防火墙用于控制流量是否允许通过。

    它可以根据以下条件过滤流量:

    • 源 IP
    • 目标 IP
    • 端口
    • 协议
    • 连接状态
    • 应用层规则

    12.5 负载均衡器

    负载均衡器用于把请求分发到多台后端服务器。

    常见作用:

    • 提高系统吞吐
    • 避免单点故障
    • 做健康检查
    • 支持灰度发布
    • 终止 TLS

    13. NAT:私网访问公网的关键

    很多设备使用私网 IP,但私网 IP 不能直接在互联网中路由。NAT 用于把私网地址转换成公网地址。

    家里多台设备访问互联网时,外部看到的通常是同一个公网 IP。路由器通过端口映射区分不同内部连接。

    例如:

    192.168.1.10:50001 -> 公网IP:30001
    192.168.1.11:50002 -> 公网IP:30002

    NAT 节省了 IPv4 地址,但也让外部主动访问内网设备变得更复杂。

    14. 端口:定位具体进程

    IP 地址定位主机,端口定位主机上的具体进程。

    常见端口:

    端口协议
    22 SSH
    53 DNS
    80 HTTP
    443 HTTPS
    3306 MySQL
    5432 PostgreSQL
    6379 Redis
    8080 常见 Web 服务端口

    例如:

    192.168.1.10:8080

    表示访问 192.168.1.10 这台机器上的 8080 端口。

    15. 一次网页访问的完整链路

    下面用一次 HTTPS 网页访问串起来:

    #mermaid-svg-4XMUGtEsKrXaZFVG{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-4XMUGtEsKrXaZFVG .error-icon{fill:#552222;}#mermaid-svg-4XMUGtEsKrXaZFVG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4XMUGtEsKrXaZFVG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4XMUGtEsKrXaZFVG .marker.cross{stroke:#333333;}#mermaid-svg-4XMUGtEsKrXaZFVG svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4XMUGtEsKrXaZFVG p{margin:0;}#mermaid-svg-4XMUGtEsKrXaZFVG .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG .cluster-label text{fill:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG .cluster-label span{color:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG .cluster-label span p{background-color:transparent;}#mermaid-svg-4XMUGtEsKrXaZFVG .label text,#mermaid-svg-4XMUGtEsKrXaZFVG span{fill:#333;color:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG .node rect,#mermaid-svg-4XMUGtEsKrXaZFVG .node circle,#mermaid-svg-4XMUGtEsKrXaZFVG .node ellipse,#mermaid-svg-4XMUGtEsKrXaZFVG .node polygon,#mermaid-svg-4XMUGtEsKrXaZFVG .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4XMUGtEsKrXaZFVG .rough-node .label text,#mermaid-svg-4XMUGtEsKrXaZFVG .node .label text,#mermaid-svg-4XMUGtEsKrXaZFVG .image-shape .label,#mermaid-svg-4XMUGtEsKrXaZFVG .icon-shape .label{text-anchor:middle;}#mermaid-svg-4XMUGtEsKrXaZFVG .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-4XMUGtEsKrXaZFVG .rough-node .label,#mermaid-svg-4XMUGtEsKrXaZFVG .node .label,#mermaid-svg-4XMUGtEsKrXaZFVG .image-shape .label,#mermaid-svg-4XMUGtEsKrXaZFVG .icon-shape .label{text-align:center;}#mermaid-svg-4XMUGtEsKrXaZFVG .node.clickable{cursor:pointer;}#mermaid-svg-4XMUGtEsKrXaZFVG .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-4XMUGtEsKrXaZFVG .arrowheadPath{fill:#333333;}#mermaid-svg-4XMUGtEsKrXaZFVG .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-4XMUGtEsKrXaZFVG .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-4XMUGtEsKrXaZFVG .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4XMUGtEsKrXaZFVG .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-4XMUGtEsKrXaZFVG .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4XMUGtEsKrXaZFVG .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-4XMUGtEsKrXaZFVG .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-4XMUGtEsKrXaZFVG .cluster text{fill:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG .cluster span{color:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-4XMUGtEsKrXaZFVG .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG rect.text{fill:none;stroke-width:0;}#mermaid-svg-4XMUGtEsKrXaZFVG .icon-shape,#mermaid-svg-4XMUGtEsKrXaZFVG .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4XMUGtEsKrXaZFVG .icon-shape p,#mermaid-svg-4XMUGtEsKrXaZFVG .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-4XMUGtEsKrXaZFVG .icon-shape .label rect,#mermaid-svg-4XMUGtEsKrXaZFVG .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4XMUGtEsKrXaZFVG .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-4XMUGtEsKrXaZFVG .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-4XMUGtEsKrXaZFVG :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    输入网址

    DNS 解析域名

    获得服务器 IP

    建立 TCP 连接

    TLS 握手

    发送 HTTP 请求

    服务器处理请求

    返回 HTTP 响应

    浏览器渲染页面

    对应到底层网络,大致会经历:

  • 浏览器生成 HTTP 请求
  • TLS 对请求进行加密
  • TCP 拆分数据并加上端口信息
  • IP 层加上源 IP 和目标 IP
  • 数据链路层加上 MAC 地址
  • 数据通过网卡发出
  • 中间经过交换机、路由器、防火墙、负载均衡器
  • 服务端接收并逐层解析
  • 服务端返回响应
  • 客户端接收响应并展示页面
  • 16. 常见网络问题与排查思路

    网络问题通常可以从“分层”角度排查。

    16.1 无法访问网站

    可以按以下顺序检查:

  • 本机网络是否正常
  • DNS 是否解析成功
  • 目标 IP 是否可达
  • 目标端口是否开放
  • 服务端程序是否正常
  • 防火墙或安全组是否拦截
  • HTTPS 证书是否异常
  • 代理、VPN、网关是否影响链路
  • 16.2 常见命令

    查看本机 IP

    Windows:

    ipconfig

    Linux/macOS:

    ifconfig
    ip addr

    测试连通性

    ping example.com

    ping 使用 ICMP 协议,可以判断目标主机是否可达,但有些服务器会禁用 ICMP,所以 ping 不通不一定代表服务不可用。

    查看路由路径

    Windows:

    tracert example.com

    Linux/macOS:

    traceroute example.com

    查询 DNS

    nslookup example.com

    或:

    dig example.com

    测试端口

    Windows PowerShell:

    Test-NetConnection example.com Port 443

    Linux/macOS:

    nc -vz example.com 443

    查看 HTTP 响应

    curl -I https://example.com

    17. 网络性能指标

    常见网络性能指标包括:

    指标含义
    带宽 单位时间内理论可传输的数据量
    吞吐量 实际传输速度
    延迟 数据从发送到接收所需时间
    抖动 延迟的波动
    丢包率 丢失数据包的比例
    并发连接数 同时维持的连接数量

    例如视频会议更关注低延迟和低抖动,文件下载更关注吞吐量,在线游戏更关注延迟和丢包。

    18. HTTP/1.1、HTTP/2 与 HTTP/3

    18.1 HTTP/1.1

    HTTP/1.1 支持长连接,但多个请求之间仍然容易出现队头阻塞问题。

    18.2 HTTP/2

    HTTP/2 引入了多路复用、二进制帧、头部压缩等能力。

    优势包括:

    • 一个连接上并发多个请求
    • 减少连接数量
    • 降低头部开销
    • 提升页面加载性能

    18.3 HTTP/3

    HTTP/3 基于 QUIC,而 QUIC 基于 UDP。

    它的优势包括:

    • 更快的连接建立
    • 改善 TCP 层队头阻塞
    • 更适合弱网和移动网络
    • 连接迁移能力更好

    19. 网络安全基础

    网络安全不是单一技术,而是一套体系。

    常见风险包括:

    • 明文传输被窃听
    • DNS 劫持
    • 中间人攻击
    • DDoS 攻击
    • 端口暴露
    • 弱口令
    • 未授权访问
    • API 参数篡改

    常见防护手段:

    • 使用 HTTPS
    • 配置防火墙和安全组
    • 最小化暴露端口
    • 使用强密码和密钥认证
    • 对接口做身份认证和权限控制
    • 对请求参数做签名或校验
    • 开启日志和监控
    • 定期更新系统和依赖

    20. 总结

    计算机网络可以从四个核心层次理解:

  • 应用层决定“传什么内容”
  • 传输层决定“送到哪个进程,以及是否可靠”
  • 网络层决定“送到哪台主机”
  • 网络接口层决定“在具体链路上如何传输”
  • 在实际工作中,理解网络分层非常重要。它不仅能帮助我们看懂 HTTP、TCP、DNS、NAT、HTTPS 等协议,也能帮助我们更快定位问题。

    当遇到网络故障时,不要只看表面现象,可以按层排查:

    应用是否正常

    端口是否可连

    DNS 是否正确

    IP 是否可达

    路由是否正常

    链路和设备是否正常

    掌握计算机网络,不是为了背协议细节,而是为了理解数据从一个程序到另一个程序之间到底经历了什么。理解这条路径,很多看似复杂的问题都会变得清晰。

    赞(0)
    未经允许不得转载:171主机测评 » 计算机网络:从分层模型到 TCP/IP、HTTP 与网络排查
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址