当前位置: 首页 > news >正文

四大金刚之计算机网络

1. OSI 七层模型 vs TCP/IP 四层模型? 每层的功能和协议有哪些?

2. 数据封装过程?

    • 应用层
      • 数据来源:用户应用(比如浏览器发起 HTTP 请求)。
      • 操作:应用层生成原始数据(HTTP 报文)。
      • 输出:应用层数据(message)。
    • 传输层
      • 功能:负责端到端传输,标识源端口和目标端口,可靠性控制。
      • 操作:加上 传输层首部(TCP/UDP 头),包含:源端口、目的端口、序列号、校验和等。
      • 输出:段 Segment(TCP Segment / UDP Datagram)
    • 网络层
      • 功能:逻辑寻址和路由选择。
      • 操作:加上 网络层首部(IP 头),包含:源 IP 地址、目的 IP 地址、TTL、协议号等。
      • 输出:分组 Packet(IP Packet)
    • 数据链路层
      • 功能:成帧,链路寻址,差错检测。
      • 操作:加上 帧首部和帧尾部(MAC 地址,CRC 校验码等)。
      • 输出:帧 Frame
    • 物理层
      • 功能:传输比特流。
      • 操作:把帧转换为电信号/光信号/无线电波进行传输。
      • 输出:比特流 Bit Stream

3. TCP 粘包/拆包?

  • 粘包(Sticky Packet)
    多个 应用层消息 在 TCP 传输时被合并到一个 TCP 报文里,接收方一次 read() 读到多个消息。
  • 拆包(Half Packet)
    一个应用层消息太大,被拆成多个 TCP 报文,接收方一次 read() 只能读到一部分。

粘包和拆包并不是 TCP 的错误,而是 TCP 字节流特性导致应用层无法直接区分消息边界。
为了解决这个问题,需要 人为设计应用层协议,常见方法有:

    1. 固定长度消息;
    • 每条消息长度固定,比如 128 字节;
    • 如果不足 → 补空格或特殊填充符。
    • 优点:简单,解码逻辑快;
    • 缺点:浪费带宽,不适合大多数业务场景。
    1. 使用分隔符;
    • 每条消息结尾加上一个分隔符,例如 \n|
    • 接收端根据分隔符来切割消息。
    • 优点:实现简单,常见于文本协议(HTTP/1.0、SMTP、FTP)。
    • 缺点:分隔符可能出现在正文,需要转义。
    1. 使用“消息头 + 消息体”的格式(最常用)。
    • 在消息前添加一个 固定长度的头部(例如 4 字节),存放消息体的长度;
    • 接收端先解析头部,知道接下来要读多少字节。
    • 优点:灵活高效,适合二进制协议,主流框架(Netty、gRPC、Kafka)都采用这种方式。
    • 缺点:协议解析稍复杂,但最通用。

4. UDP 有哪些应用场景?

UDP 常用于对 实时性要求高、对可靠性要求不那么严格 的场景。
典型应用有:

    1. 实时音视频(VoIP、直播、视频会议);
    2. 网络游戏(低延迟比可靠更重要);
    3. DNS、DHCP 等请求响应型协议;
    4. 物联网设备上报(CoAP);
    5. 流媒体传输(RTP、RTSP);
    6. 新一代传输协议 QUIC/HTTP3。

5. 滑动窗口与流量控制?

TCP 是 面向字节流的可靠传输协议。如果发送方每次都等接收方返回 ACK 确认再继续发数据,就会导致 传输效率低

为了解决这个问题,TCP 引入了 滑动窗口机制

    • 窗口大小:接收方通过 ACK 报文中的 Window 字段 告诉发送方自己还能接收多少字节。
    • 滑动:随着接收方处理并确认一部分数据,窗口会向前滑动,发送方就可以继续发送新的数据。
    • 效果:这样发送方能在没有收到所有 ACK 之前,持续批量发送数据,实现 流水线传输,大幅提升效率。

同时,窗口大小由接收方决定,这就天然实现了 流量控制

    • 当接收方处理不过来时,窗口缩小甚至为 0,发送方必须停发;
    • 当接收方处理完成释放了缓存,窗口再扩大,发送方继续发送。

滑动窗口既是 TCP 提升传输效率的机制,也是实现流量控制的核心手段。

6. 拥塞控制策略?

“流量控制”是为了防止 接收方被压垮,而 拥塞控制 是为了防止 网络被压垮

TCP 发送方要根据 网络的承载能力 来调整发送速率,避免过量数据导致路由器丢包、超时重传。
核心是维护一个变量 拥塞窗口(cwnd, Congestion Window)

    • 实际发送窗口 = min(cwnd, rwnd)
      • cwnd:网络拥塞控制窗口
      • rwnd:接收方流量控制窗口

TCP 拥塞控制的四大算法:

      • 慢启动:cwnd 从小开始指数增长;
      • 拥塞避免:达到阈值后,cwnd 线性增长;
      • 快速重传:三个重复 ACK 就立即重传丢失分段;
      • 快速恢复:丢包后 cwnd 减半,并线性增长,而不是回到 1 MSS。

7. TIME_WAIT 是什么?

TIME_WAIT 的定义

    • TIME_WAIT 状态,也叫 2MSL(Maximum Segment Lifetime)等待状态
    • 出现的时机:
      TCP 四次挥手过程中,主动关闭连接的一方(通常是客户端)在发送了最后一个 ACK 后会进入 TIME_WAIT 状态。

为什么需要 TIME_WAIT有两个关键原因:

    1. 确保对方收到最后的 ACK
      • 在四次挥手中,最后一次 ACK 可能会丢失。
      • 如果对方(被动关闭方)没有收到 ACK,会重发 FIN
      • 处于 TIME_WAIT 的一方还能重新发送 ACK,保证连接能可靠关闭。
    1. 保证老连接的数据不会影响新连接
      • TCP 是面向字节流的,老连接里可能还存在未到达的延迟报文。
      • 通过等待 2 倍的 MSL 时间(报文在网络中存活的最长时间),确保旧连接的数据包在网络中完全消失,避免和新连接混淆。

8. TCP 怎么实现有序?

    1. 序列号(Sequence Number)

每个 TCP 字节流中的字节都有一个 唯一序列号。

发送方在发送数据段时,会标注 序列号。

接收方根据序列号可以 按顺序重组数据。

举例:

数据流:ABCDEFG

分段发送:A(Seq=1)、B(Seq=2)、C(Seq=3)

接收方收到 C, A, B → 按序列号重新排列:A, B, C

    1. 确认号(ACK)

接收方对收到的字节流发送 确认号(表示下一个期望接收的字节序列号)。

发送方根据 ACK 判断哪些数据已经被接收,并继续发送后续数据。

    1. 滑动窗口

TCP 使用 滑动窗口 支持 流水线传输。

发送方可以在未收到所有 ACK 的情况下继续发送窗口范围内的数据。

接收方利用接收窗口告知发送方可以接收的数据量,从而 保证按顺序接收。

    1. 乱序数据缓存与重组

接收方可能会收到 乱序报文(比如网络延迟不同)。

TCP 会在内存中 缓存乱序数据,等待缺失的前面报文到达,再按序交给应用层。

    1. 丢包重传机制

如果发送方在 超时时间 内没有收到 ACK,或者收到 重复 ACK,就会 重传丢失的报文。

结合序列号和 ACK,保证最终 应用层收到的数据是完整且有序的。

9. IP 地址分类与子网划分?

IPv4 地址分为 A/B/C/D/E 类,A/B/C 类用于普通主机网络,D 类用于多播,E 类保留。
子网划分是通过 借用主机位作为子网位 来创建多个小网络,每个子网都有独立的网络地址、广播地址和可用主机地址范围。
子网掩码表示网络位和主机位,通过 /n 或点分十进制形式表示。

10. ARP 和 RARP 是什么?

ARP (Address Resolution Protocol, 地址解析协议)

作用:在局域网内,把 IP 地址 → MAC 地址

      • IP 用于网络层寻址,但最终在局域网中通信需要依靠 MAC 地址
      • 当主机要向同一局域网的另一台主机发送数据时,会先知道对方的 IP 地址,但不知道 MAC 地址,就要用 ARP。

RARP (Reverse Address Resolution Protocol, 反向地址解析协议)

作用:把 MAC 地址 → IP 地址

      • 早期场景:一些无盘工作站(diskless workstation)只有网卡,没有硬盘,开机后只知道自己的 MAC 地址,但不知道该用哪个 IP 地址。
      • 于是它广播 RARP 请求,请求服务器告诉它应该用的 IP 地址。

应用层数据 → 传输层 → 网络层 → 数据链路层 → 物理层

    • 传输层(TCP/UDP)
      • 把应用层数据加上 TCP/UDP 头,形成 报文段(Segment)
      • TCP:面向连接、可靠;UDP:无连接、尽力而为。
    • 网络层(IP 协议)
      • 在报文段外加上 IP 头,形成 IP 数据包(Packet)
      • IP 头里有源 IP、目的 IP。
    • 数据链路层(Ethernet、PPP 等)
      • 在 IP 数据包外加上 MAC 头(源 MAC、目的 MAC),形成 数据帧(Frame)
      • 如果不知道目的 IP 对应的 MAC,需要先通过 ARP 查询(广播请求 + 单播应答)。
      • 数据帧最后再加上 CRC 校验等。
    • 物理层
      • 把数据帧转换为电信号、光信号或无线电波,在物理媒介上传输。

11. ICMP 协议?

ICMP 是网络层的控制协议,用于报告 IP 层的错误和传递诊断信息(如 ping、traceroute),它本身不传输业务数据,而是 IP 协议的“反馈助手”。

    • 全称:Internet Control Message Protocol(互联网控制报文协议)
    • 位置:运行在 网络层,是 IP 协议的辅助协议
    • 作用:主要用于 传递差错信息网络状态信息,帮助网络进行诊断和控制。

⚠️ 注意:

    • ICMP 不是传输层协议(不用于应用层数据传输),而是 封装在 IP 包里的报文
    • 例如,IP 层在转发数据包时出错,ICMP 就会回报。

12. NAT 的作用?

NAT 的核心作用是:在私网和公网之间进行地址转换,实现多个内网主机共享少量公网 IP 上网,同时起到隐藏和安全保护作用。

    • 定义:一种在 网络层(IP 层) 实现的技术,用于在 私有 IP 地址公网 IP 地址 之间进行转换。
    • 背景:IPv4 地址不够用,而内网通常用 私有地址(如 192.168.x.x、10.x.x.x、172.16–31.x.x),这些地址在公网中不可路由。
    • NAT 让多个内网主机 共享一个或少量公网 IP,从而访问外网。

13. 路由协议有哪些?

小网络用 RIP,企业网用 OSPF,运营商网用 IS-IS,互联网靠 BGP。

a. IGP(内部网关协议)

    1. RIP(Routing Information Protocol)
      • 算法:距离向量(用跳数表示距离,最大 15 跳)
      • 优点:简单、配置容易
      • 缺点:收敛慢、规模小、环路问题
      • 应用:小规模网络
    1. OSPF(Open Shortest Path First)
      • 算法:链路状态(Dijkstra)
      • 特点:收敛快,支持区域划分(分层次管理)
      • 应用:大型企业网、运营商网
    1. IS-IS(Intermediate System to Intermediate System)
      • 算法:链路状态
      • 特点:与 OSPF 类似,但更适合超大规模运营商网
      • 应用:电信运营商骨干网

b. EGP(外部网关协议)

    1. BGP(Border Gateway Protocol)
      • 算法:路径向量
      • 特点:控制互联网中自治系统之间的路由选择,是互联网的“核心路由协议”
      • 当前版本:BGP-4
      • 应用:互联网骨干网

14. DNS 的作用?

    • 全称:Domain Name System(域名系统)
    • 位置:应用层协议(基于 UDP/TCP 53 端口)
    • 核心作用:将域名解析为 IP 地址(反之亦然),让用户可以用 人类友好的名字 访问网络资源,而不是记一堆 IP。
    • DNS 的核心作用就是“域名到 IP 的翻译器”,同时也支持负载均衡、服务发现和高可用切换。
      没有 DNS,用户只能记一堆 IP,互联网几乎没法用。

15. 对称加密 vs 非对称加密?

  • 对称加密:AES、DES、3DES、ChaCha20
  • 非对称加密:RSA、DSA、ECC、DH(密钥交换)

16. 常见攻击手段?

网络层攻击

DDoS / DoS:大量请求让服务器瘫痪

IP/ARP 欺骗:伪造 IP 或 MAC 窃听或篡改流量

中间人攻击(MITM):截获或篡改通信

应用层攻击

SQL 注入:输入恶意 SQL 改数据库

XSS:注入脚本窃取用户信息

CSRF:利用用户身份发起恶意请求

文件上传漏洞:上传 WebShell 或恶意文件

身份/密码攻击

暴力破解:穷举密码

会话劫持:窃取 Cookie 或 Token 冒充用户

社会工程学:钓鱼邮件、假冒电话获取信息

17. MQTT 的作用?

MQTT 是一种轻量级的发布/订阅消息传输协议,适合带宽受限或高延迟环境,常用于物联网设备、移动端消息推送和实时监控系统。

    • 发布/订阅(Pub/Sub)模型
    • Publisher(发布者):发送消息到 主题(Topic)
    • Subscriber(订阅者):订阅某个主题,接收消息
    • Broker(消息代理服务器):负责接收、存储和分发消息
    • 解耦了生产者和消费者,发布者和订阅者互不直接感知

18. 如何实现服务端推送?

HTTP 长轮询(Long Polling)

原理:客户端发起请求,如果没有数据,服务器 不立即返回,等有数据或超时才返回;客户端收到响应后立即重新发起请求。

特点:

简单,基于普通 HTTP

支持浏览器端、传统服务

缺点:客户端频繁请求,延迟高,开销大

WebSocket

原理:建立 TCP 全双工连接,服务端和客户端可以随时互发消息

特点:

双向通信、低延迟

适合实时聊天、游戏、股票行情等场景

服务器可直接向客户端推送数据

消息队列 + 推送

原理:服务端把消息发送到 MQ(如 Kafka、RabbitMQ、RocketMQ),然后推送到客户端

特点:

解耦业务逻辑和推送逻辑

支持分布式、消息可靠投递

可与 WebSocket 或 SSE 配合使用

19. 整体的网络协议交互

访问域名时,先通过 DNS 解析得到目标 IP;然后主机根据路由表选择下一跳,如果没有对应 MAC,就通过 ARP 获取;数据包由 IP 协议负责传输,中途若有错误会通过 ICMP 报告;如果跨私网和公网,还要经过 NAT 转换;至于 RIP、OSPF、BGP 等路由协议,它们不是直接传输数据,而是帮助路由器建立和维护路由表,确保数据能找到正确的路径。

http://www.dtcms.com/a/395544.html

相关文章:

  • 划重点|云栖大会「AI 原生应用架构论坛」看点梳理
  • Spark源码中的AQS思想
  • lora微调大语言模型(qwen1.5-chat)
  • 数藏APP如何选择高防IP
  • 破壁之道:构建统一EDI平台,提速芯片设计与制造协作链路
  • 【完整源码+数据集+部署教程】房屋损坏图像分割系统: yolov8-seg-fasternet-bifpn
  • 整体设计 完整的逻辑链条 之6 从简约文字到公共逻辑:四种 “空” 驱动的整体构建方法论
  • 软考中项备考经验分享
  • 基于疾风气象大模型预测“桦加沙”台风轨迹的探索与展望
  • 光谱相机在护眼灯领域的应用
  • 坤驰科技携国产化MTCA解决方案,亮相大科学装置控制系统研讨会
  • 操作系统(一) :操作系统基本概念及特征
  • 魔百盒 Armbian OS 25.08 (基于 Debian 11 bullseye)换源
  • MacOS安装brew失败,无法访问github,怎么处理
  • 举办2025年iCAN大学生创新创业大赛未来机器人创业大赛
  • MissionPlanner架构梳理之(十八)视频流
  • 2025 前端突围战:当 React Server Components 遇上 AI 编程,我们该如何重构开发范式?
  • xss-labs闯关【1-11】
  • vue2利用canvas翻页浏览pdf文件
  • 仿生视觉芯片迈向实用化:《Advanced Science》报道双极性宽谱光电晶体管,赋能自动驾驶与机器感知
  • 如何在手机上把CAD图纸导出为PDF?
  • 【2025最新】02 Spring Boot 第一个小程序 for VS Code - 通过 Spring Initializr 扩展创建
  • map和set的使用和实现(C++)
  • Qt 系统相关 - 网络
  • Java中List转换成Map的两种方式
  • 嵌入式 - RAM10
  • Qwen新开源tongyi-DeepResearch:核心优势
  • Java Stream API性能优化实践指南
  • Qt配置序列化与反序列化实战:QSettings的深度应用指南
  • MySQL下载时出现“starting the server”或“initializing错误”的原因以及解决方案