TCP/UDP/Socket/HTTP 网络编程高频面试题(47道 + 详细答案)

一、网络编程基础

1. 什么是网络编程?

网络编程的本质是 多台计算机之间的数据交换

  • 采用 请求/响应模型:客户端发起请求,服务器返回响应。
  • 客户端(Client):按需启动,主动发起连接。
  • 服务器(Server):常驻运行,监听端口,响应请求。

📞 类比:打电话时拨号方是客户端,接听方是服务器;连接建立后,双方平等通信。


2. 网络编程中的两个核心问题

  1. 如何准确定位主机? → 由 IP 地址 解决(网络层)
  2. 如何可靠高效传输数据? → 由 TCP/UDP 解决(传输层)

当前主流模型为 C/S(Client-Server)架构:服务器作为守护进程持续监听,客户端按需连接。


3. 什么是网络协议?

网络协议是 数据交换过程中必须遵守的规则集合,包括:

  • 数据格式
  • 传输顺序
  • 错误处理
  • 是否需要确认等

4. 为什么要对网络协议分层?

  • 降低复杂度:将大问题拆解为小问题
  • 提高灵活性:某层技术变更不影响其他层
  • 便于实现与维护
  • 促进标准化:每层功能可独立定义和优化

5. 计算机网络体系结构

模型 层数 各层名称
OSI 参考模型 7 层 物理层 → 数据链路层 → 网络层 → 传输层 → 会话层 → 表示层 → 应用层
TCP/IP 模型 4 层 数据链路层 → 网络层(IP) → 传输层(TCP/UDP) → 应用层

✅ 实际开发中主要使用 TCP/IP 四层模型


二、TCP 与 UDP

6. 什么是 TCP/IP 和 UDP?

  • TCP(Transmission Control Protocol):面向连接、可靠、有序、基于字节流的传输协议。
  • UDP(User Datagram Protocol):无连接、不可靠、基于报文、低开销的传输协议。

7. TCP 与 UDP 的区别

对比项 TCP UDP
连接方式 面向连接(三次握手) 无连接
可靠性 可靠(重传、校验、顺序) 不可靠(可能丢包、乱序)
通信模式 仅点对点 支持一对一、一对多、多播
数据单位 字节流(可拆分) 报文(不可拆分)
首部开销 20 字节 8 字节
状态维护 需维护连接状态表 无状态
适用场景 文件传输、HTTP、邮件 视频直播、游戏、DNS 查询

📞 类比

  • TCP 像打电话:先确认对方在线,再说话
  • UDP 像广播:直接喊话,不管是否有人听

8. TCP/UDP 的典型应用场景

  • TCP:Web 浏览(HTTP/HTTPS)、文件传输(FTP)、邮件(SMTP/POP3)、SSH
  • UDP:DNS 查询、NTP 时间同步、DHCP 动态分配 IP、实时音视频、在线游戏

9. 常见协议所属传输层

协议 传输层
HTTP / HTTPS / FTP / SMTP / POP3 / SSH / TELNET TCP
DNS / DHCP / NTP / BOOTP / SNMP / ECHO TCP & UDP(DNS 默认 UDP,大响应走 TCP)
ARP 数据链路层(非传输层)

⚠️ DNS 通常使用 UDP(端口 53),但当响应 > 512 字节时自动切换到 TCP。


10. 什么是 ARP 协议?

ARP(Address Resolution Protocol) :将 IP 地址解析为 MAC 地址

  • 主机维护 ARP 缓存表
  • 若缓存无目标 MAC,则广播 ARP 请求
  • 目标主机回复 ARP 响应,源主机更新缓存并发送数据

🌐 跨网段通信时,ARP 解析的是 网关路由器的 MAC 地址


11. 什么是 NAT?

NAT(Network Address Translation) :将 私有 IP 转换为公网 IP,解决 IPv4 地址不足问题。

  • 静态 NAT:一对一固定映射
  • 动态 NAT / PAT(端口复用):多对一,通过端口号区分内网主机

12. 从输入 URL 到页面加载全过程

  1. DNS 解析:浏览器 → OS 缓存 → Hosts 文件 → 本地 DNS → 递归/迭代查询 → 获取 IP
  2. TCP 三次握手:建立可靠连接
  3. 发送 HTTP 请求:GET /index.html
  4. 服务器处理请求:返回 HTML 内容
  5. 浏览器解析渲染:遇到 JS/CSS/图片 → 重复步骤 1~4
  6. 页面完整呈现

三、TCP 核心机制

13. TCP 三次握手详解

步骤 客户端 服务器 状态变化
1 发送 SYN(seq=x) --- SYN_SENT
2 --- 回复 SYN+ACK(seq=y, ack=x+1) SYN_RCVD
3 发送 ACK(ack=y+1) --- ESTABLISHED

目的:确认双方收发能力正常,同步初始序列号(ISN)


14. 为什么不能两次握手?

  • 防止历史连接请求突然到达:旧 SYN 报文滞留后重传,若两次握手会导致服务器误建连接并浪费资源。
  • 无法确认客户端收到服务端的 SYN+ACK

15. 第三次握手 ACK 丢失怎么办?

  • 服务器未收到 ACK → 每隔 3 秒重发 SYN+ACK(默认 5 次)
  • 若客户端在此期间发送数据(带 ACK=1),服务器可进入 ESTABLISHED
  • 若超时仍未收到 → 关闭连接(CLOSED)

16. 客户端故障如何检测?

  • 服务器启用 TCP Keep-Alive 机制
    • 空闲 2 小时后发送探测包
    • 每 75 秒一次,连续 10 次无响应 → 断开连接

17. 什么是初始序列号(ISN)?

  • 随机生成的 32 位数字(如 1000)
  • 用于标识数据字节流起始位置
  • 防止旧连接数据被新连接误接收

18. TCP 四次挥手详解

步骤 发起方 接收方 状态
1 发 FIN --- FIN_WAIT_1
2 --- 回 ACK CLOSE_WAIT(服务端仍可发数据)
3 --- 发 FIN LAST_ACK
4 回 ACK --- TIME_WAIT(等待 2×MSL)→ CLOSED

TIME_WAIT 存在原因

  • 确保最后一个 ACK 能被服务器收到
  • 防止旧连接的延迟报文干扰新连接

19. 为什么不能合并为三次挥手?

因为 服务端可能还有数据未发送完,需先 ACK 客户端的关闭请求,等数据发完再发 FIN。


四、Socket 编程

20. 什么是 Socket?

  • Socket 是应用层与 TCP/IP 协议族通信的抽象接口
  • IP + 端口 唯一标识一个通信端点
  • 长连接 的实现基础(如 WebSocket、游戏后台)

🔧 在 Java 中,Socket 编程主要指基于 TCP/UDP 的网络通信。


21. Socket 属于哪一层?

  • 位于应用层与传输层之间,是对 TCP/IP 协议的封装(外观模式)

22. Socket 通信流程

TCP 模式:
复制代码

text

编辑

复制代码
Server: bind → listen → accept → read/write → close
Client: connect → write/read → close
UDP 模式:
复制代码

text

编辑

复制代码
Server: bind → receive
Client: send → (无需连接)

23. 常用 Socket 类(Java)

类名 协议 作用
Socket TCP 客户端/服务端数据读写
ServerSocket TCP 服务端监听端口,accept 新连接
DatagramSocket UDP 发送/接收数据报
DatagramPacket UDP 封装 UDP 数据包
InetAddress --- 表示 IP 地址
InetSocketAddress --- 封装 IP + 端口

💡 示例代码已验证:TCP 使用 InputStream/OutputStream,UDP 使用 DatagramPacket


五、HTTP 协议

24. 什么是 HTTP?

HTTP(HyperText Transfer Protocol) 是应用层协议,用于在客户端与服务器之间传输超文本(HTML、图片、音视频等)。


25. Socket 与 HTTP 的区别

对比项 Socket HTTP
连接类型 长连接(持久) 短连接(请求-响应后断开)
协议层级 传输层抽象 应用层协议
控制粒度 细(自定义协议) 粗(标准方法/状态码)
适用场景 实时通信(游戏、直播) Web 页面、API 接口

26. HTTP 请求体组成

  • 请求行GET /index.html HTTP/1.1
  • 请求头Host: www.example.com
  • 空行
  • 请求体(仅 POST/PUT 等有,GET 无)

❗ GET 请求 没有请求体,参数在 URL 中。


27. HTTP 响应报文组成

  1. 状态行HTTP/1.1 200 OK
  2. 响应头Content-Type: text/html
  3. 空行
  4. 响应体:HTML 内容等

28. HTTP 与 HTTPS 的区别

项目 HTTP HTTPS
安全性 明文传输 SSL/TLS 加密
端口 80 443
证书 无需 需 CA 证书(付费/免费)
性能 略低(加密开销)
连接 无状态 加密通道 + 身份认证

29. HTTPS 工作原理

  1. 客户端验证服务器证书(有效期、域名、CA)
  2. 生成随机数,用 服务器公钥加密 后发送
  3. 服务器用 私钥解密,得到随机数
  4. 双方用该随机数作为 AES 对称密钥 进行后续通信

🔐 结合了 非对称加密(安全交换密钥) + 对称加密(高效传输)


30. 一次完整 HTTP 请求的 7 个步骤

  1. 建立 TCP 连接(三次握手)
  2. 发送请求行(如 GET / HTTP/1.1
  3. 发送请求头
  4. 发送空行(表示头结束)
  5. 服务器返回状态行(200 OK
  6. 返回响应头
  7. 返回响应体 → 关闭 TCP 连接(或保持)

31. HTTP 状态码分类

类别 含义 常见码
1xx 信息 101(切换协议)
2xx 成功 200(OK)、204(无内容)、206(范围请求)
3xx 重定向 301(永久)、302/307(临时)、304(未修改)
4xx 客户端错误 400(语法错)、401(未认证)、403(禁止)、404(未找到)
5xx 服务器错误 500(内部错)、503(服务不可用)

32. HTTP 请求方法

方法 用途
GET 获取资源
POST 提交数据
PUT 上传文件(全量替换)
PATCH 部分更新
DELETE 删除资源
HEAD 获取头部(无 body)
OPTIONS 查询支持的方法
TRACE 回显请求(调试用)

33. GET 与 POST 的区别

对比项 GET POST
数据位置 URL 参数 请求体
数据长度 受 URL 长度限制(约 2KB) 无限制
安全性 低(参数可见) 较高(隐藏在 body)
幂等性
缓存 可缓存 一般不缓存

✅ 敏感信息(密码)必须用 POST!


34. HTTP 版本对比

特性 HTTP/1.0 HTTP/1.1 HTTP/2
连接 短连接 默认长连接 多路复用
并发 串行请求 管线化(少用) 并行请求
编码 文本 文本 二进制分帧
头部 重复传输 --- HPACK 压缩
新特性 --- 断点续传 服务器推送、流优先级

🚀 HTTP/2 显著提升性能,尤其适合现代 Web 应用。


六、安全与会话

35. 对称加密 vs 非对称加密

类型 密钥 速度 安全性 用途
对称加密 同一密钥(如 AES) 密钥分发难 数据传输
非对称加密 公钥+私钥(如 RSA) 密钥交换、签名

HTTPS = 非对称加密(交换密钥) + 对称加密(传输数据)


项目 Cookie Session
存储位置 客户端(浏览器) 服务器内存/数据库
安全性 低(可篡改)
大小限制 ≤ 4KB 无限制
性能影响 占用服务器资源
关联方式 通过 Set-Cookie 设置 服务器生成 sessionid 存入 Cookie

✅ 实际中常结合使用:Cookie 存 sessionid,Session 存用户数据。


七、补充高频考点(39--47)

39. 什么是 MSL?

MSL(Maximum Segment Lifetime):TCP 报文在网络中的最大存活时间(通常 30~120 秒)。

  • TIME_WAIT = 2 × MSL:确保旧连接报文彻底消失

40. 为什么 TIME_WAIT 必须存在?

  • 防止最后一个 ACK 丢失导致服务器重发 FIN
  • 避免新连接收到旧连接的延迟数据包

41. 如何减少 TIME_WAIT?

  • 启用 SO_REUSEADDR(允许端口复用)
  • 调整内核参数(如 net.ipv4.tcp_tw_reuse

42. UDP 如何实现可靠传输?

应用层自行实现:

  • 序列号 + 确认应答(ACK)
  • 超时重传
  • 流量控制(如 QUIC 协议)

43. HTTP 是无状态的,如何保持登录状态?

通过 Cookie + SessionToken(JWT) 机制。


44. 什么是管线化(Pipelining)?

HTTP/1.1 允许客户端 连续发送多个请求,无需等待响应。

⚠️ 实际中因队头阻塞(Head-of-Line Blocking)问题,很少启用。


45. HTTP/2 的多路复用解决了什么问题?

  • 消除 HTTP/1.x 的 队头阻塞
  • 单个 TCP 连接上并行传输多个请求/响应

46. 什么是 CDN?

CDN(Content Delivery Network):将静态资源缓存到离用户最近的节点,加速访问。


47. 常见抓包工具?

  • Wireshark(图形化,功能强)
  • tcpdump(命令行,轻量)
  • 浏览器 DevTools(HTTP 层)
相关推荐
清空mega2 小时前
第11章 网络编程
android·网络
橘子真甜~3 小时前
C/C++ Linux网络编程5 - 网络IO模型与select解决客户端并发连接问题
linux·运维·服务器·c语言·开发语言·网络·c++
霖003 小时前
ZYNQ——ultra scale+ IP 核详解与配置
服务器·开发语言·网络·笔记·网络协议·tcp/ip
夕小瑶3 小时前
从无形IP到AI万象,安谋科技Arm China“周易”X3 NPU 发布!
人工智能·科技·tcp/ip
天一生水water5 小时前
什么是调压器的P2s
linux·服务器·网络
onebound_noah6 小时前
电商图片搜索:技术破局与商业落地,重构“视觉到交易”全链路
大数据·前端·网络·人工智能·重构·php
老蒋新思维6 小时前
破局与重构:借 “创始人 IP + AI” 开启智能商业新征程|创客匠人
网络·人工智能·网络协议·tcp/ip·重构·知识付费·创客匠人
IUGEI6 小时前
Websocket、HTTP/2、HTTP/3原理解析
java·网络·后端·websocket·网络协议·http·https
Ronin3056 小时前
【Linux网络】传输层协议UDP
linux·网络·udp·传输层