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

【JavaEE】初识网络

网络初识

文章目录

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

网络发展史

单机时代 -> 局域网时代 -> 广域网时代 -> 移动互联网时代

独立模式

计算机之间相互独立

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

网络互连

随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成业务,就有了网络互连。

网络互连:将多台计算机连接在一起,完成数据共享。

数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信

根据网络互连的规模不同,可以划分为局域网和广域网。

局域网LAN

把几个电脑,通过路由器连接到一起

局域网,即 Local Area Network,简称LAN

Local 即标识了局域网是本地,局部组建的一种私有网络。

局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。

以下是局域网组建网络的几种方式:

  1. 基于网线直连

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 基于集线器或交换机组建

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  3. 基于交换机和路由器构建

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

广域网

把更多的局域网连接到一起,所构成的网络更加庞大,可能已经覆盖一个城市/一个国家/全世界

广域网,即 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协议中,用五元组来标识一个网络通信:

  1. 源IP:标识源主机

  2. 源端口号:标识源主机中该次通信发送数据的进程

  3. 目的IP:标识目的主机

  4. 目的端口号:标识目的主机中该次通信接收数据的进程

  5. 协议号:标识发送进程和接收进程双方约定的数据格式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

五元组在网络通信中的作用,类似于发送快递:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同时我们也可以在cmd中输入netstat -ano来查看网络数据传输中五元组的信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

协议分层

我们平时写代码,若代码越写越多,越写越复杂,那么我们往往需要将代码拆分成多个部分~

网络通信的场景,可能会比较复杂
有很多的问题需要通过协议来进行解决,
如果搞一个大的协议来解决所有问题,此时这个协议就会非常庞大.非常复杂,就不利于人们去学习和理解,
相比之下,也可以把大的协议,拆分成多个小的协议.让每个小的协议只专注于做一小块事情~~
使每个小的协议,都不会太复杂.(化繁为简)

由于网络通信实在太复杂,拆分就拆出来太多的小的协议.这么多小的协议也就不好管理了.

此时就需要对协议进行分层了.

并且约定了不同层次之间的"调用关系
上层协议,调用下层协议”"下层协议给上层协议提供支持
这样的话,这么多协议就不容易混乱~~

这里我们用一个例子来理解

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

协议分层的好处就是;

  1. 协议分层之后,上层和下层彼此之间就进行了封装
    使用上层协议,不必过多关注下层;
    使用下层协议,也不必过多关注上层

    这也就大大降低了使用者的成本~

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 每一层协议都可以根据需要灵活替换

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

协议分层之后,好处多多.因此现在网络世界都是这种分层的结构。

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

发送方
  1. 应用层:QQ应用程序.QQ就会把用户输入的"hello",给打包成一个应用层的数据报(这个数据报的格式,得是qq的程序员才能知道)

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    就可以将应用层数据报,通过操作系统的API,将数据交给传输层

  2. 传输层

    就要对列才的应用层数据,再进行打包,变成传输层的数据报~~
    这里的打包过程,本质上还是"字符串拼接"
    把刚才的应用层数据,基础上拼接上传输层的报头

    传输层典型的协议TCR/UDP

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    传输层将数据报搞好了之后,这个数据就会进一步交给网络层

  3. 网络层

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    网络层的数据打包好了之后,继续将数据交给“数据链路层”再来进一步打包

  4. 数据链路层

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    把这个数据给物理层

  5. 物理层

    把上述数据,转换成2进制的01序列
    通过光信号/电信号进行传输

    数据发送出去之后,就会经过一系列的交换机和路由器进行转发
    A和B一般来说不是直接网线连接的.中间还要经过很多的交换机/路由器设备进行转发

    从上层协议到下层协议,层层给数据报添加报头
    这个过程称为"封装"
    注意区分,此处的封装不是面向对象的封装了,
    作用有点像~

    当数据到达B这边之后,B就要针对上述数据进行"分用”(针对上述数据报进行层层的解析)

接收方
  1. 物理层

    拿到的光电信号=>转换成二进制数据=>得到以太网数据报
    这个数据要交给数据链路层对应的议处理

  2. 数据链路层

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  3. 网络层

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  4. 传输层

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  5. 应用层

    将上述的数据根据端口号交给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的连接命令,然后输入密码即可。 如果没有设置过密码&#xff0c…...

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)组样例&#xff0c;每次给定一个n(n<1e9)&#xff0c;统计边长为n的上述三角形的等边三角形个数 其中等边三角形的三个顶点&#xff0c;可以在所有黑色三角形&白色三角形的顶点中任取&#xff0c; 答案对1e97取模 思路来源 申老师 & oeis A0003…...

C++学习——string 详解(即C++字符串详解)

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 一、定义string变量的方法 C增强了对字符串的支持&#xff0c;除了可以使用C风格的字符串&#xff0c;还可以使用内置的 string 类。 string是类&#xff0c;而不是基本数据类型。虽…...

LeetCode 1 两数之和

题目描述 链接&#xff1a;https://leetcode.cn/problems/two-sum/?envTypefeatured-list&envId2ckc81c?envTypefeatured-list&envId2ckc81c 难度&#xff1a;简单 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 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未授权访问漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现...

基于单片机智能汽车仪表设计系统

基于单片机的汽车智能仪表的设计 摘要&#xff1a;汽车的汽车系统。速度测量以及调速是我们这次的设计所要研究的对象&#xff0c;本次设计的基础核心的模块就是单片机&#xff0c;其应用的核心的控制单元就是stc89c52单片机&#xff0c;用到的测速模块是霍尔传感器&#xff0c…...

java double 保留两位小数

在Java中&#xff0c;你可以使用 DecimalFormat 或 String.format 来保留 double 类型的数字两位小数。以下是两个例子&#xff1a; 使用 DecimalFormat import java.text.DecimalFormat;public class Main {public static void main(String[] args) {double number 123.456…...

计网第六章(应用层)(三)(文件传输协议FTP)

一、基本概念 将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中即文件传送。 FTP就是因特网上使用得最广泛的文件传送协议。采用客户/服务器方式。 FTP提供交互式的访问&#xff0c;允许客户指明文件的类型和格式&#xff08;如指明是否使用ASCII码&#xf…...

微信小程序canvas画布绘制base64图片并保存图片到相册中

WXML部分&#xff1a; <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中的序列化概述

文章目录 &#xff08;79&#xff09;MR序列化概述&#xff08;80&#xff09;自定义序列化步骤&#xff08;81&#xff09;序列化案例需求分析&#xff08;82&#xff09;序列化案例代码参考文献 &#xff08;79&#xff09;MR序列化概述 什么是序列化&#xff0c;什么是反序…...

Flash-Attention

这是一篇硬核的优化Transformer的工作。众所周知&#xff0c;Transformer模型的计算量和储存复杂度是 O ( N 2 ) O(N^2) O(N2) 。尽管先前有了大量的优化工作&#xff0c;比如LongFormer、Sparse Transformer、Reformer等等&#xff0c;一定程度上减轻了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神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于适应度相关优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.适应度相关优化BP神经网络3.1 BP神经网络参数设置3.2 适应度相关算法应用 4…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...