“从HTTP到TCP/IP的旅程“-----深入浅出Java Web通信

先放结构图:在这里插入图片描述

一、引言:网络通信就像寄快递

想象一下我们在网上买了一本书,整个配送过程是这样的:

  1. 应用层:你在购物网站填好收货地址(HTTP请求)
  2. 传输层:快递公司把包裹打包,贴上运单号(TCP协议)
  3. 网络层:包裹根据地址被路由到不同中转站(IP协议)
  4. 数据链路层:每个中转站确定具体运输路径(MAC地址)
  5. 物理层:货车、飞机等实际运输工具(电缆、光纤)

Java Web通信的底层原理和这个过程非常相似。

二、Java Web通信的五层模型

Java Web通信基于TCP/IP协议栈,分为五层:

层级作用类比对应Java技术
应用层处理业务逻辑填写快递单HTTP协议、Servlet
传输层建立可靠连接包裹打包+运单号TCP协议、Socket
网络层路由寻址确定中转站路径IP协议
数据链路层物理网络传输每个中转站的运输方式Ethernet协议
物理层实际物理传输货车、飞机等电缆、光纤等
三、从HTTP到TCP/IP的封装过程

让我们通过一个简单的Java Web请求,看看数据是如何被层层封装的。

1. 应用层:HTTP请求
// 一个简单的Java Servlet处理HTTP请求
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) {// 处理业务逻辑String name = request.getParameter("name");response.getWriter().println("Hello, " + name);}
}

比喻:这就像你在快递单上填写了收件人姓名、地址和联系电话。

2. 传输层:TCP协议

Java通过Socket类实现TCP连接:

// 客户端代码:建立TCP连接并发送HTTP请求
try (Socket socket = new Socket("example.com", 80)) {OutputStream out = socket.getOutputStream();// 构造HTTP请求String request = "GET /hello?name=World HTTP/1.1\r\n" +"Host: example.com\r\n" +"Connection: close\r\n\r\n";out.write(request.getBytes());// 接收响应InputStream in = socket.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(in));String line;while ((line = reader.readLine()) != null) {System.out.println(line);}
} catch (IOException e) {e.printStackTrace();
}

比喻:快递公司把你的快递单和物品一起打包,贴上运单号,确保包裹能按顺序送达。

3. 网络层:IP协议

Java代码无需直接操作IP协议,由操作系统内核处理:

// 但我们可以通过Java获取IP信息
InetAddress address = InetAddress.getByName("example.com");
System.out.println("目标IP: " + address.getHostAddress());
// 输出:目标IP: 93.184.216.34

比喻:快递公司根据地址选择最优路线,比如从北京到上海可能经过南京中转站。

4. 数据链路层和物理层

这两层由网络设备和操作系统底层处理,Java代码无需关心:

  • 数据链路层:将IP包封装成帧(Frame),添加MAC地址
  • 物理层:将帧转换为电信号或光信号传输
四、封装过程详解:从代码到网络包

当我们在浏览器输入http://example.com/hello?name=World时,实际发生的过程:

  1. 应用层

    • 浏览器构造HTTP请求:
      GET /hello?name=World HTTP/1.1
      Host: example.com
      User-Agent: Mozilla/5.0
      ...
      
  2. 传输层

    • TCP协议添加头部信息:
      • 源端口:随机生成(如54321)
      • 目标端口:80(HTTP默认端口)
      • 序列号:用于保证数据顺序
      • 确认号:用于确认数据接收
  3. 网络层

    • IP协议添加头部信息:
      • 源IP:客户端IP(如192.168.1.100)
      • 目标IP:example.com的IP(如93.184.216.34)
      • 协议号:6(表示TCP协议)
  4. 数据链路层

    • 添加MAC地址:
      • 源MAC:客户端网卡MAC地址
      • 目标MAC:网关或路由器的MAC地址
  5. 物理层

    • 转换为电信号或光信号,通过网络传输
五、常见问题解答
  1. 为什么需要这么多层?
    分层设计的好处是各层独立发展,比如未来可以用HTTP/3替代HTTP/2,而不需要改变TCP层。

  2. TCP和UDP有什么区别?

    • TCP:可靠连接,像打电话,确保对方收到消息
    • UDP:不可靠连接,像发短信,不保证对方一定收到
  3. Java Web开发中需要手动处理TCP/IP吗?
    大部分时候不需要。Spring Boot等框架已经封装了底层细节,我们只需要关注HTTP请求和响应。

六、总结

Java Web通信是一个复杂但有序的过程,从HTTP请求到TCP连接,再到IP路由,最终通过物理网络传输。理解这个过程有助于我们:

  1. 排查网络问题(如端口被占用、防火墙拦截)
  2. 优化系统性能(如减少HTTP请求、复用TCP连接)
  3. 设计更安全的网络应用(如防止IP欺骗、端口扫描)

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

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

相关文章

docker build使用代理以实现构建过程中下载Github源码等操作

在通过Dockerfile构建docker容器的过程中,经常会需要在构建过程中拉取Github上的代码。当宿主机配好代理,但容器内是一个隔离的环境,若想在容器内访问,则需再打通容器和宿主机之间的代理配置。 方法一: 若宿主机上的…

Docker 快速搭建一个基于 GPT-Vis 组件的统计图表生成服务

以下是对工具简单介绍: 可以在服务端使用 GPT-Vis 统计图表组件直接渲染成图片支持Docker一键部署,提供统计图表渲染生成API接口支持多种GPT-Vis支持的组件,包括折线图、柱形图、饼图、面积图、条形图、直方图、散点图、词云图、雷达图、思维…

hal库练习1

要求:一个按键实现呼吸灯的控制,一个按键控制LED灯的闪烁,串口发送数据控制灯的开关 定时器配置 1.选择需要的定时器2.配置基础参数(根据时钟树给定时器输入的时钟)3.打开中断4.在主函数里打开中断 定时器扫描按键 …

java线程(4)

程序(program) 是为完成制定任务,用某种语言编写的一组指令的集合.简单的话说:就是我们写的代码. 进程 1.进程是指进行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存空间,当我们使用迅雷,又启动了一个进程,操作系统将为迅雷分配新的内存空间. 2、…

02《F8Framework》核心入口 FF8.cs

FF8.cs类是 F8Framework的核心入口 采用单例模式 提供对各个功能模块的全局访问 【特点】通过静态类FF8统一访问所有功能 1.模块化设计: 每个功能独立 通过 ModuleCenter 统一管理 2.懒加载机制: …

【硬件】相机的硬件测试

相机测试 author: Alla Imatest 提供超过 30 种测试项目,主要包括: 1)图像基础参数‌:MTF(调制传递函数)、畸变、均匀性、动态范围 2)色彩与光学特性‌:白平衡误差、饱和度、gamma …

Profinet与Modbus TCP协议转换技术:西门子S7-1500(主站)和欧姆龙NJ PLC的高效数据交换

一、项目背景 某大型现代化智慧农业养殖场致力于打造全方位智能化的养殖环境。其养殖系统中,环境监测与调控部分选用了西门子S7-1500PLC作为Profinet协议主站。该PLC凭借强大的运算能力和丰富的功能模块,能够精准地采集和处理养殖场内的温度、湿度、空气…

希尔伯特变换,实信号转复信号的FPGA实现思路

希尔伯特变换将实信号转复信号的原理 将实信号的相位推迟90度后作为复信号的虚部。 错误实现方式 实信号经过希尔伯特滤波后得到复信号的虚部,之后直接与实信号组成复信号。而由于滤波器本身会对信号延时,故I路与Q路并不是相差90度,所以此方…

多模态大语言模型演进:从视觉理解到具身智能的技术突破

多模态大语言模型演进:从视觉理解到具身智能的技术突破 多模态大语言模型(MLLMs)正在重塑人工智能的边界,实现从"看见"到"理解"再到"行动"的全链条智能。本文将深入解析苹果最新多模态研究进展,揭示视觉-语言模型十年演进的技术脉络,剖析…

window显示驱动开发—渲染管道

支持 Direct3D 版本 10 的图形硬件可以使用共享可编程着色器核心进行设计。 GPU) (图形处理单元可以编程着色器核心,这些着色器核心可以跨构成呈现管道的功能块进行计划。 这种负载均衡意味着硬件开发人员不需要使用每种着色器类型,而只需要使用执行呈现…

时序数据库Apache IoTDB核心技术深度解析

一、引言 ‌背景‌:5G技术加速了IoT领域的发展,物联网设备数据的收集、存储和计算需求日益增长。Apache IoTDB作为一款专为物联网时序数据设计的软件系统,在2020年被Apache基金会认可为顶级项目。 二、IoT领域发展趋势 ‌5G与IoT‌&#x…

Next.js面试题:API深度解析

Next.js面试题:API深度解析 Next.js 通过 App Router 的引入彻底改变了 Web 开发范式。在这个新时代,深入理解 Next.js 的 API 函数不再只是锦上添花,而是技术面试中的关键区分点。这些函数构成了构建高性能、可扩展、现代化 Web 应用的基石…

Docker-MCP quickstart

项目概述 Docker-MCP 是一个 支持mcp的Docker 管理服务器,它允许 客户端 通过 MCP(Model Control Protocol)接口直接与 Docker 进行交互。该项目提供了一套工具,使 AI 助手能够创建容器、部署 Docker Compose 、获取容器日志以及…

git 的变基操作(适合一个功能进行了多次commit提交,提交记录过多不美观)

git提交的 commit 的记录很多,想多个 commit 进行合并,对代码进行整理,帮助更好的阅读代码 IDEA 的操作步骤: 这里,给出你想进行合并的记录 hash 值,完了点击“Rebase”进行合并 点击后,会进行…

【完整源码+数据集+部署教程】路边广告牌实例分割系统源码和数据集:改进yolo11-SEAMHead

研究背景与意义 研究背景与意义 随着城市化进程的加快,路边广告牌作为重要的商业宣传媒介,越来越多地出现在城市的各个角落。它们不仅承担着信息传播的功能,还对城市的视觉环境产生了深远的影响。然而,随着广告牌数量的激增&…

C++ 中文件 IO 操作详解

在C中,文件操作是通过流(stream)来实现的。标准库提供了三种主要的文件流类来处理文件IO操作: ofstream:用于写入文件(output file stream)ifstream:用于读取文件(input file stream&#xff0…

第32节 Node.js 全局对象

在Node.js中我们可以直接访问到全局对象。 这些对象在所有模块里都是可用的,有些对象不是在全局作用域而是在模块作用域里,这些情况将在本文的内容中进行介绍。 global {Object} 全局命名空间对象。 在浏览器中,全局作用域就是顶级域。如…

Linux文件属性和权限概述-linux026

Linux文件属性和权限概述 Linux 系统作为多用户操作系统,通过文件属性和权限机制来控制不同用户对文件和目录的访问,从而保证系统的安全性。不同的用户对同一文件可以有不同的访问权限,这些权限包括 读取(read)、写入…

nuScenes介绍

目标检测指标 指标内容mAP(mean Average Precision)bev下2d中心点的距离来评价,而不是像2d检测里用iou来评价mATE(Average Translation Error)中心点的2D欧式距离mASE(Average Scale Error)中心…

带中断计数器的UART接收中断程序 (8259@400H/402H)

1.程序功能 在中断服务程序中增加了中断计数器,并在主循环中通过串口输出中断次数。 2.验证 2.1手动触发8259的IR1,高电平有效 2.2串口接收 3.测试程序 ; You may customize this and other start-up templates; ; The location of this template is…