【JavaEE】-- 网络原理
文章目录
- 1. 网络发展史
- 1.1 广域网
- 1.2 局域网
- 2. 网络通信基础
- 2.1 IP地址
- 2.2 端口号
- 2.3 认识协议
- 2.4 五元组
- 2.5 协议分层
- 2.5.1 分层的作用
- 2.5.2 OSI七层模型(教科书)
- 2.5.3 TCP/IP五层(或四层)模型(工业中常用,行业中常说)
- 2.6 封装和分用
1. 网络发展史
1.1 广域网
广域网,即WideArea Network,简称WAN。通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
如果有北、中、南等分公司,甚至海外分公司,把这些分公司以专线方式连接起来,即称为“广域网”。如果属于全球化的公共型广域网,则称为互联网(又称公网,外网),属于广域网的一个子集。有时在不严格的环境下说的广域网,其实是指互联网。所谓“局域网”和"广域网”只是一个相对的概念。比如,我们有"天朝特色”的广域网,也可以看做一个比较大的局域网。
1.2 局域网
局域网,即LocalAreaNetwork,简称LAN。Local即标识了局域网是本地,局部组建的一种私有网络。局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。
局域网组建网络的方式有很多种:
-
基于网线直连
-
基于集线器组建
-
基于交换机组建
可以实现对所有计算机设备的数据转发,在内网中实现组网,主要用在公司内部。 -
基于交换机和路由器组建
通过路由可以连接互联网(广域网),获取一个公网IP。
在公司和家庭中很常见,路由器下面可以连接多个交换机。
路由:可以理解为一个地方到另一个地方的路径。但是路径有多条,有路程最短的、用时最短的、最通畅的、成本最低的。例如:从北京到上海的快递可能有多种路线,路由器类似“中转站”负责选择最快或最经济的路径。
2. 网络通信基础
2.1 IP地址
概念: IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。
格式: IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节,也就是相当于一个整形的大小,42亿左右),如:01100100.00000100.00000101.00000110。
我们把这种表示称为IPv4,但是,随着网络设备越来越多,42亿个IP就不够了,升级成了IPv6。
通常用“点分十进制”的方式来表示,即a.b.c.d的形式(a,b,c,d都是0~255之间的十进制整数)如:100.4.5.6。
2.2 端口号
概念: 在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。
格式: 端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
如果是服务提供方就需要一个确定的端口号(比如MySQL服务端的端口号默认是3306),如果是客户端的话系统会随机分配一个端口号。1 ~ 1024是知名端口号,比较有名的程序已经占用了的端口号,比如web程序用的80,FTP用的21。1025 ~ 65535这个范围内可以随便指定,原则就是一台主机上的端口号不能在不同的网络程序之间冲突。
**问题:**有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如发送一个文本字符串“你好!”:如何标识发送的数据是文本类型,及文本的编码格式呢?
基于网络数据传输,需要使用协议来规定双方的数据格式。
2.3 认识协议
概念: 协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。协议(protocol)最终体现为在网络上传输的数据包的格式。
2.4 五元组
在TCP/IP协议中,用五元组来标识一个网络通信:
- 源IP:标识源主机
- 源端口号:标识源主机中该次通信发送数据的进程
- 目的IP:标识目的主机
- 目的端口号:标识目的主机中该次通信接收数据的进程
- 协议号:标识发送进程和接收进程双方约定的数据格式
可以在cmd中,输入netstat -ano
查看网络数据传输中的五元组信息:
2.5 协议分层
2.5.1 分层的作用
分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务):
- 对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可。
- 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。
2.5.2 OSI七层模型(教科书)
OSI七层模型既复杂又不实用:所以OSI七层模型没有落地、实现。实际组建网络时,只是以OSI七层模型设计中的部分分层,也即是以下TCP/IP五层(或四层)模型来实现。
2.5.3 TCP/IP五层(或四层)模型(工业中常用,行业中常说)
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
1. 应用层: 和用户打交道,接收与展示用户的数据,比如手法快递的过程中,只关注物品本身。
2. 传输层: 完成端到端的传输的准备,也就是说确定收发主机的地址和端口号,比如确认快递的收件人和发件人的地址和电话。
3. 网络层: 规划出端到端之间的网络路径,路径中可能会包含中间经过其他的网络设备,比如快递运输过程中可能经过的加油站。
4. 数据链路层: 完成点到点之间的传输,每个网络设备之间的传输。
5. 物理层: 把真实的BIT数据流通过转换成光电信号在传输介质中传输(网线:电信号;光纤:光信号)。
其中四层是指不包含物理层。
2.6 封装和分用
封装是指在发送方对数据进行的处理。
分用是指在接收方对数据进行的处理。
下面就以qq发送消息与接收消息的场景为例:
1. 应用层
这一层是由应用程序来实现的,此时对应的就是QQ这个应用程序,应用层主要是确定消息体的内容。
比如现在用户A要给用户B发送一个"hello"。下面一个问题就是如何进行数据的组织与解析,这个协议一般是在设计阶段就要完成的任务(协议的任务只有程序员知道),现在我们假设协议是:发送方QQ;接收方QQ;发送的内容
那么,我们按照协议规定组织好的数据就是:123456;654321;hello
组织好之后,就可以调用系统的API(socket api)进行发送操作,从而信息的处理方移交给下一层。
2. 传输层
传输层众多协议中最典型的两种协议是:TCP协议、UDP协议。我们假设使用TCP协议:
此时我们就接收到消息体,我们把这个消息体称为载荷
此时会在传输层根据TCP协议加上一个在载荷头部加上一个TCP头,该TCP头主要确定源端口号和目标端口号,该操作由操作洗头膏完成们可以知道哪个程序使用了哪个端口号。
3. 网络层
该层会规划出端到端之间的网络路径。
此时当前载荷就变成了:
该层会根据IP协议在该载荷头部加一个IP头,该IP头主要确定了元IP地址与目标IP地址,此时就可以确认消息要发送给哪台主机的哪个进程。
如何获取接收方的IP地址与端口号?
我们在使用QQ时都是需要登录的,登陆的时候等于向QQ服务器发送了一个请求,然后QQ服务器给了有一个响应,此时QQ服务器就会记录登陆方的信息类似于key value的形式,比如:(key:QQ123456, value:IP:端口号)。用户A和用户B在进行信息传输的时候并不是两台网络设备直接进行传输的,而是发送方会把信息发送到QQ服务器,服务器根据自己维护的登录用户以及对应的IP地址,找到接收方的IP,再把消息转发给接收方。
4. 数据链路层
此时的载荷是:
该层会根据以太协议在当前载荷的头部和尾部分别加一个帧头和帧尾。
帧头中存放的是源MAC地址和目标MAC地址;帧尾中存放的是校验和。
校验和
发送方通过某种算法(CRC–对每个byte进行累加操作,最终得一个值)对载荷进行运算,得到一个值并保存起来,接收方在收到数据之后,取出载荷以相同的算法进行计算,如果得到的结果与校验和相同,就表示接收到的载荷与发送的载荷一致,中途没有被篡改,否则载荷就是无效的。
加入帧头和帧尾之后,把数据以二进制的形式发送给物理层。
5. 物理层
这一层主要是把具体的数据(报文)转换成光电信号,通过传输介质进行传输。
如何通过电信号表示0和1?
高电平表示1(3.5 ~ 5v);低电平表示0(0.1v ~ 0.25v)
6. 物理层
接收到光电信号之后,根据以太网协议把信号转换成二进制BIT流。
然后以二进制的形式交给上一层。
7. 数据链路层
该层会解析出帧头、帧尾和载荷。
确认数据正确之后,会去掉帧头和帧尾,然后把本层的载荷移交给上一层。
8. 网络层
根据IP协议解析报文,取出载荷交给上一层。
9. 传输层
根据TCP协议解析报文,取出载荷交给上一层。
10. 应用层
按照应用程序解析消息体–发送方QQ:123456;接收方QQ:654321;消息内容:hello.
以上的1-5是发送方,6-10是接收方
发送方的数据从应用层到物理层的过程叫封装;接收方的数据从物理层到应用层的过程叫分用。
相关文章:

【JavaEE】-- 网络原理
文章目录 1. 网络发展史1.1 广域网1.2 局域网 2. 网络通信基础2.1 IP地址2.2 端口号2.3 认识协议2.4 五元组2.5 协议分层2.5.1 分层的作用2.5.2 OSI七层模型(教科书)2.5.3 TCP/IP五层(或四层)模型(工业中常用ÿ…...

1.RV1126-OPENCV 交叉编译
一.下载opencv-3.4.16.zip到自己想装的目录下 二.解压并且打开 opencv 目录 先用 unzip opencv-3.4.16.zip 来解压 opencv 的压缩包,并且进入 opencv 目录(cd opencv-3.4.16) 三. 修改 opencv 的 cmake 脚本的内容 先 cd platforms/linux 然后修改 arm-gnueabi.to…...

PySide6 GUI 学习笔记——常用类及控件使用方法(标签控件QLabel)
文章目录 标签控件QLabel及其应用举例标签控件QLabel的常用方法及信号应用举例Python 代码示例1Python 代码示例2 小结 标签控件QLabel及其应用举例 QLabel 是 PySide6.QtWidgets 模块中的一个控件,用于在界面上显示文本或图像。它常用于作为标签、提示信息或图片展…...

CSS (mask)实现服装动态换色:创意与技术的完美融合
在网页开发中,我们常常会遇到需要对图片元素进行个性化处理的需求,比如改变图片中特定部分的颜色。今天,我们就来探讨一种通过 CSS 和 JavaScript 结合,实现服装动态换色的有趣方法。 一、代码整体结构分析 上述代码构建了一个完…...

基于51单片机的音乐盒汽车喇叭调音量proteus仿真
地址: https://pan.baidu.com/s/1l3CSSMi4uMV5-XLefnKoSg 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C51 是一款常用的 8 位单片机,由 Atmel 公司(现已被 Microchip 收…...

彻底理解Spring三级缓存机制
文章目录 前言一、Spring解决循环依赖时,为什么要使用三级缓存? 前言 Spring解决循环依赖的手段,是通过三级缓存: singletonObjects:存放所有生命周期完整的单例对象。(一级缓存)earlySingleto…...
MacOs 安装局域网 gitlab 记录
1、安装git brew install git > Downloading https://homebrew.bintray.com/bottles/git-2.7.0.el_capitan.bottle ######################################################################## 100.0% > Pouring git-2.7.0.el_capitan.bottle.tar.gz > Caveats The O…...
Flutter 与 Android 原生布局组件对照表(完整版)
本对照表用于帮助 Android 开发者快速理解 Flutter 中的布局组件与原生布局的关系。 📘 Flutter ↔ Android 布局组件对照表 Flutter WidgetAndroid View/Layout说明ContainerFrameLayout / View通用容器,可设置背景、边距、对齐等RowLinearLayout (hor…...

【产品经理从0到1】自媒体端产品设计
后台的定义 “后台” 与“前台”都是相对独立的平台,前台是服务于互联网用户的平台 ,后台主要是支撑前台页面内容、数据及对前台业务情况的统计分析的系统; 后台与前台的区别 第1:使用用户不同 前台用户:互联网用户…...

017搜索之深度优先DFS——算法备赛
深度优先搜索 如果说广度优先搜索是逐层扩散,那深度优先搜索就是一条道走到黑。 深度优先遍历是用递归实现的,预定一条顺序规则(如上下左右顺序) ,一直往第一个方向搜索直到走到尽头或不满足要求后返回上一个叉路口按…...
解决 maven编译项目-Fatal error compiling: 无效的目标发行版: 21 -> [Help 1]
目录 1. 问题描述 2. 排查思路 3. 设置-指定maven使用jdk21 4. 参考资料 1. 问题描述 在idea中使用maven编译时,在系统环境变量中已经设置了jdk为21,但是在执行mvn package时,确提示 Fatal error compiling: 无效的目标发行版: 21 -> [Help 1] [ERROR] Failed to e…...

Thinkphp6实现websocket
项目需要连接一台自动售货机,售货机要求两边用websocket连接,监听9997端口。本文实现了一个基于PHP的WebSocket服务器,用于连接自动售货机,支持start/stop/restart命令操作 1.新建文件 新建文件 /command/socket.php <?php namespace a…...

web-css
一.CSS选择器: 1.基础选择器 基本选择器: >.标签选择器 格式:标签名称{} >.类选择器(重) 格式:.class属性的值{} >.id选择器 格式:#id属性的值{} >.通配符(表示所有&am…...
关于 smali:2. 从 Java 到 Smali 的映射
一、对照 Java 代码与 Smali 代码差异 1.1 方法调用差异:Java vs Smali Java 方法分类: 方法类型Java 示例Smali 指令特点说明静态方法Utils.print("hi")invoke-static没有 this 指针实例方法obj.show()invoke-virtual有 this,虚…...

三、zookeeper 常用shell命令
作者:IvanCodes 日期:2025年5月28日 专栏:Zookeeper教程 ZooKeeper Shell (zkCli.sh) 是与ZooKeeper服务器交互的核心工具。本教程将详细介绍常用命令,并重点解析ZooKeeper数据节点 (ZNode) 的特性与分类。 思维导图 一、连接 Zo…...

分布式流处理与消息传递——Paxos Stream 算法详解
Java 实现 Paxos Stream 算法详解 一、Paxos Stream 核心设计 #mermaid-svg-cEJcmpaQwLXpEbx9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-cEJcmpaQwLXpEbx9 .error-icon{fill:#552222;}#mermaid-svg-cEJcmpaQw…...
智变与重构:AI 赋能基础教育教学的范式转型研究报告
一、研究背景与核心价值 (一)技术驱动下的教育转型浪潮 在全球数字化转型加速的背景下,人工智能作为核心技术力量,正重塑基础教育生态。据《人工智能赋能未来教育研究报告》指出,我国教育数字化战略行动已推动超 70…...
平衡三进制
平衡三进制 - OI Wiki https://oi-wiki.org/math/balanced-ternary/ 上海市计算机学会竞赛平台 | YACS 方法一,先分离后进位 #include <iostream> using namespace std; int n, a[100], cnt; bool flag; int main() {cin >> n;if(n0){cout <<…...
针对Python开发的工具推荐及分析,涵盖集成开发环境(IDE)、轻量级工具、在线开发平台、代码管理工具等)
以下是针对Python开发的工具推荐及全面分析,涵盖集成开发环境(IDE)、轻量级工具、在线开发平台、代码管理工具等,结合不同场景和需求进行分类说明: 目录 一、集成开发环境(IDE) 1. PyCharm 2…...

960g轻薄本,把科技塞进巧克力盒子
朋友们,谁懂啊 最近本打工人被同事疯狂种草了一款 “巧克力盒子” 华硕灵耀 14 Air 骁龙版! 960g的重量比一瓶大可乐还轻 塞进通勤包毫无压力 连健身房的瑜伽垫都能多卷两圈 这台行走的生产力工具,到底有啥魔法? 今天就带…...

xcode 编译运行错误 Sandbox: rsync(29343) deny(1) file-write-create
解决方法 方法一:修改Targets -> Build Settings 中 ENABLE_USER_SCRIPT_SANDBOXING 设置 NO 方法二:项目使用cocoaPods进行三方管理 且 使用了 use_frameworks,把 use_frameworks 注释掉,然后重新自行pod install...

C# 基于 Windows 系统与 Visual Studio 2017 的 Messenger 消息传递机制详解:发布-订阅模式实现
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...

ComfyUI+阿里Wan2.1+内网穿透技术:本地AI视频生成系统搭建实战
文章目录 前言1.软件准备1.1 ComfyUI1.2 文本编码器1.3 VAE1.4 视频生成模型 2.整合配置3. 本地运行测试4. 公网使用Wan2.1模型生成视频4.1 创建远程连接公网地址 5. 固定远程访问公网地址总结 前言 各位技术爱好者,今天为您带来一组创新性的AI应用方案!…...
腾讯云开发者社区文章内容提取免费API接口教程
接口简介: 提取指定腾讯云开发者社区文章内容。本接口仅做内容提取,未经作者授权请勿转载。 请求地址: https://cn.apihz.cn/api/caiji/tencent.php 请求方式: POST或GET。 请求参数: 【名称】【参数】【必填】【说…...

利用海外代理IP,做Twitter2026年全球趋势数据分析
近年来,社交媒体趋势分析逐渐成为品牌监控、市场洞察和消费者研究的必备工具。而当谈到全球趋势数据分析,很多人都会立即想到 Twitter趋势(逼近连美丽国的总统都喜欢在上面发表自己的看法- -!!!)。Twitter趋势,即Twitt…...
OpenLayers 图形交互编辑
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 图形要素包括属性信息和几何信息,在实际应用中,不仅需要修改样式信息,也需要修改图形几何信息。在OpenLayers中&…...

pikachu靶场通关笔记06 XSS关卡02-反射型POST
目录 一、XSS 二、反射型XSS 三、POST型报文 四、GET型与POST型区别 五、代码审计 五、渗透实战 1、渗透方法1 2、渗透方法2 本系列为通过《pikachu靶场通关笔记》的XSS关卡(共10关)渗透集合,通过对XSS关卡源码的代码审计找到XSS风险的真实原因&…...

SQLiteStudio - 免费开源、轻量高效,跨平台的 SQLite 数据库管理工具,代替 Navicat for SQLite
管理 SQLite 数据库就用这款软件,真的早该摒弃破解和盗版的 Navicat 了。 SQLiteStudio 是一款专注于管理 SQLite 数据库 的桌面软件,用于浏览和编辑 SQLite 数据库文件。软件的作者是来自波兰的开发者 Paweł Salawa,他是一位拥有 20 年 Ja…...

Prometheus + Grafana + Cadvisor:构建高效企业级服务监控体系
在现代软件开发和运维领域,容器化技术的应用越来越广泛,其中 Docker 作为最受欢迎的容器化解决方案之一,其容器的监控管理变得至关重要。本文将详细介绍如何使用 cadvisor、Prometheus 和 Grafana 来监控 Docker 容器的状态。 一、安装镜像 …...

WEBSTORM前端 —— 第3章:移动 Web —— 第2节:空间转换、转化
目录 一、空间转换 1.空间转换 2.空间转换 – 平移 3.视距 perspective 4.空间 – 旋转 ③空间旋转——Z轴代码与效果视频 ④空间旋转——X轴代码与效果视频 ⑤空间旋转——Y轴代码与效果视频 5.立体呈现 – transform-style 案例 – 3D 导航 6.空间转换 – 缩放 …...