2026年7月11日 · 5 分钟阅读

Java 网络编程基础:TCP/IP、HTTP、URL 与一次请求的完整链路

基于网络编程课程笔记,梳理网络协议、TCP/IP、TCP 与 UDP、三次握手、四次挥手、URL 请求链路、HTTP 与 HTTPS。

网络编程的核心,是让不同机器上的程序能够按照共同规则交换数据。Java 里的 Socket、NIO、Netty、RPC,本质上都是建立在网络协议之上的编程模型。

学网络编程,不能只从 API 开始。先理解协议、连接、数据传输和一次请求的完整链路,再看代码会清楚很多。

什么是网络通信协议

协议可以理解为通信双方共同遵守的规则。

人和人交流需要使用共同语言,计算机之间通信也需要共同规则。网络协议规定了数据如何组织、如何传输、如何校验、出错后如何处理。

常见网络协议包括:

  • TCP/IP。
  • UDP。
  • HTTP/HTTPS。
  • IPX/SPX。
  • NetBEUI。

现在互联网最核心、最常见的是 TCP/IP 协议族。

TCP/IP 分层模型

TCP/IP 不是一个单独协议,而是一组协议的集合。它通常按四层模型理解:

层级作用常见协议
应用层面向应用,定义业务数据格式HTTP、HTTPS、FTP、DNS
传输层负责端到端传输TCP、UDP
网络层负责寻址和路由IP
网络接口层负责物理网络传输Ethernet、Wi-Fi

分层的好处是职责清晰。应用层不用关心网线怎么传输,网络接口层也不用关心 HTTP 报文含义。

TCP 和 UDP

TCP 和 UDP 都属于传输层协议,但设计目标不同。

对比项TCPUDP
是否连接面向连接无连接
可靠性可靠传输不保证可靠
顺序性保证数据有序不保证顺序
速度相对较慢相对较快
典型场景网页、文件传输、RPC直播、语音、游戏、广播

TCP 更像打电话:先建立连接,再持续通信。UDP 更像发短信:直接发送,不保证对方一定收到。

TCP 三次握手

TCP 建立连接需要三次握手。

客户端 -> 服务端:SYN
服务端 -> 客户端:SYN + ACK
客户端 -> 服务端:ACK

三次握手的目标是让双方确认:

  • 客户端具备发送能力。
  • 服务端具备接收和发送能力。
  • 客户端具备接收能力。

如果只有两次握手,服务端无法确认客户端是否真的能收到自己的响应,容易建立无效连接。

TCP 四次挥手

TCP 断开连接通常需要四次挥手。

主动方 -> 被动方:FIN
被动方 -> 主动方:ACK
被动方 -> 主动方:FIN
主动方 -> 被动方:ACK

为什么不是三次?因为 TCP 是全双工通信。主动方说“我没有数据要发了”,不代表被动方也立刻没有数据要发。被动方需要先 ACK,再等自己的数据发送完成后发送 FIN。

输入 URL 到页面展示发生了什么

浏览器输入一个 URL 后,背后大致会经历这些步骤:

  1. 浏览器解析 URL。
  2. 查询域名对应的 IP 地址。
  3. 建立 TCP 连接。
  4. 如果是 HTTPS,还要进行 TLS 握手。
  5. 浏览器发送 HTTP 请求。
  6. 服务器处理请求,生成响应。
  7. 服务器返回 HTML、CSS、JavaScript 等资源。
  8. 浏览器解析和渲染页面。

在这个过程中,DNS、TCP、IP、HTTP、TLS 都可能参与。

HTTP/1.0 和 HTTP/1.1

HTTP/1.1 相比 HTTP/1.0 有几个重要变化。

能力HTTP/1.0HTTP/1.1
连接复用默认短连接默认长连接
缓存控制相对简单增加更多缓存头
状态码较少增加更多错误状态码
断点续传支持较弱Range 机制更完善
Host 头不强制支持虚拟主机

长连接的价值很大。它避免每个请求都重新建立 TCP 连接,减少握手和挥手成本。

URI 和 URL

URI 是统一资源标识符,URL 是统一资源定位符。

可以简单理解:

URL 是 URI 的一种

URI 负责标识一个资源,URL 不仅标识资源,还说明如何定位这个资源。

一个 URL 通常包含:

  • 协议:httphttps
  • 主机名或 IP。
  • 端口号。
  • 路径。
  • 查询参数。
  • 片段标识。

HTTP 和 HTTPS

HTTP 和 HTTPS 最大区别是安全性。

对比项HTTPHTTPS
默认端口80443
传输方式明文加密
证书不需要需要证书
安全性容易被窃听和篡改提供加密、认证和完整性保护

HTTPS = HTTP + TLS/SSL。它不是替代 HTTP 的全新应用层协议,而是在 HTTP 和 TCP 之间加了一层安全保护。

Java 网络编程关注什么

Java 网络编程并不是自己实现 TCP/IP,而是在这些协议基础上编写应用程序。

常见层次是:

层次Java 技术
原始网络通信Socket、ServerSocket
非阻塞 IONIO、Selector、Channel、Buffer
网络框架Netty
远程调用RPC、Dubbo、gRPC
Web 容器Tomcat、Undertow

越往上,开发者越少关心底层细节;越往下,开发者越需要理解连接、线程、缓冲区和协议边界。

小结

网络编程基础可以按这条线理解:

  1. 协议是通信双方共同遵守的规则。
  2. TCP/IP 是互联网通信的基础协议族。
  3. TCP 可靠但成本更高,UDP 简单但不保证可靠。
  4. HTTP 构建在 TCP 之上,HTTPS 在 HTTP 和 TCP 之间增加安全层。
  5. Java 网络编程是在协议基础上封装应用通信能力。

理解这些基础后,再学习 BIO、NIO、Netty 和 RPC,就不会只停留在 API 层面。