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数据报的载荷交给传输层,

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

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

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

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


美图分享

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

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

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

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

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

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

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

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

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

相关文章

【Qt知识】disconnect

在Qt框架中,disconnect函数用于断开信号与槽之间的连接。当不再需要某个信号触发特定槽函数时,或者为了防止内存泄漏和重复执行问题,你可以使用disconnect来取消这种关联。disconnect函数的基本用法可以根据不同的需求采用多种形式&#xff0…

C++对C的增强

1、作用域运算符 ::解决归属问题(谁是谁的谁) 可以优先使用全局变量 2、命名空间 使用关键字namespace,控制标名称的作用域。 命名空间的本质:对符号常量、变量、函数、结构、枚举、类和对象等等进行封装 1、创建一个命名空间…

图解DSPy:Prompt的时代终结者?!

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调重新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模…

多元联合分布建模 Copula python实例

多元联合分布建模 Copula python实例 目录 库安装 实例可视化代码 库安装 pip install copulas 实例可视化代码 import numpy as np import pandas as pd from copulas.multivariate import GaussianMultivariate# Generate some example data np.random.seed(42) data = …

ChatTTS:开源最强文本转真人语音工具

目录 1.前言 2.详细介绍 2.1 什么是ChatTTS 2.2 项目地址: 2.3 应用特点: 3.如何安装和使用 3.1.谷歌colab 3.1.1.点击链接 3.1.2 进行保存 3.1.3 按照流程依次点击运行 3.1.4 填写自己需要转的文字 3.2 本地运行 3.2.1 下载或克隆项目源码到本地 3.2.2 …

算法每日一题(python,2024.05.31)

题目来源(力扣. - 力扣(LeetCode),简单) 解题思路: 二次遍历,第一次遍历用哈希表记录每个字母的出现次数,出现一次则将它的value值赋为True,将它的下标赋为key值&#x…

HTTPS加密

一.加密是什么 加密就是把明文(要传输的信息)进行一系列的变换,生成密文. 有加密就有解密,解密就是把密文进行一系列的变换,生成明文. 在这个加密和解密过程中,往往需要一个或多个中间数据,辅助进行这个过程,这样的数据称为密钥. 加密解密到如今已经发展成了一个独立的学科 : 密…

基于Springboot开发的外卖餐购项目(后台管理+消费者端)

免费获取方式↓↓↓ 项目介绍039: 系统运行 后端登录页: http://localhost:8081/backend/page/login/login.html 消费端请求:消费端主页: http://localhost:8081/front/index.html 管理员账号 admin 123456 消费者不需要登录 采用技术栈 前端:Eleme…

力扣20 有效的括号

给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括…

【智能算法】红嘴蓝喜鹊优化算法(RBMO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年,S Fu受到自然界中红嘴蓝喜鹊社会行为启发,提出了红嘴蓝喜鹊优化算法(Red-billed Blue Magpie Optimizer, RBMO)。 2.算法原理 2.1算…

MicroBlaze 处理器参考指南

概述 本章包含MicroBlaze功能的概述和详细信息MicroBlaze架构包括Big-Endian或Little-Endian位反转格式,32位或64位通用寄存器,虚拟内存管理,缓存软件支持,和AXI4-Stream接口 简介 MicroBlaze嵌入式处理器软核是一个精简指令集…

[JS] 前端充分使用console.log()有效输出(2024-6-1)

将变量包装在对象中 不要使用 console.log(url, url2, baz),而是使用 console.log({ url, url2, baz })。 如果你比较这两者,你会发现这有多么有用:拥有 url 和 url2 键可以避免这两个 URL 之间的混淆。 在日志前加上唯一字符串前缀 在应用…

开箱即用的Spring Boot 企业级开发平台【毕设项目推荐】

项目概述 基于 Spring 实现的通用权限管理平台(RBAC模式)。整合最新技术高效快速开发,前后端分离模式,开箱即用。 核心模块包括:用户、角色、职位、组织机构、菜单、字典、日志、多应用管理、文件管理、定时任务等功能…

牛客网刷题 | BC107 箭形图案

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 KiKi学习了循环&am…

【计算机毕业设计】359微信小程序校园失物招领系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

Android学习之ION memory manager

目录 what is ION? ION原理 ION数据结构 用户空间 API ION API what is ION? ION是Google的内存管理器,用来支持不同的内存分配机制,如CARVOUT(PMEM),物理连续内存(kmalloc), 虚拟地址连续但物理不连续内存(vmalloc), IOM…

智慧校园的应用场景有哪些

在21世纪的教育挑战中,如何利用科技手段优化教育资源分配,提升教学质量?智慧校园给出了答案。基于信息化的教育改革,智慧校园不仅提升了校园管理的效率,更通过一系列智能化应用,重塑了教学、学习和交流的方…

搭建大型分布式服务(三十八)SpringBoot 整合多个kafka数据源-支持protobuf

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

多个短视频剪辑成一个视频:四川京之华锦信息技术公司

多个短视频剪辑成一个视频&#xff1a;创作中的艺术与技术 在数字时代&#xff0c;短视频以其短小精悍、内容丰富的特点&#xff0c;迅速成为社交媒体上的热门内容形式。然而&#xff0c;有时单一的短视频难以完全表达创作者的意图或满足观众的观赏需求。因此&#xff0c;将多…

【Qt秘籍】[007]-LineEdit Pushbutton控件

Qt的中有着各种各样的控件&#xff0c;相较于传统C/C的输出默认只能在控制台实现&#xff0c;Qt中可以有不同的接口实现各种不同的功能&#xff0c;下面我们将实现不同功能的输出 hello world&#xff01; 标签Label 【Qt秘籍】[006]-Label实现Hello World程序-编程第一步-CSD…