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、分布式系统打下基础。
相关推荐
流水武qin5 分钟前
SpringAI多模态的基本使用
java·spring boot·spring·ai
共享家952710 分钟前
Java入门(多态)
java·开发语言
linwq816 分钟前
网络基础知识一
网络
发现一只大呆瓜23 分钟前
性能优化:CDN 缓存加速与调度原理
前端·javascript·面试
毕设源码-赖学姐24 分钟前
【开题答辩全过程】以 基于Java的婚礼策划平台的设计与实现为例,包含答辩的问题和答案
java·开发语言
xlp666hub25 分钟前
【Linux驱动实战】:最简单的内核模块
linux·面试
_饭团28 分钟前
指针核心知识:5篇系统梳理3
c语言·数据结构·算法·leetcode·面试·学习方法·改行学it
EasyGBS38 分钟前
EasyGBS适配国密GB35114协议的核心技术对别解析
网络·安全·gb28181
吾诺38 分钟前
Spring Boot--@PathVariable、@RequestParam、@RequestBody
java·spring boot·后端
淡泊if44 分钟前
K8s 网络排障:从抓包开始,一步步定位诡异“502”
网络·kubernetes·k8s