Linux 基础知识总结
初识 Linux 不必先背命令,先建立三张地图:发行版怎么选、根目录下每个目录管什么、遇到问题该用哪组命令。本文按这三条线索整理 Linux 入门知识。 内核与发行版严格说 Linux 只是内核——负责进程、内存、文件系统和设备管理的那部分。厂商和社区把内核连同包管理器、工具链、文档打包成开箱即用的系统,就是发行版。主流谱系可分两支: 谱系 代表 定位 Debian 系 Debian、Ubuntu 社区驱动,apt 包管理;Ubuntu LTS 在桌面与云上都很常见 RHEL 系 RHEL、Rocky、AlmaLinux 商业企业级,dnf/yum 包管理,强调稳定与支持周期 CentOS 的老定位(RHEL 的免费重编译版)已随 CentOS Linux 停更成为历史,现行的 CentOS Stream 是 RHEL 的上游滚动分支,性质不同。学习企业环境选 Rocky/AlmaLinux,快速上手选 Ubuntu LTS,追求轻量稳定选 Debian。选型时关注两点:支持周期是否覆盖你的使用时长,以及目标生产环境用哪一支——学练环境...
从输入 URL 到页面展示到底发生了什么?
在地址栏敲下网址、按下回车,到页面完整出现在屏幕上,中间要经过 DNS 解析、TCP 建连、TLS 握手、HTTP 交互、服务器处理和浏览器渲染等一系列环节。这道题是面试常客,因为它能把从应用层到链路层的核心协议一次性串起来。 它解决什么问题单独背协议容易断片:知道 TCP 有三次握手,却不知道它在访问网页时发生在哪一步;知道 DNS 是域名解析,却说不清谁来发查询、问谁要答案。”输入 URL 后发生了什么”给出的不是新知识点,而是一张地图——把每个协议放回它在链路中的位置,看清每一步”做什么、为什么需要它、和上下层怎么交接”。理解了这条主线,页面打开慢、HTTPS 配置错误、跨域失败这类实际问题,才有分段定位的框架。 核心原理:全流程鸟瞰先把主线画出来,再逐段展开: 输入 URL → 查浏览器缓存 → DNS 解析(域名→IP) → TCP 三次握手 → TLS 握手(仅 HTTPS) → 发送 HTTP 请求 → 服务器处理并响应 → 浏览器解析渲染(DOM/CSSOM/渲染树/布局/绘制/合成) → 连接复用或关闭 注意各层协议的衔接点:D...
TCP TIME_WAIT 详解:为什么要等、会不会出问题、能不能复用?
TIME_WAIT 是主动关闭方发出最后一个 ACK 之后进入的 2MSL 等待。它不是多余的仪式:一边给可能丢失的最后 ACK 留补救机会,一边等旧连接的滞留报文从网络里彻底消散。它是协议设计的正常一环,真正要警惕的是短连接风暴下的端口耗尽和被误用的内核参数。 它解决什么问题四次挥手的最后一步,主动关闭方回完 ACK 为什么不能立刻关门走人?因为此刻有两件事还没有着落: 最后一个 ACK 可能丢在路上。被动方收不到确认,会超时重传 FIN;若主动方已经彻底消失,这个重传的 FIN 将无人应答。 旧连接的报文可能还在网络里游荡。TCP 连接靠四元组(源 IP、源端口、目的 IP、目的端口)唯一标识,旧连接刚关就用同一四元组开新连接,滞留的旧报文可能被当成新连接的数据收下。 这两个问题都没有别的机制兜底,于是协议安排主动关闭方在原地等一段足够长的时间——这就是 TIME_WAIT。 核心原理理由一:让最后一个 ACK 有补救机会主动方 A 被动方 B | <---------- FIN -------- | | ------...
TCP 如何保证可靠传输?重传、滑动窗口与拥塞控制详解
IP 层只承诺尽力投递,丢包、乱序、重复、损坏都可能发生。TCP 的”可靠”不是一句口号,而是序列号确认、超时与快速重传、SACK、滑动窗口、拥塞控制这一整套机制协同运转的结果。本文按”确认、重传、流控、拥塞控制”四层递进展开。 它解决什么问题底层网络对 TCP 有四个”不保证”:不保证送达、不保证按序、不保证不重、不保证内容不变。TCP 要在这之上给应用层一条有序、无重复、无差错、不丢字节的字节流,就必须逐一补上短板: 编号与确认:知道哪些字节到了、哪些没到; 重传:把没到的补上; 流量控制:发送速率不超过接收方的消化能力; 拥塞控制:注入网络的数据不超过网络的承载能力。 还有一个常被误解的边界:TCP 可靠的是字节流,不是应用层的一条条”消息”。消息边界要由上层协议自己定义,这正是粘包、拆包问题的根源。 核心原理序列号与累积确认TCP 给字节流里的每个字节编号——序列号是字节序号,不是报文段序号。接收方回复的 ACK 采用累积确认:ACK=n 表示”n 之前的字节我全部收到了,接下来请从 n 开始发”。此外每个报文段都带端到端校验和,校验失败的段直接丢弃、不...
TCP Keepalive 和 HTTP Keep-Alive 有什么区别?
TCP Keepalive 与 HTTP Keep-Alive 除了名字相似,没有任何关系:前者是传输层内核对空闲连接做的存活探测,后者是应用层让多个 HTTP 请求复用同一条 TCP 连接的机制。一个回答”对端还在吗”,一个回答”这条连接能不能接着用”。 问题的本质:不同层次解决不同问题两者处于协议栈的不同层,目标完全不同: 维度 HTTP Keep-Alive TCP Keepalive 层次 应用层(HTTP) 传输层(TCP) 目的 复用连接,省掉重复握手/挥手 探测死连接,回收内核资源 默认行为 HTTP/1.1 起默认开启 默认关闭,需 SO_KEEPALIVE 显式打开 控制方 Web 服务器/客户端配置 操作系统内核 关闭策略 到超时或次数上限即可主动关 对端能回 ACK 就一直维持 HTTP Keep-Alive:连接复用HTTP/1.0 默认短连接:一次请求/响应结束就关闭 TCP。一个网页几十个资源各建一次连接,三次握手和慢启动的开销非常可观。HTTP/1.1 把...
为什么 TCP 是面向字节流,UDP 是面向报文?(传输层)
TCP 的”字节流”指它只保证字节可靠、有序到达,不保留任何一次写入的边界;UDP 的”面向报文”指应用交下来的每一份数据都作为独立数据报收发,边界天然存在。所谓粘包、拆包,不是 TCP 的缺陷,而是应用层没有自己定义消息边界的必然结果。 问题的本质:边界由谁负责设想应用连续发出两条消息 hello 和 world。 走 UDP 时,两次发送对应两个数据报,接收端每调用一次 recvfrom() 就取走一个完整报文,不会读到 helloworld,也不会读到半个报文——UDP 接收队列里的一个元素就是一个数据报。 走 TCP 时,两次 send() 只是把字节拷进内核发送缓冲区。这些字节何时发出、合并成几个报文段、对端一次 recv() 能拿到多少,由 MSS、滑动窗口、拥塞控制和 Nagle 算法等共同决定,和应用的写入次数没有对应关系。接收端可能一次读到 helloworld(粘包),也可能分三次读到 hel、lowor、ld(拆包)。 应用视角: [hello] [world] 两条消息TCP 视角: h e l l o w o r l d ...
计算机网络常见面试题总结(下)
网络面试的下半场落在传输层与网络层:TCP 为什么可靠、握手挥手为什么是这个次数、连接数到底受什么限制,再到 IPv6、NAT、ARP 的分工。本篇选十一道题做深,每题给出结论、原理与可延伸的加分点。 考察地图 TCP 与 UDP 基础:两者区别与选型、字节流与报文(粘包拆包)。考察对传输本质的理解。 连接管理:三次握手为什么不是两次、四次挥手与 TIME_WAIT。考察连接状态机。 可靠性与连接维护:可靠传输机制、双层 Keepalive 之分、65535 连接数迷思。 IP 与地址:客户端真实 IP 获取、IPv4 vs IPv6、NAT、ARP。 建议自行查阅:基于 TCP/UDP 的协议清单、IP 地址过滤、MAC 地址细节、HTTP 各版本基于什么传输——HTTP/3 与 QUIC 在上篇已展开,这里不再重复。 TCP 与 UDP 基础TCP 与 UDP 有什么区别?结论:三条根差异——TCP 面向连接、可靠、字节流;UDP 无连接、尽力交付、保留报文边界。其余差异都是这三条的展开。 原理:展开成七个维度。连接:TCP 先握手后传输再挥手,UD...
计算机网络常见面试题总结(上)
网络面试的上半场集中在应用层:一条「输入 URL 到页面展示」的主线,串起 HTTP 版本演进、HTTPS 安全设计、会话保持与实时通信选型。本篇选十道题做深,每题给出结论、原理与可延伸的加分点。 考察地图 全景链路:输入 URL 到页面展示。所有应用层追问的母体,必须能脱稿讲。 HTTP 与 HTTPS:HTTP vs HTTPS、RSA 与 ECDHE、HTTP/1.1 vs HTTP/2、HTTP/2 vs HTTP/3。考察版本演进背后的工程动机,而非背特性表。 会话与方法:无状态协议如何保存用户状态、GET 与 POST。考察语义理解。 实时通信:WebSocket、长短轮询、SSE 的取舍。 诊断与解析:Ping 与 TCP 连通性的关系、DNS 解析过程。 建议自行查阅:OSI 七层与 TCP/IP 四层对照、HTTP 状态码清单、常见 Header 字段、URI 与 URL 的区别、DNS 劫持应对——偏记忆,面试中多作开场铺垫,较少成为胜负手。 全景链路从输入 URL 到页面展示,到底发生了什么?结论:一句...
OSI 七层模型与 TCP/IP 四层模型详解
网络分层是学习计算机网络的第一张地图,没有它,HTTP、TCP、IP、MAC、DNS 这些名词只会堆成一锅粥。本文讲清 OSI 七层与 TCP/IP 四层各自的职责划分、数据封装解封装的全过程,以及”教科书讲七层、实践用四层”背后的原因。 它解决什么问题计算机网络天然复杂:要让两台相隔千里的机器交换数据,得同时解决物理信号、相邻节点传输、跨网寻址、可靠交付、格式约定等一大堆问题。如果把它们揉进一个巨型协议,既设计不出来,也没法维护和替换。分层模型把大问题切成若干边界清晰的小问题,每层只专注一类职责,并为上层提供稳定接口。OSI 七层和 TCP/IP 四层就是两套最有代表性的切法:前者理论完备,后者是互联网的真实实现。 核心原理:两套模型各层做什么OSI 七层模型由国际标准化组织提出,自顶向下依次是: 应用层:为应用程序提供网络服务接口,定义信息交换的格式与规则,代表协议有 HTTP、SMTP、FTP、DNS。 表示层:处理数据格式转换、加密解密、压缩解压,让不同系统能理解彼此的数据表示。 会话层:负责建立、管理和终止会话,控制对话的同步与检查点。 传输层...
网络攻击常见手段总结(安全)
网络攻击手法繁多,底层逻辑却相通:利用协议设计时的信任假设,或攻防双方的资源不对称。本文挑四类高频攻击——SYN Flood、DNS 劫持、中间人攻击、CSRF/XSS——每个都按”一句话原理、攻击链条、防御措施”拆解。 DDoS 与 SYN FloodDDoS(分布式拒绝服务)是用大量”肉鸡”同时向目标发起请求,耗尽带宽或系统资源,让正常用户得不到服务。SYN Flood 是其中最经典的一种,原理一句话:攻击者只发 SYN 不回 ACK,让服务器为大量永远完不成的握手分配并持有半连接资源。 正常三次握手中,服务器收到 SYN 后回复 SYN-ACK,把这条半开连接放进队列、启动重传定时器,等待客户端的 ACK。攻击链条如下: 攻击者(或僵尸网络) --SYN(伪造源IP)--> 服务器服务器 --SYN-ACK--> 伪造的源地址(石沉大海)服务器: 半连接队列被占满, 定时器多次重传, 直到超时释放正常用户: SYN 到达时队列已满, 直接被丢弃 --> 拒绝服务 关键在于资源不对称:发一个 SYN 几乎零成本,服务器却要分配内核结构并重传多...