【JavaEE】初识网络
网络初识
文章目录
- 网络初识
- 网络发展史
- 独立模式
- 网络互连
- 局域网LAN
- 广域网
- 网络通信基础
- IP地址
- 端口号
- 格式
- 协议
- 五元组
- 协议分层
- OSI七层模型
- TCP/IP五(四)层协议
- 1.物理层
- 2.数据链路层
- 3.网络层
- 4.传输层
- 5.应用程序
- 网络设备所在的分层
- 封装和分用
- 例子
- 发送方
- 接收方
网络发展史
单机时代 -> 局域网时代 -> 广域网时代 -> 移动互联网时代
独立模式
计算机之间相互独立
网络互连
随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成业务,就有了网络互连。
网络互连:将多台计算机连接在一起,完成数据共享。
数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。
根据网络互连的规模不同,可以划分为局域网和广域网。
局域网LAN
把几个电脑,通过路由器连接到一起
局域网,即 Local Area Network
,简称LAN
。
Local
即标识了局域网是本地,局部组建的一种私有网络。
局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。
以下是局域网组建网络的几种方式:
-
基于网线直连
-
基于集线器或交换机组建
-
基于交换机和路由器构建
广域网
把更多的局域网连接到一起,所构成的网络更加庞大,可能已经覆盖一个城市/一个国家/全世界
广域网,即 Wide Area Network
,简称WAN
。
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
但是有一个点:局域和广域之间是没有明确的界限的!
网络通信基础
IP地址
描述了一个设备,在网络上的地址
举例子:
生活中:江苏省 盐城市 建湖县境内 蔡徐村
计算机中:使用一个32位,4字节数字,表示地址,一啊不能来说,会把IP地址给表示成4个0-255之间的十进制数字,并且使用3个点进行分隔,点分十进制
特殊IP
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)
端口号
区分一个主机上不同的应用程序的
端口号也是一个整数(2个字节,相对比较小的数字)
不同的程序,就可以关联/绑定到不同的端口号
要求同一个主机上的应用程序,不能关联到同一个端口号、
(一个端口号只能被一个程序绑定,但是一个程序可以绑定多个端口号)
格式
端口号是2字节:0->65535
0 :一般不是使用
1-1023 : 这个范围的端口号,系统留作特殊用途,我们写的程序不要去占用
知名端口号:
22 :ssh
80 :http
443 :https
23 : telnet
在实际的通信过程中,IP和端口往往是一对
举个例子:
我们买东西
收件人地址,收件人电话
发件人地址,发件人电话
好比西游记中的唐僧
贫僧自东土大唐而来,前往西方拜佛求经
贫僧:源端口
东土大唐:源IP
西方:目的IP
佛:目的端口
协议
协议就是一种约定,约定了通信双方按照啥样的方式来传递数据~
网络上,本质就是通过光/电信号佬传输数据的
比如说:低电平(电压)表示1,高电平表示0,高频光信号表示1,低频光信号表示0
举个例子
就好比你去相亲,你们约好了在xx酒店相遇,然而呢别的相亲对象也约定好在xx酒店,那待会你就会可能发生认错人的情况(你懂的,反正我不懂🥵🥵🥵)
那么此时就有一个简单的方法,你们可以约定见面的时候带个绿帽子或者戴个项圈🫣🫣🫣(正经的哈别乱想)
通过这样的操作,就像相当于是一种协议~
协议,就是单纯的约定,并不一定会遇到很复杂的。
由于在网络通信的世界中,遇到的场景/问题往往比较棘手,的确是有一些网络协议是非常复杂的~
五元组
在TCP/IP协议中,用五元组来标识一个网络通信:
-
源IP:标识源主机
-
源端口号:标识源主机中该次通信发送数据的进程
-
目的IP:标识目的主机
-
目的端口号:标识目的主机中该次通信接收数据的进程
-
协议号:标识发送进程和接收进程双方约定的数据格式
五元组在网络通信中的作用,类似于发送快递:
同时我们也可以在cmd
中输入netstat -ano
来查看网络数据传输中五元组的信息:
协议分层
我们平时写代码,若代码越写越多,越写越复杂,那么我们往往需要将代码拆分成多个部分~
网络通信的场景,可能会比较复杂
有很多的问题需要通过协议来进行解决,
如果搞一个大的协议来解决所有问题,此时这个协议就会非常庞大.非常复杂,就不利于人们去学习和理解,
相比之下,也可以把大的协议,拆分成多个小的协议.让每个小的协议只专注于做一小块事情~~
使每个小的协议,都不会太复杂.(化繁为简)由于网络通信实在太复杂,拆分就拆出来太多的小的协议.这么多小的协议也就不好管理了.
此时就需要对协议进行分层了.
并且约定了不同层次之间的"调用关系
“上层协议,调用下层协议”"下层协议给上层协议提供支持
这样的话,这么多协议就不容易混乱~~
这里我们用一个例子来理解
协议分层的好处就是;
-
协议分层之后,上层和下层彼此之间就进行了封装
使用上层协议,不必过多关注下层;
使用下层协议,也不必过多关注上层这也就大大降低了使用者的成本~
-
每一层协议都可以根据需要灵活替换
协议分层之后,好处多多.因此现在网络世界都是这种分层的结构。
OSI七层模型
这种一般就出现在教科书中~
OSI:即Open System Interconnection
,开放系统互连
-
OSI 七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层。
-
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
-
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
越往下,越进阶硬件~
重点还是关注TCP/IP协议
TCP/IP五(四)层协议
1.物理层
描述的是网络通信的硬件设备.
好比基础设施.公路,铁路,
比如使用的网线,光纤都应该是啥规格~
2.数据链路层
两个相邻节点之间的数据传输情况
3.网络层
进行路径规划
4.传输层
关注起点和终点
5.应用程序
如何使用数据(也是我们最需要关注的一点)
物理层我们考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型
网络设备所在的分层
-
对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层;
-
对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;
-
对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
交换机的作用就是针对路由器端口进行拓展,路由器上的端口可能是有限、不够
-
对于集线器,它只实现了物理层;
实际上,现在的路由器和交换机功能都越来越强大了.(甚至说一些高端的交换机,也有路由功能)
另一方面,路由器交换机可能还会支持一些更复杂的操作.甚至可能会工作在传输层或者应用层
以下为跨网段的主机的文件传输:数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器:
封装和分用
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理
描述了网络通信中,基本的数据传输过程
例子
A通过qq将hello发给B
发送方
-
应用层:QQ应用程序.QQ就会把用户输入的"hello",给打包成一个应用层的数据报(这个数据报的格式,得是qq的程序员才能知道)
就可以将应用层数据报,通过操作系统的API,将数据交给传输层
-
传输层
就要对列才的应用层数据,再进行打包,变成传输层的数据报~~
这里的打包过程,本质上还是"字符串拼接"
把刚才的应用层数据,基础上拼接上传输层的报头传输层典型的协议TCR/UDP
传输层将数据报搞好了之后,这个数据就会进一步交给网络层
-
网络层
网络层的数据打包好了之后,继续将数据交给“数据链路层”再来进一步打包
-
数据链路层
把这个数据给物理层
-
物理层
把上述数据,转换成2进制的01序列
通过光信号/电信号进行传输数据发送出去之后,就会经过一系列的交换机和路由器进行转发
A和B一般来说不是直接网线连接的.中间还要经过很多的交换机/路由器设备进行转发从上层协议到下层协议,层层给数据报添加报头
这个过程称为"封装"
注意区分,此处的封装不是面向对象的封装了,
作用有点像~当数据到达B这边之后,B就要针对上述数据进行"分用”(针对上述数据报进行层层的解析)
接收方
-
物理层
拿到的光电信号=>转换成二进制数据=>得到以太网数据报
这个数据要交给数据链路层对应的议处理 -
数据链路层
-
网络层
-
传输层
-
应用层
将上述的数据根据端口号交给QQ这个程序
另外,数据报在网络中还会经历一定的转发过程
如果经过路由器:就会封装分用到网络层
路由器解析到网络层,拿到P地址,决定进一步如何传输
下一步传输的时候,又会重新经过网络层,数据链路层和物理层的封装
如果经过交换机:就会封装分用到数据链路层
那么本篇文章就此结束咯,简单介绍一下网络传输的基本流程
接下来关于网络编程的干货满满,敬请期待~
相关文章:

【JavaEE】初识网络
网络初识 文章目录 网络初识网络发展史独立模式网络互连局域网LAN广域网 网络通信基础IP地址端口号格式 协议五元组协议分层OSI七层模型TCP/IP五(四)层协议1.物理层2.数据链路层3.网络层4.传输层5.应用程序 网络设备所在的分层封装和分用例子发送方接收方…...

UGUI交互组件ScrollBar
一.ScrollBar的结构 对象说明Scrollbar挂有Image和Scrollbar组件的主体对象Sliding Area表示滑动范围Handle滑块 二.Scrollbar的属性 属性说明Handle Rect控制柄对象的引用Direction拖动控制柄时滚动条值增加的方向Value滚动条的当前值,范围为 0.0 到 1.0Suze控制柄…...
DamiBus v0.51 发布
DamiBus,专为本地多模块之间通讯解耦而设计(尤其是未知模块、隔离模块、领域模块)。零依赖,特适合 DDD。 特点 结合 Bus 与 RPC 的概念,可作事件分发,可作接口调用,可作响应订阅。 支持事务传…...

[OpenJDK:环境变量配置]:填充Profile并修改默认配置
文章目录 一:背景:安装hadoop启动提示未找到JAVA_HOME1.1:配置Hadoop的Java环境变量 二:排查-定位解决2.1:查看环境变量配置发现没有JAVA_HOME2.1.1:解决:查看java安装目录2.1.2:再次…...
连接mysql报错 :Host ‘xxx.xx.x.x‘ is not allowed to connect to this MySQL server
排查思路 命令行连接mysql 我是安装在本地docker容器中的,可以使用一下命令直接连接 docker exec -it mysqldb mysql -u root -p其中mysqldb是我的mysql容器名字,后面跟随mysql的连接命令,然后输入密码即可。 如果没有设置过密码,…...

Qt 布局(QSplitter 类QDockWidget 类) 总结
一、QSplitter 类(窗口分割) QSplitter类是一个Qt框架提供的基础窗口控件类,用于分割窗口,使得用户可以通过拖动分隔条来调节子窗口的大小。QSplitter在用户界面设计中非常常见,经常用于划分窗口区域,使得程序可以同时显示多个子…...

git-ssh-key协议同步文件
生成秘钥 ssh-keygen -t rsa ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/Beza/.ssh/id_rsa): /c/Users/Beza/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): …...
2018-2019 ACM-ICPC, Asia Nanjing Regional Contest G. Pyramid(组合数学 计数)
题目 t(t<1e6)组样例,每次给定一个n(n<1e9),统计边长为n的上述三角形的等边三角形个数 其中等边三角形的三个顶点,可以在所有黑色三角形&白色三角形的顶点中任取, 答案对1e97取模 思路来源 申老师 & oeis A0003…...
C++学习——string 详解(即C++字符串详解)
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 一、定义string变量的方法 C增强了对字符串的支持,除了可以使用C风格的字符串,还可以使用内置的 string 类。 string是类,而不是基本数据类型。虽…...
LeetCode 1 两数之和
题目描述 链接:https://leetcode.cn/problems/two-sum/?envTypefeatured-list&envId2ckc81c?envTypefeatured-list&envId2ckc81c 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 targ…...

【opencv】windows10下opencv4.8.0-cuda Python版本源码编译教程
【opencv】windows10下opencv4.8.0-cuda Python版本源码编译教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【opencv】windows10下opencv4.8.0-cuda Python版本源码编译教程前言准备工具anaconda/cuda/cudnnanaconda创建环境(选做)安装原…...
【1day】用友U8Cloud未授权访问漏洞学习
注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现...

基于单片机智能汽车仪表设计系统
基于单片机的汽车智能仪表的设计 摘要:汽车的汽车系统。速度测量以及调速是我们这次的设计所要研究的对象,本次设计的基础核心的模块就是单片机,其应用的核心的控制单元就是stc89c52单片机,用到的测速模块是霍尔传感器,…...
java double 保留两位小数
在Java中,你可以使用 DecimalFormat 或 String.format 来保留 double 类型的数字两位小数。以下是两个例子: 使用 DecimalFormat import java.text.DecimalFormat;public class Main {public static void main(String[] args) {double number 123.456…...
计网第六章(应用层)(三)(文件传输协议FTP)
一、基本概念 将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中即文件传送。 FTP就是因特网上使用得最广泛的文件传送协议。采用客户/服务器方式。 FTP提供交互式的访问,允许客户指明文件的类型和格式(如指明是否使用ASCII码…...
微信小程序canvas画布绘制base64图片并保存图片到相册中
WXML部分: <view class"img_" style"width: 100%;"><canvas type"2d" id"canvasId" style"width: 100%;height: 100%" ></canvas> <button style"margin: auto;width: 70%;marg…...
Hadoop3教程(八):MapReduce中的序列化概述
文章目录 (79)MR序列化概述(80)自定义序列化步骤(81)序列化案例需求分析(82)序列化案例代码参考文献 (79)MR序列化概述 什么是序列化,什么是反序…...

Flash-Attention
这是一篇硬核的优化Transformer的工作。众所周知,Transformer模型的计算量和储存复杂度是 O ( N 2 ) O(N^2) O(N2) 。尽管先前有了大量的优化工作,比如LongFormer、Sparse Transformer、Reformer等等,一定程度上减轻了Transformer的资源消耗…...

发布npm包质量分测试
查询质量分接口 https://registry.npmjs.org/-/v1/search?textcanvas-plus v0.0.1 quality 0.2987 新建文件夹 canvas-plus 执行命令 npm init 生成package.json {"name": "3r/canvas-plus","version": "0.0.1","descript…...

基于适应度相关优化的BP神经网络(分类应用) - 附代码
基于适应度相关优化的BP神经网络(分类应用) - 附代码 文章目录 基于适应度相关优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.适应度相关优化BP神经网络3.1 BP神经网络参数设置3.2 适应度相关算法应用 4…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...