全网最详细计算机网络面试题
题眼:域名解析,UDP协议DNS 劫持 =恶意篡改 DNS 解析结果DNS 劫持是指 DNS 查询过程被劫持,返回了错误或伪造的 IP 地址,导致用户访问了错误或恶意网站。攻击者伪造证书或拦截通信,冒充合法服务器;若客户端不验证证书来源或信任伪造证书,就可能被劫持;解决:强制证书验证、HSTS、Pinning 等。多设备测试:如手机可访问、电脑不可访问 ⇒ 电脑问题检查代理、DNS 配置、浏览器扩
计算机网络高频面试题
1. 经典网络分层,五层/七层模型,TCP/UDP/HTTP工作在哪一层?
题眼:传输层和应用层
两种常见网络分层模型:
✅ 五层协议模型(TCP/IP模型):
- 物理层(Physical Layer)
- 数据链路层(Data Link Layer)
- 网络层(Network Layer)
- 传输层(Transport Layer)
- 应用层(Application Layer)
✅ 七层协议模型(OSI模型):
- 物理层
- 数据链路层
- 网络层
- 传输层
- 会话层(Session Layer)
- 表示层(Presentation Layer)
- 应用层
各协议对应层级:
- TCP / UDP:传输层
- HTTP:应用层
✅ 参考回答:
常见的网络分层主要有两种:TCP/IP 五层协议模型和 OSI 七层协议模型。
五层协议从下至上为:物理层、数据链路层、网络层、传输层和应用层。
OSI 模型在此基础上,将应用层细分为会话层、表示层和应用层。
其中 TCP 和 UDP 工作在传输层,HTTP 工作在应用层。
2. 浏览器地址栏输入 URL 后都发生了什么?
题眼:网络分层、DNS服务、TCP连接等
浏览器输入 URL 后的全过程:
- 解析 URL:浏览器将 URL 拆分为协议、主机名、端口和路径等部分,准备生成 HTTP 请求。
- DNS 解析:查询域名对应的 IP 地址,优先查找本地缓存,其次使用 DNS 服务。
- 建立 TCP 连接:通过三次握手建立与目标服务器的连接。
- 分层打包:
- 应用层添加 HTTP 请求头
- 传输层添加 TCP 首部(源端口、目标端口等)
- 网络层添加 IP 首部(源 IP、目的 IP)
- 数据链路层添加 MAC 首部(源 MAC、目的 MAC)
- 使用 ARP 协议获取目标 MAC 地址
- 物理层传输:网卡将数据转换为电信号,通过网线、光纤等介质发送。
- 中间设备:数据经过交换机、路由器等设备转发。
- 服务器接收请求:
- 去除 MAC 头,校验 MAC 地址
- 去除 IP 头,解析目标 IP
- 去除 TCP 头,读取端口号、序列号
- 将 HTTP 请求交给对应进程处理
- 服务器响应:处理请求并返回 HTML 等资源。
- 四次挥手断开连接:当通信结束后,客户端与服务器通过 TCP 四次挥手断开连接。
✅ 参考回答:
网络请求就像“打包快递”和“剥洋葱”一样。
浏览器先发起 DNS 查询,拿到目标网站的 IP 地址后,通过三次握手建立 TCP 连接。
HTTP 请求在应用层生成,再逐层往下封装,最终通过物理层发送到目标服务器。
服务器收到后再逐层拆包,最终交给 HTTP 应用处理。返回数据的过程与之相反。
通信完成后,再通过四次挥手关闭连接。
💡 引申:如果是 HTTPS,还涉及 SSL 握手、数字证书验证和密钥协商等加密步骤。
3. DNS 服务介绍
题眼:域名解析,UDP协议
DNS(Domain Name System)是干什么的?
DNS 就是互联网的电话簿,将域名(如 www.example.com)解析为 IP 地址。它使用的是 UDP 协议(53端口)。
DNS 查询流程:
- 发起 DNS 查询:浏览器先查本地 DNS 缓存,未命中则向本地 DNS 服务器查询。
- 本地 DNS 查询:检查自身缓存;没有结果则进行递归查询。
- 查询根域名服务器:获取对应顶级域名服务器地址。
- 查询顶级域名服务器:获取权威域名服务器的地址。
- 查询权威域名服务器:获取目标主机记录(如 A、CNAME 记录)。
- 返回解析结果:本地 DNS 返回 IP 给浏览器,并缓存该记录。
- 发起连接请求:浏览器使用获取到的 IP 与目标网站建立连接。
参考答案:
DNS 服务负责将域名解析为 IP 地址,它采用的是 UDP 协议。
浏览器首先查找本地缓存,如无命中,会向服务商提供的本地 DNS 服务器查询,若仍未命中,就会依次向根域名服务器、顶级域名服务器、权威域名服务器发起查询。
DNS 解析结果通常会被本地缓存一段时间以加速下次访问。
💡 引申:如果访问一个网址,有些人能打开,有些打不开,可能是本地 DNS 缓存污染或线路问题,可通过“拨测”或切换 DNS 服务器解决。
3.1 什么是 DNS 劫持?
DNS 劫持 = 恶意篡改 DNS 解析结果
DNS 劫持是指 DNS 查询过程被劫持,返回了错误或伪造的 IP 地址,导致用户访问了错误或恶意网站。
常见表现:
- 自动跳转到广告页面
- 网站打不开或提示“证书不安全”
- 实际访问的是仿冒钓鱼网站
参考答案:
DNS 劫持是一种网络攻击行为,通过篡改 DNS 解析结果,诱导用户访问错误或恶意网站。运营商、路由器、木马病毒都可能成为劫持源。
在安全性要求高的场景下(如支付、登录等),需特别防范 DNS 劫持。
4. TCP 和 UDP 的特点与区别
题眼:区别 + 使用场景
TCP 特点:
- 面向连接(连接建立后才能通信)
- 可靠传输(三次握手 + 四次挥手,确认机制)
- 面向字节流
- 有拥塞控制和流量控制
UDP 特点:
- 无连接,发送前不建立连接
- 不可靠传输,不保证顺序、不重传
- 面向报文(一次发送就是一个完整报文)
- 没有拥塞控制,开销更小,延迟更低
使用场景:
- TCP:文件传输、网页访问、电子邮件(需要高可靠性)
- UDP:视频直播、语音通话、在线游戏(实时性优先)
✅ 参考答案:
TCP 是可靠的、面向连接、面向字节流的协议,适合对数据完整性要求高的场景,比如文件传输、支付、网页浏览等。
UDP 是不可靠的、无连接、面向报文的协议,适用于实时性要求高的场景,比如视频、音频、在线游戏等。
💡 引申:有没有既可靠又快的协议?
答:QUIC 协议是基于 UDP 的新型传输协议,结合了 TCP 的可靠性和 UDP 的速度,已应用于 Google、YouTube、HTTP/3 等场景。
5. TCP 的三次握手与四次挥手机制
三次握手(Three-way Handshake)
目的是建立可靠连接,确保双方都具备发送与接收能力。
过程:
-
客户端 → 服务器:SYN
- 客户端发送一个 SYN 包(
SYN=1
,seq=x
); - 表示客户端希望建立连接,并发送初始序列号
x
; - 状态变为:
SYN_SENT
。
- 客户端发送一个 SYN 包(
-
服务器 → 客户端:SYN + ACK
- 服务器收到 SYN 后,回复一个
SYN=1, ACK=1, seq=y, ack=x+1
的包; - 表示同意建立连接,并发送自己的初始序列号
y
; - 状态变为:
SYN_RCVD
。
- 服务器收到 SYN 后,回复一个
-
客户端 → 服务器:ACK
- 客户端收到服务器的 SYN+ACK 后,再发一个
ACK=1, ack=y+1
; - 表示确认服务器的回应;
- 客户端状态变为:
ESTABLISHED
; - 服务器收到 ACK 后状态也变为
ESTABLISHED
,连接建立完成。
- 客户端收到服务器的 SYN+ACK 后,再发一个
四次挥手(Four-way Handshake)
目的是优雅关闭连接,确保双方都完成了数据传输。
过程:
-
客户端 → 服务器:FIN
- 客户端发送
FIN=1
,表示不再发送数据; - 状态变为:
FIN_WAIT_1
。
- 客户端发送
-
服务器 → 客户端:ACK
- 服务器收到 FIN 后,发送
ACK=1
确认; - 状态变为:
CLOSE_WAIT
; - 客户端状态变为:
FIN_WAIT_2
。
- 服务器收到 FIN 后,发送
-
服务器 → 客户端:FIN
- 服务器准备关闭,发送
FIN=1
; - 状态变为:
LAST_ACK
。
- 服务器准备关闭,发送
-
客户端 → 服务器:ACK
- 客户端收到 FIN,发送
ACK=1
确认; - 状态变为:
TIME_WAIT
,等待 2MSL 后彻底关闭; - 服务器收到 ACK 后状态为:
CLOSED
。
- 客户端收到 FIN,发送
5.1 HTTPS 握手过程
HTTPS = HTTP + TLS/SSL(先进行 TCP 三次握手 → 再进行 TLS 握手 → 加密 HTTP 通信)
步骤 1:TCP 三次握手
建立可靠连接。
步骤 2:TLS 握手(建立加密通道)
-
ClientHello
- 包含支持的 TLS 版本、加密套件列表、客户端随机数(Client Random)。
-
ServerHello + 证书 + 参数
- 返回服务器随机数(Server Random)、选定加密算法、服务器证书(含公钥)。
-
客户端验证证书
- 验证服务器证书合法性;
- 生成预主密钥(Pre-Master Key),并使用服务器公钥加密后发送。
-
双方生成共享对称密钥(Session Key)
- 使用:
Session Key = PRF(Client Random + Server Random + Pre-Master Key)
- 使用:
-
客户端发送 ChangeCipherSpec + Finished
- 表示后续数据使用对称密钥加密;
- Finished 报文加密发送。
-
服务器发送 ChangeCipherSpec + Finished
- 同样切换为加密状态,握手完成。
步骤 3:HTTP 加密通信开始
使用对称密钥进行加密通信。
6. 为什么建立连接需要三次握手?第三次能否携带数据?
原因(反证法):
- 两次握手不足以确认双方状态是否正常。
- 假设只需两次握手:
- 客户端发送 SYN;
- 服务器回复 SYN+ACK;
- 此时服务器认为连接已建立,但客户端可能未收到 ACK;
- 导致“半连接”状态,后续通信可能失败。
三次握手的作用:
- 保证双方都知道连接建立,并准备好通信。
- 最后一步由客户端回复 ACK,确保客户端收到服务器响应。
第三次能否携带数据?
- 理论上:TCP 标准不建议第三次握手携带数据。
- 实际上:可以携带数据(如 HTTP 的请求内容),称为 SYN 数据优化。
- 影响:
- 如果第三次握手失败,不会影响请求安全;
- 如果成功,减少一次传输,提升性能。
7. 为什么需要四次挥手?讲讲 TIME_WAIT 和 CLOSE_WAIT
为什么不是三次?
- 因为 TCP 是全双工连接,断开需要双方都确认。
- FIN 和 ACK 是独立的报文,不能合并发送。
TIME_WAIT 状态
-
出现时机:主动关闭一方在发送最后 ACK 后进入 TIME_WAIT 状态。
-
作用:
- 防止旧连接中的延迟数据影响新连接;
- 确保 ACK 能被对方收到,若对方未收到可重发 FIN。
-
持续时间:
- 默认是
2 * MSL
(Maximum Segment Lifetime); - 一般为几十秒到几分钟(由操作系统设置)。
- 默认是
CLOSE_WAIT 状态
- 出现时机:被动关闭方收到 FIN 后,回复 ACK,进入 CLOSE_WAIT 状态。
- 作用:等待应用程序调用
close()
主动关闭连接。 - 问题:如果应用长时间不调用 close,会导致大量 CLOSE_WAIT 状态堆积,占用资源。
8. TCP 的重传机制是什么?
题眼:重传机制的目的和区别
TCP 是一个面向连接且可靠的协议,其可靠性通过 应答 + 重传机制 来实现。当数据包在网络中丢失或损坏时,TCP 会通过以下几种机制重新发送:
四种重传机制:
-
超时重传(Timeout Retransmission)
- 设置一个 RTO(Retransmission Timeout)计时器;
- 若超过 RTO 时间未收到 ACK,则重发该数据;
- RTO 是动态变化的,基于 RTT 的估算;
- 缺点:等待时间可能较长,影响效率。
-
快速重传(Fast Retransmit)
- 当接收方连续收到多个相同的 ACK(默认 3 次)时;
- 发送方立即重传“被认为丢失”的报文段,无需等待超时;
- 加快了丢包检测速度;
- 缺点:不能定位具体哪个数据段丢失。
-
选择性确认(SACK, Selective Acknowledgement)
- 接收方通过 TCP 选项字段通知发送方哪些数据收到了,哪些没收到;
- 发送方只需重传“未收到”的部分,避免全量重传;
- 提高重传效率(尤其在网络丢包率高时);
- 需双方都支持 SACK 才能启用。
-
重复选择确认(D-SACK, Duplicate SACK)
- SACK 的扩展,用于标识重复接收了哪些数据;
- 发送方可据此判断是否发生了误判性重传,进一步优化策略。
9. TCP 是如何进行流量控制的?
题眼:滑动窗口
流量控制目的:
- 防止发送方发送太快,导致接收方来不及处理,发生数据丢失。
实现方式:滑动窗口(Sliding Window)机制
- 接收方会在 ACK 报文中告诉发送方自己的可接收窗口大小(Window 字段);
- 发送方根据该值控制可发送的最大数据量;
- 窗口大小动态调整,随网络和接收方处理能力变化而变化;
- 当接收方缓存耗尽时,可设置窗口为 0(Zero Window),通知发送方暂停发送。
举例:
- 假设滑动窗口大小为 10 个数据段,发送方可连续发 10 个数据段,无需等待确认;
- 每收到一个 ACK,窗口滑动一个单位,允许发送新数据。
10. TCP 的拥塞控制是怎么实现的?
TCP 拥塞控制用于避免网络拥塞,保障网络公平性和稳定性。主要依赖四个算法:
1. 慢启动(Slow Start)
- 初始设置一个小的拥塞窗口(cwnd),如 1 或 10 MSS;
- 每收到一个 ACK,就将 cwnd 增加一倍(指数增长);
- 快速探测网络带宽上限。
2. 拥塞避免(Congestion Avoidance)
- 当 cwnd 增长到阈值(ssthresh)后,进入线性增长阶段;
- 每收到一个 ACK,仅增加 1/cwnd,避免快速增加导致拥塞。
3. 快速重传(Fast Retransmit)
- 如果接收方收到三个重复 ACK,立即重传该丢失数据段;
- 避免等待超时重传,提高响应速度。
4. 快速恢复(Fast Recovery)
- 在快速重传后,不回到慢启动;
- cwnd 减半后继续线性增长;
- 加快恢复速度,提升吞吐量。
11. TCP 是如何解决粘包问题的?
题眼:粘包的原因和三种解决方法
粘包的原因:
- TCP 是面向字节流的协议,发送的数据没有边界;
- 操作系统的发送缓冲区可能会将多个小包合并(Nagle算法);
- 接收方一次性收到多个包,难以判断每个数据包的起止位置;
- 或者一个大的包被拆分为多个小段接收。
常见解决方案:
-
固定长度消息
- 每个消息固定字节数,接收方按固定长度切分;
- 实现简单,但会浪费空间或限制内容。
-
特殊分隔符
- 双方约定某个特定字符作为消息结束符(如换行符、
\r\n
); - 适用于文本类数据,但需要对内容进行转义或限制。
- 双方约定某个特定字符作为消息结束符(如换行符、
-
自定义消息结构(加长度字段)
- 在每个数据包前添加消息长度字段(如
length + body
); - 接收方先读长度,再根据长度读取完整
- 最通用、安全、灵活,常见于 RPC、JSON、Protobuf 等协议。
- 在每个数据包前添加消息长度字段(如
12. SYN 超时和洪泛攻击是什么?
1. SYN 超时(SYN Timeout)
- 发生于 TCP 三次握手过程中:
- 客户端发送 SYN 后,若服务器长时间未回应 SYN+ACK,则客户端等待超时;
- 可能原因:
- 网络延迟、路由丢包、服务器过载、ACL 防火墙限制等;
- 通常客户端会**重试数次(如3次)**后断开。
2. SYN 洪泛攻击(SYN Flood Attack)
- 属于 DDoS 攻击的一种:
- 攻击者伪造大量源 IP,发送海量 SYN 请求给服务器;
- 服务器为每个连接分配资源,进入半连接(SYN_RCVD)状态;
- 等待 ACK 却迟迟收不到,资源被耗尽;
- 后果:
- 正常用户无法连接,服务器响应变慢或崩溃;
- 解决方式:
- SYN cookies、连接队列限制、防火墙过滤、IP 黑名单等。
13. HTTP 和 HTTPS 有哪些区别?
项目 | HTTP | HTTPS |
---|---|---|
安全性 | 明文传输,容易被窃听/篡改 | 加密传输,防窃听、防篡改、防劫持 |
使用协议 | 超文本传输协议(HTTP) | HTTP + SSL/TLS 加密传输 |
端口号 | 默认 80 | 默认 443 |
证书支持 | 无 | 需向 CA 机构申请 SSL 证书 |
性能开销 | 少 | 加密握手带来一定开销 |
SEO影响 | 无 | 有利于提升权重,推荐使用 |
衍生问题:
● 什么是 HTTPS 中间人攻击(MITM)?
- 攻击者伪造证书或拦截通信,冒充合法服务器;
- 若客户端不验证证书来源或信任伪造证书,就可能被劫持;
- 解决:强制证书验证、HSTS、Pinning 等。
● HTTPS 加密了哪些内容?
- 加密的:
- 请求正文(POST 数据)
- 响应正文(网页内容)
- 请求头/响应头(除部分字段)
- 未加密的:
- 域名(DNS 查询)
- IP 地址、端口号
- TLS 握手过程的明文部分(如 SNI 字段,除非启用 ESNI)
14. GET 和 POST 有哪些区别?
GET 和 POST 是 HTTP 协议中常用的两种请求方法,它们在数据传输和语义上有以下区别:
对比维度 | GET 请求 | POST 请求 |
---|---|---|
数据位置 | 参数附加在 URL 查询字符串中(如 ?a=1&b=2 ) |
参数放在请求体(body)中 |
数据长度限制 | 有 URL 长度限制(浏览器和服务器限制,约 2KB~8KB) | 请求体中无明显长度限制 |
数据类型 | 明文传输,参数可直接在地址栏看到 | 参数隐藏在请求体中,更安全 |
幂等性 | 是(多次请求结果一致) | 否(每次请求可能造成资源变更) |
缓存 | 浏览器可以缓存 GET 请求结果 | 不可缓存 POST 请求结果 |
安全性 | 参数暴露在 URL 中,安全性差 | 相对安全,适合传输敏感数据 |
总结:
- GET:用于获取资源,参数明文、适合无副作用的请求。
- POST:用于提交数据,参数隐藏、适合资源更新等操作。
参考答案简述:
GET 和 POST 是 HTTP 协议中常用的两种请求方法。从 Restful 角度来看,GET 是获取资源,具有幂等性;POST 是新增资源,不具有幂等性。从传输方式来看,GET 把数据放在 URL 中,明文传输;POST 把数据放在消息体中,可加密且无长度限制,因此 POST 更安全。
15. HTTP/1.1、HTTP/2、HTTP/3 的区别?
特性 | HTTP/1.1 | HTTP/2 | HTTP/3 |
---|---|---|---|
是否默认加密 | 否(需手动配置 SSL/TLS) | 是(默认使用 HTTPS) | 是(使用 QUIC 协议,自带 TLS 加密) |
数据传输格式 | 文本格式 | 二进制格式 | 二进制格式 |
多路复用 | 不支持,连接阻塞(队头阻塞) | 支持(基于 Stream,解决 HTTP 层队头阻塞) | 支持(基于 UDP + QUIC,彻底解决队头阻塞) |
连接机制 | 每个请求一个连接,或使用 Keep-Alive | 多个请求复用一个 TCP 连接 | 多个请求复用一个 QUIC(基于 UDP)连接 |
首部压缩 | 不支持,重复头部开销大 | 支持 HPACK 压缩 | 支持 QPACK 压缩 |
服务端推送 | 不支持 | 支持(Server Push) | 支持 |
底层协议 | TCP | TCP | UDP(使用 QUIC 协议代替 TCP) |
引申知识:
- HTTP/1.1 相比 1.0: 增加持久连接、管道化请求、虚拟主机支持、分块传输编码等。
- QUIC 协议: 是 Google 提出基于 UDP 的传输层协议,结合了 TCP 的可靠性和 TLS 的安全性,还解决了连接建立慢、队头阻塞等问题。
16. 网络不通怎么办?Ping 命令原理?什么是拨测?
排查思路:
-
客户端问题排查:
- 多设备测试:如手机可访问、电脑不可访问 ⇒ 电脑问题
- 检查代理、DNS 配置、浏览器扩展或翻墙软件
-
网络层问题排查:
- 使用
ping
从近到远测试:ping 127.0.0.1 # 本机 ping 网关地址(如 192.168.1.1) ping 公网 IP(如 8.8.8.8) ping 域名(如 www.baidu.com)
- 使用
tracert
或traceroute
跟踪网络路径 - 使用
nslookup
或dig
测试 DNS 解析
- 使用
-
服务端问题排查:
- 是否仅某个站点无法访问?
- 查看返回 HTTP 状态码(4xx 权限/客户端问题,5xx 服务端问题)
- 使用
telnet example.com 80
或nc
测试端口连通性
ping 命令原理:
- 基于 ICMP 协议,发送
Echo Request
,接收Echo Reply
- 用于判断目标主机是否可达,测量往返时间(RTT)
- 工作在 OSI 模型网络层(第 3 层)
拨测(Probing Test):
主动探测目标系统可用性、响应时间与性能状态。
常见拨测方式:
- ICMP 拨测(网络层): 使用 ping 测试 IP 是否可达
- TCP/UDP 拨测(传输层): 使用 telnet / nc 测试端口是否开放
- HTTP 拨测(应用层): 模拟访问网页,检查状态码与内容
- DNS 拨测: 使用
nslookup
、dig
检查解析是否正确 - 数据库拨测: 连接数据库执行 SQL,监控响应时间
参考实战回答简述:
网络不通时,我一般从客户端、网络、服务端三方面排查:先看是否所有网站都不通;然后检查是否是代理或 DNS 问题;再使用 ping 测试,从本机开始逐步定位;如果确认是网络问题,还可以结合拨测工具从不同 ISP 或节点测试,判断是否为运营商问题。
17. HTTPS 一定安全吗?
不一定,虽然 HTTPS 提供了加密传输、身份验证和数据完整性,但仍然存在一些风险:
可能存在的攻击方式:
-
中间人攻击(MITM):
- 攻击者伪造服务器证书或使用不受信任的根证书进行欺骗
- 用户若忽视浏览器的证书警告,依然可能泄露敏感信息
-
假证书攻击:
- 若 CA 机构出现“内鬼”或被攻破,可签发合法但伪造的证书
-
弱加密算法:
- 若 HTTPS 使用的加密算法过旧或配置不当,也可能被破解(如 SSLv3、RC4)
-
用户行为问题:
- 用户忽视浏览器警告,强行访问不受信任站点
浏览器应对方式:
- 360 浏览器:提示风险,但允许继续访问
- Chrome:阻止连接并报错,防止用户误入钓鱼站
总结:
HTTPS 相比 HTTP 更安全,但并非绝对安全。只有结合强加密算法、可信 CA、良好的用户习惯以及安全配置,才能真正保障数据安全。
18. TCP 如何保证包有序?
TCP 通过以下机制确保数据包按序到达并正确重组,实现可靠传输:
- 序列号(Sequence Number): 每个数据包分配唯一的序号,接收方可按序重组。
- 确认应答(ACK): 接收方收到数据后返回确认号,确保可靠交付。
- 超时重传机制: 如果发送方在一定时间内未收到确认,将重传数据。
- 滑动窗口机制: 控制发送方连续发送的数据量,提高吞吐效率。
- 乱序重组机制: 若包乱序到达,接收方可缓存并按序交付给应用层。
19. SSL 协议是什么?
SSL(Secure Sockets Layer)是一种网络安全协议,用于保障客户端与服务器之间的数据传输安全。其核心功能包括:
- 加密通信:防止数据被窃听
- 身份验证:防止伪装服务器
- 数据完整性:防止数据被篡改
目前,SSL 已被更安全的 TLS(Transport Layer Security)协议 所取代。
20. HTTP 协议用哪种方式来解决粘包问题?
粘包问题主要出现在 TCP 传输中,由于 TCP 是流式协议,接收端可能无法区分多个 HTTP 请求的边界。HTTP 协议通过以下两种方式解决:
- 回车换行符(CRLF):用于标识 HTTP Header 的结束
- Content-Length 字段:明确指定 HTTP Body 的长度,便于提取完整数据包
此外,HTTP/1.1 支持分块传输(Transfer-Encoding: chunked
)也是一种防止粘包的方法。
21. TLS 加密
TLS 是什么?
TLS(Transport Layer Security)是一种加密协议,用于保障网络通信的安全。其主要目标包括:
- 机密性:防止数据被窃听(使用加密)
- 完整性:防止数据被篡改(使用哈希校验)
- 身份验证:确认通信双方身份(使用证书)
TLS 加密方式:
- 非对称加密:用于密钥交换和身份验证(如 RSA、ECDHE)
- 对称加密:用于数据传输(如 AES)
- 哈希算法:用于完整性校验(如 SHA256)
TLS 握手流程(以 TLS 1.2 为例):
- Client Hello(加密套件、随机数)
- Server Hello(证书、公钥、随机数)
- 客户端验证证书并生成对称密钥
- 客户端用公钥加密密钥发送给服务端
- 双方基于共享密钥开始加密通信
⚡ TLS 1.3 将握手优化为 1 个来回(1-RTT),提升性能。
TLS 加密的数据包括:
- 登录信息(如用户名、密码)
- 信用卡信息
- 会话令牌(如 cookie)
- 表单提交数据
- 下载/上传的文件
22. 什么是内网穿透?
内网穿透是一种将局域网服务暴露到公网的技术,允许外部设备访问本地服务。
应用场景:
- 局域网中的网站、接口、数据库需公网访问
- 在外办公访问家中设备
- 开发调试阶段,向外网演示本地服务
实现原理(以 natapp 为例):
- 本地服务运行在 127.0.0.1:port
- 启动 natapp 隧道,连接 natapp 云服务器
- natapp 云服务器分配一个公网域名/端口
- 外网访问该域名,即可访问本地服务
23. 内网穿透安全吗?
✅ 安全性提升方面:
- 减少攻击面:natapp 仅暴露应用端口,操作系统端口未暴露
- SSL 加密:natapp 使用 256 位 SSL 加密隧道,数据传输安全
- 无需公网 IP:不在公网直接暴露服务器,规避多数黑客扫描
⚠️ 风险仍需注意:
- 应用本身安全:若映射服务存在漏洞(如数据库弱密码),依然可能被攻击
- 映射数据库风险高:建议数据库不直接内网穿透,或设置强认证与访问控制
- 代码漏洞:开发阶段的服务若存在未处理的漏洞,同样有被利用风险
总结:natapp 类工具可一定程度提高安全性,但应用自身安全仍需重视。
🎯 更多高频面试题持续整理中!
不想在关键时刻掉链子?关注我,系统掌握常见面试问题和答题思路。
📌 一起扎实基础,刷题提效,
📈 不内卷、不焦虑,稳稳拿下属于自己的 offer!

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)