Unity网络开发基础(part5.网络协议)
目录
前言
网络协议概述
OSI模型
OSI模型的规则
第一部分
物理层
数据链路层
网络层
传输层
第二部分
编辑
应用层
表示层
会话层
每层的职能
TCP/IP协议
TCP/IP协议的规则
TCP/IP协议每层的职能
TCP/IP协议中的重要协议
TCP协议
三次握手
四次挥手
UDP协议
TCP与UDP对比
总结
前言
网络协议是计算机网络中进行数据交换而建立的规则、标准或约定的集合,是网络通信的基础。在Unity网络开发中,理解和使用网络协议至关重要。
网络协议概述
协议的字面意思:
经过谈判、协商而制定的共同承认、共同遵守的文件
网络协议的基本概念:
网络协议是计算机网络中进行数据交换而建立的规则、标准或约定的集合指的是计算机网络中互相通信的对等实体之间交换信息时所必须遵守的规则的集合
如果你想要在网络环境中进行通信,那么网络协议就是你必须遵守的规则。
OSI模型
OSl(Open System Interconnection Reference Model)开放式系统互联通信参考模型,简称OSI模型。它是一种概念模型。
由lS0(International Organization for Standardization)国际标准化组织提出,是一个试图使各种设备在世界范围内互联为网络的标准框架。不同公司都按照统一的标准来控制网络互联通信,那么各设备之间就能够达到真正的互联通信了。
简单来说:OSI模型是人为定义的一个标准(规范),它制定了设备之间相互连接相互通信的标准(规范)。各公司按照这个标准设计的规则(协议),就可以让不同设备利用互联网进行互联通信。
OSI模型的规则
由于互联网协议(规则)很庞大,很复杂,所以OSI模型采用了分而治之的设计方法,把网络的功能划分为不同的多个模块,以分层的形式有机地组合在了一起。
OSI模型将复杂的互联网实现,分成了好几层(部分)每一层都有自己的功能,就好像建筑物一样,从上到下有很多层构成每一层都要靠下一层的支持。用户接触到的都只是最上面的一层,感受不到下面层级的复杂性。
OSI模型把互联通信的过程抽象的分成了七个层级
1.应用层
2.表示层
3.会话层
4.传输层
5.网络层
6.数据链路层
7.物理层
不同层级的职能各有不同
第一部分:从地基开始 物理层->数据链路层->网络层->传输层
第二部分:从屋顶开始 应用层->表示层->会话层
第一部分
物理层
电脑要联网,第一件事要干什么?当然是先把电脑连起来,可以用光缆、电缆、双绞线、无线电波等方式。
功能:
它就是把电脑连接起来的物理手段,它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。物理层将2进制数据利用电脉冲在物理媒介上实现比特流的传输它的主要功能是定义传输模式、定义传输速率,比特同步,比特编码等等。
数据链路层
物理层用物理硬件来传输0和1,但是单纯的0和1没有任何意义必须规定解读方式,比如多少个电信号算一组?每个信号位的意义?这就是数据链路层的意义,它在物理层的上方确定0和1的分组方式,并且明确信息是发送给哪台计算机的网卡(Mac地址)
功能:
将想要发送的信息构成一个数据包,叫做“帧’每一个帧分为两个部分:标头Head+数据Data标头包含数据包的一些说明项比如:发送方和接收方的Mac地址,数据类型等等。
网络层
通过Mac地址定位一台计算机,理论上是可行的,但是效率非常低下我们之前学习过IP地址、端口、Mac地址,我们知道我们是通过IP地址快速的定位网络上的设备的,而网络层的主要功能就和IP地址有关系。
IP选址、路由选择
在网络环境中,两台设备之间可能会经过很多个数据链路,也可能还要经过很多通信子网网络层的主要作用就是选择一条合适的路径用于通信。它会在上一层的数据基础上添加标头。
包含信息:IP地址,长度,版本等等信息。
传输层
有了Mac地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信了,但是如果没有端口号,我们无法准确的在应用程序之间进行通信。传输层的功能,就是建立端口到端口的通信
功能:
建立、管理和维护端到端的连接。传输层也称运输层,传输层负责主机中两个进程之间的通信,功能是为端到端连接提供可靠的传输服务。它也会在上一层的数据基础上添加标头
包含信息:发送方接收方的端口信息、协议信息等等。
第二部分
应用层
应用层为最上层,和用户直接打交道的可以联网的应用程序就属于这一层,比如浏览器,游戏等等。
功能:
为应用程序提供服务,我们可以根据自己要传递的信息决定使用哪一种协议(规则)来处理数据,进行传输 。
它会在原始数据的基础上添加标头包含信息:协议信息等等。
常用的协议(规则):FTP,HTTP,SMTP等等。
表示层
不同操作系统的应用层代码和数据可能规范都不一样,为了让信息可以在各操作系统和设备中通用,表示层做的事情就很重要了。
功能:
数据格式转化、代码转换、数据加密。
为了让不同设备之间能够有统一的规则,表示层会把数据转换为能与各系统格式兼容并且适合传输的格式。表示层就像是个翻译,会把数据相关信息翻译成国际通用的规则。
会话层
有了准备好的上层数据,那么这些数据最终就是希望被传递的内容,那么在信息传递时我们需要对其进行管理,比如消息是否发送完毕,对方是否收到,是否断开连接等等会话层的主要工作就是完成这些内容。
功能:
建立、管理和维护会话。
它主要负责数据传输中设置和维护网络中两台设备之间的通信连接它不参与具体的传输,主要提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。
每层的职能
TCP/IP协议
TCP/lP(Transmission Control Protocol/Internet Protocol)
TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议
是指能够在多个不同网络间实现信息传输的协议簇,它是一个工业标准(就是实际会使用的标准)
TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等等协议构成的协议簇,只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议
它是正儿八经的用于互联网的通信协议(规则)
TCP/IP协议是一系列规则(协议)的统称,他们定义了消息在网络间进行传输的规则
是供已连接互联网的设备进行通信的通信规则
比如:在传输文件时我们使用其中的FTP文件传输协议
在传输电子邮件时我们使用其中的SMTP邮件传输协议
在定位远端计算机位置时我们使用其中的IP互联网协议地址
TCP/IP协议的规则
通过对OSI七层模型的学习,我们知道实现网络传输的功能非常繁杂,所以采用了分而治之的设计方法,把网络的功能划分为不同的多个模块,以分层的形式有机地组合在了一起。
TCP/IP网络结构体系实际上是基于OSI七层模型设计出来的。
OSI七层模型只是一个概念模型,它主要用于描述、讨论和理解单个网络功能。
而TCP/IP协议是为了解决一组特定的问题而设计的,它是基于互联网开发的标准协议(规则)。
OSI模型只是一个基本概念,而TCP/IP协议是基于这个概念的具体实现。
TCP/IP协议把互联通信的过程抽象的分成了四个层级
1.应用层
2.传输层
3.网络层
4.网络接口层(数据链路层)
这四层是基于OSI七层模型进行设计的
OSI是国际组织制定的适用于全世界计算机网络的统一标准
是一套基本规则和概念
TCP/IP是基于OSI根据目前的实际情况制定的一套规则
它主要用于对当前互联网结构体系提供一组规则
所有形式的网络传输都遵循这套规则
它是OSI概念的具体实
现在进行网络开发时,我们就是基于TCP/IP协议来进行网络通信的
TCP/IP协议每层的职能
TCP/IP协议是层层封装的从应用层到网络接口层每经过一层都会添加一些额外信息
应用层头:
协议头(FTP、HTTP等协议)
一般决定传输信息的类型
传输层头:
协议端口头(TCP或UDP协议)
一般决定传输信息的规则以及端口
网路层头:
IP头,决定传输路线
网络接口层头尾:
产生帧(消息分段),决定最终路线
TCP/IP协议中的重要协议
TCP/IP协议是基于OSI模型的具体实现
是互联网中设备间通信的基本规则
想要进行网络通信,我们就遵循TCP/IP协议的规则进行消息传递就行了
网络通信API都是基于TCP/IP协议的封装
各种语言(C#、C++、Java、Go等等)都有对应的网络通信类对TCP/IP协议进行了封装
我们只需要使用对应的类和方法进行网络连接、网络通信就可以完成对应的功能
应用层协议:
HTTP协议:超文本传输协议
HTTPS协议:加密的超文本传输协议
FTP协议:文件传输协议
DNS:域名系统
传输层协议:
TCP协议:传输控制协议
UDP协议:用户数据报协议
网络层协议:
IP协议
TCP | UDP | |
连接方面 | 面向连接(比如:打电话要先拨号建立连接) | 无连接发送数据前不需要建立连接 |
安全方面 | 无差错、不丢失 不重复、按序到达 | 只会尽力交付不保证可靠性 |
传输效率 | 相对较低 | 相对较高 |
连接对象 | 一对一 | 一对一,一对多、 多对一、多对多 |
TCP协议
TCP(Transmission Control Protocol,传输控制协议)
是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接
并且在消息传送过程中是有顺序的,并且是不会丢包(丢弃消息)的
如果某一条消息在传送过程中失败了,会重新发送消息,直到成功
它的特点是:
1.面向连接 两者之间必须建立可靠的连接
2.一对一 只能是1对1的建立连接
3.可靠性高 消息传送失败会重新发送,不允许丢包
4.有序的 是按照顺序进行消息发送的
三次握手
第一次握手(C->S)
TCP连接请求,告诉服务器我要和你建立连接
第二次握手(S->C)
TCP授予连接,告诉客户端准了,来吧
第三次握手(C->S)
TCP确认连接,告诉服务器,来就来
四次挥手
断开连接
第一次挥手(C->S)
告诉服务器我数据发完了,你如果还有消息就快发完
第二次挥手(S->C)
告诉客户端我知道了,请继续等待我的消息
第三次挥手(S->C)
告诉客户端消息发完了,你可以正式断开连接了
第四次挥手(C->S)
告诉服务器我等一会如果没有收到你回复我就断开了
UDP协议
UDP(User Datagram Protocol,用户数据报协议)
是一种无需建立连接就可以发送封装的IP数据包的方法
提供面向事务的简单不可靠信息传送服务
它的特点是:
1.无连接 -- 两者之间无需建立连接
2.可靠性低 -- 消息可能在传送过程中丢失,丢失后不会重发
3.传输效率高-- 由于它的可靠性低并且也无需建立连接,所以传输效率上更高一些
4.n对n -- TCP只能1对1连接进行消息传递,而UDP由于无连接所以可以n对n
UDP协议不像TCP协议需要建立连接有三次握手和四次挥手
当使用UDP协议发送信息时会直接把信息数据扔到网络上,所以也就造成了UDP的不可靠性
信息在这个传递过程中是有可能丢失的
虽然UDP是一个不靠谱的协议,但是由于它不需要建立连接
也不会像TCP协议那样携带更多的信息,所以它具有更好的传输效率
它具有资源消耗小,处理速度快的特点
TCP与UDP对比
TCP
更可靠,保证数据的正确性和有序性(三次握手四次挥手)
适合对信息准确性要求高,效率要求较低的使用场景
比如:游戏开发,文件传输,远程登录等等
UDP:
更效率,传输更快,资源消耗更少
适合对实时性要求高的使用场景
比如:直播,即时通讯,游戏开发等等
总结
在进行Unity网络开发时,需要根据具体的应用场景选择合适的网络协议。例如,对于需要可靠传输的应用场景,可以选择TCP协议;对于对实时性要求较高、可以容忍一定丢包率的应用场景,可以选择UDP协议。
相关文章:

Unity网络开发基础(part5.网络协议)
目录 前言 网络协议概述 OSI模型 OSI模型的规则 第一部分 物理层 数据链路层 网络层 传输层 第二部分 编辑 应用层 表示层 会话层 每层的职能 TCP/IP协议 TCP/IP协议的规则 TCP/IP协议每层的职能 TCP/IP协议中的重要协议 TCP协议 三次握手 四次挥手 U…...

forEach可以遍历不可枚举属性吗
首先第一个问题,forEach能不能遍历对象的属性 const obj { a: 1, b: 2, c: 3 }; obj.forEach((item) > console.log(item))运行这段代码我们发现发生了一个错误 这说明forEach是不可以遍历对象的属性的 在js中,forEach 方法用于遍历数组或类数组对象(如 NodeL…...

Docsify文档编辑器:Windows系统下个人博客的快速搭建与发布公网可访问
文章目录 前言1. 本地部署Docsify2. 使用Docsify搭建个人博客3. 安装Cpolar内网穿透工具4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows环境本地部署 Docsify 这款以 markdown 为中心的文档编辑器,并即时生成您的文档博客网站,结合…...

索引基础篇
前言 通过本篇博客的学习,我希望大家可以了解到 “索引” 是为了提高数据的查询效率。 索引的介绍 索引是为了提高查询数据效率的数据结构 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着…...

多进程与多线程分不清?
多进程对应的是fork函数,而多线程对应的是thread函数。 fork 与 thread 的区别: fork开辟新进程,使用了新的资源空间,父子进程对变量的修改互不影响。由于每个进程都是独立的个体,进程间无法直接进行通信。 thread开辟…...

【零基础学习CAPL】——XML工程创建与使用详解
🙋♂️【零基础学习CAPL】系列💁♂️点击跳转 ——————————————————————————————————–—— 从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者,时光不负有心人。 文章目录 1.概述2.XML和CAPL/.NET之间的区别…...

市场营销应该怎么学?
别一听市场营销就觉得是那些大公司玩的高深莫测的游戏,其实它就在你我身边,无处不在,影响着咱们生活的方方面面。 记得去年双十一,你是不是被各种优惠券、预售、秒杀整得头晕眼花,最后还是忍不住剁了手? …...

作为一个前端开发者 以什么步骤学习后端技术
作为一个前端开发者,学习后端技术可以按照以下步骤进行: 明确学习目标 确定方向:明确自己想学习的后端技术栈(如Node.js、Python、Java等)。 设定目标:短期目标(如完成一个简单的后端项目&…...

大数据新视界 -- 大数据大厂之经典案例解析:广告公司 Impala 优化的成功之道(下)(10/30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

yolov8涨点系列之Concat模块改进
文章目录 Concat模块修改步骤(1) BiFPN_Concat3模块编辑(2)在__init_.pyconv.py中声明(3)在task.py中声明yolov8引入BiFPN_Concat3模块yolov8.yamlyolov8.yaml引入C2f_up模块 在YOLOv8中, concat模块主要用于将多个特征图连接在一起。其具体…...

JavaAPI(1)
Java的API(1) 一、Math的API 是一个帮助我们进行数学计算的工具类私有化构造方法,所有的方法都是静态的(可以直接通过类名.调用) 平方根:Math.sqrt()立方根:Math.cbrt() 示例: p…...

【大模型】通过Crew AI 公司的崛起之路学习 AI Agents 的用法
AI 技术的迅猛发展正以前所未有的速度重塑商业格局,而 AI Agents,作为新一代的智能自动化工具,正逐步成为创新型公司的核心力量。在本文中,我们将探讨如何利用 AI Agents 构建一家 AI 驱动的公司,并详细了解 Crew AI 创…...

Python接口自动化测试实战
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 接口自动化测试是指通过编写程序来模拟用户的行为,对接口进行自动化测试。Python是一种流行的编程语言,它在接口自动化测试中得到了广泛…...

前端Web用户 token 持久化
用户 token 持久化 业务背景:Token的有效期会持续一段时间,在这段时间内没有必要重复请求token,但是pinia本身是基于内存的管理方式,刷新浏览器Token会丢失,为了避免丢失需要配置持久化进行缓存 基础思路:…...

【测试工具篇一】全网最强保姆级教程抓包工具Fiddler(2)
本文接上篇Fiddler介绍,开始讲fiddler如何使用之前,给大家讲讲http以及web方面的小知识,方便大家后面更好得理解fiddler使用。 目录 一、软件体系结构---B/S与C/S架构 B/S架构 C/S架构 二、HTTP基础知识 什么是http请求和响应? http协…...

ONLYOFFICE 文档8.2更新评测:PDF 协作编辑、性能优化及更多新功能体验
文章目录 🍀引言🍀ONLYOFFICE 产品简介🍀功能与特点🍀体验与测评ONLYOFFICE 8.2🍀邀请用户使用🍀 ONLYOFFICE 项目介绍🍀总结 🍀引言 在日常办公软件的选择中,WPS 和微软…...

【WebRTC】视频采集模块中各个类的简单分析
目录 1.视频采集模块中的类1.1 视频采集基础模块(VideoCaptureModule)1.2 视频采集工厂类(VideoCaptureFactory)1.3 设备信息的实现(DeviceInfoImpl)1.4 视频采集的实现(VideoCaptureImpl&#…...

【大模型系列】Grounded-VideoLLM(2024.10)
Paper:https://arxiv.org/pdf/2410.03290Github:https://github.com/WHB139426/Grounded-Video-LLMHuggingface:https://huggingface.co/WHB139426/Grounded-Video-LLMAuthor:Haibo Wang et al. 加州大学,复旦 动机&a…...

EV录屏好用吗?盘点2024年10款专业好用的录屏软件。
EV录屏的方式有很多种,它设置了很多模式,并且录制高清,可以免费使用。但是现在很多的录屏工具都有着与这个软件相似的功能,在这里我可以给大家列举一些。 1、福昕电脑录屏 这个软件为用户提供了多种录制模式,让视频录…...

Pandas | 理性判断数据是否存在缺失值的一种方法
理性判断 一般思路进一步思考df[B].explode() 一般思路 tcc.info()上述信息info显示没有缺失值 但是真实的情况还是要根据业务实际分析tcc.isnull().sum() # 和tcc.info()作用和tcc.info() 其实是一样的 进一步思考 在此过程中,我们需要检验是否存在采用别的值来表…...

ENSP (虚拟路由冗余协议)VRRP配置
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种用于提高网络可用性和可靠性的协议。它通过在多个路由器之间共享一个虚拟IP地址,确保即使一台路由器发生故障,网络依然能够正常运行,防止…...

move_base
move_base 官方介绍:http://wiki.ros.org/move_base 如果在仿真环境下, sensor source、odometry source 和 sensor transforms 都已提供好,我们只需要完成以下部分: 一、编写导航程序 ①创建 ROS 工作空间 和 pkg 包 mkdir -p …...

Android Intent 跳转常见系统设置
常量值描述android.settings.DATA_ROAMING_SETTINGS显示 2G/3G 选择的设置android.settings.SETTINGS显示系统设置android.settings.WIFI_SETTINGS显示设置以允许配置 Wi-Fiandroid.intent.action.POWER_USAGE_SUMMARY显示电池 … 更多GO 官网...

[复健计划][紫书]Chapter 7 暴力求解法
7.1 简单枚举 例7-1 Division uva725 输入正整数n,按从小到大的顺序输出所有形如abcde/fghij n的表达式,其中a~j恰好为数字0~9的一个排列(可以有前导0),2≤n≤79。枚举fghij,验证a…...

基于SpringBoot的社区讯息服务小程序【附源码】
基于SpringBoot的社区讯息服务小程序 效果如下: 系统登陆页面 管理员主页面 用户管理页面 社区活动管理页面 设施报修管理页面 缴费信息管理页面 用户主页面 用户登录页面 社区活动页面 研究背景 随着移动互联网技术的飞速发展,社区生活日益依赖于数字…...

springboot图书管理系统(一个简单的单体架构项目,适合小白)
期末作业 为了水一水期末作业,打算写一个简易的单体架构图书管理系统。以下为后端主要技术栈(后期可能更新,打算一个星期左右写完吧)。 springbootredismysqlspringcachespringsecurity … 数据库设计 第一次从0开始搭建后续可能还会多更新一些表。 -- 角…...

《CLR via C#》读书笔记--CLR的执行模型
将源代码编译成托管模块将托管模块合并成程序集加载公共语言运行时执行程序集的代码本机代码生成器:NGen.exeFramework 类库入门通用类型系统公共语言规范(CLS)与非托管代码的互操作性 将源代码编译程托管模块 公共语言运行时(Co…...

Javascript常见数据结构及其应用场景
Basic 以下是对JavaScript中常见数据结构及其应用场景的详细扩展: 数组(Array) 定义与特性:数组是由一组按顺序排列的值组成,每个值都有一个对应的索引(下标),可以通过索引访问和修…...

简单的签到程序 python笔记
简单的人脸识别签到程序 在看完以下代码后,略微修改一番,你就能够组装出自己的“简单的人脸识别签到程序”了。 请注意库的安装,否则会不可用。 你可以通过在cmd中使用:pip install来安装。 以下代码运行python 3.8 UI界面 使…...

30天如何成功转行成为AI产品经理?如果你也想转行到AI,赶紧进来抄作业!!!
前言 随着AI技术的快速发展,AI产品经理成为了备受瞩目的职业。如果您也想抓住这个机遇,不妨跟随这份30天快速入门指南,开始您的AI产品经理转型之旅。 一、学习路线 第一阶段(5天):初阶应用 该阶段让大家…...