网络原理与 TCP/IP 协议详解

一、网络通信的本质与基础概念
1.1 什么是网络通信?

网络通信的本质是跨设备的数据交换,其核心目标是让不同物理位置的设备能够共享信息。这种交换需要解决三个核心问题:

  • 如何定位设备? → IP地址
  • 如何找到具体服务? → 端口号
  • 如何保证数据正确传输? → 协议规则

类比快递系统

  • IP地址:收件人所在的城市和街道(如北京市海淀区中关村大街)
  • 端口号:具体的门牌号和房间号(如3号楼502室)
  • 协议:快递公司的运输规则(如何打包、运输、签收)
1.2 网络通信的核心要素
要素作用示例
IP地址唯一标识网络中的设备192.168.1.1(IPv4)
端口号标识设备上的具体服务80(HTTP)、3306(MySQL)
协议定义数据传输的格式和规则TCP(可靠)、UDP(快速)
数据包信息传输的最小单位包含头部(地址信息)和载荷(数据)

二、TCP/IP 四层模型详解

TCP/IP 是互联网通信的基础协议族,分为四层,每层负责不同的功能:

2.1 应用层:直接面向用户的服务
  • 功能:处理具体应用逻辑(如网页浏览、邮件收发)
  • 常见协议
    • HTTP:超文本传输协议(网页)
    • FTP:文件传输协议
    • SMTP:邮件发送协议
    • WebSocket:全双工通信协议(实时聊天)
  • JavaEE 实现

@WebServlet("/user")
public class UserServlet extends HttpServlet {protected void doGet(HttpServletRequest req, HttpServletResponse resp) {resp.getWriter().write("User Data"); // 通过HTTP响应数据}
}
2.2 传输层:端到端的数据传输管理
  • 功能:确保数据可靠或高效地传输
  • 核心协议
    • TCP:面向连接、可靠传输(三次握手、流量控制)
    • UDP:无连接、快速传输(视频流、实时游戏)
  • Java 实现
    // TCP 服务端
    ServerSocket server = new ServerSocket(8080);
    Socket client = server.accept();// UDP 客户端
    DatagramSocket socket = new DatagramSocket();
    DatagramPacket packet = new DatagramPacket(data, data.length, address, 8080);
    socket.send(packet);
    
    2.3 网络层:跨网络的寻址与路由
  • 功能:通过 IP 地址定位设备,选择最佳传输路径
  • 核心协议
    • IP:定义数据包格式和寻址规则
    • ICMP:网络诊断(如 ping 命令)
  • 路由表示例
目标网络      下一跳地址      接口
192.168.1.0  0.0.0.0        eth0
10.0.0.0      192.168.1.254  eth1
2.4 链路层:物理设备间的数据传输
  • 功能:通过物理介质(网线、光纤、WiFi)传输原始比特流
  • 核心技术
    • MAC地址:网卡唯一标识(如 00:1A:2B:3C:4D:5E
    • 以太网协议:定义数据帧格式
  • 数据帧结构
    | 目标MAC | 源MAC | 类型 | 数据 | CRC校验 |
    
    三、TCP 协议深度解析
    3.1 TCP 的核心特性
    特性说明
    面向连接通信前需建立连接(三次握手),结束后断开(四次挥手)
    可靠传输通过确认应答、超时重传、滑动窗口等机制保证数据完整
    流量控制动态调整发送速率,避免接收方缓冲区溢出
    拥塞控制根据网络状况调整发送速率(慢启动、拥塞避免、快速恢复)
3.2 三次握手:建立可靠连接

详细过程

  1. SYN(同步请求)
    • 客户端发送 SYN=1, SEQ=X
    • 进入 SYN_SENT 状态
  2. SYN-ACK(同步确认)
    • 服务端回复 SYN=1, ACK=X+1, SEQ=Y
    • 进入 SYN_RECEIVED 状态
  3. ACK(最终确认)
    • 客户端发送 ACK=Y+1, SEQ=X+1
    • 双方进入 ESTABLISHED 状态

Java 代码体现

// 服务端
ServerSocket server = new ServerSocket(8080); // 绑定端口
Socket client = server.accept(); // 阻塞等待连接(完成三次握手)// 客户端
Socket socket = new Socket("localhost", 8080); // 发起连接
3.3 四次挥手:优雅断开连接

详细过程

  1. FIN(结束请求)
    • 主动方发送 FIN=1, SEQ=X
    • 进入 FIN_WAIT_1 状态
  2. ACK(确认应答)
    • 被动方回复 ACK=X+1, SEQ=Y
    • 进入 CLOSE_WAIT 状态
  3. FIN(被动方关闭)
    • 被动方发送 FIN=1, ACK=X+1, SEQ=Z
    • 进入 LAST_ACK 状态
  4. ACK(最终确认)
    • 主动方回复 ACK=Z+1, SEQ=X+1
    • 双方进入 CLOSED 状态

Java 代码体现

socket.close(); // 触发四次挥手
3.4 TCP 可靠传输机制
机制原理说明Java 相关配置
确认应答接收方对每个数据包返回 ACK自动处理,无需开发者干预
超时重传发送方未收到 ACK 时重传数据Socket.setSoTimeout(5000) 设置超时时间
滑动窗口允许发送方连续发送多个数据包,无需等待单个 ACK操作系统内核自动管理
流量控制通过接收方的窗口大小(Window Size)限制发送速率Socket.setReceiveBufferSize(8192)
拥塞控制动态调整发送速率以避免网络拥堵(慢启动、拥塞避免、快速重传、快速恢复)操作系统内核自动处理

四、UDP 协议详解
4.1 UDP 的核心特性
特性说明
无连接无需建立连接,直接发送数据
不可靠传输不保证数据到达顺序和完整性
高效性头部开销小(8字节),适合实时应用
4.2 UDP 数据包结构
| 源端口(2字节) | 目标端口(2字节) |
| 长度(2字节)   | 校验和(2字节)   |
| 数据(可变长度)                |
4.3 UDP 适用场景
  • 实时音视频传输:如 Zoom 视频会议
  • 在线游戏:如 MOBA 游戏的玩家位置同步
  • DNS 查询:快速获取域名对应的 IP 地址

Java 代码示例

// UDP 服务端
DatagramSocket serverSocket = new DatagramSocket(8080);
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
serverSocket.receive(packet); // 阻塞接收数据// UDP 客户端
DatagramSocket clientSocket = new DatagramSocket();
byte[] data = "Hello UDP".getBytes();
DatagramPacket sendPacket = new DatagramPacket(data, data.length, InetAddress.getByName("localhost"), 8080);
clientSocket.send(sendPacket);
五、IP 协议与网络层
5.1 IP 地址分类
类别范围用途
A1.0.0.1 ~ 126.255.255.254大型网络(如跨国公司)
B128.0.0.1 ~ 191.255.255.254中型网络(如大学校园)
C192.0.0.1 ~ 223.255.255.254小型网络(如家庭网络)
D224.0.0.0 ~ 239.255.255.255组播地址
E240.0.0.0 ~ 255.255.255.254保留地址
5.2 子网划分与 CIDR
  • 子网掩码:区分网络号和主机号(如 255.255.255.0
  • CIDR 表示法192.168.1.0/24 表示前 24 位是网络号
  • 示例
    IP地址 192.168.1.100,子网掩码 255.255.255.0
    → 网络号 192.168.1.0,主机号 100
5.3 路由选择算法
  • 静态路由:管理员手动配置路由表
  • 动态路由:通过协议(如 OSPF、BGP)自动更新路由表
六、Java 网络编程实战
6.1 TCP 服务端与客户端

服务端代码

public class TcpServer {public static void main(String[] args) throws IOException {ServerSocket server = new ServerSocket(8080);System.out.println("服务器启动,等待连接...");while (true) {Socket client = server.accept();new Thread(() -> {try (BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));PrintWriter writer = new PrintWriter(client.getOutputStream())) {String request = reader.readLine();System.out.println("收到请求: " + request);writer.println("响应: " + request.toUpperCase());writer.flush();} catch (IOException e) {e.printStackTrace();}}).start();}}
}

客户端代码

public class TcpClient {public static void main(String[] args) throws IOException {Socket socket = new Socket("localhost", 8080);Scanner scanner = new Scanner(System.in);try (PrintWriter writer = new PrintWriter(socket.getOutputStream());BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {System.out.print("输入消息: ");String message = scanner.nextLine();writer.println(message);writer.flush();String response = reader.readLine();System.out.println("服务器响应: " + response);}}
}
6.2 UDP 服务端与客户端

服务端代码

public class UdpServer {public static void main(String[] args) throws IOException {DatagramSocket socket = new DatagramSocket(8080);byte[] buffer = new byte[1024];while (true) {DatagramPacket packet = new DatagramPacket(buffer, buffer.length);socket.receive(packet);String message = new String(packet.getData(), 0, packet.getLength());System.out.println("收到消息: " + message);}}
}

客户端代码

public class UdpClient {public static void main(String[] args) throws IOException {DatagramSocket socket = new DatagramSocket();String message = "Hello UDP";byte[] data = message.getBytes();DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("localhost"), 8080);socket.send(packet);socket.close();}
}
七、JavaEE 中的网络技术
7.1 Servlet 与 HTTP
  • HTTP 请求处理
  • @WebServlet("/api/user")
    public class UserServlet extends HttpServlet {protected void doGet(HttpServletRequest req, HttpServletResponse resp) {String userId = req.getParameter("id");// 查询数据库...resp.getWriter().write("User Info: " + userId);}
    }
    

 7.2 WebSocket 实时通信

@ServerEndpoint("/chat")
public class ChatEndpoint {@OnOpenpublic void onOpen(Session session) {System.out.println("新连接: " + session.getId());}@OnMessagepublic void onMessage(String message, Session session) {try {for (Session s : session.getOpenSessions()) {if (s.isOpen()) {s.getBasicRemote().sendText("广播: " + message);}}} catch (IOException e) {e.printStackTrace();}}
}
7.3 RESTful API 设计
@Path("/users")
public class UserResource {@GET@Path("/{id}")@Produces(MediaType.APPLICATION_JSON)public Response getUser(@PathParam("id") String id) {User user = userService.getUserById(id);return Response.ok(user).build();}
}
八、网络诊断与工具
8.1 常用命令行工具
工具用途示例命令
ping测试网络连通性ping www.baidu.com
tracert追踪数据包路径tracert www.google.com
netstat查看网络连接状态netstat -ano | findstr 8080
nslookup查询 DNS 记录nslookup www.aliyun.com
8.2 Wireshark 抓包分析
  • 过滤表达式
    • tcp.port == 8080:仅显示 8080 端口的 TCP 流量
    • http.request.method == "GET":过滤所有 GET 请求
  • 关键字段解析
    • Sequence Number:数据包序号
    • Acknowledgment Number:确认序号
    • Window Size:接收窗口大小

九、网络安全基础
9.1 常见攻击类型
攻击类型原理防御措施
DDoS通过海量请求耗尽服务器资源流量清洗、CDN 分发
SQL注入恶意SQL语句破坏数据库参数化查询、ORM 框架
XSS注入恶意脚本窃取用户信息输入过滤、输出编码
中间人攻击窃听或篡改通信数据HTTPS 加密、证书验证
9.2 HTTPS 加密通信

10.2 进阶学习方向

  • 工作原理
    1. 客户端请求服务器证书
    2. 验证证书合法性
    3. 协商对称加密密钥
    4. 使用对称加密传输数据
  • // 启用 HTTPS 的 Tomcat 配置
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" SSLEnabled="true"><SSLHostConfig><Certificate certificateKeystoreFile="conf/keystore.jks"certificateKeystorePassword="changeit"type="RSA" /></SSLHostConfig>
    </Connector>
    
    十、总结与进阶学习
    10.1 核心知识点回顾
  • TCP/IP 四层模型:应用层 → 传输层 → 网络层 → 链路层
  • TCP 可靠传输机制:三次握手、滑动窗口、超时重传
  • 网络协议分析:深入理解 HTTP/2、QUIC 等新协议
  • 高性能网络编程:学习 Netty 框架、NIO 模型
  • 云原生网络:掌握 Kubernetes 网络模型、Service Mesh
  • 网络安全专家:深入研究渗透测试、漏洞挖掘
    • Java 网络编程:Socket、ServerSocket、DatagramSocket
    • JavaEE 技术:Servlet、WebSocket、RESTful API
    • 网络安全:HTTPS、DDoS 防御、SQL 注入防护

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CUDA编程笔记(1)--最简单的核函数

本文用来记录cuda编程的一些笔记以及知识 本笔记运行在windows系统&#xff0c;vs编译器中&#xff0c;cuda版本是12.6 先看一下最基本的代码例子&#xff1a; #include<iostream> #include<cstdio> #include "cuda_runtime.h" #include "device…

系统架构中的限流实践:构建多层防护体系(二)

系统架构中的限流实践:构建多层防护体系 一、接入层限流:流量拦截第一关二、应用层限流(服务内限流)Java生态方案对比三、分布式限流(跨服务限流)四、数据层限流(数据库/缓存限流)1. 数据库防护策略2. 缓存优化方案五、中间件层限流(消息队列/分布式服务)六、客户端限…

AI学习笔记二十八:使用ESP32 CAM和YOLOV5实现目标检测

若该文为原创文章&#xff0c;转载请注明原文出处。 最近在研究使用APP如何显示ESP32 CAM的摄像头数据&#xff0c;看到有人实现把ESP32 CAM的数据流上传&#xff0c;通过YOLOV5来检测&#xff0c;实现拉流推理&#xff0c;这里复现一下。 一、环境 arduino配置esp32-cam开发环…

uni-app(5):Vue3语法基础上

Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统&#xff0c;只关注视图层&#xff0c;…

JAVA:Kafka 存储接口详解与实践样例

📦 1、简述 Kafka 以其高吞吐、可扩展和高可靠性著称,其强大性能的背后核心在于其高效的存储设计。Kafka 不是传统意义上的队列,而是一个分布式日志系统,其存储模块是核心组成部分。 本文将深入剖析 Kafka 的存储接口实现机制,并结合 Java 示例进行模拟验证。 🧱 2、…

Docker 使用镜像[SpringBoot之Docker实战系列] - 第537篇

历史文章&#xff08;文章累计530&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

数据库入门教程:以商品订单系统为例

数据库入门教程&#xff1a;以商品订单系统为例 一、前言 数据库是现代软件开发中不可或缺的基础&#xff0c;掌握数据库的基本概念和操作&#xff0c;是每个开发者的必经之路。本文将以“商品-品牌-客户-订单-订单项”为例&#xff0c;带你快速入门数据库的核心知识和基本操…

GeoServer样式设置:使用本地图标及分层/分视野显示

GeoServer样式设置:使用本地图标及分层/分视野显示 1、本地图标生效设置2、GeoServer添加不同视野的图标点样式1)服务预览效果2)本地图标引用3)不同视野显示不同图标4)标注注记显示空间的点数据,使用图标来表示是非常常见的业务需求,而且由于在不同比例尺下,可能需要设…

DL00347-基于人工智能YOLOv11的安检X光危险品刀具检测含数据集

&#x1f6a8; AI技术革新&#xff0c;提升安检效率与安全性&#xff01;YOLOv11助力X光危险品刀具检测&#xff01; &#x1f4a1; 在安全领域&#xff0c;效率与精准度的要求从未如此迫切。作为科研人员&#xff0c;是否一直在寻找一款可以提升安检准确率、减少人工干预、提…

测试计划与用例撰写指南

测试计划与用例撰写指南 一、测试计划&#xff1a;项目测试的 “导航地图”1.1 测试计划的核心目标 1.2 测试计划的关键要素 1.2.1 项目概述 1.2.2 测试策略 1.2.3 资源与进度 1.2.4 风险评估与应对 二、测试用例&#xff1a;测试执行的 “行动指南”2.1 测试用例的设计原则 2…

微服务的应用案例

从“菜市场”到“智慧超市”&#xff1a;一场微服务的变革之旅 曾经&#xff0c;我们的系统像一个熙熙攘攘的传统菜市场。所有功能模块&#xff08;摊贩&#xff09;都挤在一个巨大的单体应用中。用户请求&#xff08;买菜的顾客&#xff09;一多&#xff0c;整个市场就拥堵不堪…

Java设计模式之观察者模式:从基础到高级的全面解析

文章目录 一、观察者模式基础概念1.1 什么是观察者模式?1.2 观察者模式的四大角色1.3 观察者模式类图二、观察者模式实现步骤2.1 基础实现步骤2.2 详细代码实现第一步:定义主题接口第二步:定义观察者接口第三步:创建具体主题第四步:创建具体观察者第五步:客户端使用三、观…

GATT 服务的核心函数bt_gatt_discover的介绍

目录 概述 1 GATT 基本概念 1.1 GATT 的介绍 1.2 GATT 的角色 1.3 核心组件 1.4 客户端操作 2 bt_gatt_discover函数的功能和应用 2.1 函数介绍 2.1 发现类型&#xff08;Discover Type&#xff09; 3 典型使用流程 3.1 服务发现示例 3.2 级联发现模式 3.3 按UUID过…

【更新至2023年】1985-2023年全国及各省就业人数数据(无缺失)

1985-2023年全国及各省就业人数数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;1985-2023年 2、来源&#xff1a;Z国统计年鉴、各省年鉴、新中国60年 3、指标&#xff1a;就业人数 4、范围&#xff1a;全国及31省 5、缺失情况&#xff1a;无缺失 6、指标解释&am…

0基础学习Linux之揭开朦胧一面:环境基础开发工具

目录 Linux下安装软件的方案&#xff1a; 对于操作系统的理解&#xff1a; 操作系统的生态问题&#xff1a; 什么是好的操作系统&#xff08;os&#xff09;&#xff1a; 重新理解centos VS ubnutu VS kail&#xff1a; 关于yum: 用 yum 安装软件(安装和卸载软件一定要有r…

YOLO 算法详解:实时目标检测的里程碑

在计算机视觉领域&#xff0c;目标检测一直是一个关键且热门的研究方向&#xff0c;而 YOLO&#xff08;You Only Look Once&#xff09;算法凭借其出色的实时性和较高的检测精度&#xff0c;成为了目标检测算法中的明星选手。本文将深入探讨 YOLO 算法的原理、发展历程、技术优…

leetcode98.验证二叉搜索树:递归法中序遍历的递增性验证之道

一、题目深度解析与BST核心性质 题目描述 验证二叉搜索树&#xff08;BST&#xff09;是算法中的经典问题&#xff0c;要求判断给定的二叉树是否满足BST的定义&#xff1a; 左子树中所有节点的值严格小于根节点的值右子树中所有节点的值严格大于根节点的值左右子树本身也必须…

MathQ-Verify:数学问题验证的五步流水线,为大模型推理筑牢数据基石

MathQ-Verify&#xff1a;数学问题验证的五步流水线&#xff0c;为大模型推理筑牢数据基石 大语言模型在数学推理领域进展显著&#xff0c;但现有研究多聚焦于生成正确推理路径和答案&#xff0c;却忽视了数学问题本身的有效性。MathQ-Verify&#xff0c;通过五阶段流水线严格…

八股战神-JVM知识速查

1.JVM组成 JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f; JVM是Java程序的运行环境 组成部分&#xff1a; 类加载器&#xff1a;加载字节码文件到内存 运行时数据区&#xff1a;包括方法区&#xff0c;堆&#xff0c;栈&#xff0c;程序计数器&#xff0c;本地…

Maven:在原了解基础上对pom.xml文件进行详细解读

一、pom.xml文件 就像项目管理软件 Make 的 MakeFile、Ant 的 build.xml 一样&#xff0c;Maven 项目的核心是 pom.xml。POM( Project Object Model&#xff0c;项目对象模型 ) 定义了项目的基本信息&#xff0c;用于描述项目如何构建&#xff0c;声明项目依赖&#xff0c;等等…