16、Java 基础硬核复习:网络编程的核心逻辑与面试考点
一、核心知识体系
1. 网络通信三要素:IP、端口号、协议
网络通信需要三个核心要素,缺一不可:
- IP地址 :设备的唯一标识(如
192.168.1.1),Java中通过InetAddress类操作(getByName()通过域名获取IP,getHostAddress()获取IP地址)。 - 端口号:应用程序的逻辑标识(0-65535),其中0-1023为系统保留端口(如HTTP的80端口),1024以上为用户端口。
- 网络协议:数据传输的规则(如TCP、UDP),规定数据格式、传输顺序等。
2. TCP/IP四层模型:分层设计的关键
TCP/IP四层模型是网络通信的基础架构,各层独立,便于维护:
- 应用层:HTTP、FTP等协议,处理用户请求;
- 传输层:TCP(可靠传输)、UDP(不可靠传输),负责端到端通信;
- 网络层:IP协议,负责路由选择;
- 物理+数据链路层 :物理传输(如以太网、Wi-Fi)。
我们编程主要关注传输层 (TCP/UDP)和应用层(HTTP等)。
3. 两大传输协议:TCP vs UDP
(1)TCP(传输控制协议)
- 特点:面向连接(需三次握手)、可靠传输(确认应答、重传机制)、基于字节流;
- 应用场景:文件传输、邮件发送、浏览网页(对可靠性要求高)。
(2)UDP(用户数据报协议)
- 特点:无连接(无需握手)、不可靠(丢包不负责)、速度快、基于数据报;
- 应用场景:视频会议、在线直播、网络游戏(对实时性要求高,允许少量丢包)。
4. Socket编程实战:TCP与UDP
(1)TCP编程
- 客户端 :
Socket(ip, port)连接服务端,通过OutputStream发送数据,InputStream接收数据; - 服务端 :
ServerSocket(port)监听端口,accept()阻塞等待客户端连接,通过InputStream/OutputStream读写数据; - 案例:文件传输(客户端上传文件到服务端)、聊天室(需多线程处理多个客户端)。
(2)UDP编程
- 核心类 :
DatagramSocket(发送/接收端)、DatagramPacket(数据报包); - 特点:无需连接,直接发送数据报,适合实时通信(如QQ)。
二、高频面试考点(必须掌握)
1. TCP与UDP的区别(🌟必考Top 1)
| 特性 | TCP(传输控制协议) | UDP(用户数据报协议) |
|---|---|---|
| 连接性 | 面向连接(三次握手) | 无连接(无需握手) |
| 可靠性 | 可靠(确认应答、重传) | 不可靠(丢包不负责) |
| 速度 | 慢(需建立连接) | 快(直接发送) |
| 传输模式 | 字节流 | 数据报 |
| 应用场景 | 文件传输、HTTP | 视频会议、在线直播 |
2. TCP三次握手与四次挥手(🌟死记硬背)
(1)三次握手(建立连接)
- 目的:防止"已失效的连接请求"导致服务端资源浪费(如客户端发送SYN后崩溃,服务端误以为新连接);
- 过程 :
- 客户端:发送SYN(同步序列编号)请求;
- 服务端:回复SYN+ACK(同步确认);
- 客户端:发送ACK(确认),连接建立。
(2)四次挥手(断开连接)
- 目的:确保双方数据传输完毕,正常关闭连接;
- 过程 :
- 客户端:发送FIN(结束)请求;
- 服务端:回复ACK(确认,此时服务端可能还有数据未发送完);
- 服务端:发送FIN请求;
- 客户端:回复ACK,连接断开。
3. Socket的accept()方法
- 作用:服务端监听端口,等待客户端连接;
- 特点 :阻塞方法(无客户端连接时,程序会停在这行代码,直到有客户端连接)。
4. URL与URI的区别
- URL(统一资源定位符) :是URI的子集,不仅标识资源,还指明如何找到它(如
http://www.baidu.com); - URI(统一资源标识符) :仅标识资源(如
/index.html),不包含访问方式。
三、学习建议
- 抓包工具:用Wireshark抓包分析三次握手,理论瞬间变生动;
- 写聊天室:实现多线程服务端,处理多个客户端聊天,深入理解Socket和多线程;
- 对比TCP/UDP :通过文件传输(TCP)和视频传输(UDP)案例,体会两者的差异。
掌握本章核心知识,不仅能应对面试,更能理解网络通信的本质,为后续学习Netty、分布式系统打下基础。