【JavaEE】网络通信中的一些基本概念及协议分层

news2024/10/6 6:44:13

  • 博主简介:想进大厂的打工人
  • 博主主页:@xyk:
  • 所属专栏: JavaEE初阶

互联网是怎么来的?很多先进技术,都是先军用,用了之后太香了才逐渐民用~~

互联网也是如此,互联网之前,可以通过有线/无线,发电报~~缺点非常明显,通信链路容易被打击~~于是美国人开始研究,有没有办法,能够搞出一种通信手段,万一真的收到核打击了,通信链路仍然正常,因此可以发出指令,进行核反击,那么需要多搞几条链路

当这里的链路足够复杂的时候,意味着即使整个路径上,有一部分被摧毁了,仍然有很大可能找到一条能通过去的路~~

那么互联网也是如此,从最开始的局域互联网,到现在的广域网,广域网可以跨区域进行网络通信, 把很多的局域网连接起来,使用更多的路由器,交换机!!

单机阶段 => 局域网阶段 => 广域网阶段 => 移动互联网阶段

那么互联网中有哪些概念呢?请看下文~~


目录

文章目录

一、网络互连

1.1 局域网LAN(小范围)

1.2 广域网WAN

1.3 之后又进入了移动互联网阶段,无线联网~

二、网络通信基础

2.1 IP地址

2.2 端口号

2.3 协议

2.4 知名协议的默认端口

三、协议分层

        3.1 什么是协议分层

3.2 分层的作用

 四、真正的网络协议

4.1 OSI七层模型

4.2 TCP/IP五层网络模型

4.2.1 应用层

4.2.2 传输层

4.2.3 网络层

4.2.4 数据链路层

4.2.5 物理层

4.2.6 网络设备所在分层

五、封装&分用

5.1 封装

5.2 分用


一、网络互连

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

数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。
根据网络互连的规模不同,可以划分为局域网和广域网。

1.1 局域网LAN(小范围)

一栋楼 或 大学校园中有限的, 狭小的, 区域内网络.

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

基于网线直连
把两个电脑,通过一个网线直连,构成局域网~~(局域网联机)

以机房为例,多个机器之间可以进行联机,这就相当于一个局域网

基于交换机也能进行联机,这也是局域网

 

  • 电脑越多,用网线直连就越复杂~
  • 区别于集线器:集线器是将一条网线转变成多条网线

 1.2 广域网WAN

当局域网足够大时,就成了广域网;即使两个玩家,天南海北,也可以随时PK

 广域网,即 Wide Area Network,简称WAN。
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。

网络的组建(通过一些交换机/路由器搭建一个网络环境),其实也是一个专业性很强的技能——网管(网络管理员),不是网吧管理员,而是网络管理员!

1.3 之后又进入了移动互联网阶段,无线联网~

智能手机的普及,尤其是小米和华为,从安卓赛道出发大大的降低了手机的价格成本~~(充话费送手机)

二、网络通信基础

网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。
那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。

2.1 IP地址

概念
IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。
就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。

格式
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:
01100100.00000100.00000101.00000110。
通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:192.168.0.136。

3个点,把整个IP分成4个部分,每个部分,1个字节

命令行输入ipconfig:

 特殊IP

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。

IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识。

2.2 端口号

概念
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。

格式
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。

注意事项
两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。

一个进程启动后,系统会随机分配一个端口(启动端口)
程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。
进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能绑定同一个端口号

2.3 协议

概念
协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

作用:

为什么需要协议?

计算机之间的传输媒介是光信号和电信号。通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。

简单的来说,协议 就是 计算机与计算机之间通过网络实现通信时事先达成的一种"约定".两台计算机之间必须能够支持相同的协议,并遵循相同协议进行处理,这样才能实现相互通信.

A和B语言不通,导致无法交流:协议不同

A和C用的都是中文,此时可以交流:协议相同

2.4 知名协议的默认端口

系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使用的应用层协议,如:

22端口:预留给SSH服务器绑定SSH协议
21端口:预留给FTP服务器绑定FTP协议
23端口:预留给Telnet服务器绑定Telnet协议
80端口:预留给HTTP服务器绑定HTTP协议
443端口:预留给HTTPS服务器绑定HTTPS协议

餐厅的VIP包房是给会员使用,但会员也可以不坐包房,坐其他普通座位。

三、协议分层

对于网络协议来说,往往分成几个层次进行定义

3.1 什么是协议分层

协议分层类似于打电话时,定义不同的层次的协议:

 在这个例子中,我们的协议只有两层;但是实际的网络通信会更加复杂,需要分更多的层次

3.2 分层的作用

一个协议太复杂了,就可以拆分成多个协议

协议是拆分出很多,存在有些小的协议,作用或者定位是类似的

就可以针对这些小协议,进行“分类”,同时针对这些不同的类别,进行分层~~

为什么需要网络协议的分层?

分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。后续就可以比较容易的针对这里的某一层协议进行替换。

分层之后就可以做到,层次之间,耦合程度比较低

上层协议不必了解下层的细节,下层也不必了解上层的细节

方便的对某一层的协议进行替换

而分层,也需要约定层级与层级之间的调用关系

要求不能跨层级调用

要求上层协议调用下层协议,下层协议给上层提供支持

只有两个相邻的层级才能交互

 四、真正的网络协议

4.1 OSI七层模型

OSI -> Open System Interrconnection 开放系统互连.

OSI 七层模型划分为以下七层:

 

 OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。

4.2 TCP/IP五层网络模型

当下最广泛使用的网络模型

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。(四层是因为没考虑物理层,软件方面看)

4.2.1 应用层

关注传输过来的数据,要做什么~~

4.2.2 传输层

不考虑中间路径,只关注起点和终点

我和淘宝卖家,都不关心中间是怎么传输的,只关心起点和终点~~

中间你怎么传输都无所谓,只要规定时间送到了就行了~~

4.2.3 网络层

主要负责两个遥远节点之间的路径规划

例如收货与发货之间有很多条路径可以走:

在众多路径中找一个合适的~~

上海 -> 北京 -> 西安

深圳 -> 杭州 -> 无锡 -> 北京

4.2.4 数据链路层

主要关注两个相邻节点之间的传输

上海 -> 南京  火车

南京 -> 北京 卡车

网络上的相邻节点,就是通过网线/光纤/无线直接连接的设备

4.2.5 物理层

网络通信的基础设施,网线,光纤,网络接口.....

网络上的高速公路

4.2.6 网络设备所在分层

对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的 下四层;
对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的 下三层;
对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的 下两层;
对于集线器,它只实现了 物理层。

五、封装&分用

  1. 发送方发送数据,数据从上到下,依次交给对应的协议,进行封装加工
  2. 接收方接受数据,数据从下到上,依次交给对应的协议,进行分用解析

5.1 封装

以QQ发送消息为例子,解释一下封装分用的过程:

我是发送方,在编辑框输入一个消息发给滑稽老铁:在干嘛呢?

1.应用层到传输层:打包成应用层数据包发送

字符串拼接:

 2. 传输层拿到上述数据:

应用层调用传输层(API):封装成传输层数据报

传输层有很多协议,最经典的是TCP和UDP

此处以UDP为例~~

UDP针对上述数据包再进行封装~~

 3.传输层到网络层:

UDP数据报,已经有了,接下来就是把这个数据报交给网络层的协议

网络层最常见的协议,就是IP协议~~

上述UDP数据报,到达网络层,还需要进一步的封装,添加上IP协议报头

 4. 网络层到数据链路层:

最经典的协议,叫做以太网(数据链路层+物理层)

 mac地址,也叫做物理地址.
也是描述一个主机在网络上的位置.
它的功能和IP很相似的.但是当下就把这两个地址分别作用于不同的用途.

IP用来进行网络层的路径规划
mac用来进行描述数据链路层,两个即将进行传输的相邻节点~

mac和网卡绑定的,每个设备都会有一个自己唯一的mac地址

5.数据链路层到物理层

数据链路层就要把上述以太网数据帧交给物理层了.

物理层要把上述0101的二进制数据~~
转换成光信号/电信号/电磁波信号,进行传输了~~

 


5.2 分用

接受过程和上述过程,刚好相反

  1. 发送,从上到下,依次封装,新增报头
  2. 接受,从下到上,依次分用,去掉报头

1.物理层,网卡,收到高低电平二进制数据.
就会对这里的信号进行解析,还原成0101这样的二进制序列.

2.从物理层交给数据链路层.
此时就把上述0101这系列数据当做一个以太网数据帧.(此处是从以太网线。,收到的数据,就是要交给以太网协议来处理了

把帧头去掉,帧尾去掉,取出中间的载荷,再往上交给网络层.
以太网数据帧帧头中有一个消息类型根据这个类型就知道了网络层是ip协议了.

3. 网络层

此时就由网络层的IP协议进行解析数据报.也是去掉IP报头.同时会做一些工作.最重要的还是取出载荷,交给更上层的传输层协议.
ip 数据报,报头中也有一个字段,标识当前传输层用的是哪个协议.

 4. 传输层

此处是由UDP来解析处理,还是去掉报头,取出载荷,把数据交给应用层.
借助端口号来区分具体的应用程序.
每个要接受网络数据的程序都需要关联上一个端口号.

5. 应用层

 由qq这个程序,进行解析应用层数据报取出下列字段,放到程序的界面中.

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

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

相关文章

单链表——“数据结构与算法”

各位CSDN的uu们你们好呀,今天,小雅兰的内容终于是我们心心念念的单链表啦,这一块呢,是一个很重要的部分,也是一个对目前的我来说,比较困难的部分,下面,就让我们进入单链表的世界吧 之…

【unity项目实战】3DRPG游戏开发04——导航、人物移动和鼠标指针图片替换

AI导航烘培 还不清楚怎么用的可以看我另一篇文章 零基础带你从小白到超神29——导航系统 将地形调成静态导航的 选中地形,设置为可行区域 点击烘培 可爬坡改为30度,就会发现坑就变为不可行区域了 选择所有的树,为不可行区域,点击烘培 给主角人物添加导航组件

Kafka3.0.0版本——生产者数据可靠性

目录 一、ACK应答原理1.1、应答级别1.1.1、acks 01.1.2、acks 11.1.3、acks -1(all) 1.2、问题思考 二、数据可靠性2.1、数据可靠性分析2.2、 数据完全可靠条件2.3、ACK应答级别可靠性总结 三、数据可靠性代码示例 一、ACK应答原理 1.1、应答级别 1…

一日一题:第十二题---模拟散列表(三种方法!!)

​作者:小妮无语 专栏:一日一题 🚶‍♀️✌️道阻且长,不要放弃✌️🏃‍♀️ 今天来给大家介绍的是简单的Hash表的应用 目录 关于哈希的知识点 题目描述(模拟散列表) 代码 1(拉链…

基于GPT-4的神仙插件Bito,亲测好用

基于GPT-4的神仙插件,无需魔法,目前免费 一、Bito 简介 最近发现一个可以有效提升coding效率的插件神器,截止当前(20230425)已有65k的下载量了! 类似与Cursor一样,可以使用AI辅助写代码,但是又解决Cursor没有语法提…

力扣刷题day35|416分割等和子集

416. 分割等和子集 力扣题目链接 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums [1,5,11,5] 输出:true 解释:数组可以分割…

keil设置程序起始地址及生成bin文件的方法

一.keil设置程序起始地址 1.1FLASH APP 的起始地址设置 随便打开一个之前的实例工程,点击 Options for Target→Target 选项卡 默认的条件下,图中 IROM1 的起始地址(Start)一般为 0X08000000,大小(Size&a…

通用el-table 修改样式

通用el-table 修改样式 el-table实现下图效果: <template><div class"contentbox"><el-table:data"tableData"height"310"style"width: 40%"highlight-current-rowcurrent-change"handleCurrentChange"&g…

利用Floodlight进行DDOS攻击防御实验笔记

Floodlight Floodlight是Apache授权并基于JAVA开发的企业级OpenFlow控制器&#xff0c;当前最新版本是1.2。 Floodlight OpenFlow Controller -ProjectFloodlight&#xff1a;http://www.projectfloodlight.org/floodlight/ 流表 把同一时间&#xff0c;经过同一网络中具有某种…

线程同步方式之二条件变量

Linux线程同步方法之二 条件变量 饥饿状态&#xff1a;由于线程A频繁地申请/释放锁&#xff0c;而导致其他线程无法访问临界资源的情况。 同步synchronized&#xff1a;在保证数据安全的前提下&#xff0c;让线程能够按照某种特定的顺序访问临界资源&#xff0c;从而有效避免…

Spring Security实战(九)—— 使用Spring Security OAuth实现OAuth对接

一、OAuth2.0介绍 OAuth2.0是一种授权协议&#xff0c;允许用户授权第三方应用程序代表他们获取受保护的资源&#xff0c;如个人信息或照片等。它允许用户授权访问他们存储在另一个服务提供商上的资源&#xff0c;而无需将其凭据共享给第三方应用程序。OAuth2.0协议建立在OAuth…

直升机空气动力学基础--004翼型的阻力

来源 1. 空气的粘性 2.阻力的产生 3.形成因素 4.阻力系数曲线

LeetCode-242. 有效的字母异位词

题目链接 LeetCode-242. 有效的字母异位词 题目描述 题解 题解一&#xff08;Java&#xff09; 作者&#xff1a;仲景 首先&#xff0c;满足条件的情况下&#xff0c;两个字符串的长度一定是相等的&#xff0c;不相等一定不满足条件 使用Hash表来存储字符串s中各个字符出现的…

回溯算法——我欲修仙(功法篇)

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️我欲修仙】 系列文章目录 第一章 ❤️ 学习前的必知知识 第二章 ❤️ 二分查找 文章目录 系列文章目录回溯算法&#x1f914;&#x1f914;&#x1f914;回溯算法一般可以解决的问题回溯算法的实现回…

Python语言简介

B站讲解视频&#xff1a;https://www.bilibili.com/video/BV1Mv4y1n7n8/?vd_source515e6808c21c69114a4fae34589dfb0e Python是什么 Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。具有很强的可读性&#xff0c;相比其他语言经常使用英文关键字&a…

为什么有时候磁珠会使电源的纹波变大

电路设计时&#xff0c;我们常常在芯片电源的输入放一个磁珠和电容&#xff0c;用以滤除电源上的高频噪声。 但是有时候会发现&#xff0c;加了磁珠后&#xff0c;芯片电源输入处纹波竟然变大了&#xff0c;超出了电源纹波范围&#xff0c;导致芯片工作异常。 把磁珠换成0R电阻…

论文阅读:Heterogeneous Graph Contrastive Learning for Recommendation(WSDM ’23)

论文链接 Motivation&#xff1a; 在推荐系统中&#xff0c;图神经网络在建模图结构数据上已经变成一个强有力的工具。但是现实生活的推荐语义通常涉及异质关系&#xff08;像用户的社交关系&#xff0c;物品知识关系的依赖&#xff09;&#xff0c;这些都包含丰富的语义信息…

Linux下实现C语言程序

一.情况说明 写这篇博客的情况比较复杂&#xff0c;首先我本来是参加新星计划按照规划现在去学习shell脚本语言的&#xff0c;但是博主现在由于其他原因需要了解makefile&#xff0c;makefile是Linux系统下的一种工具&#xff0c;makefile的一些背景要涉及链接库的知识&#xf…

从0开始搭建一个简单的前后端分离的XX系统-vue+Springboot+mybatis-plus+mysql

一、准备工作 1.安装node 2.idea 旗舰版** idea**教程 上述教程中的idea**工具 3.安装mysql任意版本 mysql 4.安装mysql workbench&#xff08;没用上&#xff09; 5.安装navicate 参考文章&#xff1a;百度-从小白到架构&#xff08;作者&#xff09;-Navicat16** Nav…

Thinkphp获取项目最近更改变动的所有文件

导读&#xff1a; 企业级的网站项目都是要不断优化迭代更新的&#xff0c;做为一名后端程序员&#xff0c;在编写更新模块时&#xff0c;如何能快速获取最近修改的文件&#xff0c;然后打包压缩成更新补丁呢&#xff1f;我们先来看一下最终效果图&#xff1a; 步骤&#xff1a…