【Java】初识网络编程

news/2024/5/20 12:05:18

文章目录

  • 前言
  • ✍一、互联网的发展
    • 1.独立模式
    • 2.网络的出现
      • 局域网LAN
      • 广域网WAN
  • ✍二、网络编程概述
  • ✍三、网络编程中的术语介绍
    • IP地址
    • 端口号
    • 协议
    • OSI七层模型
    • TCP\IP四层模型
  • ✍四、协议的层级之间是如何配合工作的

前言

在这里插入图片描述

在本文中,会对网络编程的一些术语进行解释,例如什么是IP,什么是协议,什么是端口号。并且会对计算中各个协议的交互有一个初步的介绍

✍一、互联网的发展

1.独立模式

最开始时,计算机之间是相互独立的,每个计算机中的数据不能互通,想要对不同的数据进行操作,就需要到存储该数据的计算机上进行操作,非常麻烦。

2.网络的出现

随着时代的发展,越来越需要计算机之间相互通信,共享软件数据,就有了网络互联

网络互连 :将多台计算机连接到一起,完成数据共享

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

局域网LAN

局域⽹,即 Local Area Network,简称LAN。

Local 即标识了局域⽹是本地,局部组建的⼀种私有⽹络。

局域⽹内的主机之间能⽅便的进⾏⽹络通信,⼜称为内⽹;局域⽹和局域⽹之间在没有连接的情况下,是⽆法通信的。

局域⽹组建⽹络的⽅式有很多种:

  1. 网线直连
    在这里插入图片描述

  2. 由集线器组建
    在这里插入图片描述

  3. 由交换机组建
    在这里插入图片描述

  4. 由交互机和路由器组建
    在这里插入图片描述

广域网WAN

⼴域⽹,即 Wide Area Network,简称WAN。

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

在这里插入图片描述

✍二、网络编程概述

计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

网络编程的目的:传播交流信息、数据交换、通信。

  1. 想要达到什么效果需要什么

  2. 如何准确定位网络上的某台主机。IP地址+端口。定位到计算机上的某个资源。
    找到这台主机,如何传输数据

✍三、网络编程中的术语介绍

IP地址

概念

IP地址主要⽤于标识⽹络主机、其他⽹络设备(如路由器)的⽹络地址。简单说,IP地址⽤于定位主机的网络地址
就像我们发送快递⼀样,需要知道对⽅的收货地址,快递员才能将包裹送到⽬的地。

格式
IP地址是⼀个32位的⼆进制数,通常被分割为4个“8位⼆进制数”(也就是4个字节),如:
01100100.00000100.00000101.00000110。
通常⽤“点分⼗进制”的⽅式来表⽰,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的⼗进制整数)。
如:100.4.5.6。

端口号

概念

在⽹络通信中,IP地址⽤于标识主机⽹络地址,端⼝号可以标识主机中发送数据、接收数据的进程。
简单说:端⼝号⽤于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货⼈(端⼝号)。

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

协议

协议,⽹络协议的简称,⽹络协议是⽹络通信(即⽹络数据传输)经过的所有⽹络设备都必须共同遵从的⼀组约定、规则。如怎么样建⽴连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

协议(protocol)最终体现为在⽹络上传输的数据包的格式。

协议分层

在不同的机器上通过网络进行传输文件时,涉及到的操作非常多,非常复杂,如果使用单一的协议来对问题进行解决时,这个协议需要考虑的问题非常多,一旦某块出现问题,修改起来可能会涉及到别的部分。那么我们将解决一个问题需要的操作交给几个协议来完成,降低耦合,增强网络编程的健壮性

在这里插入图片描述
协议分层的优点

  1. 各层之间互相独立。
    每层不需要知道其他层是如何实现的,仅需要知道实现某个功能需要调用哪个api即可。
  2. 易于维护和实现。
    这种结构的存在使得处理一个复杂而庞大的问题变得更加容易,使整个系统分割成多个独立的小系统
  3. 灵活性好。
    当不需要某个功能时,可以删去实现该功能对应的层级,而其他层级的功能不受影响,
  4. 实现功能的标准化。
    在书写每一层的代码时,就会详细的给出该层对应的功能。

缺点
当然协议分层也存在着缺点

  • 由于分层过于严密,导致不能越级调用底层的接口,降低了开发的效率

OSI七层模型

OSI定义了网络互连的七层模型(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),如下图所示:
在这里插入图片描述

TCP\IP四层模型

在这里插入图片描述
在这里插入图片描述

  • 应用层(Application Layer)
    为应用程序或用户请求提供各种请求服务。 OSI参考模型最高层,也是最靠近用户的一层,为计算机用户、各种应用程序以及网络提供接口,也为用户直接提供各种网络服务。

  • 传输层(Transport Layer)
    数据通信。 建立主机端到端的链接,为会话层和网络层提供端到端可靠的和透明的数据传输服务,确保数据能完整的传输到网络层。

  • 网络层(Network Layer)
    IP选址及路由选择。 通过路由选择算法,为报文或通信子网选择最适当的路径。控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。

  • 数据链路层(Data Link Layer)
    提供介质访问和链路管理。 接收来自物理层的位流形式的数据,封装成帧,传送到网络层;将网络层的数据帧,拆装为位流形式的数据转发到物理层;负责建立和管理节点间的链路,通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。

  • 物理层(Physical Layer)
    管理通信设备和网络媒体之间的互联互通。 传输介质为数据链路层提供物理连接,实现比特流的透明传输。实现相邻计算机节点之间比特流的透明传送,屏蔽具体传输介质和物理设备的差异。

严格意义上只存在七层结构和四层结构,TCP/IP实际上是四层结构,包括应用层,传输层,网际层和网络接口层,我们常说的五层结构只具有教学意义,只是为了能讲清楚其中原理,实际上现实中并不存在五层结构。

✍四、协议的层级之间是如何配合工作的

简单来说,就是上层协议调用下层协议,下层协议服务于上层协议,也就是一个 封装与分用 的过程。

我们举例来说明这个过程究竟是怎样的

以A在抖音上向B发私信这个过程解释封装和分用的流程

  1. 应用层
    A于5月8日下午4:00抖音上向B发送“你好,可以加个微信吗?",
    在这里插入图片描述

抖音里会有一个应用层协议,会将要传输的 发送人、接受人、发送信息、发送时间等协议规定需求组织成一个字符串 ,注意:网络上传输的数据本质上是(二进制的)字符串(二进制的bit流)
A的账号ID为1685 B的账号ID为3694
"你好,可以加个微信吗?"转换成二进制为11100100 10111101 10100000 11100101 10100101 10111101 11101111 10111100 10001100 11100101 10001111 10101111 11100100 10111011 10100101 11100101 10001010 10100000 11100100 10111000 10101010 11100101 10111110 10101110 11100100 10111111 10100001 11100101 10010000 10010111 00001010

在这里插入图片描述
本身发送的是一个结构化的数据(包含很对属性,很多字段),但在计算机中传输就要转换成二进制序列,这个过程就叫做序列化
而由二进制序列转换成结构化的数据,这个过程叫做反序列化

以上应用层协议并非真实的,只是为了方便介绍举例而已,切勿当真!!!

不同应用的应用层协议不相同!!!

在应用层中,会将信息打包成”应用层数据包“,调用api传递给下层。

  1. 传输层
    已经有了”应用层数据包“,通过调用应用层(操作系统内核)的api(Socket api)将数据传递给应用层 (进入操作系统内核)
    在传输层拿到这个数据包后,会对这个数据包进行进一步的封装,构造成”传输层数据包“。
    在传输层中,有两个经典的协议:TCP、UDP
    假设此处是UDP协议
    就会在“应用层数据包”前增加一个“报头”
    在这里插入图片描述
    构造好“传输层数据包”之后,再次调用api来将“传输层数据包”交给网络层。
    这个过程同样是系统已经封装好api供我们使用,不需要关注其中的细节。
  2. 网络层
    网络层中典型的协议是IP协议
    在这里插入图片描述

注意:在对数据包进行封装时,他们并不关心数据包中是什么内容,只是简单的封装机器,添加好各自负责的报头,就继续调用下层api将其转递给下层

此时拥有了”网络层数据包“调用api将其传给”数据链路层“
4. 数据链路层
”数据链路层“在拿到数据包后,继续对数据包进行封装
”数据链路层“中一个经典的协议是 以太网
在这里插入图片描述

上述数据此时已经进入到网卡驱动中了,接下来就要真正的发送出去了

  1. 物理层

以太网数据帧,本质上还是“二进制序列”
硬件设备要将 二进制数据转换成 光信号\电信号\电磁波、才会真正发送

上述层层的增加数据报头的操作就是封装

上述这些数据,并非是由A直接到B,而是先到达和A连接的交换机\路由器。
数据经过交换机\路由器一系列的转换后,最终才会到达B

在数据经过转换机\路由器后,数据又会经由一系列的转换(所谓的去报头)最终到达B
这个过程就是所谓的分用

分用

  1. 物理层
    物理层收到一系列光信号,把这些信号转换成0101的二进制数据,将这些二进制数据交给数据链路层
    在这里插入图片描述

  2. 数据链路层
    数据链路层通过以太网协议,对数据进行解析(这个过程就是针对报头的内容进行解析,例如拿到发送方和接收方的信息,),解析后拿到载荷,将载荷交给网络层
    在这里插入图片描述

  3. 网络层
    IP协议拿到了IP数据包,按照协议的格式,对数据包再进一步的解析,拿到载荷再传给下一层

  4. 传输层
    UDP拿到UDP数据包,再对数据包中的内容进一步解析,解析出一些信息(要交给哪个端口号)
    在这里插入图片描述

  5. 应用层
    qq拿到应用层数据包
    按照qq内部的协议,来进行解析,拿到结构化数据(也就是反序化)
    最后将这些结构化数据显示到界面上
    这时B就收到了来自A的”你好,可以加个微信吗?“
    自此爱情的齿轮就开转动!
    在这里插入图片描述


以上就是本文所有内容,如果对你有帮助的话,点赞收藏支持一下吧!💞💞💞


http://www.mrgr.cn/p/57550355

相关文章

《最新出炉》系列入门篇-Python+Playwright自动化测试-45-鼠标操作-下篇

1.简介 鼠标为我们使用电脑提供了很多方便,我们看到的东西就可以将鼠标移动过去进行点击就可以打开或者访问内容,当页面内容过长时,我们也可以使用鼠标滚轮来实现对整个页面内容的查看,其实playwright也有鼠标操作的方法。上一篇文章中已经讲解过鼠标的部分操作了,今天宏哥…

redux中核心组件有哪些,reducer的作用

在redux中,核心组件包括Action、Reducer、Store和Middleware。 Action是一个普通的JavaScript对象,用于描述发生了什么事件。它必须包含一个type属性,用于标识事件的类型。可以在Action中添加其他自定义的属性来传递数据。 Reducer是一个纯函数,用于根据收到的Action来更新…

学习记录+vcode+GPIO例程+正点原子 DNESP32S3 开发板教程-IDF 版

第一个程序: UART模式和JTAG模式,配置完成不同。配置主要就是.vscode 文件夹中 c_cpp_properties.json,tasks.json,launch.json,settings.json四个文件。 一个想法:备份UART模式和JTAG模式的配置文件,用时直接文件替换。简单粗暴方式是.vscode 文件夹替换。当然每次要选…

chrome extension插件替换网络请求中的useragent

感觉Chrome商店中的插件不能很好的实现自己想要的效果,那么就来自己动手吧。 本文以百度为例: 一般来说网页请求如下: 当前使用的useragent是User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safar…

AB实验相关流程

本篇文章介绍的是一个完整AB测试流程应该怎么走。 AB测试流程有以下几个步骤: 一、选取实验指标 二、建立实验假设 三、选取实验单位 四、确定最小提升预期值 五、计算最小样本量 六、流量分割 七、确定实验时长 八、数据统计 九、得出结论 接下来就详细说明每个步骤。 一、选…

RS232引脚方向及意义与接线参考

RS232引脚方向及定义编号引脚意义方向作为IO使用说明1CD载波检测(Carrier Detect)计算机《调制解调器输入调制解调器通知计算机有载波被侦测到2RXD接收(Receive)计算机《调制解调器 接收数据3TXD发送(Transmit)计算机》调制解调器 发送数据4DTR数据终端设备(DTE)备好(Data Te…

jenkins 拉取代码之后 自动执行jar包到部署服务器自动运行

原文地址: https://blog.csdn.net/xiuyuandashen/article/details/124490378

springboot整合rabbitmq的不同工作模式详解

前提是已经安装并启动了rabbitmq,并且项目已经引入rabbitmq,完成了配置。 不同模式所需参数不同,生产者可以根据参数不同使用重载的convertAndSend方法。而消费者均是直接监听某个队列。 不同的交换机是实现不同工作模式的关键组件.每种交换…

MindSpore反向传播配置关键字参数

继上一篇文章从Torch的两个Issue中找到一些类似的问题之后,可以发现深度学习框架对于自定义反向传播函数中的传参还是比较依赖于必备参数,而不是关键字参数,MindSpore深度学习框架也是如此。但是我们可以使用一些临时的解决方案,对此问题进行一定程度上的规避,只要能够自定…

AR精灵——风险分析和典型用户

风险分析典型用户 典型用户一名字:盛宇伟 年龄:28岁,收入:每月约8000元 代表的用户在市场上的比例和重要性:虽然使用AR精灵的付费用户比例较少,但他们对产品的热爱和忠诚度很高,他们的反馈和建议对产品的改进至关重要。 使用这个软件的典型场景:李梅在下班后回到家中,…

Python-Socket编程实现tcp-udp通信

本文章是记录我准备大创项目时学的socket编程的用法,纯属记录生活,没有教学意义,视频我是看b站up主王铭东学的,讲的很详细,我只粗略学了个大概,我想要通过tcp,udp传输yolo目标检测中的物体坐标信…

sql 注入 1

当前在email表 security库 查到user表 1、第一步,知道对方goods表有几列(email 2 列 good 三列,查的时候列必须得一样才可以查,所以创建个临时表,select 123 ) 但是你无法知道对方goods表有多少列 用order …

BOSHIDA AC/DC电源模块在通信与网络设备中的应用研究

BOSHIDA AC/DC电源模块在通信与网络设备中的应用研究 随着通信与网络技术的不断发展,通信与网络设备的使用不断增加。电源作为通信与网络设备的重要组成部分之一,在其稳定工作中起到至关重要的作用。AC/DC电源模块作为一种常用的电源转换器,广泛应用于通信与网络设备中。 一…

AWVS(acunetix) 安装详细教程

一、软件介绍Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的Web网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行安全漏洞。AWVS官方网站是:http://www.acunetix.com/ 软件有window版本,linux版本,还可以docker安装 二、下载安装 官方下载地址: h…

国密算法SM3-java实现

aven依赖<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.56</version> </dependency> SM3Utilsimport org.bouncycastle.crypto.digests.SM3Digest; import org.bouncy…

区块链 | IPFS:Merkle DAG

&#x1f98a;原文&#xff1a;IPFS: Merkle DAG 数据结构 - 知乎 &#x1f98a;写在前面&#xff1a;本文属于搬运博客&#xff0c;自己留存学习。 1 Merkle DAG 的简介 Merkle DAG 是 IPFS 系统的核心概念之一。虽然 Merkle DAG 并不是由 IPFS 团队发明的&#xff0c;它来自…

uniapp:抖音PK进度条(nvue)

nvue中,仿抖音PK进度条效果, <template><view class="index" :style="{width:windowWidth+px,height:index_windowHeight+px,paddingTop:windowTop+px}"><view class="pk"><text class="pk_jindu_left_val fsz-24 …

【OpenGL4.6】VS2022安装OpenGL4.6的全过程

文章目录 一、说明二、vs2022环境安装2.1. 安装vs20222.2 为OpenGL专门建立目录 三、下载安装cmake&#xff0c;用于编译源代码3.1 为什么安装Cmake3.2 下载和安装Cmake 四、下载安装glfw&#xff0c;用于窗口界面4.1 设置glfw库&#xff0c;用于创建窗体4.2 如何使用glfw库? …

密码学《图解密码技术》 记录学习 第十二章

目录 第十二章 12.1 骡子的锁匠铺 12.2 本章学习的内容 12.3 使用随机数的密码技术 12.4 随机数的性质 12.4.1 对随机数的性质进行分类 12.4.2 随机性 12.4.3 不可预测性 12.4.4 不可重现性 小测验 1 骰子 &#xff08;答案见 1…

time:Python的时间时钟处理

前言 time库运行访问多种类型的时钟,这些时钟用于不同的场景。本篇,将详细讲解time库的应用知识。 获取各种时钟 既然time库提供了多种类型的时钟。下面我们直接来获取这些时钟,对比其具体的用途。具体代码如下: import timeprint(time.monotonic()) print(time.monotonic_…