javaEE 初阶 — 网络通信基础

news2024/9/20 6:29:00

文章目录

  • 1. IP 地址
  • 2. 端口号
  • 3. 认识协议
  • 4. 协议分层
    • 4.1 分层的作用
    • 4.2 OSI七层模型
    • 4.3 TCP/IP五层(或四层)模型
    • 4.4 网络数据传输的基本流程
      • 4.4.1 发送方
      • 4.4.2 接收方

1. IP 地址


IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。
简单说,IP地址用于定位主机的网络地址。

就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。
IP 地址标识了网络上设备所在的位置。

2. 端口号


在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。
简单说:端口号用于定位主机中的进程。

类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号
端口号标识了一个具体的应用程序。

3. 认识协议


协议就是通信双方的进行的一种约定。
发送方约好了发送的数据是什么样的,接收方按照固定的格式来进行解析。


如果协议太复杂了,学习成本、使用成本、理解成本、维护成本都会非常高。
因此,实际采取的做法是针对这个复杂的大协议,拆分成若干个相对简单的小协议。

随着把协议分成一些小的协议(每个协议负责一部分功能),此时会发现,
某些协议之间,起到的功能和作用是类似的。就针对这些小的协议,再进行分层。

这就好比代码拆分出很多类,有些类功能差不多,就可以放到同一个包里。

4. 协议分层


对于网络协议来说,往往分成几个层次进行定义。

4.1 分层的作用


可以降低学习和维护成本,可以灵活的针对这里的某一层进行替换。

分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。

在代码中,类似于定义好一个接口,
一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务)。

  • 对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可
  • 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。

这样能更好的扩展和维护。

4.2 OSI七层模型


OSI 七层网络模型 是存在于教科书上的,实际生活中是没有的。

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

  • OSI 七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层
  • OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传
    输。
  • 它的最大优点是将服务接口协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯

    OSI 七层模型划分为以下七层:

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


TCP/IP五层(或四层)模型 是实际上的情况。


TCP/IP 是 OSI 简化的实现方式。

层级越往下越接近硬件设备;越往上,就越接近用户。

网络分层这里,相当于是上层协议要调用下层协议,下层协议给上层协议提供服务。
由下到上:

物理层、网卡层(也叫数据链路层)、互联网层(也叫网络层)、传输层、应用层

接下来介绍的每一层。

1、物理层

约定了网络通信中基础的硬件设备是什么样的。

比如通信使用的网线。网口等设备,而且它们都是相同规格的。


2、数据链路层

主要负责相邻的两个结点之间具体是怎么进行传输的。

比如说一个快递在运输的过程中,从 A 到 B 是怎么运输的,汽车、火车、或是飞机?


3、网络层

主要负责路劲的规划,怎么走会比较划算。

好比在快递运输前要计算那条路劲比较节省成本,如果从 A 到 D ,可以有 A、B、C、D;
或者说还是 A 、C、 D。

而网络层的工作就是选择最划算的那条路。


4、传输层

站在商家和买家的角度,他们两个并不关心快递是怎么样运输的,而是只关心起点和终点。

这个过程就是传输成在做的工作,也就是端到端之间的传输


5、应用层

这是属于应用程序层面的,主要是描述了传输的数据,用户要怎么样使用。

如果我要购买快递就要使用 APP 来购买,这是应用层描述的。

4.4 网络数据传输的基本流程


站在协议分层背景下来理解网络数据传输的基本流程。

下面以 QQ 这个应用程序来讲解网络数据传输的基本流程。

4.4.1 发送方


用户在输入框中输入 hello 这个字符串,qq 就会把这个字符串给构成一个应用层数据包

1、应用层

一个假设的应用层协议的格式:发送方qq号;发送时间;接收方qq号;消息内容



所谓的 “应用层数据包” 本质上就是一个遵守了约定格式的字符串。

程序要调用操作系统的 API ,把这个应用层数据交给传输层


2、传输层

传输层中,就要把上述的应用层数据构造成数据包。

传输层使用到的协议,最知名的是 UDPTCP
比如此处使用的是 UDP ,就需要构造出 UDP 数据包。(在应用层数据基础上加个 UDP 报头)



这是另外一个特定格式的字符串(具体细节后面再说,这里涉及到 源端口目的端口
此处就像是字符串拼接一样,把这个报头后面的数据拼到一起。

所谓的报头就是一个 “标签” ,是通过标签表示出当前要把这个消息怎样进行传输。

传输层 就把这个 UDP 数据包交给 网络层

加报头原因:

就像是寄快递一样,不能直接把东西寄过去,而是要在外面加上包装,在包装的外面再加上快递单。
不仅仅是防止物品损坏,还有快递单上可以保存一些寄件人和收件人的信息。

这是在寄快递过程中必要的内容。


3、网络层

最知名的协议是:IP 协议 ,IP 协议要基于上述数据,打包成一个 IP 数据包。



IP 报头也相当于是一个字符串,包含了另外一组信息。(最核心的信息 源 IP目的IP

网络层数据包准备好,还需要进一步交给数据链路层

在传输过程中需要知道 源IP、源端口、目的IP、目的端口、协议类型,这是一次通信中的五元组

举个例子,张三在开学第一天的自我介绍。

张三一个安徽人,梦想是 到美利坚 留学

这里的张三就相当于是源端口,安徽人表示从哪里来,这是源IP
到美利坚这是目的IP,留学这是目的端口


4、数据链路层

最知名的是协议是:以太网,基于上述数据,还要打包成一个 “以太网数据帧”



数据继续往下传输,交给物理层


5、物理层

把上述二进制的数据(一串0101)转换成 电信号/光信号,此时就真正的把数据给发送出去了。

上述过程中,从应用层物理层 层层加码,这个过程被称为 “封装”(不是面向对象的封装)

4.4.2 接收方


接收方的工作,省略中间的转发过程,只考虑 B 的接收。



1、物理层

网卡接收到的是 光信号电信号,是在物理层,把这个光电信号转换成了二进制的数据。

转化会的数据其实是一个 以太网数据帧,把这个数据交给数据链路层解析


2、数据链路层



数据链路层需要去掉帧头帧尾,取除中间的载荷,交给上层的网络层

以太网数据帧帧头里也会记录,这个载荷是不是一个数据包。


3、网络层

IP 协议针对这里进行解析,解析出 IP 报头,取出 IP 协议的载荷,把这里得到的传输层数据包交给上层的传输层


IP 报头里会记录载荷是 UDP 还是 TCP。


4、传输层

UDP 再进行解析,取出报头,取出载荷,再把这个载荷交给对应的应用层程序



UDP 报头里有一个非常重要的字段,“目的端口”
目的端口是一个具体的应用程序关联在一起的,因此就可以根据这个端口来把应用程序交给应用程序了。


5、应用层

QQ应用程序,就会针对应用层协议也进行解析,显示到界面上。



上述从上到下层层解析,这个过程称为 “分用”

封装:包装快递。

分用:拆快递。


总结

整个网络协议中,协议分成了很多层。

上层协议要调用下层协议,上层协议把数据交给下层,继续封装。
下层协议要交给上层协议提供支持,下层协议解析好数据交给上层。

这里的几层协议之间是有明确的层级关系的,只能相邻的两层之间才能进行交互,不能跨层交互。

上述这些约束让通信过程变得相对简单和清晰起来。

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

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

相关文章

PowerSNMP for .NET 6.1.0.0 Crack

关于适用于 .NET 的 PowerSNMP 创建自定义 SNMP 管理器、陷阱和代理应用程序以监视和控制网络设备。 PowerSNMP for .NET 包括简单网络管理协议 (SNMP) 组件,可无缝集成线程通信、安全和编码/解码,因此您可以快速开发自定义 SNMP 应用程序。该开发工具需…

HW_DIMM分类与比较

DIMM 分类参考链接 UDIMM UDIMM is also known as unbuffered DIMM, that is, unbuffered dual in-line memory module. The application of this memory module means that the address and control signals can directly reach the DRAM chip on the server DIMM without g…

[hive]维度模型分类:星型模型,雪花模型,星座模型|范式

一、维度模型分类:星型模型,雪花模型,星座模型1、星型模型星型模型中只有一张事实表,以及0张或多张维度表,事实与纬度表通过主键外键相关联,维度之间不存在关联关系,当所有纬度都关联到事实表时,整个图形非常像一种星型…

ESP32设备驱动-MPU-9250 3轴陀螺仪/加速度计/磁力计驱动

MPU-9250 3轴陀螺仪/加速度计/磁力计驱动 1、MPU9250介绍 MPU-9250 是面向智能手机、平板电脑、可穿戴传感器和其他消费市场的第二代 9 轴运动处理单元™(Motion Processing Unit™)。 MPU-9250 采用 3x3x1mm QFN 封装,是世界上最小的 9 轴运动跟踪设备,采用了最新的 Inven…

钢结构之槽钢及角钢

槽钢 槽钢是截面为凹槽形的长条钢材,截面形状为槽形的型钢。 槽钢的基本介绍 槽钢属建造用和机械用碳素结构钢,是复杂断面的型钢钢材,其断面形状为凹槽形。槽钢主要用于建筑结构、幕墙工程、机械设备和车辆制造等。在使用中要求其具有较好的…

没有选品经验的电商卖家该在TikTok上卖什么商品?超店有数来帮你

TikTok近年来增速迅猛,凭借巨大的流量频频登榜多国APP下载榜首,而其电商业务同样处于快速增长状态。2022上半年,TikTok电商的GMV已超10亿美元;2022年全年,TikTok Shop在东南亚GMV增长逾三倍,达到44亿美元。…

【SpringBoot2】SpringBoot中配置文件详解

SpringBoot使用一个全局的配置文件,配置文件名是固定的,支持两种格式 1、两种格式(properties,yml) application.properties application.yml 由此可以看出 application.yml 文件格式的内容更为简洁,清晰…

SpringAMQP - 发布订阅模式

目录 发布订阅介绍 FanoutExchange简介 FanoutExchange案例 常见小问题 DirectExchange简介 DirectExchange案例 常见小问题 TopicExchange简介 TopicExchange案例 发布订阅介绍 发布(Publish)、订阅(Subscribe)发布订阅…

Python【xpath】基础上

xpath解析: 最常用且最便捷高效的一种解析方式。通用性- xpath 解析原理:- 1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中环境安装:- cmd 输入 pip install lxml- 如何实例化一个etree 对象- 1.将本地的html&#xff…

从管易云到MySQL通过接口配置打通数据

数据源平台:管易云管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌,先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务,涵盖电商业务全流程。写入目标:MySQLmysql是一个关系数据库管理系统(RDBMS&…

SpringBoot的自动配置

参考视频:每一帧都是干货!15分钟的视频花2小时看 一、配置类(Configuration Class) 广义的配置类:被注解Component直接或间接修饰的某个类,即我们常说的Spring组件,其中包括了Configuration类…

类加载器与双亲委派

-----摘自 周志明 《深入理解Java虚拟机》类加载器Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器…

R语言多元数据统计分析在生态环境中的实践应用

生态环境领域研究中常常面对众多的不同类型的数据或变量,当要同时分析多个因变量(y)时需要用到多元统计分析(multivariate statistical analysis)。多元统计分析内容丰富,应用广泛,是非常重要和…

管易云与网易互客对接集成发货单=>编辑订单

对接源平台:管易云管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌,先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务,涵盖电商业务全流程。对接目标系统:网易互客网易互客是一款智能化的客户关系管理工具。可以…

JavaEE3-Spring创建

目录 1.创建一个普通的Maven项目 2.添加Spring框架支持(spring-context,spring-beans) 3.添加启动类 1.创建一个普通的Maven项目 不选择任何模板,直接点Next。 Name:项目名称; Location:项目保存路径; …

【文件操作】-还在为运行的数据没法保存而烦恼吗??这篇博客让你十分钟之内解决问题,赶紧进来看看!!!

🎇作者:小树苗渴望变成参天大树 💦作者宣言:认真写好每一篇博客 💖作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! ✨文件操作🧨前言💤一…

压力测试和JMeter使用分析

压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。 压测都 是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。 使用压力测试,我们有希望找到很多种用其他测试方法更难发现的错误。 有两种错误类型是:…

nginx简单梳理

Nginx总结 这里写目录标题Nginx总结**Nginx** **的简介**1、什么是 **nginx**2、正向代理3、反向代理4、负载均衡**5**、动静分离**Nginx** 的安装**Nginx** **的常用的命令****Nginx** 的配置文件**Nginx** **配置实例**-**反向代理实例** **1****Nginx** **配置实例**-**负载…

408—栈,队列和数组

stl里面的栈中没有清空的函数, 需要自己编写函数清空(while循环返回pop), 更常见的做法是重新定义一个栈,这样的时间复杂度就是O(1)栈的基本操作,出栈入栈判空和求栈的长度,和取栈顶元素以及清空出栈和取栈…

初学者C语言练习题-函数

二、函数 一个C程序有且只有一个主函数,即main函数。 C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入口。而main前面的int就是主函数的类型.printf()是格式输出函数,这里就记住它的功能就是在屏幕上输出指定的信息retur…