初始JavaEE篇 —— 网络编程(1):基础的网络知识

news2024/12/26 21:19:44

找往期文章包括但不限于本期文章中不懂的知识点:

个人主页:我要学编程程(ಥ_ಥ)-CSDN博客

所属专栏:JavaEE

目录

前言:

网络的发展历程

网络通信基础 

IP地址

端口号

网络协议

网络通信的流程


前言:

我们现在所处的世界,是一个互联网的世界,每天我们打开手机,进入不同的应用程序大都是需要联网才能操作的。例如,微信、浏览器等。而我们后续在开发一个程序时,肯定也是需要支持网络的,即进行网络编程,因此我们避免不了与网络打交道,而想要学习网络编程就得需要了解一些基本网络知识。那我们今天就来学习网络的基础知识。

网络的发展历程

计算机最初问世时,主要应用于军事、工业等领域。网络在出现之初,同样也在军事与工业等领域发挥作用。后来,人们逐渐发现这些技术对日常生活的帮助极大,于是它们在日常家用领域慢慢流行起来。

起初,计算机出现的目的主要是进行大量简单运算,例如在二战期间截取法西斯同盟的信息。之后,计算机在处理更复杂的计算时也非常迅速,计算结果存储在计算机中。然而,在一些领域如航空事业中,由于计算结果数量庞大,多个计算机设备的计算结果分别存储在各自设备中。如果要将这些数据集中起来,需要逐个查询,十分浪费时间。因此,对计算机通信和资源共享的需求变得很大,网线的概念由此产生。通过物理连接,多台计算机设备可以进行通信,实现资源共享,这也就是所谓的局域网,这标志着从单机时代发展到了局域网时代。虽然网线可以让多台机器进行网络通信,但如果设备过多,会因网线相互连接而导致结构复杂,且设备之间的接口也会严重不足。后来,集线器被发明出来,它相当于一个接收和发送信息的中间容器。发送信息的设备将信息通过网线传入集线器,再由集线器广播(告诉在集线器内的所有设备)到与之相连的各个设备中。但由于集线器是半双工的,同一时刻只能有一个设备传输信息,这就会严重影响信息传输的正确性与效率,所以它被交换机所取代。随着局域网的扩大,越来越多的局域网之间也需要进行通信,即多个局域网之间进行通信,组成一个更大的局域网(或广域网),此时就需要用到路由器。路由器可以将多个范围小的局域网组成一个范围较大的局域网(或广域网),在这个更大范围的局域网中,不同计算机设备之间可以进行网络通信。再后来,由于家用计算机的普及,人们对于计算机的需要与使用也是越来越多,而由于计算机的体积过于庞大,不方便携带,因此也就出现了手机,即现在的移动互联网时代。

上面就是计算机网络的整个发展脉络。

简要概括一下就是下面这样:

单机时代(独立运行)——> 局域网时代 ——> 广域网时代 ——> 移动互联网时代。

网络通信基础 

下面再来了解一些网络通信的基础。

IP地址

我们在网上购物时,会填写一个收货地址,这样当卖家才能正确的发货并且送到正确的地方。计算机在通信时,也是一样的,每台计算机在网络中都会有一个地址,这个地址标识着计算机所处的位置(虽然是虚拟的),这样不同的设备在进行通信时,才能正确发送与接收消息。

IP地址和我们真实的地址是不一样的,IP地址是随机的,准确的来说是当该设备尝试连接网络时,动态主机配置协议(DHCP)就会从空闲的IP中随机分配 IP 地址给请求IP的机器使用。这里的分配方式和线程池是类似的,也是有一个空闲的 IP池。

IP地址是有两种,一种是IPV4,另一种是IPV6。

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

IPV6 的格式 是采用冒号十六进制表示法。它将 128 位地址分为 8 个 16 位的部分,每个部分用 4 位十六进制数表示,并且各部分之间用冒号(:)分隔。

IPV6 是对 IPV4 的一个扩展,随着互联网的发展,越来越多的联网设备,那也就需要为每个联网设备分配一个IP地址,而IPV4所能分配的个数是有限的,因此就产生了 IPV6。

我们也可以在 命令行(cmd) 中查看本机现在的IP地址:

使用 IPconfig 命令即可(不区分大小写)

端口号

还是用网上购物来举例说明,当快递公司将包裹送到快递站之后,假设快递站的工作人员是直接联系买家。那么他就是直接通过电话或者短信来联系我们,这里的手机号码就是端口号。当一台机器给另一台机器传输信息时,这个数据已经到了另一台机器上面,而这台机器上面肯定是有多个联网的应用程序,那怎么知道具体是给那个应用呢?就得通过端口号来区分不同的应用程序。准确来说,是这个应用程序所对应的进程。

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

网络协议

当一台机器知道了另一台机器的 IP地址与端口号,那是不是就可以直接通信了呢?理论上是这样的,就像 小明知道了小红的地址之后与电话之后,就可以与小红进行交流了。但如果此时小红在忙,而是她的好闺蜜,小丽(只会说英文)接的电话,而小明又恰好不会说英文,然后小明就直接挂掉电话了,经此事之后,小明就和小红约定双方的电话不能被别人接听。同样网络通信中,如果发送消息的这方所做的数据封装与接收消息这方所做的数据解析不一样,那么两个机器就根本不能通信。就像用记事本打开二进制文件一样,会出现乱码的情况,这就是因为编码与解码的方式不同,最终解码出来的数据就不是预期的结果。因此在网络通信中,需要制定一份网络通信协议,来确保传输封装数据时,与得到解析数据时,拿到的数据是一样的。

因为网络通信的过程太过复杂,如果使用一套完整的协议,那肯定会使这份协议变得特别复杂,因此针对这种情况,制定协议的大佬们也是采用了常见的编程设计原则:高内聚、低耦合的方式。将一个大的协议分成很多个较小的协议,在此基础上根据一系列规则对这些协议进行分层处理。

分层的好处:

1、封装

对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可。

对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。

2、解耦

当某一层被替换时,几乎不会影响到整体的使用。

分层之后,最终形成了OSI七层模型。但因为OSI 七层模型既复杂又不实用,所以 OSI 七层模型只存在于教科书中。 实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也就是以下 TCP/IP 五层(或四层)模型来 实现。从上到下分别是以下五层:应用层,传输层,网络层,数据链路层,物理层。对于存在上一层的层次来讲,它会为上一层提供服务,对于存在下一次的层次来讲,它会调用下一层的接口来为自己服务。而对于四层来说,是把数据链路层与物理层看作是一层了,因为这两层都偏向于硬件了。

我们还是拿网上购物来举例。

应用层:关注的是"应用"方面,也就是东西买了之后,该怎么使用的问题;

传输层:关注的是"通信双方",即发货人与收货人;

网络层:关注的是"传输途径",即通信双方采用什么样的方式进行传输,顺丰、邮政等;

数据链路层:关注的是"相邻节点之间传输",从北京到天津之间是采用高铁,还是飞机等方式;节点是指路由器、交换机等设备

物理层:关注的是"硬件设备",即使用网线、光纤、WiFi等方式

不同设备的工作过程所涉及的层次: 

对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层;

对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;

对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;

对于集线器,它只实现了物理层。

现在的路由器与交换机可能也会不是上面的情况了(可能一台路由器也可以达到主机的程度),但是这里指的是一般情况。

在TCP/IP协议中,用五元组来标识一个网络通信:源IP、源端口、目的IP、目的端口、协议号(协议的类型,使用的是哪种协议)

网络通信的流程

应用层 ——> 传输层 :在应用层就会将传输的数据给序列化。传输层主要是构造TCP数据报,要传输的数据就是核心数据,被称为 TCP载荷,后面的就是 IP数据报、以太网数据报,这些同样是报头 + 载荷 + 报尾(只有以太网数据报才有)

要注意的是:应用层也会对用户要传输的数据进行一次封装,只是我们这里假设

封装就是对要传输的数据进行包装的过程,类似于网上买东西时的需要将东西给包装好在通过快递邮寄到我们手里。而分用就是封装的反过程,也就是拆快递包裹拿到具体东西的过程。 

另一个机器通过网卡拿到了一组二进制的数据,然后再将这些数据给到上层数据链路层,按照报头信息来解析再交给上一次,直至达到应用层为止。

好啦!本期 初始JavaEE篇 —— 初始网络编程:基础的网络知识 的学习之旅就到此结束啦!我们下一期再一起学习吧!

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

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

相关文章

基于SSM+小程序的高校寻物平台管理系统(失物1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 本基于微信小程序的高校寻物平台有管理员,用户以及失主三个角色。 1、管理员功能有个人中心,用户管理,失主管理,寻物启示管理,拾…

leetcode21:合并两个有序列表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], l2 [] 输出:[]示…

【c++丨STL】vector的使用

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C、STL 目录 前言 vector简要介绍 一、vector的默认成员函数 构造函数(constructor) 析构函数(destructor) 赋值运算符重载operator 二、vector的容量接口…

【数据分享】2024年我国省市县三级的生活服务设施数量(46类设施/Excel/Shp格式)

人才市场、售票处、旅行社等生活服务设施的配置情况是一个城市公共基础设施完善程度的重要体现,一个城市生活服务设施种类越丰富,数量越多,通常能表示这个城市的公共服务水平越高! 本次我们为大家带来的是我国各省份、各地级市、…

自定义SpringBoot的Start应用场景及常见错误

开发背景 为了将环信(即使通讯)的模块独立出来实现复用&#xff0c;提供给多个模块使用。 实现方式 1.目录结构 2.添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> &l…

gdb和make工具

gdb工具&#xff1a; GDB的主要功能 断点设置&#xff1a;允许开发者在特定的代码行设置断点&#xff0c;当程序执行到该行时会自动暂停&#xff0c;方便开发者进行调试和分析。 变量查看与修改&#xff1a;在程序运行过程中&#xff0c;可以查看和修改变量的值&#xff0c;以…

Ceisum无人机巡检视频投放

公司投标内容有个视频投放的功能动画&#xff0c;原本想实现这么一个效果&#xff1a; 案例效果来自别人的展示作品&#xff0c;Leader一眼就相中了这个效果&#xff0c;可惜别人的终究是别人的&#xff0c;又不会白白给你&#xff0c;终究是要自己动手尝试。 动画方面的展示…

Spring:Bean(创建方式,抽象继承,工厂Bean,生命周期)

1&#xff0c;Bean的创建 1.1&#xff0c;调用构造器创建Bean 调用Bean类的无参构造函数来创造对象&#xff0c;因此要求提供无参构造函数。在这种情况下class元素是必须的&#xff0c;值就是Bean对象的实现类。 如果采用设值注入&#xff0c;Spring容器将使用默认的构造器来创…

ViT面试知识点

文章目录 VITCLIPBlipSAMLSegFast TransformerYOLO系列问题 BatchNorm是对一个batch-size样本内的每个特征做归一化&#xff0c;LayerNorm是对每个样本的所有特征做归一化。 Layer Normalization&#xff08;层归一化&#xff0c;简称LayerNorm&#xff09;是一种在深度学习中…

了解数据库并发产生的问题

在数据库管理系统中&#xff0c;并发控制是一个至关重要的方面。随着多个用户或进程同时访问和修改数据库中的数据&#xff0c;如果没有适当的并发控制机制&#xff0c;就可能导致数据不一致、丢失更新、脏读、不可重复读和幻读等问题。在单用户系统中&#xff0c;数据库操作是…

qt QFontDialog详解

1、概述 QFontDialog 是 Qt 框架中的一个对话框类&#xff0c;用于选择字体。它提供了一个可视化的界面&#xff0c;允许用户选择所需的字体以及相关的属性&#xff0c;如字体样式、大小、粗细等。用户可以通过对话框中的选项进行选择&#xff0c;并实时预览所选字体的效果。Q…

【JavaSE】(2) 方法

一、认识方法 1. 方法的定义 修饰符 返回类型 方法名(形参类型 形参名, ......){......return 返回值; } 示例代码&#xff1a; 2. 方法的作用 增强代码的可复用性。&#xff08;避免重复造轮子&#xff09;增强代码的易管理性。&#xff08;改方法就行&#xff0c;不用到处…

享元模式及其运用场景:结合工厂模式和单例模式优化内存使用

介绍 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过共享对象来减少内存使用&#xff0c;尤其是对于大量相似对象的场景。享元模式通常与工厂模式和单例模式结合使用&#xff0c;从而有效地控制和复用对象的创建。在享元模式中&am…

【RabbitMQ】03-交换机

1. 交换机 2. Fanout交换机 广播。生产者向exchange发消息 SpringBootTest public class SpringAmqpTest {Autowiredpublic RabbitTemplate rabbitTemplate;Testvoid testSimple() {String exchangName "hmall.fabout";rabbitTemplate.convertAndSend(exchangName…

【赵渝强老师】安装部署Memcached

Memcached是一个高性能的分布式的内存对象缓存系统。通过使用Memcached可以支持高负载的网站系统&#xff0c;以分担数据库的压力。Memcached通过在内存里维护一个统一的巨大的Hash表来存储各种格式的数据&#xff0c;包括图像、视频、文件以及数据库检索的结果等。但是Memcach…

代码要走的路:编程“三部曲”

代码要成为可以运行的程序&#xff0c;总共有3步&#xff1a; 1&#xff0e;编辑&#xff08;edit&#xff09; 这里的编辑不是像出版编辑那样&#xff0c;只把现成的东西修修改改&#xff0c;而是指编写代码。 编写代码是实实在在的原创&#xff0c;不是整理加工&#xff0…

支持向量机相关证明 解的稀疏性

主要涉及拉格朗日乘子法&#xff0c;对偶问题求解

漫途焊机安全生产监管方案,提升安全生产管理水平!

随着智能制造时代的到来&#xff0c;企业安全生产管理的重要性日益凸显。特别是在现代工厂中&#xff0c;焊机的安全生产监管成为了一个不容忽视的重要环节。传统的焊机安全生产监管方式存在诸多不足&#xff0c;如人工巡检频率低、数据延迟、安全隐患发现不及时等问题。因此&a…

【dvwa靶场:XSS系列】XSS (Reflected)低-中-高级别,通关啦

一、低级low 简单拿捏 <script>alert(123)</script>二、中级middle 源码过滤了script但是没有过滤大小写&#xff0c;改成大写S <Script>alert(123)</script>三、高级high 比中级高&#xff0c;过滤了script并且以及大小写&#xff0c;使用其他标…

太速科技-634-基于3U PXIe的VU3P FMC+数据接口板

基于3U PXIe的VU3P FMC数据接口板 一、产品概述 板卡是一款基于 3U PXIE 总线架构的高性能数据预处理FMC 载板&#xff0c;具有 1 个 FMC&#xff08;HPC&#xff09;接口&#xff0c;1 个 X8 GTH 背板互联接口&#xff0c;可以实现 1 路 PCIe x8。板卡主控芯片采用Xilin…