16、Java 基础硬核复习:网络编程的核心逻辑与面试考点

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后崩溃,服务端误以为新连接);
  • 过程
    1. 客户端:发送SYN(同步序列编号)请求;
    2. 服务端:回复SYN+ACK(同步确认);
    3. 客户端:发送ACK(确认),连接建立。
(2)四次挥手(断开连接)
  • 目的:确保双方数据传输完毕,正常关闭连接;
  • 过程
    1. 客户端:发送FIN(结束)请求;
    2. 服务端:回复ACK(确认,此时服务端可能还有数据未发送完);
    3. 服务端:发送FIN请求;
    4. 客户端:回复ACK,连接断开。

3. Socket的accept()方法

  • 作用:服务端监听端口,等待客户端连接;
  • 特点阻塞方法(无客户端连接时,程序会停在这行代码,直到有客户端连接)。

4. URL与URI的区别

  • URL(统一资源定位符) :是URI的子集,不仅标识资源,还指明如何找到它(如http://www.baidu.com);
  • URI(统一资源标识符) :仅标识资源(如/index.html),不包含访问方式。

三、学习建议

  1. 抓包工具:用Wireshark抓包分析三次握手,理论瞬间变生动;
  2. 写聊天室:实现多线程服务端,处理多个客户端聊天,深入理解Socket和多线程;
  3. 对比TCP/UDP :通过文件传输(TCP)和视频传输(UDP)案例,体会两者的差异。
    掌握本章核心知识,不仅能应对面试,更能理解网络通信的本质,为后续学习Netty、分布式系统打下基础。
相关推荐
ShineWinsu1 天前
对于C++:继承的解析—上
开发语言·数据结构·c++·算法·面试·笔试·继承
码农阿豪1 天前
Nacos 日志与 Raft 数据清理指南:如何安全释放磁盘空间
java·安全·nacos
加农炮手Jinx1 天前
Flutter for OpenHarmony 实战:JWT — 构建安全的无状态认证中心
网络·flutter·华为·harmonyos·鸿蒙
直有两条腿1 天前
【大模型】Langchain4j
java·langchain
love530love1 天前
Scoop 完整迁移指南:从 C 盘到 D 盘的无缝切换
java·服务器·前端·人工智能·windows·scoop
消失的旧时光-19431 天前
C++ 多线程与并发系统取向(二)—— 资源保护:std::mutex 与 RAII(类比 Java synchronized)
java·开发语言·c++·并发
莫寒清1 天前
ThreadLocal
java·面试
iambooo1 天前
Shell在日志分析与故障排查中的实战应用
linux·服务器·网络
_麦麦_1 天前
《九章云络书·织网布阵玄机》上篇
网络·智能路由器
雷帝木木1 天前
Flutter for OpenHarmony:Flutter 三方库 money2 — 坚不可摧的鸿蒙金融核心组件
网络·flutter·http·华为·金融·harmonyos·鸿蒙