当前位置: 首页 > news >正文

Java网络编程(上)

White graces:个人主页

🙉专栏推荐:Java入门知识🙉

🙉 内容推荐:Java文件IO🙉

🐹今日诗词:来如春梦几多时?去似朝云无觅处🐹


⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏

⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏


目录

网络编程

前置知识

局域网

广域网

IP地址

端口号

网络协议

协议分层

TCP/IP五层模型

1. 物理层

2. 数据链路层

3. 网络层

4. 传输层

总结

5. 应用层

网络封装

应用层封装

序列化和反序列化

传输层封装

网络层封装

数据链路层封装

物理层

网络分用

美图分享


网络编程

前置知识

局域网

俗称LAN, 将不同的主机设备连接在一起就构成了局域网

广域网

俗称WAN, 通过路由器将多个局域网连接在一起就构成了广域网

IP地址

人类有家庭住址, IP地址就是用来表示主机在网络中的地址

格式: 是一个32位的二进制数通常被分成4部分, a.b.c.d这种形式

如果每一部分用十进制表示, 这种表示方法被称为: 点分十进制

端口号

端口是用来定位主机每个进程的位置. 如果IP地址是你的快递地址,那么端口号就是你的个人信息

网络协议

协议: 网络协议是所有网络设备都遵守的规则, 比如如何建立连接,如果相互识别

如果不遵守这个协议可能会出现驴头不对马嘴的情况:

比如对暗号,我说米西米西,你说滑不拉几,暗号对接成功,说明你是我要找的人

识别不成功就不能正常通信

因此需要一个协议来指定规则

协议分层

如果用一个协议去约束所有主机, 那么这个协议就会非常庞大, 因此要对协议进行拆分

常见的协议模型有两种: OSI七层模型和TCP/IP五层(四层)模型

由于OSI七层模型只存在于实验室的理论中, 所以我们主要学习TCP/IP五层模型

TCP/IP五层模型

TCP/IP五层模型是哪五层呢?

1. 物理层

物理层面上的约定, 比如网口网线等物理设备, 使用统一的规格

2. 数据链路层

数据链路层网络层传输层放在一起解释

数据链路层: 关注两个相邻节点之间的通信

3. 网络层

网络层: 关注的是,通信路径的规划, 路径决定了数据要经过哪些节点, 因此网络层也被称为点到点的传输

4. 传输层

 传输层: 关注的是, 通信双方的起点和终点, 也被称为端到端的传输

举个例子解释上面三层模型, 比如网购

传输层

快递包裹上会写着收件人的地址号码, 也写着发件人的地址号码(用于退快递), 

商家和用户只需要知道双方的地址就可以, 不需要关注快递如何发送, 只关注起点和终点(传输层).

网络层

发送包裹, 快递公司会把路线规划好,比如路线1: 上海->无锡->西安, 路线2: 上海->南京->西安,

路线3: 上海->徐州->西安. 规划好路线快递就会按照既定路线传输. 

数据链路层

路线规划好了, 接下来就是运送快递, 比如上海->苏州->南京->西安这个路线, 上海->苏州采用卡车运送, 苏州->南京轮船运输, 南京->西安火车运输, 关注的是两个节点之间的传输 

总结

细节程度: 

传输层: 只关注通信双方(最不细节)

网络层: 通信路径的规划(细节程度一般)

数据链路层: 相邻节点之间的通信(细节程度最高)

5. 应用层

应用层: 和具体应用程序相关, 关注应用程序如何使用数据

有的人也叫TCP/IP四层, 物理层和数据链路层可以合并

经典面试题: 

路由器工作在网络层

交换机工作在数据链路层

网络封装

应用层封装

这里的封装不是Java语法中的封装了, 这里是根据网络协议对数据进行封装

网络上传输的数据是二进制数据

比如A通过QQ向B发送hello world

这些数据都要通过网络传输, 比如发送人接收人消息内容时间内容,这些数据就需要通过应用层协议组装起来

序列化和反序列化

实际上通过协议封装数据过程更加复杂
qq发送的是一个包含很多属性字段的结构化数据
将结构化的数据转化成二进制数据的过程叫做序列化
将二进制数据转化成结构化数据叫反序列化

传输层封装

经过应用层协议封装得到应用层数据包, 接下来就是手动调用系统API(socket)对应用层数据包进行封装, 

得到传输层数据包, 传输层常用UDP协议和TCP协议对应用层数据包封装

这里假设是UDP协议封装

网络层封装

得到传输层数据包后, 系统会自动调用操作系统内核中的API对传输层数据包进行封装

这里常见的协议是IP协议

数据链路层封装

得到IP数据包后, 操作系统内核就会进一步调用数据链路层的API封装

数据链路层的协议一般是以太网

物理层

到数据链路层都没有将数据发送出去, 真正发送数据是数据链路层数据包通过硬件设备将数据转换成光信号/电信号/电磁波发送出去, 发送并不是直接发给接收人中间可能经过了很多的交换坤和路由器

上述数据经过层层添加报头和数据帧的过程就叫做封装

网络分用

分用: 其实就是拆包的过程

接受到物理信号后, 物理层会将数据转换成二进制数据, 然后交给数据链路层处理

数据链路层将帧头帧尾之间的数据交给网络层处理, 网络层将IP数据报的载荷交给传输层,

传输层将传输层数据包的载荷(应用层数据包)交给应用层, 应用层将解析的数据交给对应的应用程序, 应用程序按照规定的协议,(反序列化)解析拿到结构化的数据, 最后将内容显示出来, 这个过程就是分用

物理信号经过交换机和路由器的时候也会进行封装分用

交换机封装分用到数据链路层(交换机工作在数据链路层)

路由器封装分用到网络层(路由器工作在网络层)


美图分享

✨🎆谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"🎆✨🎄

⭐️点赞收藏加关注,学习知识不迷路⭐️

🎉✔️💪🎉✔️💪🎉✔️💪🎉✔️💪🎉

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️

相关文章:

Java网络编程(上)

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🙉 内容推荐:Java文件IO🙉 🐹今日诗词:来如春梦几多时?去似朝云无觅处🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主&a…...

Spring Kafka 之 @KafkaListener 注解详解

我们在开发的过程中当使用到kafka监听消费的时候会使用到KafkaListener注解,下面我们就介绍下它的常见属性和使用。 一、介绍 KafkaListener 是 Spring Kafka 提供的一个注解,用于声明一个方法作为 Kafka 消息的监听器 二、主要参数 1、topic 描述&…...

【量算分析工具-贴地距离】GeoServer改造Springboot番外系列九

【量算分析工具-概述】GeoServer改造Springboot番外系列三-CSDN博客 【量算分析工具-水平距离】GeoServer改造Springboot番外系列四-CSDN博客 【量算分析工具-水平面积】GeoServer改造Springboot番外系列五-CSDN博客 【量算分析工具-方位角】GeoServer改造Springboot番外系列…...

【linux】(1)文件操作及vi

文件和目录的创建 创建文件 touch 命令:创建一个新的空文件。 touch filename.txtecho 命令:创建一个文件并写入内容。 echo "Hello, World!" > filename.txtcat 命令:将内容写入文件。 cat > filename.txt然后输入内容&…...

【5】MySQL数据库备份-XtraBackup - 全量备份

MySQL数据库备份-XtraBackup-全量备份 前言环境版本 安装部署下载RPM 包二进制包 安装卸载 场景分析全量备份 | 恢复备份恢复综合 增量备份 | 恢复部分备份 | 恢复 前言 关于数据库备份的一些常见术语、工具等,可见《MySQL数据库-备份》章节,当前不再重…...

数据治理-数据标准演示

数据字典 数据标准-数据字典 词根 数据标准-词根 业务字典映射 数据标准-业务字典映射 标准文档 数据标准-标准文档...

基于Chisel的FPGA流水灯设计

Chisel流水灯 一、Chisel(一)什么是Chisel(二)Chisel能做什么(三)Chisel的使用(四)Chisel的优缺点1.优点2.缺点 二、流水灯设计 一、Chisel (一)什么是Chise…...

LabVIEW齿轮调制故障检测系统

LabVIEW齿轮调制故障检测系统 概述 开发了一种基于LabVIEW平台的齿轮调制故障检测系统,实现齿轮在恶劣工作条件下的故障振动信号的实时在线检测。系统利用LabVIEW的强大图形编程能力,结合Hilbert包络解调技术,对齿轮的振动信号进行精确分析…...

AI帮写:探索国内AI写作工具的创新与实用性

随着AI技术的快速发展,AI写作正成为创作的新风口。但是面对GPT-4这样的国际巨头,国内很多小伙伴往往望而却步,究其原因,就是它的使用门槛高,还有成本的考量。 不过,随着GPT技术的火热,国内也涌…...

n后问题 回溯笔记

问题描述 在nn格的棋盘上放置彼此不受攻击的n个皇后。 按照国际象棋的规则,皇后可以攻击与之处在同 一行或同一列或同一斜线上的棋子。n后问题等价于在nn格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。 代码 import java.uti…...

简述Java中实现Socket通信的步骤

在Java中,实现Socket通信通常涉及客户端和服务器端两个角色。以下是它们各自的基本步骤: 服务器端(Server) 创建ServerSocket对象: 在服务器端,首先需要创建一个ServerSocket对象。这个对象会监听来自客户…...

Asp.Net Core 实现分片下载的最简单方式

技术群里的朋友遇到了这个问题,起初的原因是他对文件增加了一个属性配置 fileResult.EnableRangeProcessing true;这个属性我从未遇到过,然后,去F1查看这个属性的描述信息也依然少的可怜,只有简单的描述为(获取或设置为 启用范围…...

[Mac软件]Leech for Mac v3.2 - 轻量级mac下载工具

黑果魏叔推荐Leech是由Many Tricks开发的适用于Mac OS X的轻量级且功能强大的下载管理器。 Leech让您完全控制下载,并与浏览器完全集成。您可以将下载排队,暂停和恢复,从受密码保护的服务器下载,并将密码存储在系统范围的安全钥匙…...

留给“端侧大模型”的时间不多了

端侧大模型(Edge AI models),也就是只在设备本地(如智能手机、IoT设备、嵌入式系统等)运行的大模型,过去一两年来非常流行。 具体表现在,终端设备厂商,如苹果、荣耀、小米、OV等&…...

Pytest框架中的Setup和Teardown功能

在 pytest 测试框架中,setup 和 teardown是用于在每个测试函数之前和之后执行设置和清理的动作,而pytest 实际上并没有内置的 setup 和 teardown 函数,而是使用了一些装饰器或钩子函数来实现类似的功能。 学习目录 钩子函数(Hook…...

yolov10/v8 loss详解

v10出了就想看看它的loss设计有什么不同,看下来由于v8和v10的loss部分基本一致就放一起了。 v10的论文笔记,还没看的可以看看,初步尝试耗时确实有提升 好记性不如烂笔头,还是得记录一下,以免忘了,废话结束…...

Typescript高级: 深入理解infer关键字

概述 在 TS 中,infer 是一个高级类型操作,特别是条件类型和映射类型中非常有用的关键字它在泛型中使用也会是一个强大工具,增强了类型推断的能力,让开发者更灵活地处理和操作类型它允许在泛型类型推导过程中捕获一个具体的类型&a…...

JQC-3FF-S-Z 继电器模块使用(arduino)

前言 继电器模块可以控制电流的接通和非接通状态,和开关一样。实际上是用小电流去控制大电流运作的一种“自动开关” 本文只是简单使用继电器模块做一个 led 点亮和熄灭的案例,结合案例可以和 nodemcu 等板子结合做出远程控制开关。 材料准备 杜邦线…...

黑马一站制造数仓实战2

问题 DG连接问题 原理:JDBC:用Java代码连接数据库 Hive/SparkSQL:端口有区别 可以为同一个端口,只要不在同一台机器 项目:一台机器 HiveServer:10000 hiveserver.port 10000 SparkSQL:10001…...

网络I/O模型

网络I/O模型 同步I/O阻塞I/O非阻塞I/OI/O多路复用select函数接口示例 poll函数接口示例 poll 和 select 的区别epoll原理:示例 异步I/O 同步I/O 阻塞I/O 一个基本的C/S模型如下图所图:其中 listen()、connect()、write()、read() 都是阻塞I/O&#xff0…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

麒麟系统使用-进行.NET开发

文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的&#xff0c;如果需要进行.NET开发&#xff0c;则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET&#xff0c;所以要进…...

虚幻基础:角色旋转

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 移动组件使用控制器所需旋转&#xff1a;组件 使用 控制器旋转将旋转朝向运动&#xff1a;组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转&#xff1a;必须移动才能旋转&#xff0c;不移动不旋转控制器…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL&#xff08;Hardware Description language&#xff09; 在解释HDL之前&#xff0c;先来了解一下数字系统设计的流程&#xff1a;逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端&#xff0c;在这个过程中就需要用到HDL&#xff0c;正文…...

零基础在实践中学习网络安全-皮卡丘靶场(第十一期-目录遍历模块)

经过前面几期的内容我们学习了很多网络安全的知识&#xff0c;而这期内容就涉及到了前面的第六期-RCE模块&#xff0c;第七期-File inclusion模块&#xff0c;第八期-Unsafe Filedownload模块。 什么是"遍历"呢&#xff1a;对学过一些开发语言的朋友来说应该知道&…...