【JavaEE】网络初识之网络通信基础

news2024/11/19 2:43:57

✨哈喽,进来的小伙伴们,你们好耶!✨

🛰️🛰️系列专栏:【JavaEE】

✈️✈️本篇内容:网络初识之网络通信基础。

🚀🚀代码存放仓库gitee:JavaEE初阶代码存放!

⛵⛵作者简介:一名双非本科大三在读的科班Java编程小白,道阻且长,星夜启程!

目录

一、局域网

 二、广域网

 三、网络通信基础

一、IP地址

二、端口号

三、协议

四:协议分层

 五、封装和分用


一、局域网

定义:局域网,即 Local Area Network,简称LAN

Local 即标识了局域网是本地,局部组建的一种私有网络。 局域网内的主机之间能方便的进行网络通信,又称为内网; 局域网和局域网之间在没有连接的情况下, 是无法通信的。

局域网组建网络的方式

1 、基于网线直连
可以想象成是两根网线,将三台主机连接起来,就构成了一个局域网。这种组网方式很少见,原因就是非常费网线和网口。
 
2、基于集线器组建
使用一个集线器,将n台主机连接起来。实际应用中基本没有使用集线器组网的,相当于把一根网线给分叉了。
3、 基于交换机组建
借助交换机,就组成了一个局域网、交换机上面的网口之间都是对等的。效果就是把插在上面的设备给组建成一个局域网,这个局域网内部的主机之间就可以相互进行访问。交换机是把若千个设备给组建到一个局域网中。

4、基于交换机和路由器组建

这种的话就是咱们日常中最常见的情况。
路由器这里有两类端口:
WAN口。
LAN口。

其中插在lan口上的设备,在一个局域网里通过wan口连接到另外一个局域网。
路由器则是连接了两个局域网,LAN 口是一个,WAN 又连了一个。

实际上交换机和路由器之间的界限已经很模糊了,因为二者的功能基本是相通的。

 二、广域网

定义:广域网(WAN)可以认为是比较大的局域网就组成了广域网,广域网与局域网也没有明确的界限,最大的广域网叫做Internet(因特网)。

 三、网络通信基础

一、IP地址

概念
IP 地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说, IP地址用于定位主机的网络地址
就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。
格式
IP 地址是一个 32 位的二进制数,通常被分割为 4 “8 位二进制数 (也就是 4 个字节),如:
01100100.00000100.00000101.00000110
通常用 点分十进制 的方式来表示,即 a.b.c.d 的形式( a,b,c,d 都是 0~255 之间的十进制整数)。如: 100.4.5.6
那么IP 地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进
程来接收这个数据呢?这就需要端口号来标识。

、端口号

概念
在网络通信中, IP 地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程,即可以理解为: 端口号用于定位主机中的进程
类似发送快递时,不光需要指定收货地址( IP 地址),还需要指定收货人(端口号)。
格式
端口号是 0~65535 范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
注意:
两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。

三、协议

这里我们需要知道在网络通信的时候,本质上传输的是:光信号和电信号。通过光信号的频率(高频率/低频率) 电信号的电平(高电平/低电平) 来表示 0和1。那么如何知道这个0和1表示啥呢?

概念
协议,网络协议的简称,网络协议是网络通信(即网络数据传输) 经过的所有网络设备 都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互 通信交流。
协议三要素:
1. 语法:即数据与控制信息的结构或格式;
类似打电话时,双方要使用同样的语言:比如普通话 。
2. 语义:即需要发出何种控制信息,完成何种动作以及做出何种响应
语义主要用来说明通信双方应当怎么做。用于协调与差错处理的控制信息。
类似打电话时,我跟我朋友说回来给我带个手抓饼,他说好的!
3. 时序,即事件实现顺序的详细说明。
时序定义了何时进行通信,先讲什么,后讲什么,讲话的速度等。比如是采用同步传输还是
异步传输。
总结:协议 最终体现为在网络上传输的数据包的格式。
那么在实际应用中,协议的内容可能是非常复杂的,就像学校的校规校纪一样,有很多条,而不是一条全部涵盖了所有的规则。那么这里面就涉及到协议分层的问题了。

四:协议分层

分层的好处:
分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。
在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类 。
类似于打电话:打电话的人(使用方)不需要关心电话的内部结构是如何实现的,只需要会使用电话即可,对于提供方来说,将电话内部的实现细节封装起来,只需要提供打电话的功能即可。
这里我们先来认识一下OSI七层模型。
OSI 七层模型

 

OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。
实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层(或四层)模型来实现。
TCP/IP 五层(或四层)模型
TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议簇。
TCP/IP 通讯协议采用了 5 层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
每层对应的功能:
应用层 :负责应用程序间沟通,如简单电子邮件传输( SMTP )、文件传输协议( FTP )、网络远程
访问协议( Telnet )等。我们的网络编程主要就是针对应用层。
传输层 :负责两台主机之间的数据传输。如传输控制协议 (TCP) ,能够确保数据可靠的从源主机发
送到目标主机。
网络层 :负责地址管理和路由选择。例如在 IP 协议中,通过 IP 地址来标识一台主机,并通过路由表
的方式规划出两台主机之间的数据传输的线路(路由)。路由器( Router )工作在网路层。
数据链路层 :负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步 ( 就是说从网线上
检测到什么信号算作新帧的开始 ) 、冲突检测 ( 如果检测到冲突就自动重发 ) 、数据差错校验等工作。
有以太网、令牌环网,无线 LAN 等标准。交换机( Switch )工作在数据链路层。
物理层 :负责光 / 电信号的传递方式。比如现在以太网通用的网线 ( 双绞 线 ) 、早期以太网采用的的同
轴电缆 ( 现在主要用于有线电视 ) 、光纤,现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理
层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器( Hub )工作在物理层。
那么对于我们程序员来说,我们需要打交道的是应用层,应用层以下的四层都是由操作系统和硬件设备驱动和网络接口来完成,这我们不需要太过关心。
看起来是不是有点头疼,哈哈,这也是很正常的,结合具体实例理解会更加轻松一点。
OK,那么我们来了解一下之前介绍的一些设备实现了这里的哪几层。
1、一台主机,其实就对应了物理层到应用层 五层(把这五层都给实现了)。
2、一台路由器,主要就是物理层到网络层 (主要是实现了物理层,数据链路层,网络层)。
3、一台交换机,主要就是物理层到数据链路层(主要是实现了物理层,数据链路层)。

 五、封装和分用

这组概念是网络分层中十分重要的,描述了不同的分层协议之间是如何相互交际的。

实例演示:

假设博主我现在需要在微信上给我的好朋友发一条消息,HELLO JAVA,当我在键盘上输入HELLO JAVA的时候,按下发送键。那么我们来观察一下各个层所干的事情。

应用层:应用程序微信

根据用户输入的内容,把数据构造成一个应用层的协议报文,即遵守了这个协议的一组数据,那么这个协议长啥样是由开发微信的程序员来约定的,不同程序中使用的应用层协议大概率是不同的,即咋们作为普通用户是不知道微信的应用协议是长啥样的。但是我们可以假设一种应用协议格式。

比如下面:这个协议格式就包括发送方A,接收方B,发送时间,发送内容。

 应用层协议就调用操作系统提供的API,把应用层的数据交给传输层,即进入操作系统内核了。

传输层:(操作系统内核)

根据刚才传过来的数据,基于当前使用的传输层协议来构造储一个传输层的协议报文,其中最典型的协议比如UDP,TCP,这里以TCP为例。

 这个构造TCP报文的过程可以看做是一个字符串拼接,其中TCP的报头中有很多信息,最重要的就是“源端口”和“目的端口”,可以理解为发件人和收件人的电话。接下来会把这个传输层的数据报交给网络层。

网络层:(操作系统内核)

拿到了完整的传输层数据报 就会再根据当前使用的网络层协议(例如 P),再次进行封装。 把 TCP 数据报构造成 IP 数据报,即还是添加上一个协议报头。

 紧接着当前的网络层协议,就会把这个IP数据报交给数据链路层。

数据链路层(驱动程序)

在刚才的 IP 数据报基础上,根据当前使用的数据链路层的协议,给构造成一个 数据链路层的数据报典型的数据链路层的协议,叫做“以太网”,就会构造成一个“以太网数据帧"。

 帧头里面存储的信息是接下来要传给硬件设备的地址是啥。IP协议里面写的地址是我出发的起点和到达的终点,比如我现在是要从北京到上海,以太网数据帧,帧头里面写的地址是接下来相邻节点的地址,我从北京到上海中间比如要经过石家庄,合肥,我人在北京,那么这里的地址写的就是石家庄,我人在石家庄,那么这里的地址写的就是合肥。

紧接着,数据链路层又会把这个数据交给物理层。

物理层(硬件设备)

物理层干的事情就是根据刚才的以太网数据帧把这里的0/1变成高低电平,通过网线传输出去,或者变成高频/低频电磁波,通过光纤/无线传播出去。

那么到这里,数据已经离开了当前主机,前往下一个设备了。

物理层(硬件设备)

主机 B 的网卡感知到了一组高低电平,然后就会把这些电平翻译成 0 1 的一串数据。然后这一串 0 1 就是一个完整的以太网数据帧。然后物理层就把这个数据交给了 数据链路层。

数据链路层(驱动)

 

数据链路层负责对这个数据进行解析,去掉帧头和帧尾,取出里面的 IP 数据报然后交给 网络层协议。

网络层(操作系统)

 网络层协议(IP 协议) 又会对这个数据进行解析, 去掉协议报头,取出里面的 TCP 数据报再交给传输层。

传输层(操作系统内核)

 传输层协议(TCP 协议)又会对这个数据进行解析,去 TCP 报头,取出里面的 TCP 数据报,交给应用层。

应用层:应用程序微信

 应用层就会调用 socket API 从内核中读取到这个应用层数据报。再按照应用层协议进行解析,
根据解析结果给显示到窗口中。

那么刚才介绍的这个流程非常重要,一定要重点掌握!!

刚才只是介绍了从起点到终点单一过程,A和B之间还有很多的交换机和路由器,那么他们的工作流程是啥样的呢?

简单来说:A->B:

交换机先分用数据解析到数据链路层,更新以太网数据顿的顿头里的地址然后再重新封装,并进行转发。

路由器先分用数据到网络层,拿到 IP 地址之后进行下一阶段的路径规划,然后重新往下封装并进行转发。

无论网络多么复杂,这里整体的传输过程都是类似的.只是在不停的重复封装和分用的过程罢了!

OK,那么今天的学习就到这里啦,感谢大家的三连支持!!

 

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

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

相关文章

Uniswap v3 详解(二):创建交易对/提供流动性

前文已经说过 Uniswap v3 的代码架构。一般来说,用户的操作都是从 uniswap-v3-periphery 中的合约开始。 创建交易对 创建交易对的调用流程如下: 用户首先调用 NonfungiblePositionManager 合约的 createAndInitializePoolIfNecessary 方法创建交易对&…

【软件测试】软件测试分类

1. 按照测试对象划分 界面测试 界面测试(简称UI测试),测试用户界面的功能模块的布局是否合理、整体风格是否一致、各个控件的放置位置是 否符合客户使用习惯,此外还要测试界面操作便捷性、导航简单易懂性,页面元素的可用性&…

U3751频谱分析仪

18320918653 U3751 频谱分析仪爱德万U3751特点: 频率范围:9kHz~8GHz 大输入电平:30dBm RBW:300Hz~3MHz 体积小,重量轻(5.6公斤),测量速度快 户外量测:W-CDMA&#xff…

unity日记10(无头盔开发vr XR Device Simulator操作说明| 模之屋模型导入unity )

目录 XR Device Simulator配置参考视频 XR Device Simulator操作方法参考视频 模之屋模型导入unity参考视频 XR Device Simulator操作方法(个人心得) 1.摄像机 1.摄像机左右移动 右键移动鼠标 2.摄像机前后移动 右键滚动滚轮 3.摄像…

Vulnhub之HACKABLE: II

1.信息收集 使用arp-scan扫描存活网段 使用nmap对192.168.239.126进行端口扫描,发现存在21(可匿名登录)、22、80端口 2.漏洞发现 使用ftp 192.168.239.126进行匿名登录,注意:anonymous都要小写。执行dir命令发现CALL.html 执行get CALL…

mybatis 的mapper接口没有实现类,那么他是如何工作的

一、mybatis使用动态代理要实现的功能。 mybatis 的底层实际上运行的还是ibatis,即需要把接口和xml映射翻译成 ibatis 需要的这种格式。 二、mapper接口的动态代理 当使用 sqlSession.getMapper 获取一个Mapper 的时候一般是使用 sqlSession 的 DefaultSqlSession…

K_A11_006 基于STM32等单片机采集雨水模块 串口与OLED0.96双显示

K_A11_006 基于STM32等单片机采集雨水模块 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线说明1.1、STC89C52RC雨水模块1.2、STM32F103C8T6雨水模块五、基础知识学习与相关资料下载六、视频…

电脑开机找不到启动设备怎么办?

如果你的电脑弹出错误消息并提示“找不到启动的设备”,不用担心,本文将告诉你5种不同的方法,可以轻松修复无可引导的设备的问题!“找不到启动设备”是什么意思?可引导设备(又称启动设备)是一种存…

Vue.js学习笔记

vue.js学习笔记 Vue.js 是一款流行的 JavaScript 前端框架,Vue 所关注的核心是 MVC 模式中的视图层,它也方便地获取数据更新,实现视图与模型的交互。 1.创建代码片段 声明式渲染:Vue.js 的核心是一个允许采用简洁的模板语法来声…

kafka开kerberos认证报错the client is being asked for a password

Kafka kerberos认证错误记录TOC kafka开发调试 kerberos认证错误记录 背景 kafka 开发调试,开 kerberos情况下遇到的错误。 错误日志 Could not login: the client is being asked for a password, but the Kafka client code does not currently support obta…

隐私计算主流技术

隐私计算目前主流的技术路线有三种:多方安全计算、联邦学习和TEE。 1. MPC多方安全计算 百万富翁问题: 两个富翁,分别为张三和李四,他们自己都清楚自己有几千万财产即他们心里清楚 1~10中的一个数(代表自己千万级的财富)。他们想知道到底谁的数更大一些。 1.1 MPC定义 …

【博学谷学习记录】大数据课程-学习第三周总结

1. 大数据课程导论 数据分析的前提是有数据,数据存储的目的是支撑数据分析。究竟怎么去存储庞大的数据量,是开展数据分析的企业在当下面临的一个问题。传统的数据存储模式存储容量是有大小限制或者空间局限限制的,怎么去设计出一个可以支撑大…

【UE4 第一人称射击游戏】49-僵尸攻击动画

上一篇:【UE4 第一人称射击游戏】48-僵尸死亡设置本篇效果:可以看到僵尸在移动到玩家面前会从移动状态转为攻击状态,播放相应的攻击动画。步骤:打开“SimpleAI”,删除所有和“Character看见pawn时”、“AI随机移动”的…

动态规划算法刷题笔记【背包问题】

01背包问题 dp[i-1][j]指没纳入当前物品,dp[i-1][j-ci]wi指纳入当前物品,并且是和j-ci体积下的价值作和 滚动数组优化空间复杂度 [NOIP2005 普及组] 采药 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜…

基于jsp+mysql+Spring的Springboot旅游网站管理系统设计和实现

基于jspmysqlSpring的Springboot旅游网站管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末…

数据库操作——redis

数据库操作——redisredis介绍Redis、Mamcache/MongoDB对比分布式数据库的CAP原理redis的下载和安装安装之后的操作key操作数据类型字符串命令 string列表 list集合set哈希hashZset 有序集合持久化RDB相关的配置AOF相关的配置开启AOF共存AOF 相关的配置总结事务定义和执行事务的…

【Linux杂篇】Cron是什么?利用Cron Job自动执行定时任务

Cron Cron是一个实用程序,用于在特定的时间自动执行重复任务。在Linux中,常用 cron 服务器来完成这项工作,以下是Cron的工作原理: 如果想稍后执行特定任务一次,可以使用其他命令。但是,对于重复性任务&am…

模电视频笔记:详解直接耦合放大电路p146,3.1.1

一个图一个图的分析下来: 初始的电路原型 ,这是把两个基本的共射放大电路组合了起来。 补充几个很重要的知识点,否则字都认识,但是完全看不懂在说什么: a、图中的晶体管是npn型晶体管。 b、这个电路是共射放大电路 c、…

产品经理如何更好的适应工作呢?

先来了解一下和产品经理相关的数据 大厂职能需求占比变化 岗位薪酬水平&岗位要求 产品经理市场需求现状 大厂喜欢招聘什么样的人? 无论是通过什么途径成为了一名产品经理,对于该岗位所需要的技能其实都是类似的,把产品经理需要具备的能力…

236. 二叉树的最近公共祖先

236. 二叉树的最近公共祖先 难度中等 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大…