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

【JavaEE初阶】网络原理

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

⽹络互连

IP地址

端口号

协议

协议分层

优势

TCP/IP 五层网络模型

数据在网络通信中的整体流程 封装和分用

封装

分用


⽹络互连

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

⽹络互连:将多台计算机连接在⼀起,完成数据共享。 数据共享本质是⽹络数据传输,即计算机之间通过⽹络来传输数据,也称为⽹络通信。 根据⽹络互连的规模不同,可以划分为局域⽹和⼴域⽹

局域网:把几台电脑连接在一起,就构成了局域网

路由器上面的口,数目比较有限,就引入了交换机(对路由器的端口进行了扩展)

广域网:通过路由器,将多个局域⽹连接起来,在物理上组成很⼤范围的⽹络,就形成了⼴域⽹。⼴域⽹内部 的局域⽹都属于其⼦⽹。

IP地址

IP地址描述了一台主机,在互联网上所处的位置,使用32位整数("点分十进制",为了方便人阅读)来表示

端口号

区分当前主机上的指定的应用程序(进程)

一个主机上,使用网络的程序有很多个,通过端口号区分当前主机收到的数据是 交给那个程序来处理使用, 端口号同样也是一个整数,是一个2个字节的整数(范围:0->65535,但是0->1023这些端口都是有特殊含义的,我们自己写代码时,一般使用剩下的)

协议

网络中最核心的概念.

协议是进行一切通信的基础

通信至少要有两个主机,让发送方发的数据,接收方能够理解,双方需要按照同样的规则来构造/解析数据,协议 就是在约定通信双方交互数据的规则

如何进行网络通信问题 转为了 如何设计网络通信协议

协议分层

如果使用一个协议约定所有的网络通信细节,这个协议就会非常庞大,复杂.所以把这个协议拆分成了多个小协议,每个小协议专注解决一个/一类问题,再让这些协议相互配合.

并且约定好协议之间不能相互交互(只有相邻层之间才行),上层协议调用下层协议,下层协议给上层提供服务

优势

  • 降低了使用成本,使用某个协议时,不需要关注其他协议的实现细节
  • 降低整个体系的耦合性,灵活的变更某个层次的协议

TCP/IP 五层网络模型

TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇

TCP/IP通讯协议采⽤了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的⽹络来完成⾃⼰的需求

分为应用层 ,传输层 ,网络层 ,数据链路层 ,物理层

  1. 应⽤层:负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远 程访问协议(Telnet)等。我们的⽹络编程主要就是针对应⽤层。(程序员能够干预到的)
  2. 传输层:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发 送到⽬标主机。
  3. ⽹络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表 的⽅式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)⼯作在⽹路层。
  4. 数据链路层:负责设备之间的数据帧的传送和识别。例如⽹卡设备的驱动、帧同步(就是说从⽹线上 检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作。 有以太⽹、令牌环⽹,⽆线LAN等标准。交换机(Switch)⼯作在数据链路层。
  5. 物理层:负责光/电信号的传递⽅式。⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同 轴电缆(现在主要⽤于有线电视)、光纤,现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理 层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等。集线器(Hub)⼯作在物理层。 
  • 应用层:关注传输的数据用来干啥
  • 传输层:主要关注网络通信中"起点和终点",并不关心通信的中间细节
  • 网络层:进行网络通信的路径规划,网络层还需要负责地址管理
  • 数据链路层:在针对上述规划好的路径,进行具体的实施
  • 物理层:描述了硬件设备(网线这样的设备)需要满足什么条件(传输数据的硬件基础设施),相当于"公路","铁路","航线"

OSI七层网络协议(这种划分只是存在于教科书里,并没有真正的被采用)

物理层我们考虑的⽐较少。因此很多时候也可以称为TCP/IP四层模型。

驱动程序是硬件厂商配套提供的

网络设备所在的分层(站在经典的模型上讨论的)

  • 对于⼀台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四 层;
  • 对于⼀台路由器,它实现了从⽹络层到物理层,也即是TCP/IP五层模型的下三层;
  • 对于⼀台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
  • 对于集线器(将网线进行分叉,现在几乎见不到了),它只实现了物理层;

真实情况下,交换机,也可能是工作在网络层,甚至是 传输层/应用层

路由器,也可能是工作在数据链路层,也可能在传输层或应用层

数据在网络通信中的整体流程 封装和分用

封装

计算机网络中的封装 其实就是 字符串拼接

  1. 假设通过QQ发送一个hello给另一个人,hello这个内容从输入框读取到,构造成一个"应用数据包"(应用层的网络协议就描述了这个数据包的构造,此协议往往是开发该程序的程序员 自行定义的)
  2. QQ就会调用操作系统提供的API(传输层给应用层 提供的类似于"发送数据"的API), 然后应用程序就会把已准备好的 应用层数据包 作为参数传进来,此时应用层数据包就到了系统内核里(进入了传输层的代码部分)
  3. 再将该应用层数据包进一步 封装成一个传输层数据包,由于传输层有多种协议(最主流的是TCP和UDP,这两个协议给应用层提供了两种不同的API,应用层代码使用哪组API,就使用哪个协议)
  4. 继续调用 网络层 提供给传输层的api,把数据进一步交给网络层(传输层和网络层都是系统内核里已经实现好的),网络层也有多种协议(其中最主要的就是IPv4协议,简称IP协议),IP协议会把上述 传输层数据包 构造成 网络层数据包  
  5. 网络层 继续调用数据链路层的api,把数据交给数据链路层进一步包装,数据链路层的常见协议,以太网
  6. 上述得到的数据进一步交给物理层(硬件设备),网卡会针对上述的二进制数据进行真正的传输操作,把0101这样的序列转为光信号/电信号/电磁波.....

  • 序列化:把结构化的数据 => 二进制字符串
  • 反序列化: 把二进制字符串 => 结构化数据

分用

分用其实是 封装的"逆向工作"

  1. 接收方的 物理层 收到光电信号 并还原成二进制字符串
  2. 将该数据交给 数据链路层,以太网拿到这个数据包并进行解析(拿出这里的报头 和载荷,根据报头中的信息决定这个数据包是 丢弃,转发还是 自己保留(向上解析))
  3. 网络层拿到解析好的数据包,IP协议对这个数据包进行解析(取出IP报头 和载荷,同样根据报头信息确认丢弃,转发或保留)
  4. 传输层的UDP协议也要针对数据包进行解析(取出UDP报头和载荷,此处需要把载荷进一步交给应用层协议(应用程序),并且依赖UDP报头中的"端口号"来区分不同的进程)
  5. 数据到达应用程序,程序对上述数据进行反序列化,针对这里的数据进行进一步的逻辑(将消息显示在界面上,播放提示音,显示弹窗等等)

中间过程的交换机和路由器也会涉及到 封装和分用

  • 交换机 封装分用到数据链路层就可以决定数据是丢弃还是继续转发,不再继续分用
  • 路由器 封装分用到网络层 同样可以决定数据是丢弃还是继续转发,不再继续分用

通常认为网络通信的速度比 硬盘的更慢,但比人的反应更快

相关文章:

  • 性能优化与资源管理:优化Selenium脚本的执行效率,合理管理浏览器实例和系统资源
  • CSS给一行按钮统一设置间隔
  • DarkLabel2.4版本导入MOT17数据集
  • 如何解决跨境电商税务管理难题
  • Android常用C++特性之lambda表达式
  • 2-107 基于matlab的hsv空间双边滤波去雾图像增强算法
  • Linux 简易shell编写
  • ResNet18果蔬图像识别分类
  • Git提示信息 Pulling is not possible because you have unmerged files.
  • 线段树查询区间回文+区间字母右移
  • Python NumPy 标准数据生成:高效创建与操作数组
  • SQL Server实现limit用法
  • 初识chatgpt
  • cnn机器学习时python版本不兼容报错
  • Android 10.0 Launcher3禁止改变density等系统密度导致布局变化hotseat靠右边显示功能实现
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Django 博客开发教程 8 - 博客文章详情页
  • Java方法详解
  • mysql外键的使用
  • Vue 动态创建 component
  • 程序员最讨厌的9句话,你可有补充?
  • 动态魔术使用DBMS_SQL
  • 聊聊redis的数据结构的应用
  • 让你的分享飞起来——极光推出社会化分享组件
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 使用权重正则化较少模型过拟合
  • 推荐一个React的管理后台框架
  • 移动端唤起键盘时取消position:fixed定位
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #php的pecl工具#
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (六)Hibernate的二级缓存
  • (实战篇)如何缓存数据
  • (算法)Travel Information Center
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)【Hibernate总结系列】使用举例
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .htaccess 强制https 单独排除某个目录
  • .md即markdown文件的基本常用编写语法
  • .NET 8.0 中有哪些新的变化?
  • .NET Core 成都线下面基会拉开序幕
  • .net core控制台应用程序初识
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net 按比例显示图片的缩略图
  • .net 设置默认首页
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET和.COM和.CN域名区别
  • .NET命令行(CLI)常用命令
  • .net生成的类,跨工程调用显示注释
  • .NET应用架构设计:原则、模式与实践 目录预览