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

java——网络原理初识

在这里插入图片描述

T04BF

👋专栏: 算法|JAVA|MySQL|C语言

🫵 小比特 大梦想

目录

    • 1.网络通信概念初识
      • 1.1 IP地址
      • 1.2端口号
      • 1.3协议
        • 1.3.1协议分层
          • 协议分层带来的好处主要有两个方面
        • 1.3.2 TCP/IP五层 (或四层模型)
        • 1.3.3 协议的层和层之间是怎么配合工作的

1.网络通信概念初识

1.1 IP地址

网络互联的目的就是进行网络通信,也就是从网络获取数据,说具体一点,就是网络主机中不同进程之间进行通信
那么,在组件的网络里,到底是怎么判断是从哪台主机,将数据传输到哪台主机的呢??
这就需要使用IP地址来标识
IP地址用来标识网络上一个设备的位置,通过位置找到这个设备进行进一步的通信
IP地址实际上是一个32位的整数(针对IPV4),也就是 4个字节的数
但是我们在平常见到的往往是使用"点分十进制" 的方式 来表示IP地址
所谓"点分十进制" 就是将上述的IP地址分成4个部分,每个部分一个字节,并且每个部分表示的范围在 0 - 255

1.2端口号

IP地址是用来标识不同主机的
而端口号就是用来标识一个主机上的不同程序
要求在每个程序启动的时候,就需要关联上一个和别的程序不一样的端口号

1.3协议

协议就是"约定",是通信双方对通信规则的约定
这个约定一定是双方都认可的,就是约定在通信的时候,哪一部分该怎么做
进行网络通信的时候,是一定要有通信协议的
就是为了保证,在不同的主机,不同的设备上,即使是不同的硬件,不同的操作系统,不同的应用程序,也能保证通信的正常进行
在网络通信过程里面,通信协议是非常重要的环节

1.3.1协议分层

网络通信是一个非常复杂的事情,涉及到很多的细节问题
如果是仅仅只是通过一个协议就约定了上述所有的细节该怎么实现,那么这个协议将会非常庞大
最好的办法就是 将上面庞大的协议,进行拆分
拆分就是为了更好的管理,不要让这个东西太复杂,让拆分完后的每一部分,复杂一个功能模块
此时,就可以将一个功能复杂的协议,拆分成多功能单一的协议的

拆分是拆分了,但是拆出来的协议太多了,就要对协议进行分类分层
就类似于在公司:
在这里插入图片描述
虽然整体的人多,分出来的组别也多,但是不会乱

而分层,不乱的前提是,不能分级汇报工作

协议分层也就是类似上面的效果,将很多协议,按照不同的功能分层不同的层级,每一个层级都有对应的主线任务(目标,要解决的问题)

上层协议会调用下层协议的功能,下层协议会给上层协议提供服务(不能越级调用)

协议分层带来的好处主要有两个方面

(1)封装的效果
即某一层协议不必知道其他层协议的细节,降低学习成本
在这里插入图片描述
按照如图所示的类似封装效果,那么此时会汉语的两个人,不必知道电话通信的原理,就能打电话

而设计电话的人,也可能不懂汉语,但是也不影响他开发电话

(2)任意协议之间,都是可以灵活替换的 即方便进行解耦合
在这里插入图片描述
即使层级内部的协议变了

站在使用者的角度,完全感知不到,电话机有任何区别

站在电话开发者的角度,也不必对针对英语做出任何的修改

此时引入协议分层就对 整个网络升级迭代,带来了很大的便利

我们当前的网络现状,就是有很多协议,这些协议就是按照一定的分层规则,组织起来的

有两种分层规则:OSI七层模型 和 TCP/IP五层(或四层)模型

但是OSI七层模型只是存在于教科书上,是一种理想化的模型,客观世界是不存在的(搞得太复杂了)

因此我们主要来看 TCP/IP五层(或四层)模型

1.3.2 TCP/IP五层 (或四层模型)

TCP/IP五层(或四层)模型实际上是 OSI七层模型的简化版

我们目前接触到的网络,大部分都是TCP/IP五层(或四层)模型,电脑上网基本都是,至于手机上网的 4G 5G通信,就是一套专门的协议

(1)物理层

就是硬件层面上的相关约定,比如网口,网线…

(2)数据链层,网络层,传输层,应用层

举个例子:
我们在淘宝上买衣服,下单的时候,就需要填写收件人信息,同时商家也需要填写发件人的信息

此时我和商家就只是关注收件人信息和 发件人信息 ,即终点和起点

这就类似于传输层,只关注 通信双方的起点和终点
即"端"到"端"的传输(endPoint)

接下来商家发货,就会把快递交给快递小哥拿到快递公司,此时快递公司就会对这些快递进行分拣,根据不同的目的地,安置到不同的传输路线上

例如有的是"上海 - > 重庆" ,有的是"上海 -> 广东",而即使是"上海 - > 重庆",中间也有不同的中转站

快递公司就会把路线规划好,包裹就会按照这样的既定路线进行传输

这就类似于网络层,关注的是通信中,通信路线的规划
规划出的路径,就决定了数据要经过哪些节点,即"点到点的传输"

此时具体到运输层面上,即具体咋运输,就要有快递员自行确定了

例如上海到 ->苏州是大卡车,苏州到 南京是火车…

这就类似于数据链路层,关注的是通信过程中,相邻两个点之间的运输

当我买家拿到快递后,此时我们拿到快递后具体需要干什么,就是我自己关心的事情,商家 / 快递公司不关心

这就类似于应用层,和具体应用直接相关,传输的数据干啥用,如何使用,有啥意义

这就是TCP / IP五层

而有一些资料把上述的五层称为四层,实际上就是 不单独算物理层(实际上物理层数据链层可以合并)
在这里插入图片描述
如图所示,实际上两种模型的区别就在于,TCP/IP模型,将应用层,表示层,会话层合并成一个应用层了

至于其他层,都是同一个东西,只是不同的叫法

1.3.3 协议的层和层之间是怎么配合工作的

上层协议会调用下层协议的功能,下层协议会给上层协议提供服务

我们通过一个实际场景来解释:

A 通过 QQ 给 B 发送 hello消息

QQ应用程序就要负责实现上述的逻辑

(1)应用层

QQ应用程序首先就需要把上述要传递的内容,组织成 “应用层数据包”

QQ里会有一个应用层网络协,协议就是规定了,数据按照怎么样的格式来组织

而网络上传输的数据本质上就是二进制字符串

因此发送人 接收人 消息时间,消息内容 就要组织到一个字符串里面,组织的时候,就要按照一定的格式来组织

不同协议,数据组织的格式是不同的

此时我们假设,QQ应用层协议是这样的:发送人的QQ号,接受人的QQ号,发送时间,消息正文\n(即使事实上的QQ应用层协议更加复杂,但是本质上也是把各个属性信息,组织成一个字符串,即将结构化的数据,转化为字符串 / 二进制字符串 -> 序列化)

假设此时的应用层数据包是:

在这里插入图片描述

(2)传输层

此时应用层数据已经有了,QQ应用程序就要调用系统的API来进行传输,就要将数据交给传输层(传输层(操作系统内核提供了API),让应用程序去调用 -> 称为 socket api)

调用这样的api,就能交给数据交给传输层(进入到系统内核了)

传输层拿到应用层数据包后,就要对应用层数据包进行进一步的封装,构造成"传输层数据包"

在传输层里有两个典型的协议,TCP,UDP(此处假设使用UDP来作为传输层协议)

在这里插入图片描述

而报头里面放的是一些UDP相关的属性(比如发件人和收件人的端口号,就在UDP中)

报头后面的数据就称为UDP数据包的载荷(payLoad)

这种过程就类似于包装快递

(3)网络层

传输层构造好数据包后,就会继续把数据包交给网络层(传输层会调用网络层提供的API,这个调用的过程是系统内核自己负责的)

在网络层,典型的协议就是IP协议

在这里插入图片描述

IP数据包不关心后面的载荷是啥,只关心IP报头里的数据(发件人的IP地址和收件人的IP地址)

(4)数据链层

网络层又进一步调用 数据链层的API,把上述IP数据包进一步交给数据链层

这里同样也是操作系统内核完成的工作

而这里调用的API往往是网卡驱动程序提供的

数据链层的典型协议就是以太网

电脑通过有线网传输数据,走的就是以太网协议,我们电脑上插的网线就是 (以太网线)

在这里插入图片描述

此时上述数据就已经进入到网卡驱动里了,接下来就要真正发送出去了

(5)物理层

上述数据本质上还是0101这样的二进制数据

硬件设备就要把上述数据转化成光信号 / 电信号 / 电磁波 ,才会真正发射

上述层层包装数据,不停的加数据报头的过程,就是 “封装”

而上述数据实际上不是直接到达B,而是先到达和A连接的交换机 / 路由器

而数据到达B之后,要做的事情就是 上述过程的逆过程

(1)物理层

收到一系列光信号后,把这些信号转成0101这样的二进制数据,交给数据链路层

(2)数据链路层对数据进行解析(解析报头里的关键信息,为后续的传输 / 转发 打下基础,还要拿到载荷数据)

此时解析出来的数据是要交给上层的

(3)网络层

IP协议按照协议对从数据链路拿到的数据进行进一步解析,解析报头中的关键信息,取出载荷

进一步将解析出来的数据交给 传输层

(4)传输层

拿着传输过来的UDP数据包,按照UDP格式进一步解析,解析出关键信息(要给哪个端口号使用),以及解析出载荷

再进一步将载荷交给对应的应用程序

(5)应用层

QQ拿到应用数据包

按照自己的协议格式进行解析,将前面拿到的结构化数据,显示到页面上

注意:这样的网络数据在发送之后,实际上再中间会经过很多路由器 / 交换机进行转发,此时路由器和交换机也会进行封装分用

但是与上面不同的是,路由器只是封装到网络层即可,而交换机封装到数据链路层



感谢您的访问!!期待您的关注!!!

在这里插入图片描述

T04BF

🫵 小比特 大梦想

相关文章:

java——网络原理初识

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 小比特 大梦想 目录 1.网络通信概念初识1.1 IP地址1.2端口号1.3协议1.3.1协议分层协议分层带来的好处主要有两个方面 1.3.2 TCP/IP五层 (或四层模型)1.3.3 协议的层和层之间是怎么配合工作的 1.网络通信概念初识…...

js怎么判断是否为手机号?js格式校验方法

数据格式正确与否是表单填写不可避免的一个流程,现整理一些较为常用的信息格式校验方法。 判断是否为手机号码 // 判断是否为手机号码 function isPhoneNumber(phone) {return /^[1]\d{10}$/.test(phone) }判断是否为移动手机号 function isChinaMobilePhone(phon…...

深入理解Java中的方法重载:让代码更灵活的秘籍

关注微信公众号 “程序员小胖” 每日技术干货,第一时间送达! 引言 在Java编程的世界里,重载(Overloading)是一项基础而强大的特性,它让我们的代码更加灵活、可读性强。对于追求高效、优雅编码的开发者而言,掌握方法重…...

鸿蒙ArkTS声明式开发:跨平台支持列表【显隐控制】 通用属性

显隐控制 控制组件是否可见。 说明: 开发前请熟悉鸿蒙开发指导文档: gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本…...

每日一题——Java编程练习题

题目: 键盘录入两个数字number1和number2表示一个范围,求这个范围之内的数字和。 我写的代码: public class Test {public static void main(String[] args) {Scanner sc new Scanner(System.in);System.out.print("输入第一个数:&q…...

java编辑器中如何调试程序?

目录 如何调试java程序? 待续、更新中 如何调试java程序? 1 看错误信息 2 相应位置输入输出信息: System.out.println("测试信息1 "); 以此查看哪条语句未进行输入 待续、更新中 1 顿号、: 先使用ctrl. ,再使用一遍切回 2 下标: 21 2~1~ 3 上标: 2…...

第四范式Q1业务进展:驰而不息 用科技锻造不朽价值

5月28日,第四范式发布今年前三个月的核心业务进展,公司坚持科技创新,业务稳步拓展,用人工智能为千行万业贡献价值。 今年前三个月,公司总收入人民币8.3亿元,同比增长28.5%,毛利润人民币3.4亿元&…...

SpringBoot整合Kafka的快速使用教程

目录 一、引入Kafka的依赖 二、配置Kafka 三、创建主题 1、自动创建(不推荐) 2、手动动创建 四、生产者代码 五、消费者代码 六、常用的KafKa的命令 Kafka是一个高性能、分布式的消息发布-订阅系统,被广泛应用于大数据处理、实时日志分析等场景。Spring B…...

低边驱动与高边驱动

一.高边驱动和低边驱动 低边驱动(LSD): 在电路的接地端加了一个可控开关,低边驱动就是通过闭合地线来控制这个开关的开关。容易实现(电路也比较简单,一般由MOS管加几个电阻、电容)、适用电路简化和成本控制的情况。 高边驱动&am…...

【C++】入门(二):引用、内联、auto

书接上回:【C】入门(一):命名空间、缺省参数、函数重载 文章目录 六、引用引用的概念引用的使用场景1. 引用做参数作用1:输出型参数作用2:对象比较大,减少拷贝,提高效率 2. 引用作为…...

编程学习 (C规划) 6 {24_4_18} 七 ( 简单扫雷游戏)

首先我们要清楚扫雷大概是如何实现的: 1.布置雷 2.扫雷(排查雷) (1)如果这个位置是雷就炸了,游戏结束 (2)如果不是雷,就告诉周围有几个雷 3.把所有不是雷的位置都找…...

【AI】llama-fs的 安装与运行

pip install -r .\requirements.txt Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved.Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows(venv) PS D:\XTRANS\pythonProject>...

Android NDK系列(五)内存监控

在日常的开发中,内存泄漏是一种比较比较棘手的问题,这是由于其具有隐蔽性,即使发生了泄漏,很难检测到并且不好定位到哪里导致的泄漏。如果程序在运行的过程中不断出现内存泄漏,那么越来越多的内存得不到释放&#xff0…...

软件设计师,下午题 ——试题六

模型图 简单工厂模式 工厂方法模式抽象工厂模式生成器模式原型模式适配器模式桥接模式组合模式装饰(器)模式亨元模式命令模式观察者模式状态模式策略模式访问者模式中介者模式 简单工厂模式 工厂方法模式 抽象工厂模式 生成器模式 原型模式 适配器模式 桥…...

《Kubernetes部署篇:基于麒麟V10+ARM64架构部署harbor v2.4.0镜像仓库》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:企业级K8s集群运维实战 一、环境信息 K8S版本 操作系统 CPU架构 服务版本 1.26.15 Kylin Linux Advanced Server V10 ARM64 harbor v2.4.0 二、部…...

远程工作/线上兼职网站整理(数字游民友好)

文章目录 国外线上兼职网站fiverrupwork 国内线上兼职网站甜薪工场猪八戒网云队友 国外线上兼职网站 fiverr https://www.fiverr.com/start_selling?sourcetop_nav upwork https://www.upwork.com/ 国内线上兼职网站 甜薪工场 https://www.txgc.com/ 猪八戒网 云队友 …...

elasticsearch7.15实现用户输入自动补全

Elasticsearch Completion Suggester(补全建议) Elasticsearch7.15安装 官方文档 补全建议器提供了根据输入自动补全/搜索的功能。这是一个导航功能,引导用户在输入时找到相关结果,提高搜索精度。 理想情况下,自动补…...

掌握正则表达式的力量:全方位解析PCRE的基础与进阶技能

Perl 兼容正则表达式(PCRE)是 Perl scripting language 中所使用的正则表达式语法标准。这些正则表达式在 Linux 命令行工具(如 grep -P)及其他编程语言和工具中也有广泛应用。以下是一些基础和进阶特性,帮你掌握和使用…...

FastFM库,一款强大神奇的Python系统分析预测的工具

FastFM库概述 在机器学习领域,Factorization Machines(FM)是处理稀疏数据集中特征间交互的重要工具.Python的fastFM库提供了高效的实现,特别适合用于推荐系统、评分预测等任务.本文将全面介绍fastFM的安装、特性、基本和高级功能,并结合实际应用场景展示…...

R语言绘图 --- 饼状图(Biorplot 开发日志 --- 2)

「写在前面」 在科研数据分析中我们会重复地绘制一些图形,如果代码管理不当经常就会忘记之前绘图的代码。于是我计划开发一个 R 包(Biorplot),用来管理自己 R 语言绘图的代码。本系列文章用于记录 Biorplot 包开发日志。 相关链接…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

【iOS】 Block再学习

iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...

Xcode 16 集成 cocoapods 报错

基于 Xcode 16 新建工程项目&#xff0c;集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...