【JavaEE】网络(1)


🐵本篇文章开始讲解计算机网络相关的知识

一、基础概念

1.1 局域网和广域网

局域网→Local Area Network→简称LAN,局域网是局部组建的一种私有网络,局域网内的主机之间可以进行网络通信,局域网和局域网之间在没有连接的情况不能进行通信

广域网→Wide Area Network→简称WAN,广域网通过路由器将多个局域网连接组成很大范围的网络

1.2 IP地址

网络通信的本质就是主机之间基于网络进行数据传输,那该如何判断数据从哪台主机传给哪台主机?这就需要IP地址来表识

简单来说,IP地址用于定位主机的网络地址

【格式】

IP地址是一个32位的二进制数(4个字节)如:01100100.00000100.00000101.00000110,这种方式不太容易看,所以通常使用"点分十进制",比如:192.168.100.176,每个部分都是一个0-255的十进制数

1.3 端口号

端口号用来标识一个主机上的不同的应用程序(定位主机中的进程)每个程序在启动时都需要绑定一个和其他程序不重复的端口号

通过IP地址可定位唯一的一个主机,通过端口号可以定位主机里唯一的一个(应用程序)进程,也就是说通过IP地址和端口号可以确定网络中唯一一个进程

【格式】

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


端口号是一个由2个字节表示的无符号整数:0~65535,其中 <1024 的端口号称为 "知名端口号" 把这些端口号分配一些比较知名的服务器程序作为这些服务器的 "默认端口号"

注意,前面说每个进程都需要绑定和其他进程不冲突的端口号,但一个进程同一时刻可以绑定多个端口号

二、协议

2.1 概念

协议即网络协议,简单来说,协议就是计算机与计算机之间通过网络实现通信时事先达成的一种"约定",这种约定使那些那些由不同厂商的设备、不同CPU、不同操作系统所组成的计算机,只要遵循相同的协议就能够实现通信

如果不遵循相同的协议,则不能实现通信,就好比两个使用不同语言的人无法进行交流

2.2 协议分层

网络通信是一个很复杂的事情,如果用一个协议约定网络通信的所有细节,这个协议会非常复杂,所以要进行拆分,把一个复杂的协议拆分成多个功能更单一的协议,面对这么多协议,就要进行分类→分层

协议分层和公司中的分组结构很像:

协议分层,把很多协议按照功能分成不同的层级,每个层级都有对应的任务,上层协议会调用下层协议的功能,下层协议会给上层协议提供服务(各种api、接口),不能够"越级调用"

【协议分层的好处】

1)起到封装的效果,某一层的协议不必知道其他层协议的细节,比如下图:

两个人用电话通信,他们只需要会说汉语就行,而不用理解电话的工作原理

2)相同层次的协议可以灵活替换→解耦合

上图可以看到,改变其他层协议并不影响本层协议的使用

2.3 分层模型(OSI和TCP/IP)

1)OSI七层模型:

许多通信协议或多或少都参考了这个模型,但是OSI七层模型没有落地实现,实际组键网络时,知识以OSI模型中的部分分层,也就是TCP/IP五层(或四层)模型来实现的

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

下图是TCP/IP 与 OSI 模型之间的关系:

可以看到,TCP/IP模型将OSI模型的应用层、表示层、会话层合并成了应用层

每一层代表什么意思:

  • 物理层:TCP/IP 的物理层时负责数据传输的硬件,这种硬件相当于以太网或电话线路等物理层的设备
  • 数据链路层:通信传输是通过物理层的传输介质实现的,数据链路层就是在通过传输介质互连的设备之间进行数据处理,关注相邻两个点之间的通信
  • 网络层:关注的是通信中,通信路径的规划,规划出的路径就决定了数据要经过哪些节点
  • 传输层:关注的是通信双方的起点和终点
  • 应用层:和具体的应用程序相关,传输的数据干啥用,如何使用,有何意义

2.4 网络设备所在分层

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

2.5 例子

协议的层和层之间是如何配合工作的,以qq发送信息为例:A 通过QQ发送hello给 B

1)假设QQ的应用层协议约定了数据应该按照这种格式来组织:四条信息组织成字符串以逗号分隔,使用\n表示结束标志→【发送人的qq号,接收人的qq号,发送时间,消息正文\n】

QQ应用程序会根据应用层协议约定的数据格式将A发送的数据组织成应用层数据包

应用层接下来要把数据交给传输层,传输层(操作系统内核)提供了api让应用程序去调用,调用api,应用层数据包就交给了传输层

2)传输层会对这个数据包进一步封装,构造成传输层数据包,在传输层有两个典型的协议:TCP、UDP,此处假设用UDP作为传输层协议,根据UDP协议构造UDP数据包

报头里放的是一些UDP属性,如发送方和接收方的端口号

传输层要把数据包交给网络层,调用网络层提供的api(这个调用过程都是系统内核负责的)

3)网络层典型的协议是IP协议,假设根据IP协议构造出IP数据包

IP报头包含一些发送方和接收方的IP地址

网络层要把数据包交给数据链路层,调用数据链路层提供的api

4)数据链路层的典型协议是以太网,以太网会将数据包进一步封装,构造出以太网数据帧

5)上述以太网数据帧本质上是二进制数据,物理层的硬件设备要把上述二进制数据转成光电信号,然后通过传输介质进行传输


数据不是直接到达B而是先到和A连接的路由器/交换机,经过一系列转发之后,最终会到达B,到了B要做的就是上述过程的逆过程

1)物理层收到一系列光电信号,把这些信号转成二进制数据交给数据链路层

2)按照以太网协议解析报头中的关键信息,取出载荷,把载荷交给网络层

3)IP协议拿到IP数据包,按照协议解析报头中的关键信息,取出载荷,把载荷交给传输层

4)UDP协议拿到UDP数据包,按照协议解析报头中的关键信息(要交给哪个端口号对应的进程),取出载荷,把载荷交给应用层

5)QQ程序拿到数据包,按照自己的协议解析并拿到结构化数据

到此,A向B发信息的过程就结束了~


上述过程提到的典型协议,后续都会详细讲解,这里只要有个印象就行

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络应用技术 实验八:防火墙实现访问控制(华为ensp)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验步骤 1、设计全网 IP 地址 2、设计防火墙安全策略 3、在 eNSP 中部署园区网 4、配置用户主机地址 5、配置网络设备 配置交换机SW-1~SW-5 配置路由交换机RS-1~RS-5 配置路由器R-1~R-3 6、配置仿…

day11 性能测试(4)——Jmeter使用(黑马的完结,课程不全)直连数据库+逻辑控制器+定时器

【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 1、复习 1.1 断言&#xff08;3种&#xff09; 1.2 关联&#xff08;3种&#xff09; 1.3 录制脚本 2、Jmeter直连数据库 2.1 直连数据库——使用场景 2.2 直连数据库——操作步骤 2.2.1 案例1&…

Modelscope AgentFabric: 开放可定制的AI智能体构建框架

目录 git clone https://github.com/modelscope/modelscope-agent.git cd modelscope-agent && pip install -r requirements.txt && pip install -r apps/agentfabric/requirements.txtexport PYTHONPATH$PYTHONPATH:/home/ubuntu/users/lilingfei/modelscop…

CSS|08 浮动清除浮动

浮动 需求: 能够实现让多个元素排在同一行&#xff0c;并且给这些元素设置宽度与高度! 让多个元素排在同一行:行内元素的特性 给这些元素设置宽高:块级元素的特性 在标准文档流中的元素只有两种:块级元素和行内元素。如果想让一些元素既要有块级元素的特点也要有行内元素的特…

[Pro Git#3] 远程仓库 | ssh key | .gitignore配置

目录 1. 分布式版本控制系统的概念 2. 实际使用中的“中央服务器” 3. 远程仓库的理解 4. 新建远程仓库 5. 克隆远程仓库 6. 设置SSH Key 实验 一、多用户协作与公钥管理 二、克隆后的本地与远程分支对应 三、向远程仓库推送 四、拉取远程仓库更新 五、配置Git忽略…

【uni-app】App与webview双向实时通信

【uni-app】App与webview双向实时通信 在 Uniapp 中&#xff0c;App 与 里面嵌入的 webview 进行双向的实时通信 vue2 &#xff0c; 模拟器 主要分为两部分 webview 向 app 发送信息 app 向 webview 发送信息 以下是实现方式&#xff0c;用一个例子来说明 &#xff08;文…

微信小程序处理交易投诉管理,支持多小程序

大家好&#xff0c;我是小悟 1、问题背景 玩过微信小程序生态的&#xff0c;或许就有这种感受&#xff0c;如果收到投诉单&#xff0c;不会及时通知到手机端&#xff0c;而是每天早上10:00向小程序的管理员及运营者推送通知。通知内容为截至前一天24时该小程序账号内待处理的交…

AIGC-------AI生成内容如何赋能AR和VR体验?

AI生成内容如何赋能AR和VR体验 引言 增强现实&#xff08;AR&#xff09;和虚拟现实&#xff08;VR&#xff09;技术近年来蓬勃发展&#xff0c;为用户提供了沉浸式的体验。这些技术已经广泛应用于游戏、教育、医疗、建筑等领域。然而&#xff0c;AR和VR体验的质量与内容的丰富…

zotero安装教程(包括茉莉花插件)

zotero安装教程&#xff08;包括茉莉花插件&#xff09; zotero下载(windows)1-安装 Zotero2-安装 Zotero Connector3-安装浏览器插件--jasminum茉莉花功能&#xff1a;插件下载地址&#xff1a;[https://github.com/search?qjasminum&typerepositories](https://github.c…

M|可可西里

title: 可可西里 time: 2024-12-15 周日 rating: 8.5 豆瓣: 8.9 上映时间: “2004” 类型: M剧情犯罪 导演: 陆川 Chuan Lu 主演: 多布杰 Duobujie张垒 Lei Zhang 国家/地区: 中国大陆 片长/分钟: 90分钟 M&#xff5c;可可西里 粗砺的苍凉&#xff0c;沉默的悲壮。…

ArcGIS教程(007):制作中国行政区划图

文章目录 000:数据准备001:利用地理数据制作中国行政区划图000:数据准备 通过网盘分享的文件:ArcGIS教程(007):中国行政区划图教程练习数据.zip 链接: https://pan.baidu.com/s/1nMiRYD-dbv2S0DoeQzR87g?pwd=3535 提取码: 3535001:利用地理数据制作中国行政区划图 ne_…

KeepAlive与RouterView缓存

参考 vue动态组件&#xff1c;Component&#xff1e;与&#xff1c;KeepAlive&#xff1e; KeepAlive官网介绍 缓存之keep-alive的理解和应用 Vue3Vite KeepAlive页面缓存问题 vue多级菜单(路由)导致缓存(keep-alive)失效 vue3 router-view keeperalive对于同一路径但路径…

类与对象以及ES6的继承

认识class定义类 类的声明用的比较多 类与构造函数的异同 类的构造函数 类的实例方法 类的访问器方法 在类里面写拦截方法 类的静态方法 通过类名直接访问 es6类的继承-extends super关键字 子类可以重写父类方法包括父类的静态方法也可以继承父类的静态方法 babel可以将新的代…

AI监控赋能健身馆与游泳馆全方位守护,提升安全效率

一、AI视频监控技术的崛起 随着人工智能技术的不断发展&#xff0c;AI视频监控正成为各行业保障安全、提升效率的关键工具。相比传统监控系统&#xff0c;AI技术赋予监控系统实时分析、智能识别和精准预警的能力&#xff0c;让“被动监视”转变为“主动防控”。 二、AI监控应用…

嵌入式学习(18)-stm32F407串口接收空闲中断+DMA

一、概述 在一些一次性接收大批量数据的引用场合&#xff0c;如果使用接收中断会频繁的进入接收中断影响代码的运行效率。为了解决这个问题可以使用串口的空闲中断DMA实现。 二、应用 在网上招了一些例程在STM32F407的平台上都没有跑通会出现各种异常&#xff0c;主要原因还…

2024.12.15CISCN长城杯铁人三项赛

WEB Safe_Proxy 刚开始比赛看到题目名字里面有Proxy 就先来做这个了(在最近的比赛中见到的proxy题比较多) 题目进入之后给了源码 源码 from flask import Flask, request, render_template_string import socket import threading import htmlapp Flask(__name__)app.rout…

【Linux服务器nginx前端部署详解】ubantu22.04,前端Vue项目dist打包

本文主要讲一下在Linux系统环境下&#xff08;以ubantu22.04为例&#xff09;&#xff0c;如何用nginx部署前端Vue项目打包的dist静态资源。有些具体的命令就不展开讲了&#xff0c;可以自行查看其他博主的文章&#xff0c;我主要讲整体的步骤和思路。 一、ubantu系统安装ngin…

SAP软件如何启用反记账功能

SAP软件和国内ERP软件不一样&#xff0c;它在录入会计凭证时是不可以录入负数的&#xff08;即红冲凭证&#xff09;&#xff0c;因此无法直接实现传统意义上的红字冲销。 比如&#xff0c;如下SAP正常和冲销业务产生会计凭证如下&#xff1a; 正常的业务凭证&#xff1a; 借…

iOS swift开发系列 -- tabbar问题总结

1.单视图如何改为tabbar&#xff0c;以便显示2个标签页 右上角➕&#xff0c;输入tabbar 找到控件&#xff0c;然后选中&#xff0c;把entrypoint移动到tabbar控件 2.改成tabbar&#xff0c;生成两个item&#xff0c;配置各自视图后&#xff0c;启动发现报错 Thread 1: “-[p…

Level DB --- coding

Util coding是Level DB中重要的数据结构&#xff0c;它主要用来将uint32&#xff0c;和uint64高效的序列化到字符串中和从字符串中反序列化出来。 coding两种序列化形式 Util coding中主要提供两种序列化形式&#xff0c;即Fixed形式和Var形式。其中Fixed形式是常规形式&…