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

网络初识 - Java

网络发展史:

单机时代(独立模式) -> 局域网时代 -> 广域网时代 -> 移动互联网时代
网络互联:将多台计算机链接再一起,完成数据共享。
数据共享的本质是网络数据传输,即计算机之间通过网络来传输数据,也称网络通信。根据网络互联的规模不同,可以划分为局域网和广域网。
独立模式:计算机之间相互独立
局域网:即 Local Area Network,简称 LAN。Local 即标识了局域网是本地,局部组建的一种私有网络。局域网内的主机之间能方便的进行网络通信,又称为内网。局域网和局域网之间在没有链接的情况下,是无法通信的。
局域网组建网络的方式有很多种方式:
(1)基于网线直连
在这里插入图片描述

(2)基于集线器组建
在这里插入图片描述

(3)基于交换机组建
在这里插入图片描述

(4)基于交换机和路由器组建
在这里插入图片描述

交换机可以视为是“对路由器的接口进行了扩展”,家用路由器,一般就是插 4 个网线(1 WAN口连运营商的设备)
交换机不会进行组局域网功能,可以把路由器的接口进行扩展。(也就是,某个电脑连接到交换机上就相当于连接到路由器了),交换机也是可以连接交换机的
广域网:即Wide Area Network,简称WAN。通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。

IP地址

在 cmd(win + r) 上输入 ipconfig 可以查看自己电脑的IP。
IP 地址主要用于标识网络主机,其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。
就像发快递一样,需要知道对方的收获地址,快递员才能将包裹送到目的地。
格式:IP地址是一个32位的二进制数,通常被分割为 4 个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。通常用“点分十进制”的方式来表示,即a.b.c.d的形式(a,b,c,d都是0~255之间的十进制整数)。

端口号

在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据,接受数据的进程。简单说:端口号用于定位主机中的进程(一台主机上可能有多个程序同时使用网络,端口号是区分一台主机上多个应用程序的)。类似发快递时,不光需要收获地址(IP地址),还需要收货人姓名(端口号)。
格式:端口号是 0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接受网络数据。

理解IP地址和端口号之后,还有一个问题:网络通信是基于二进制0/1数据来传输的,如果我的程序已经收到数据了,哪程序如何理解数据的含义呢??

认识协议

协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定,规则。如怎么样建立链接,怎么样互相识别等。只有遵守这个约定,计算机之间才能互相通信交流。
协议最终体现为在网络上传输的数据包的格式。
网络协议,通信双方对于发送/接受 数据格式的约定,我的数据怎么发,你收到就得怎么解析。

五元组

在TCP/IP协议中,用五元组来标识一个网络通信:
1.源IP:标识源主机。
2.源端口号:标识源主机中该次通信发送数据的进程。
3.目的IP:标识目的主机。
4.目的端口号:标识目的主机中该次通信接受数据的进程。
5.协议号:标识发送进程和接受进程双发约定的数据格式。
可以在cmd中,输⼊ netstat -ano 查看⽹络数据传输中的五元组信息。如果需要过滤(⼀般是通过端⼝号或进程PID过滤),可以使⽤ netstat -ano | findstr 过滤
字符串。

协议分层

网络通信,非常复杂,如果我们设计一个协议,完成网络通信中方方面面的问题,势必会使这个协议非常复杂,非常庞大。所以就把协议拆分。把一个大的协议拆成若干个小的,功能单一的协议了。但是拆完之后,发现小的协议太多了,于是就把这些小的协议归类,最后形成了好几个层次。
分层:只有相邻两层协议之间可以进行交互。上层协议可以调用下层协议,下层协议可以给上层提供服务。(协议之间的交互,不能跨层进行)

什么是协议分层:
在这里插入图片描述

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

OSI七层网络模型

OSI:即Open System Interconnection。开放系统互联。

  • OSI 七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层。
  • OSI 七层模型是一种框架性的设计方法,其最重要的功能就是帮助不同类型的主机实现数据传输。

OSI七层模型划分为以下七层:
在这里插入图片描述

由于OSI 七层模型既复杂又不实用,所以这一套分层的体系,只是存在与教科书上。
而真实实际组建网络时,只是以OSI七层模型设计中的部分分层,最主要还是使用 TCP/IP五层(或四层)模型来实现。

TCP/IP五层(或四层)模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用的五层层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
在这里插入图片描述

  • 应用层:负责应用程序沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。(也就是我们拿到包裹之后怎样使用)
  • 传输层:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机。(也就是两个任意设备之间的通信,不考虑中间过程,只考虑起点和终点)
  • 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的路线(路由)。路由器工作在网络层(也就是两个任意设备之间如何进行通信,考虑的是中间过程是怎么样的。(这两个设备之间,可能隔着很多的交换机和路由器))
  • 数据链路层:负责设备之间的数据帧的传送和识别。有以太网,令牌环网,无线LAN等标准。交换机工作在数据链路层。(也就是完成两个相邻设备直间如何进行通信的。(先考虑一小步怎么走)通过网线,把电脑连到路由器/交换机上)
  • 物理层:负责光/点信号的传递方式。物理层的能力决定了最大传输速率,传输距离,抗干扰性等。集线器工作在物理层。(也就是物理层规定了网络通信中的一些硬件设施符合的要求。(像网线,WIFI,光纤这物理层的协议,就是约定这些硬件设施要符合的要求是怎样的))
    举个例子:

至于为什么有的资料又叫四层呢?
其实是把数据链路层和物理层看作一个整体了。
在这里插入图片描述

网络设备所在分层

  • 对于一台主机,他的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层;
  • 对于一台路由器,它实现了网络层到物理层,也即是TCP/IP五层模型的下三层;
  • 对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
  • 对于集线器,他只实现了物理层;
    注意我们这里说的是传统意义上的交换机和路由器,也成为二层交换机(TCP/IP五层模型的下两层),三层路由器(TCP/IP五层模型的下三层)。
    随着现在网络设备技术的不断发展,也出现了很多三层或四层交换机,四层路由器。我们一下说的网络设备都是传统意义上的交换机和路由器。
    在这里插入图片描述

封装和分用

  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称为封装。
  • 首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息。
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的部首,根据首部中的“上层协议字段”将数据交给对应的上层协议处理。

网络数据通信的基本流程:
比如我通过qq,发送hello给对方
在这里插入图片描述

像上述过程,从上层到下层,数据进一步加工(添加报头)的过程,称为封装(和面向对象的封装,不是一个封装 )

还有一个小知识点:
谈到网络传输的“基本数据单位”涉及到多个术语:
网络数据包/帧/报/段
段(segment) TCP用 段
报(Datagram) UDP用 报
包(packet) IP 用 包
帧 (frame) 数据链路层 以太网数据帧
日常工作中,就不太会区分这些概念,这里就混着用了。

分用,就是封装的逆向过程,当数据到达接收方主机,逐层进行解析的过程。
在这里插入图片描述

传输的中间过程中,也是涉及到封装分用的。
交换机,只需要封装到 数据链路层即可。交换机是工作在数据链路层(二层转发)
主机的数据 => 交换机。交换机收到之后,物理层解析,数据链路层解析(没有网络层了,数据链路层中,得到的以太网数据帧的帧头,信息就足以支持交换机进行下一步工作),重新构造出新的以太网数据帧,发给下一个设备。
路由器是工作在网络层(三层转发)
主机的数据 => 路由器,路由器收到之后,物理层,数据链路层,网络层解析(没有传输层),重新构造出新的网络数据包,构造出以太网数据帧,构造出二进制数据,进行转发。

    物理层考虑信号衰减事情,,不管是有线/无线都会有衰减,不过无线衰减的快,有线衰减的慢,到达下一个节点,下一个节点重新发送数据的时候把信号又加强了。

两台计算机通过 TCP/IP 协议通讯的过程如下图所示:
在这里插入图片描述

另外一些网络中的基本概念:

请求:在互联网通信中,请求通常指的是客户端(如网页浏览器、移动应用程序等)向服务器发送的请求信息。
响应:响应是服务器对客户端请求的回应。当服务器接收到请求后会进行处理,然后返回一个响应,其中包含了处理结果和一些其他相关信息。
客户端是指通过网络向服务器发送请求以获取服务的计算机或设备。客户端通常由用户直接操作,如浏览器、邮件客户端等。
服务器是指存储数据、运行程序并提供服务的计算机,它响应客户端的请求并返回结果。服务器可以是网站服务器、数据库服务器等。

相关文章:

网络初识 - Java

网络发展史: 单机时代(独立模式) -> 局域网时代 -> 广域网时代 -> 移动互联网时代 网络互联:将多台计算机链接再一起,完成数据共享。 数据共享的本质是网络数据传输,即计算机之间通过网络来传输数…...

zk基础—5.Curator的使用与剖析一

大纲 1.基于Curator进行基本的zk数据操作 2.基于Curator实现集群元数据管理 3.基于Curator实现HA主备自动切换 4.基于Curator实现Leader选举 5.基于Curator实现分布式Barrier 6.基于Curator实现分布式计数器 7.基于Curator实现zk的节点和子节点监听机制 8.基于Curator创…...

大模型快速 ASGI 服务器uvicorn

基础概念类 1. 什么是 Uvicorn,它的作用是什么? 答案:Uvicorn 是一个基于 Python 的快速 ASGI(异步服务器网关接口)服务器。它的主要作用是作为 Web 应用程序的服务器,负责接收客户端的请求,并…...

每日一题(小白)回溯篇4

深度优先搜索题:找到最长的路径,计算这样的路径有多少条(使用回溯) 分析题意可以得知,每次向前后左右走一步,直至走完16步就算一条走通路径。要求条件是不能超出4*4的范围,不能重复之前的路径。…...

消息队列基础概念及选型,常见解决方案包括消息可靠性、消息有序、消息堆积、重复消费、事务消息

前言 是时候总结下消息队列相关知识点啦!我搓搓搓搓 本文包括消息队列基础概念介绍,常见解决方案包括消息可靠性、消息有序、消息堆积、重复消费、事务消息 参考资料: Kafka常见问题总结 | JavaGuide RocketMQ常见问题总结 | JavaGuide …...

基于STM32与应变片的协作机械臂力反馈控制系统设计与实现---3.3 机械结构改装

3.3 机械臂结构改装设计与实施 一、改装需求分析 1.1 改装类型分级 改装级别涉及范围典型改动周期成本I级(小型)末端执行器工具快换装置1-3天$500-2000II级(中型)关节模块电机/减速器升级1-2周$2000-8000III级(大型)本体结构材质/拓扑优化1-3月$8000+1.2 关键参数变更评…...

k8s进阶之路:本地集群环境搭建

概述 文章将带领大家搭建一个 master 节点,两个 node 节点的 k8s 集群,容器基于 docker,k8s 版本 v1.32。 一、系统安装 安装之前请大家使用虚拟机将 ubuntu24.04 系统安装完毕,我是基于 mac m1 的系统进行安装的,所…...

云服务器实战:用 Nginx 搭建高性能 API 网关与反向代理服务(附完整配置流程)

在如今的 Web 系统架构中,“接口统一出口”已成为必备设计模式——无论是前后端分离、微服务架构,还是多端接入(Web、小程序、App),一个稳定、高性能、可扩展的 API 网关至关重要。 而 Nginx,作为轻量级高…...

C++ STL 详解 ——list 的深度解析与实践指南

在 C 的标准模板库(STL)中,list作为一种重要的序列式容器,以其独特的双向链表结构和丰富的操作功能,在许多编程场景下发挥着关键作用。深入理解list的特性与使用方法,能帮助开发者编写出更高效、灵活的代码…...

按键切换LCD显示后,显示总在第二阶段,而不在第一阶段的问题

这是一个密码锁的程序,当在输入密码后,原本是要重置密码,但是程序总是在输入密码正确后总是跳转置设置第二个密码,而第一个密码总是跳过。 不断修改后, 解决方法 将if语句换成switch语句,这样就可以分离程序…...

护网蓝初面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...

C++11: 智能指针

C11: 智能指针 (一)智能指针原理1.RAll2.智能指针 (二)C11 智能指针1. auto_ptr2. unique_ptr3. shared_ptr4. weak_ptr (三)shared_ptr中存在的问题std::shared_ptr的循环引用 (四)删除器(五&a…...

去中心化预测市场

去中心化预测市场 核心概念 预测市场类型: 类别型市场:二元结果(YES/NO),例如“BTC在2024年突破10万美元?” 多选型市场:多个选项(如总统候选人),赔付基于…...

从零实现本地大模型RAG部署

1. RAG概念 RAG(Retrieval-Augmented Generation)即检索增强生成,是一种结合信息检索与大型语言模型(大模型)的技术。从外部知识库(如文档、数据库或网页)中实时检索相关信息,并将其…...

使用 Python 连接 PostgreSQL 数据库,从 `mimic - III` 数据库中筛选数据并导出特定的数据图表

要使用 Python 连接 PostgreSQL 数据库,从 mimic - III 数据库中筛选数据并导出特定的数据图表,你可以按照以下步骤操作: 安装所需的库:psycopg2 用于连接 PostgreSQL 数据库,pandas 用于数据处理,matplot…...

【Linux系统篇】:探索文件系统原理--硬件磁盘、文件系统与链接的“三体宇宙”

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:Linux篇–CSDN博客 文章目录 一.认识硬件--磁盘物理存储结构1.存储介质类型2.物理存储单元3…...

Tracing the thoughts of a large language model 简单理解

Tracing the thoughts of a large language model 这篇论文通过电路追踪方法(Circuit Tracing)揭示了大型语言模型Claude 3.5 Haiku的内部机制,其核心原理可归纳为以下几个方面: 1. 方法论核心:归因图与替换模型 替换模型(Replacement Model) 使用跨层转码器(CLT)将原…...

OpenCV边缘检测技术详解:原理、实现与应用

概述 边缘检测是计算机视觉和图像处理中最基本也是最重要的技术之一,它通过检测图像中亮度或颜色急剧变化的区域来识别物体的边界。边缘通常对应着场景中物体的物理边界、表面方向的变化或深度不连续处。 分类 OpenCV提供了多种边缘检测算法,下面我们介…...

Java学习——day22(Java反射基础入门)

文章目录 1.反射的定义2. 认识反射的关键API2.1 Class2.2 Field2.3 Method2.4 Constructor 3. 示例代码讲解与分析4. 编写反射示例代码的步骤4.1 定义测试类4.2 编写主程序,使用反射获取信息4.3 通过反射创建对象并调用方法 5. 总结6.今日生词 Java反射笔记 1.反射的…...

BN 层做预测的时候, 方差均值怎么算

✅ 一、Batch Normalization(BN)回顾 BN 层在训练和推理阶段的行为是不一样的,核心区别就在于: 训练时用 mini-batch 里的均值方差,预测时用全局的“滑动平均”均值方差。 🧪 二、训练阶段(Trai…...

JS 其他事件类型

页面加载 事件 window.addEvent() window.addEventListener(load,function(){const btn document.querySelector(button)btn.addEventListener(click,function(){alert(按钮)})})也可以给其他标签加该事件 HTML加载事件 找html标签 也可以给页面直接赋值...

AI Agent设计模式五:Orchestrator

概念 :中央任务调度中枢 ✅ 优点:全局资源协调,确保任务执行顺序❌ 缺点:单点故障风险,可能成为性能瓶颈 import operator import osfrom langchain.schema import SystemMessage, HumanMessage from langchain_opena…...

在Hive中,将数据从一个表查询并插入到另一个表

1. 确认目标表结构 确保目标表已存在且结构与查询结果匹配。若不存在,需先创建: CREATE TABLE target_table ( id INT, name STRING ) PARTITIONED BY (dt STRING) STORED AS ORC; 2. 选择插入方式 覆盖插入(替换现有数据&#xff0…...

Android Fresco 框架缓存模块源码深度剖析(二)

Android Fresco 框架缓存模块源码深度剖析 一、引言 本人掘金号,欢迎点击关注:https://juejin.cn/user/4406498335701950 在 Android 应用开发中,图片加载和处理是常见且重要的功能。频繁的图片加载不仅会消耗大量的网络流量,还…...

MySQL基础 [三] - 数据类型

目录 数据类型分类 ​编辑 数值类型 tinyint bit 浮点类型 float decimal 字符串类型 char varchar varchar和char的比较和选择 日期和时间类型 enum和set enum类型 set类型 enum和set的类型查找 数据类型分类 数值类型 tinyint TINYINT[(M)] [UNSIGNED]是 …...

不用训练,集成多个大模型产生更优秀的输出

论文标题 Collab: Controlled Decoding using Mixture of Agents for LLM Alignment 论文地址 https://arxiv.org/pdf/2503.21720 作者背景 JP摩根,马里兰大学帕克分校,普林斯顿大学 动机 大模型对齐(alignment)的主要目的…...

随笔1 认识编译命令

1.认识编译命令 1.1 解释gcc编译命令: gcc test1.cpp -o test1 pkg-config --cflags --libs opencv 命令解析: gcc:GNU C/C 编译器,用于编译C/C代码。 test1.cpp:源代码文件。 -o test1:指定输出的可执行文件名为t…...

【数据结构】并查集应用

修改数组 题目:检查ai是否出现过,出现过就不断1,使成为第一个没有出现过的。这样得到一个不重复数组。 祖先是该数字能使用的最小数字,当使用完后,祖先把这个格子占了,下次再来,就得使用后一个…...

python基础-16-处理csv文件和json数据

文章目录 【README】【16】处理csv文件和json数据【16.1】csv模块【16.1.1】reader对象【16.1.2】在for循环中, 从reader对象读取数据【16.1.3】writer对象【16.1.5】DictReader与DictWriter对象 【16.4】json模块【16.4.1】使用loads()函数读取json字符串并转为jso…...

MySQL Explain 分析 SQL 执行计划

MySQL Explain 分析 SQL 执行计划 在优化 SQL 查询性能时,了解查询的执行计划至关重要。MySQL 提供的 EXPLAIN 工具能够帮助我们深入了解查询语句的执行过程、索引使用情况以及潜在的性能瓶颈。本文将详细介绍如何使用 EXPLAIN 分析 SQL 执行计划,并探讨…...