网络原理 初识[Java EE]
目录
网络发展史
独立模式
网络互联
局域网 LAN
1. 基于网络直连
2. 基于集线器(Hub)组建
3. 基于交换机(Switch)组建
4. 基于交换机和路由器(Router)组建
广域网 WAN
网络通信基础
IP 地址
1. 概念
2. 格式
端口号
1. 概念
2.格式
认识协议
1. 概念
2. 作用
3. 协议分层
3.1 什么是协议分层
3.2 分层的作用
3.2.1 上层不需要了解下层的细节(封装)
3.2.2 灵活的调整/替换某层的协议
4. 五元组
4.1 源 IP :
4.2 源端口号 :
4.3 目的 IP :
4.4 目的端口号 :
4.5 协议号 :
5. OSI 七层网络模型 [只是在教科书中]
5.1 物理层:
5.2 数据链路层:
5.3 网络层:
5.4 传输层:
5.5 会话层:
5.6 表示层:
5.7 应用层:
6. TCP/IP 五层(或四层)网络模型 [真实世界的情况]
6.1 物理层:
6.2 数据链路层:
6.3 网络层:
6.4 传输层:
6.5 应用层:
7. 网络设备所在分层
7.1 对于一台主机:
7.2 对于一台路由器:
7.3 对于一台交换机:
7.4 对于集线器:
8. 网络分层对应
9. 网络数据传输的基本流程 (封装和分用)
9.1 应用层
9.2 传输层
9.3 网络层
9.4 数据链路层
9.5 物理层
网络发展史
独立模式
// 每个计算机之间相互独立, 每个终端各自持有客户数据
网络互联
// 随着时代的发展, 越来越需要计算机之间互相通信, 共享软件和数据, 即以多个计算机协同工作来完成业务, 就有了网络互联
// 网络互联: 将多台计算机连接在一起, 完成数据共享
// 数据共享的本质是网络数据传输, 即计算机之间通过网络来传输数据, 也称为网络通信
// 根据网络互联的规模不同, 可以划分为局域网和广域网
局域网 LAN
// 局域网 (Local Area Network), 简称 LAN
// 局域网内的主机之间能方便的进行网络通信, 又称为内网; 局域网和局域网之间在没有连接的情况下, 是无法通信的
// 局域网组建网络的方式有很多种:
1. 基于网络直连
// 主机之间通过网线相互连接
2. 基于集线器(Hub)组建
// 主机通过集线器连接
3. 基于交换机(Switch)组建
// 主机通过交换机连接
4. 基于交换机和路由器(Router)组建
// 路由器向下连接多个交换机, 交换机向下连接多台主机
广域网 WAN
// 广域网, 即 Wide Area Network, 简称 WAN
// 通过路由器, 将多个局域网连接起来, 在物理上组成很大范围的网络, 就形成了广域网, 广域网内部的局域网都属于其子网
网络通信基础
// 网络互联的目的是进行网络通信, 即网络数据传输, 更具体一点, 是网络主机上的不同进程间, 基于网络传输数据
IP 地址
1. 概念
// IP 地址主要用于标识网络主机, 其他网络设备 (如路由器) 的网络地址. 简单说, IP 地址用于定位主机的网络地址 (描述网络上的一个设备所在的位置)
2. 格式
// IP 地址是一个 32 位的二进制数, 通常被分割为 4 个 "8位二进制数(也就是四个字节)", 通常用 "点分十进制" 的方式来表示, 即 a.b.c.d 的形式
端口号
1. 概念
// 在网络通信中, IP 地址用于标识主机网络地址, 端口号可以标识主机中发送数据,接收数据的进程. 简单说: 端口号用于定位主机中的进程(区分一个主机上不同的应用程序)
// 一个网络程序, 在启动的时候, 都需要绑定一个或者多个端口号, 后续的通信过程都需要依赖端口来进行展开的, (mysql 默认绑定的端口 3306)
2.格式
// 端口号是 0 ~ 65535 范围的数字, 在网络通信中, 进程可以通过绑定一个端口号, 来发送及接收网络数据
认识协议
1. 概念
// 协议, 网络协议的简称, 网络协议是网络通信 (即网络数据传输) 经过的所以网络设备都必须共同遵从的一组约定, 规则. (描述了网络通信传输的数据的含义)
// 协议 (protocol) 最终体现为在网络上传输的数据包的格式
2. 作用
// 让大家都按照同样的标准来研发设备, 大家搞出来的都可以在一起相互通信了
3. 协议分层
3.1 什么是协议分层
// 对应网络协议来说, 靠一个协议解决所有问题,会导致这个协议非常复杂, 因此往往会对这些协议进行分类,分层次定义
// 上层协议, 调用下层协议, 下层协议, 为上层提供服务支持, 这样可以避免层级调用引起的混乱
// 也就是给这些协议搞了明确的层级关系, 避免跨层之间的交互, 降低耦合, 提高这个系统的可读性
3.2 分层的作用
3.2.1 上层不需要了解下层的细节(封装)
3.2.2 灵活的调整/替换某层的协议
4. 五元组
// 在 TCP/IP 协议中, 用五元组来标识一个网络通信:
4.1 源 IP :
// 标识主机
4.2 源端口号 :
// 标识源主机中该次通信发送数据的进程
4.3 目的 IP :
// 标识目的主机
4.4 目的端口号 :
// 标识目的主机中该次通信接收数据的进程
4.5 协议号 :
// 标识发送进程和接收进程双方约定的数据格式
5. OSI 七层网络模型 [只是在教科书中]
5.1 物理层:
// 描述的网络通信中的一些基础设施需要遵守的规范和约定 (网线, 网口等等的物理设施的形状和规格)
5.2 数据链路层:
// 相邻节点(互联设备)之间, 数据如何传输
5.3 网络层:
// 地址管理与路由选择 (路线规划)
5.4 传输层:
// 负责两个节点之间的数据传输. 只关注起点和终点, 不关注中间过程(数据从哪出发, 要到哪里去)
5.5 会话层:
// 通信管理, 负责建立和断开通信连接 (数据流动的逻辑通路), 管理运输层以下的分层
5.6 表示层:
// 设备固有数据格式和网络标准数据格式的转换
5.7 应用层:
// 针对特定应用的协议(拿到这个数据具体要用来干啥)
6. TCP/IP 五层(或四层)网络模型 [真实世界的情况]
// 算上 物理层 就是 五层, 不算就是 四层 (物理层是偏硬件的, 和软件关系不大)
// TCP/IP 是一组协议的代名词, 它包含很多协议, 组成了 TCP/IP 协议簇
// TCP/IP 通讯协议采用了 5 层的层级结构, 每一层都呼叫它的下一层所提供的网络来完成自己的需求
6.1 物理层:
// 负责光/电信号的传递方式
6.2 数据链路层:
// 负责设备之间的数据帧的传送和识别
6.3 网络层:
// 负责地址管理和路由选择
6.4 传输层:
// 负责两台主机之间的数据传输
6.5 应用层:
// 负责应用程序间的沟通
7. 网络设备所在分层
7.1 对于一台主机:
// 它的操作系统内核实现了从传输层到物理层的内容, 即是 TCP/IP 五层模型的下四层
7.2 对于一台路由器:
// 它实现了从网络层到物理层, 即是 TCP/IP 五层模型的下三层
7.3 对于一台交换机:
// 它实现了从数据链路层到物理层, 即是 TCP/IP 五层模型的下两层
7.4 对于集线器:
// 它只实现了物理层
8. 网络分层对应
// 数据传输时, 经过不同的网络节点 (主机, 路由器) 时, 网络分层需要对应
// 以下为同一段内的两台主机进行文件传输:
| 应用层 | Telnet, FTP 和 e-mail 等 |
| 传输层 | TCP 和 UDP |
| 网络层 | IP, ICMP 和 IGMP |
| 链路层 | 设备驱动程序及接口卡 |
9. 网络数据传输的基本流程 (封装和分用)
// 假设主机 A 给主机 B 发送一个数据, 过程如下:
9.1 应用层
// 根据应用层协议获取构造好的应用层数据包
// 所谓的 "构造应用层数据报" 过程, 就是按照一定格式进行字符串拼接
// 发送方和接收方, 需要达成一致
// 应用程序, 就会调用传输层提供的接口, 把上述数据交给传输层进行处理
9.2 传输层
// 传输层协议有很多, 其中最主要的是 TCP 和 UDP
// 假设使用 UDP 协议, 上面把数据从应用层传到传输层, 交给 UDP, 于是 UDP 协议按照字节的协议格式生成一个 UDP 数据报(UDP 报头和 UDP 的载荷)
// UDP 不关心应用层数据, 只是把应用数据当做一个字符串, 构造出一个 UDP 数据报
// 此时, 传输层会把构造好的 UDP 数据报, 进一步交给网络层
9.3 网络层
// 网络层最主要的协议是: IP 协议
// IP 协议也会根据自己的格式, 构造 IP 数据报 (IP 报头 + UDP 报头 + IP 数据报的载荷)
// IP 报头中最关键的是 源IP 和 目的IP
// IP 协议也不会关心载荷内容是啥, 只是单纯的把载荷当做一个字符串, 在这个基础上拼接上另外一个 IP 报头
// 接下来就需要把数据传输到数据链路层
9.4 数据链路层
// 以太网, 又会针对 IP 数据报, 进行进一步封装, 再添加上数据头和数据尾
// 以太网也不关心载荷是啥, 知识把载荷当做字符串, 进一步的拼接上帧头帧尾, 构造成 以太网数据帧 (帧头 + 以太网数据报的载荷[IP 报头 + UDP 报头 + 载荷] + 帧尾)
// 网络上传输的数据的基本单位, 有很多种术语叫法 (包 [packet], 帧 [frame], 报 [Datagram], 段 [segment])
9.5 物理层
// 上面传输过来的数据, 本质上都是二进制的数据 (一组 0101 构成的数据)
// 硬件设备(网卡) 就需要对上述数据进行转换了, 转换为 光信号/ 电信号/ 电磁波
// 到这里, 主机 A 就完成了发送过程, 然后来看 接收方 (主机 B)的情况
1) 物理层 接收光信号/ 电信号/ 电磁波
// 猫: (调制解调器)调制: 把你要传输的信息放到光电信号中; 解调: 从光电信号中把信息取出来
// 它需要把收到的信号进行解调, 得到了一串1010 二进制序列 (以太网帧)
// 接下来就会把数据传给它的上一层 : 数据链路层
2) 数据链路层
// 数据链路层的以太网协议, 就会针对这个数据进行解析
// 去掉 帧头和 帧尾
// 然后将载荷部分取出来, 交给上层 : 网络层
3) 网络层
// 网络层的 IP 协议, 就会继续针对这个数据进行解析, 去掉 IP 报头
// 然后将载荷部分取出来, 继续交给上层 : 传输层
4) 传输层
// 根据 IP 报头中的字段, 就知道当前这个载荷是一个 UDP 数据报, 就交给传输层的 UDP 协议, UDP 针对数据报继续进行解析, 去掉 UDP 报头
// 然后将载荷部分取出来, 继续交给上层 : 应用层
5) 应用层
// UDP 报头中, 有一个字段 : 目的端口, 根据目的端口找到关联的应用程序, 就交给这个程序即可
// 其中, 主机 A , 从上到下, 依次添加报头的过程, 称为封装; 主机 B , 从下到上, 依次解析报头的过程, 称为 分用
// 封装就相当于在打包快递, 分用相当于是在拆快递
// 每次网络数据传输都要经历这些过程
相关文章:
网络原理 初识[Java EE]
目录 网络发展史 独立模式 网络互联 局域网 LAN 1. 基于网络直连 2. 基于集线器(Hub)组建 3. 基于交换机(Switch)组建 4. 基于交换机和路由器(Router)组建 广域网 WAN 网络通信基础 IP 地址 1. 概念 2. 格式 端口号 1. 概念 2.格式 认识协议 1. 概念 2. 作用…...
Redis Stream基本使用及应用场景
一、概念 Redis Streams是Redis5.0提供的一种消息队列机制,支持多播的可持久化的消息队列,用户实现发布订阅的功能,借鉴了kafka设计。 二、常用命令 命令名称描述XADD key ID field value [field value ...]添加一条消息 key:St…...
amcl :odometry 到global frame 的转换
amcl - ROS Wiki amcl - ROS Wiki...
Ollama下载安装+本地部署DeepSeek+UI可视化+搭建个人知识库——详解!(Windows版本)
目录 1️⃣下载和安装Ollama 1. 🥇官网下载安装包 2. 🥈安装Ollama 3.🥉配置Ollama环境变量 4、🎉验证Ollama 2️⃣本地部署DeepSeek 1. 选择模型并下载 2. 验证和使用DeepSeek 3️⃣使用可视化工具 1. Chrome插件-Page …...
解决Value of type ‘AVCodecContext‘ has no member ‘channels‘ 的问题
在 FFmpeg 7.1 中,AVCodecContext 的 channels 和 channel_layout 字段已经被移除,取而代之的是 AVChannelLayout 结构。因此,代码需要进行调整以适应新的 API。 以下是如何正确设置 AVCodecContext 和 AVCodecParameters 的方法。 1. 问题分析 在 FFmpeg 7.1 中: AVCode…...
STM32内存五区及堆栈空间大小设置(启动文件浅析)
前言 嘿,朋友们!今天咱们来聊聊STM32的内存五区和堆栈空间大小设置。这可是嵌入式开发里的“必修课”,要是没整明白,程序说不定就“翻车”了。别担心,我这就带你一步步搞懂这事儿,让你轻松上手,…...
定义数组存储3部汽车对象(class2:类在class1中请看上一篇博客)
package test3; import java.util.Scanner; public class carTest {public static void main(String[] args){//创建一个数组car[] arrnew car[3];//2创建汽车对象,来源于输入Scanner sc new Scanner(System.in);for (int i 0; i <arr.length ; i) {car cnew ca…...
Go红队开发—语法补充
文章目录 错误控制使用自定义错误类型错误包装errors.Is 和 errors.Aspanic捕获、recover 、defer错误控制练习 接口结构体实现接口基本类型实现接口切片实现接口 接口练习Embed嵌入文件 之前有师傅问这个系列好像跟红队没啥关系,前几期确实没啥关系,因为…...
IP----访问服务器流程
这只是IP的其中一块内容-访问服务器流程,IP还有更多内容可以查看IP专栏,前一段学习内容为IA内容,还有更多内容可以查看IA专栏,可通过以下路径查看IA-----配置NAT-CSDN博客CSDN,欢迎指正 1.访问服务器流程 1.分层 1.更利于标准化…...
阿里云ack的创建与实战应用案例
阿里云ack的创建与应用案例 创建前开通ack相关服务:开始创建简单的魔方游戏,熟悉sv与clb自动注册创建部署一个nginx 服务示例:走不同域名访问不同svc资源:为什么需要 Ingress ?创建第一个域名的 Deployment和Service。…...
git 的 Detached HEAD
在 Git 版本管理中,Detached HEAD 是指你当前的工作状态不再指向任何分支,而是指向一个特定的提交(commit)。 通常情况下,HEAD 是指向你当前工作分支的指针,例如 main 或 feature-branch。当你切换到一个特…...
【R语言】dplyr包经典函数summarise函数
dplyr包经典函数summarise函数,后面改名乘reframe函数了,但是summarise仍然适用 这个函数的返回结果是一个新的数据框,下面讲一下几种常见用法 示例数据为R自带的数据集mtcars 1.不分组 mtcars %>%summarise(mean mean(disp), n n()…...
C#装箱拆箱机制详解
在C#中,装箱(Boxing)和拆箱(Unboxing) 是值类型与引用类型之间转换的核心机制。它们的实现直接影响程序的性能和类型安全。 一、装箱(Boxing) 定义: 将值类型转换为引用类型&#…...
llama.cpp 一键运行本地大模型 - Windows
文章目录 llama.cpp 一键运行本地大模型 - Windows嘿,咱来唠唠 llama.cpp 这玩意儿!gguf 格式是啥?咱得好好说道说道基座模型咋选?所需物料,咱得准备齐全咯核心命令,得记牢啦运行方式咋选?测试应…...
BUU40 [CSCCTF 2019 Qual]FlaskLight1【SSTI】
模板: {{.__class__.__base__.__subclasses__()[80].__init__.__globals__[__builtins__].eval("__import__(os).popen(type flag.txt).read()")}} 是个空字符串,.__class__代表这个空字符串的类是什么(这里是单引号双引号都行&a…...
数据同步的中间件
以下是10个支持MySQL、HBase、ClickHouse、HDFS等不同数据库之间数据同步的GitHub项目推荐: 项目名称语言主要特点支持的数据库GitHub链接DataXPython阿里巴巴开源的数据同步工具,支持多种数据库和文件系统。MySQL、ClickHouse、HDFS等GitHub链接Apache…...
C# | GDI+图像测距辅助线的实现思路
C# | GDI图像测距辅助线的实现思路 文章目录 C# | GDI图像测距辅助线的实现思路一、辅助线需求概述二、坐标系与角度计算2.1 笛卡尔坐标系2.2 线长和角度计算方法2.3 文本角度矫正计算方法2.4 坐标变换实现步骤 三、与if判断方式对比四、总结 一、辅助线需求概述 在图像测量工…...
【备份】php项目处理跨域请求踩坑
这都是老生常谈的东西了。我还在踩坑,记录一下。 我在项目入口明明写了如下代码: // 处理预检请求 (OPTIONS) if ($_SERVER[REQUEST_METHOD] OPTIONS) {header("Access-Control-Allow-Origin: https://xxx.vip");header("Access-Cont…...
常见的Linux面试题
以下是一些常见的Linux面试题: 基础操作类 如何远程连接Linux服务器:常用的工具如Xshell、CRT、FinalShell等,通过SSH协议连接,默认端口是22。 如何查看当前目录下的所有文件(包括隐藏文件):使…...
MySQL 数据库本地及异地备份:全面指南
文章目录 MySQL 数据库本地及异地备份:全面指南备份脚本概述编写备份脚本脚本内容主要参数解释设置脚本权限 定期执行备份设置crontab任务 安全性建议避免明文密码rsync密码文件安全 进阶功能和优化增量备份备份验证日志轮转 总结附录:脚本依赖 MySQL 数…...
免费使用 DeepSeek API 教程及资源汇总
免费使用 DeepSeek API 教程及资源汇总 一、DeepSeek API 资源汇总1.1 火山引擎1.2 百度千帆1.3 阿里百炼1.4 腾讯云 二、其他平台2.1 华为云2.2 硅基流动 三、总结 DeepSeek-R1 作为 2025 年初发布的推理大模型,凭借其卓越的逻辑推理能力和成本优势,迅速…...
java后端开发day20--面向对象进阶(一)--static继承
(以下内容全部来自上述课程) 1.static–静态–共享 static表示静态,是java中的一个修饰符,可以修饰成员方法,成员变量。 1.静态变量 被static修饰的成员变量,叫做静态变量。 特点: 被该类…...
统计学中的得分函数(Score Function)是什么?它和Fisher信息矩阵有什么关系?
得分函数:统计学中的“敏感探针” 在统计学和概率论中,得分函数(Score Function)是一个看似简单却非常重要的概念。它不仅是Fisher信息矩阵的核心组成部分,还在参数估计、模型优化等领域发挥着关键作用。今天…...
Spring Boot集成MyBatis访问MySQL:从项目搭建到基础数据库查询(基础入门)
Spring Boot集成MyBatis访问MySQL 一、引言 在当今企业级应用开发中,Spring Boot、MyBatis与MySQL的组合凭借其高效性和灵活性,成为构建数据驱动型应用的首选方案。本文将带你从零开始搭建项目,掌握Spring Boot集成MyBatis的基础入门内容。…...
ShenNiusModularity项目源码学习(14:ShenNius.Infrastructure项目分析)
ShenNius.Infrastructure项目用于定义ShenNius.Admin.Mvc项目和ShenNius.Admin.API项目共用的特性类、数据操作接口实现类、上下文类、通讯类,主要文件的用途如下: Attributes文件夹保存特性类或过滤器类定义,主要包括: …...
Linux 内核配置机制详细讲解
本文是对 Linux 内核配置机制 make menuconfig 的 超详细分步解析,涵盖其工作原理、界面操作、配置逻辑及底层实现: 一、内核配置系统概述 Linux 内核的配置系统是一个 基于文本的交互式配置工具链,核心目标是通过定义 CONFIG_XXX 宏来控制内…...
【C语言】第八期——指针、二维数组与字符串
目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算(了解) 6.2.1 指针加减具体数字…...
Spring Boot集成Spring Security之HTTP请求授权
一、HTTP请求授权工作原理 基于Spring Security最新的Http请求授权讲解,不再使用旧版的请求授权 授权过滤器AuthorizationFilter获取认证信息 调用RequestMatcherDelegatingAuthorizationManager的check方法验证该用户是否具有该请求的授权 RequestMatcherDele…...
可以免费无限次下载PPT的网站
前言 最近发现了一个超实用的网站,想分享给大家。 在学习和工作的过程中,想必做PPT是一件让大家都很头疼的一件事。 想下载一些PPT模板减少做PPT的工作量,但网上大多精美的PPT都是需要付费才能下载使用。 即使免费也有次数限制࿰…...
DeepSeek 开源周:DeepEP 项目详解,GPU 压榨计划启动!
引言 就在今天,2025年2月25日,DeepSeek 再次为人工智能社区带来了一场技术盛宴——DeepEP 项目的开源。这个旨在优化 GPU 性能的工具一经发布便迅速获得了广泛的关注和赞誉,短短两小时内就斩获了超过1000个 Star。本文将详细介绍 DeepEP 的功…...
