Featured image of post Network

Network

1.OSI七层模型

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
发送端(电脑A)                          接收端(电脑B)
+----------------+                      +----------------+
| 应用层:Data   |                      | 应用层:Data   |
|  "Hi"          |                      |  "Hi"          |
+-------+--------+                      +-------^--------+
        |                                       |
| 表示层:Data + 表示头                    表示层:Data(剥离表示头)
+-------+--------+                      +-------^--------+
        |                                       |
| 会话层:Data + 会话头                    会话层:Data(剥离会话头)
+-------+--------+                      +-------^--------+
        |                                       |
| 传输层:Segment(Data + 端口头)        传输层:Data(剥离端口头)
+-------+--------+                      +-------^--------+
        |                                       |
| 网络层:Packet(Segment + IP头)       网络层:Segment(剥离IP头)
+-------+--------+                      +-------^--------+
        |                                       |
| 数据链路层:Frame(Packet + MAC头 + CRC)数据链路层:Packet(剥离MAC头+CRC)
+-------+--------+                      +-------^--------+
        |                                       |
| 物理层:Bits(Frame转换)               物理层:Frame(Bits转换)
+-------+--------+                      +-------^--------+
        |                                       |
        +---------------------------------------+
               物理介质(网线/无线)
OSI 层核心功能关键设备 / 组件
应用层提供应用程序之间的通信浏览器、FTP客户端、SMTP客户端
表示层数据的表示和转换加密、压缩
会话层管理会话连接会话ID
传输层端到端通信TCP、UDP
网络层跨网络路由与 IP 地址识别路由器、交换机
数据链路层帧传输与 MAC 地址识别网卡、交换机
物理层比特流传输网线、光纤

2.http1.1 和http2 区别

特性HTTP/1.1HTTP/2
传输开销文本传输,开销较大二进制流传输,开销更小
多路复用顺序加载资源,某个资源阻塞会影响后续资源单个 TCP 连接上可以同时发送多个数据流,互不阻塞
服务器推送不支持支持,服务器可在客户端请求之前推送内容
标头压缩不压缩或简单压缩,冗余信息多使用 HPACK 压缩,减少冗余,提高加载速度

3.TCP 的链接状态

alt text

4.为什么TCP是三次握手

因为三次握手才能保证双方具有接收和发送的能力。

为什么不是 2 次握手

假设需要两次

  1. 客户端发送 SYN
  2. 服务器返回 ACK
  • 假设网络拥塞中存在延迟或丢包,一个 旧的 SYN 报文残留在网络中。
  • 服务器收到残留 SYN,误认为客户端要建立新连接,返回 ACK。
  • 客户端收到 ACK,误以为连接已建立,继续发送数据。
  • 服务器收到数据,误以为是新连接的流量,错误处理。

为什么不是 4 次或更多?

3 次已经足以建立连接,4 次或更多次握手会增加复杂性和资源浪费

5.DNS 解析流程

  • 本地host 映射(优先级最高,如果有记录直接返回)
  • 客户端缓存(浏览器缓存、IOS缓存)
  • DNS Resolver(/etc/resolv.conf 指定了系统查询的 DNS 服务器(通常是本地路由器或运营商 DNS))
  • DNS 迭代查询流程(根域名服务器 -> 顶级域名服务器 -> 权威域名服务器(例如route 53))
  • 返回客户端

6.cookie、session、token

  • 存储位置不同
    • Cookie、Token 存储在客户端,Session存储在服务端
  • 数据安全性不同
    • Cookie 存储在客户端,容易被窃取,不安全
    • Session 存储在服务器端,通过一个 Session ID 在客户端和服务器之间进行关联,可以避免敏感数据直接暴露
    • Token 通常使用加密算法生成,有效期较短且单向不可逆,可以提供较高的安全性。
  • 跨域支持不同 Cookie 、Session是不支持跨域传输的但 Token 可以轻松实现跨域。因为 Token 是存储在客户端的 localStorage 或者作为请求头的一部分发送到服务器的,所以不同的域名 Token 信息传输通常是不受影响的
  • 状态管理不同
    • Cookie 是在客户端存储的,客户端可以直接操作 Cookie 进行状态管理。
    • Session 是在服务器端存储的,服务器通过 Session ID 来识别不同的用户会话。
    • Token 是在客户端生成的,客户端需要在每次请求中携带 Token 进行身份验证。
  • 应用场景不同
    • Cookie 通常用于存储用户登录状态、记住用户偏好、保持登录状态。
    • Session 适用于需要在服务器端存储用户状态的场景,购物车、表单提交等需要跟踪用户状态的场景。
    • Token 适用于需要在客户端和服务器之间进行身份验证的场景,例如 API 访问控制、单点登录(SSO)、移动应用认证等。

7.http 状态码和原因

一些高频考察的状态码

  • 301 Moved Permanently:请求的资源已被永久移动到新的位置。常用于域名切换

  • 302 Found:临时重定向,请求的资源临时移动到新的位置。(浏览器常用于登录跳转)。

  • 403 Forbidden。权限不足、有 Token 但没有权限。

  • 404 Not Found。请求的资源不存在。

  • 502 Bad Gateway。上游服务(Nginx → 应用)返回无效响应。

  • 504 Gateway Timeout。上游服务响应太慢(Nginx → 后端 timeout)。

8.linux 网络丢包排查

排查链路: 应用 → 系统 → 网络栈 → 网卡 → 云侧 → 外部链路

  1. 应用层是否丢包

    • 检查应用日志,查看是否有异常或错误信息。(超时、链接失败、接口qps 突增)
    • 模拟客户端curl/wget 直接测试
    • 通过 tcpdump 抓包验证 sudo tcpdump -i eth0 host -w app.pcap
  2. 系统层是否丢包

    • 检查网卡统计,ethtool -S eth0

      指标含义说明
      rx_dropped接收丢包NIC 或内核队列满
      rx_errors接收错误CRC、帧错误
      tx_errors发送错误没发出去
      rx_no_bufferring buffer 不够压力大常见
      rx_over_errors接收队列溢出系统瓶颈
    • 检查 Linux 网络栈层丢包 netstat -s

    • 检查内核参数

      1
      2
      3
      4
      5
      
      sysctl net.core.rmem_default
      sysctl net.core.wmem_default
      sysctl net.core.netdev_max_backlog
      sysctl net.ipv4.tcp_rmem
      sysctl net.ipv4.tcp_wmem
      
  3. 网卡队列(Ring buffer)丢包 ethtool -g eth0

  4. cpu/中断

    • 检查网卡的配置参数,确保没有设置错误导致丢包。
    • 可以使用工具如 ethtool 来查看网卡的统计信息,确认是否有丢包情况。
  5. 网络路径丢包(云侧常见) mtr -rwzbc 100

  6. 目标端丢包(对方入口打满)

1
2
3
4
5
本机
tcpdump -i eth0 host <peer> -w local.pcap

对端
tcpdump -i eth0 host <your-ip> -w remote.pcap

9. 长连接、短连接、WebSocket区别和使用场景

短连接 客户端与服务器之间的连接在每次请求完成后立即关闭。这种方式在 HTTP/1.0 中是默认行为。

  • 一次性请求的情况,比如获取静态资源(HTML、CSS、图片等)。
  • 对于不频繁交互的应用,短连接简单易用。

长连接 是指在一次 TCP 连接中,可以进行多次请求和响应,而不需要频繁地建立和关闭连接。这在 HTTP/1.1 中是默认行为。

  • 需要频繁交互的应用,例如在线聊天、实时更新的数据流(mysql、redis等)等。
  • 适合需要保持会话的场景,如电子商务网站中的购物车操作

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,允许服务器主动向客户端发送数据。支持双向通信。

  • 实时应用,如在线游戏、股票行情、社交媒体即时消息等。
  • 需要即时反馈的应用,例如协作编辑工具、在线客服等。
  • IoT(物联网)设备之间的实时通信。

10. MAC地址IP地址如何转换

ARP作用就是通过ip地址查找后转换成MAC地址,通过ARP高速缓存表存储对应关系

二层设备,发送数据帧 1、源主机先发送广播帧,将自己的IP地址和MAC地址带上,并且带上需要查找的IP地址 2、其他主机接收到后如果发现IP地址就是自己,就需要返回自己的IP地址和MAC地址,单播发送给源主机,并且在自己的高速缓存表中记录源主机的对应关系 3、源主机接收到后在高速缓存表中记录

11. lvs、nginx、haproxy区别和使用场景

  • lvs 是基于 IP 层的负载均衡器,工作在 OSI 模型的第 4 层(传输层),主要用于负载均衡 TCP 和 UDP 流量。
  • nginx 是一个高性能的 Web 服务器和反向代理服务器,也可以用作负载均衡器。它工作在 OSI 模型的第 7 层(应用层),主要用于处理 HTTP 和 HTTPS 请求。
  • haproxy 是一个开源的负载均衡器,工作在 OSI 模型的第 7 层(应用层),主要用于负载均衡 HTTP 和 HTTPS 请求。
Licensed under CC BY-NC-SA 4.0

Powered by Hugo | Theme by Stack
Deployed with GitHub Actions 🚀
使用 Hugo 构建
主题 StackJimmy 设计