JavaEE:网络初识

文章目录

  • 网络初识
    • 网络中的重要概念
      • IP地址
      • 端口号
      • 认识协议(最核心概念)
      • OSI七层模型
      • TCP/IP五层(或四层)网络模型
      • 网络设备所在分层
      • 封装和分用


网络初识

网络中的重要概念

网络互联的目的是进行网络通信,也是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据.

那么,在组建网络的过程中,如何判断到底是从哪台主机,将数据传输到哪台主机呢?这就需要使用IP地址来标识.

IP地址

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

IP地址是一个32位的二进制数,通常被分割为个"8位二进制数"(也就是4个字节).

通常用"点分十进制"的方式来表示,即a.b.c.d的形式(a,b,c,d都是0-255之间的十进制整数)
在这里插入图片描述

端口号

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

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

虽然是0~65535这样的范围,但是实际上0~1023这些端口,都是有一些特定含义的.咱们自己写代码使用的端口,一般都是用剩下的.

有了IP地址和端口号,可以定位到网络中唯一的一个进程,但是还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?

网络通信传输的数据类型可能有多种:图片,视频,文本等等.同一个类型的数据,格式可能也不同,如发送一个文本字符串"你好!".那么如何标识发送的数据是文本类型,及文本的编码格式呢??

基于网络传输,需要使用协议来规定双方的数据格式.

认识协议(最核心概念)

协议是指各方之间达成的共同约定或规定的规则和规范。在计算机领域,协议是指计算机系统、设备或应用程序之间进行通信和交互所使用的规定格式、语法和行为。协议可以规定数据的传输方式、通信的语言和格式、消息的编码和解码方式等,确保各方能够理解和正确处理通信中的数据和指令。

协议最终体现为在网络上传输的数据包的格式.

为什么需要协议?
因为计算机之间的传播媒介是光信号和电信号.通过"频率"和"强弱"来表示0和1这样的信息.想要传递不同的信息,就需要约定好双方的数据格式.
在这里插入图片描述

  • 计算机生产厂商有很多
  • 计算机操作系统,也有很多
  • 计算机网络硬件设备,还是有很多

如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?
就需要有人站出来,约定一个共同的标准.大家都来遵守,这就是网络协议.

由于网络通信是一件非常复杂的事情.
如果使用一个协议,约定所有的网络通信细节,那么就会导致这个协议非常庞大,非常复杂.

于是我们把一个大的协议,拆分成多个小的协议,让每一个小的协议,专注于解决一个/一类问题,再让这些协议相互配合来完成通信.

这一拆,拆出来很多协议,为了更好的把这些协议组织起来,我们就对这些协议进行了分层(把功能定位类似的协议,放到同一层里,并且约定好层和层之间的交互关系)
在这里插入图片描述
我们约定,协议之间不能随意相互交互,只能是相邻的层之间才可以.
上层协议调用下层协议,下层协议给上层提供服务.

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

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

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

协议分层降低了整个体系的耦合性,我们可以灵活的变更某个层次的协议.

这样便于更好的扩展和维护~

OSI七层模型

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

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

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

由于OSI七层模型既复杂又不实用,所以OSI七层模型没有落地,实现.

实际组建网络时,只是以OSI七层模型设计中的部分分层,也是以下TCP/IP五层(或四层)模型来实现.

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

这里的五层都是啥,都是啥作用,一定要记住!!(背下来)

TCP/IP是一组协议的代名词,他还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通信协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.

在这里插入图片描述

  • 应用层:负责应用程序间的沟通,如简单电子邮件传输(SMTP),文件传输协议(FTP),网络远程访问协议(Telnet)等.我们的网络编程主要就是针对应用层.
  • 传输层:负责两台主机之间的数据传输.如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机.
  • 网络层:负责地址管理和路由选择.例如在IP协议中,通过IP地址来标识一台主机,并通过路由表示的方式规划出两台主机之间的数据传输的线路(路由).路由器工作在网络层.
  • 数据链路层:负责设备之间的数据帧的传送和识别.例如网卡设备的驱动,帧同步(就是说从网线上检测到什么信号算作新帧的开始),冲突检测(如果检测到冲突就自动重发),数据差校验等工作.有以太网,令牌环网,无线LAN等标准.交换机(Switch)工作在数据链路层.
  • 物理层:负责光/电信号的传输方式.比如现在以太网通用的网线(双绞线),早期以太网采用的同轴电缆,光纤,现在的wifi无线网络使用电磁波等都属于物理层的概念.物理层的能力决定了最大传输速率,传输距离,抗干扰等.集线器(Hub)工作在物理层.

也可以看图~
在这里插入图片描述

物理层我们考虑的比较少.因此很多时候也可以称为TCP/IP四层模型.
TCP/IP中把表示层和会话层融合到一起了.

网络设备所在分层

  • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即使TCP/IP五层模型的下四层.
  • 对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层.
  • 对于一台交换机,它实现了从数据链路层 到物理层,也即是TCP/IP五层模型的下两层.
  • 对于集线器,它只实现了物理层.

以上的说法都是站在经典的模型上讨论的.如果在笔试中遇到了选择题/填空题,就照着上面写~
真实情况下,交换机,也可能是工作在网络层,甚至是传输层/应用层;路由器,也可能是工作中数据链路层,也可能是传输层,也可能是应用层~

封装和分用

数据在网络通信中的整体流程,涉及到了两个名词,分别叫做封装和分用.

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame).这几个术语,严格来说是有区别的,但是平时日常交流的时候,就不会刻意区分~
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称为封装.
  • 首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息.
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的"上层协议字段"将数据交给对应的上层协议处理.

下图为数据封装的过程
在这里插入图片描述

下图为数据分用的过程

在这里插入图片描述

光说概念可能不太好理解.
举个例子~
我现在要通过QQ,发送一个hello给另一个人.


[站在发送方的视角]

  1. 用户在输入框中输入"hello"字符串,点击发送按钮.
    QQ这样的程序就会把hello这个内容从输入框中读取到,并构造成一个"应用层数据包".应用层的网络协议就描述了这个数据包的构造.这里的应用层协议,往往是开发QQ的程序员自行定义的.
    如果是我来开发QQ,我可能会按照下列的方式来定义这个应用层数据包的结构(定义方式有很多种).由于网络上传输的数据都是"二进制"的字符串,所以我们要能够约定好一个类似于分隔符这样的机制,用来划分不同的内容(下文的使用 ; 来表示).
    数据包格式: 发送者的QQ号;接受者的QQ号;发送时间;消息的正文\n
    数据包样例: 123456789;987654321;2024-08-05 12:00:00;hello\n

    进行网络传输数据,通常需要把一个"结构化"的数据,转成一个二进制字符串.

    • 把 结构化数据 转换成 二进制字符串 这个过程称为序列化.
    • 把 二进制字符串 转换成 结构化数据 这个过程称为反序列化.
  2. QQ 这样的应用程序就会调用操作系统提供的API(传输层给应用层提供的API)
    操作系统会提供一个类似于"发送数据"这样的API,然后应用程序就会把上述组织好的应用层数据包,作为参数传进来,于是应用层数据包就到了系统内核里了,就进入到传输层的代码部分了.
    此时,传输层这里,就会把上述的应用层数据,再进一步的封装成一个传输层数据包.

    计算机网络中的封装其实就是字符串拼接~

    由于传输层有多种协议(其中最主要的是这两个,TCP和UDP)
    此处假设使用的是UDP协议~
    在这里插入图片描述

    UDP报头里就包含了一些UDP相关的信息,比如包含发送者的端口号和接受者的端口号.

  3. 传输层构造好之后,就会继续调用网络层提供给传输层的api,把数据进一步交给网络层了.
    由于传输层和网络层都是系统内核里面实现好的,上述的调用过程,我们无需关心,也感知不到~
    IP协议,就会把上述拿到的传输层数据包构造成网络层数据包.(再次进行字符串拼接,拼接上IP报头)
    在这里插入图片描述

    IP报头里会包含很多信息,这里主要的信息,发送方的IP地址,和接收方的IP地址.

  4. 网络层继续调用数据链路层的api,把数据交给数据链路层处理,数据链路层的常见协议:以太网(平时插网线,进行上网的这种方式)

    在IP数据包的基础上再进一步进行包装
    在这里插入图片描述

  5. 上述得到的数据,需要进一步交给物理层(硬件设备)

    网卡就会针对上述的二进制数据,进行真正的传输操作,就需要把上述 0101 这样的序列,转换为 光信号/电信号/电磁波…


[接收方视角]

此处接收方做的工作,其实就是发送方的工作的"逆序工作".
发送方的封装,可以认为是"打包快递".
接收方的分用,可以认为是"拆快递".

  1. 接收方物理层收到光信号,把这样的光信号还原成 010101 这样的二进制字符串.

  2. 物理层转换回来的数据,交给数据链路层.
    以太网拿到这个数据包,就会对这个数据包进行解析.拿出这里的报头和载荷,根据报头中的信息,做一些处理.
    根据报头信息决定这个数据包是丢弃还是转发,还是自己保留(向上进行解析)
    在这里插入图片描述

  3. 网络层拿到了上述解析好的数据.

    IP协议,也要对这个数据包进行解析,取出IP报头和载荷.这里也是需要根据报头中的信息确认,是丢弃,转发,还是保留(给上层协议)
    在这里插入图片描述

  4. 传输层这边,UDP协议也要针对数据进行解析了.
    取出UDP报头和载荷.根据报头判断是丢弃还是保留(给上层协议).
    在这里插入图片描述
    如果保留,那么就会把载荷这里的内容进一步交给应用层协议(应用程序).
    由于应用程序有很多,那么这里的内容该交给那个程序处理呢?
    UDP报头中会包含"端口号",可以根据端口号来找到对应的进程进行处理.

  5. 到这里,数据就到了QQ这样的应用程序这里了.
    在这里插入图片描述
    QQ就要针对上述数据进行"反序列化",并针对反序列化后的数据进行进一步的逻辑.

    1. 把收到的消息,显示到界面上
    2. 播放"滴滴滴"这样的声音,提醒收到消息
    3. 显示弹窗提示收到消息
    4. 更新未读消息的列表

[数据转发过程]

在这里插入图片描述
中间过程的交换机和路由器,也会涉及到封装和分用.(这里谈到的都是经典的,教科书上的交换机)

交换机封装分用到数据链路层,就可决定数据是要丢弃,还是要继续转发了,不继续分用.

路由器,封装分用到网络层,就可以决定数据是要丢弃,还是要继续转发了,也不再继续分用.

封装分用这么麻烦,那会不会导致交换机,路由器,主机的通信的过程效率很低呢?
如果拿网络通信和人的反应时间去比,那速度还是很快的.
如果拿网络通信和读写硬盘来比,通常确实认为,网络的速度比硬盘的速度更慢,更不必说与内存比了~

本文到这里就结束啦~

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html,css基础知识点笔记(二)

9.18(二) 本文主要教列表的样式设计 1)文本溢出 效果图 文字限制一行显示几个字,多余打点 line-height: 1.8em; white-space: nowrap; width: 40em; overflow: hidden; text-overflow: ellipsis;em表示一个文字的大小单位&…

计算机人工智能前沿进展-大语言模型方向-2024-09-18

计算机人工智能前沿进展-大语言模型方向-2024-09-18 1. The Application of Large Language Models in Primary Healthcare Services and the Challenges W YAN, J HU, H ZENG, M LIU, W LIANG - Chinese General Practice, 2024 人工智能大语言模型在基层医疗卫生服务中的应…

【Delphi】知道控件名称(字符串),访问控件

在 Delphi 中,可以使用 RTTI(运行时类型信息) 或其他方法通过对象的名称字符串来访问对象。比如,如果你有一个控件的名称字符串,你希望通过该名称找到并访问实际的控件。 以下是通过 RTTI 以及其他技术(如…

SAP B1 单据页面自定义 - 用户界面编辑字段

背景 接《SAP B1 基础实操 - 用户定义字段 (UDF)》,在设置完自定义字段后,如下图,通过打开【用户定义字段】可打开表单右侧的自定义字段页。然而再开打一页附加页面操作繁复,若是客户常用的定义字段,也可以把这些用户…

图片类型转化---模拟某wps

文件上传功能的深入探讨 文件上传是Web应用程序中常见的功能,它允许用户将本地文件通过Web界面发送到服务器。在Flask中,这通常是通过处理表单数据来实现的。表单必须设置enctype为multipart/form-data,这样浏览器才能将文件作为多部分消息发…

GitLab CI_CD 从入门到实战笔记

第1章 认识GitLab CI/CD 1.3 GitLab CI/CD的几个基本概念 GitLab CI/CD由以下两部分构成。 (1)运行流水线的环境。它是由GitLab Runner提供的,这是一个由GitLab开发的开源软件包,要搭建GitLab CI/CD就必须安装它,因…

实战分享:我是如何挖到CSDN漏洞的?

文章目录 前言一、过程二、总结《Windows信息安全和网络攻防》——清华大学出版社 前言 CxxN是国内很出名的博客平台,用户量非常大,注册用户据说有1个亿?(官方写的)本次我发现的漏洞详情是可以通过用户的id直接获取用户完整的手机号&#xf…

【深度学习】(2)--PyTorch框架认识

文章目录 PyTorch框架认识1. Tensor张量定义与特性创建方式 2. 下载数据集下载测试展现下载内容 3. 创建DataLoader(数据加载器)4. 选择处理器5. 神经网络模型构建模型 6. 训练数据训练集数据测试集数据 7. 提高模型学习率 总结 PyTorch框架认识 PyTorc…

第二届”青春同行 共享未来“两岸新媒体创享活动在京开启

9月6日,第二届“青春同行 共享未来”两岸新媒体创享活动在北京盛大开启。本次活动旨在促进两岸青年文化交流与合作,共同探索新媒体时代两岸文化与经济的创新与发展新路径。爱迪斯通董事长吴明勳先生作为特邀嘉宾出席活动并发表演讲,在演讲中吴…

RK3568部署DOCKER启动服务器失败解决办法

按照上文的方法部署完DOCKER之后,启动服务异常,查阅网络相关资源,解决方案如下: 修改/源码/kernel/arch/arm64/configs/OK3568-C-linux_defconfig,在最后添加 CONFIG_MEMCGy CONFIG_VETHy CONFIG_BRIDGEy CONFIG_BRID…

算法训练——day16快乐数

202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为…

2024年 现象级的商业模式 上海某店!为何能火爆出圈!

大家好,我是吴军,目前在一家备受瞩目的软件开发公司担任产品管理的重要角色。 当前,市场正经历着商业模式的深刻变革,一种创新的商业模式如潮水般涌现,它巧妙地为消费者编织了省钱的网络,同时也为商家铺设了…

软考架构-面向服务的架构风格

一、SOA 1、概念 面向服务开发,服务之间通过简单、精确定义接口进行通信,不涉及底层编程接口和通信模型。多个服务挂载在ESB(企业服务总线)上进行通信。 2、特征 可从企业外部访问、随时可用(服务请求能被及时响应…

比较推荐哪种可视耳勺?市场高口碑可视耳勺推荐!

很多人仍在使用棉签或者传统金属挖耳勺进行耳部清洁,但往往会清洁不干净或者操作失误引发意外。今天小编要给大家介绍一款新型的挖耳工具---可视耳勺,它能通过内置摄像头进入耳朵查看耳朵内部情况,看清楚耳垢的位置,能清洁干净耳朵…

saltstack高级用法

一、saltstack的高级用法 一、job管理 1、job简介 Jid:job id,格式为%Y%m%d%H%M%S%fmaster在下发指令消息时,会附带上产生的Jid,minion在接收到指令开始执行时,会在本地的cachedir(默认是/var/cache/salt/…

人工智能开发实战matplotlib库应用基础

内容导读 matplotlib简介绘制直方图绘制撒点图 一、matplotlib简介 matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成高质量的图形。 matplotlib 尝试使容易的事情变得更容易,使困难的事情变得可能。 我们只需几行代码…

C语言深入理解指针(二)

目录 指针运算指针-整数指针-指针指针的关系运算 野指针野指针成因指针未初始化指针越界访问指针指向的空间释放 如何规避野指针指针初始化注意指针越界指针不使用时就用NULL避免返回局部变量的地址 assert断言指针的使用和传址调用传址调用例子(strlen函数的实现&a…

SSC338D/SSC338Q CA7*2+IPU5M/Multi-sensorISP: HDR/3DNR

SSC338D/SSC338Q系列产品是高度集成的多媒体片上系统(SoC)产品,适用于IP摄像机、车载摄像机和USB摄像机等高分辨率智能视频录制应用。该芯片包括32位双核RISC处理器、高级图像信号处理器(ISP)、高性能MJPEG/H.264/H.26…

idear导入他人项目如何快速运行

最近idear经常导入别人的项目,结果永远在加载依赖项。网上查了一堆资料,什么jdk问题,环境变量问题,maven仓库路径问题,总之就是没啥用。那有没有什么简单粗暴的办法,能够导入项目后快速运行呢。 解决方法&a…

MATLAB 2024a安装包下载及安装教程、超详细步骤

[安装环境]: Win 11/Win 10 MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等。MATLAB的基本数据单位是矩阵,它的指令表达式与数学…