常用网络协议的学习

TCP/IP

TCP/IP的定义

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议)是互联网的基本协议,也是国际互联网络的基础。

TCP/IP 不是指一个协议,也不是 TCP 和 IP 这两个协议的合称,而是一个协议族,包括多个网络协议,比如 IP、ICMP(互联网控制报文协议)、TCP、HTTP(超文本传输协议)、FTP(文件传输协议)等。

TCP/IP的分层结构

TCP/IP 协议族按照层次由上到下分成 4 层,分别是应用层传输层网络层(或称网际层)网络接口层(或称数据链路层)

TCP/IP在数据包设计上采用数据封装数据解封的策略,所谓封装就是在应用程序在发送数据的过程中,每一层都增加一些首部信息,这些信息用于和接收端同层次进行沟通。

在主机发送端,从传输层开始会把上一层的数据加上一个报头形成本层的数据,这个过程称为数据封装。在主机接收端,从最下层开始,每一层数据会去掉报头信息,该过程称为数据解封。其过程如下图所示。

TCP/IP协议通过分层的方式进行工作,每个层级负责特定的功能,上层利用下层提供的服务实现数据的传输和交互。

应用层包含了各种应用程序和协议,用于实现具体的网络服务

传输层主要负责端到端的数据传输和可靠性保证。

网络层主要负责数据包的传输和路由选择。它通过路由选择算法来选择最佳路径将数据包从源主机发送到目标主机。

数据链路层下面就是实体线路(比如以太网络、光纤网络等)。数据链路层有以太网、令牌环网等标准,负责网卡设备的驱动、帧同步(就是从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机可以在不同的数据链路层的网络之间(比如十兆以太网和百兆以太网之间、以太网和令牌环网之间)转发数据帧,由于不同数据链路层的帧格式不同,交换机要将进来的数据报拆掉报头重新封装之后再转发。

TCP协议

TCP协议的定义

TCP协议,全称为Transmission Control Protocol,即传输控制协议,是一种面向连接的、可靠的基于字节流传输层通信协议。

TCP协议的使用

应用程序在使用TCP之前,必须先建立TCP连接;在使用完TCP协议后,要断开连接。

TCP协议通过三次握手来建立数据通讯的连接,通过四次挥手来断开数据通讯的连接。

TCP的三次握手

第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端;
第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了;
第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。

举个例子:

一个男人向一个女人表白,说:我喜欢你,做我女朋友吧!

女人回复说:好啊!我愿意。

男人听到后,说:太好了,我们现在去约会。

TCP的四次挥手

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN 只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据

第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据发送,客户端进入FIN_WAIT_1状态;
第2次挥手:服务端收到FIN后,发送一个ACK给客户端,服务端进入CLOSE_WAIT状态;
第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据发送,服务端进入LAST_ACK状态;
第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给服务端服务端进入CLOSED状态,完成四次挥手。

举个例子:

男人对女人说:你性格太差了,我们分手吧!

女人回复:好,等我收拾完东西,我们就分手!

收拾好东西后,女人说:我收拾好了,我们分手吧!

男人说:好,慢走不送。

UDP协议

UDP是一种无连接的、不可靠的传输层协议,它不保证数据传输的可靠性,但是具有传输速度快开销小等特点。UDP协议主要用于需要快速传输数据且对数据的可靠性要求不高的场景,如在线游戏,分布式系统信息的传输(短距离的传输 UDP 的传输的效率是很高的)。


UDP的特点

无连接性:UDP不需要在发送数据之前建立连接,因此发送端和接收端之间没有建立和维护连接的开销。每个UDP数据报都是独立的,不会与其他数据报之间有任何关系。

不可靠:UDP协议不保证数据传输的可靠性,因为它不提供重传机制、异常处理等功能,如果数据在传输过程中出现丢失或错误,UDP协议也不会进行任何处理。

支持广播和多播:UDP协议支持广播和多播,可以将数据同时发送给多个主机。

MQTT协议

MQTT协议是一种基于发布/订阅模式轻量级通讯协议,适合硬件性能较低或网络状况不佳的远程设备。它的优点在于能够以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。该协议构建于TCP/IP协议上。

如下图所示,MQTT协议采用客户端-服务器架构,客户端可以发布消息到特定的主题,而服务器负责将消息路由到订阅了这些主题的客户端。

HTTP协议

HTTP协议:全称为Hyper Text Transfer Protocol(超文本传输协议)。HTTP协议是用于从(WWW:World Wide Web,简称万维网)服务器传输超文本到本地浏览器应用层传输协议。

HTTP协议是基于TCP/IP协议来传递数据的。

HTTP 协议是一个无状态的应用层协议,即不会保存客户端与服务器之间的历史记录,每个请求都是独立的。其主要特点如下:

基于请求响应模式:HTTP 协议采用客户端-服务器架构模式,客户端向服务器发送请求,服务器返回相应的响应。

支持多媒体传输:HTTP 协议可以传输多种类型的数据,如 HTML、XML、JSON、图片、音频、视频等。这使得 HTTP 协议成为一种通用的网络传输协议,适用于各种不同类型的应用场景。

无连接:HTTP 协议是一个无连接协议,每个请求都是独立的,服务器处理请求后立即关闭连接。这样可以节省资源,但也带来了一些缺点,如需要重新建立连接、重复发送相同的头部信息等。

COAP 协议

CoAP(Constrained Application Protocol,受限应用协议)是一种专为物联网(IoT)设备和资源受限网络设计应用层协议。它旨在让小型设备能够接入互联网,因为对于这些设备来说,实现TCP和HTTP协议是一个过高的要求。

CoAP协议是一个应用层协议,基于传输层UDP而开发,而MQTT/HTTP协议则是基于TCP开发的。它采用了与HTTP类似的特征,同时又弥补了UDP传输的不可靠性。但是,CoAP的可靠性主要针对的是单播通信,对于组通信的可靠性保障尚不够完善。对于物联网小型设备而言,CoAP协议是一个极佳的选择,CoAP这种轻量级协议可以很好地适配资源受限的设备和场景。

CoAP的特点

轻量级:CoAP协议的设计非常简单,使用的头部和选项字段较少,占用的网络带宽和资源较少。这使得它非常适合在资源受限的设备和网络中使用。

基于UDP:CoAP通常在UDP上运行,而不是TCP。这使得它更适用于无连接、低延迟和高效率的通信。此外,CoAP还支持对消息的可靠性传输。

低能耗和低带宽消耗:CoAP协议针对资源受限设备和网络进行了优化,具有低能耗和低带宽消耗的特性。

支持IP多播:允许一对多的通信,这对于物联网中的多个设备同时接收更新非常有用。

EDP协议

EDP(Enhanced Device Protocol)是一种专为物联网领域设计的协议,由OneNET平台根据物联网的特点定制。它是一种基于TCP/IP协议栈的完全公开的协议,可以广泛应用于家居、交通、物流、能源以及其他行业应用中。

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

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

相关文章

k8s资源管理之声明式管理方式

1 声明式管理方式 1.1 声明式管理方式支持的格式 JSON 格式:主要用于 api 接口之间消息的传递 YAML 格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读 1.2 YAML 语法格式: ●…

.net 日志

一、Log4net 1、log4net写入文本 1、nuget引入log4net、Microsoft.Extensions.Logging.Log4Net.AspNetCore这2个 2、引入配置文件,可以直接去官网(log4net官网配置文件)复制下来,放到项目目录下面,设置成始终复制,因为这个文件最终要到我们项目运行目录下面去 3、要在pr…

Vue3+springboot实现简单登录demo

Vue3从0搭建脚手架步骤【默认已安装node.js】 前置条件:默认已安装node.js、yarn 第一步:创建项目 选择任意一个空白文件夹如下: cmd进入该文件夹下的命令窗口模式,然后输入指令创建vue项目:vue create my-project …

智能指针(C++)

目录 一、智能指针是什么 二、为什么需要智能指针 三、智能指针的使用和原理 3.1、RALL 3.2 智能指针的原理 3.3、智能指针的分类 3.3.1、auto_ptr 3.3.2、unique_ptr 3.3.3、shared_ptr 3.2.4、weak_ptr 一、智能指针是什么 在c中,动态内存的管理式通过一…

PYCHARM PYSIDE6 QT 打包异常处理 no qt platform plugin could be initialized

安装有PYSIDE6的电脑 异常错误 … no qt platform plugin could be initialized … 变量名:QT_QPA_PLATFORM_PLUGIN_PATH (一个字都不能改!!) 自己环境变量值:D:\Users\topma\anaconda3\Lib\site-package…

React中对表格实现列表的拖拽排序

1. 效果:推拽手柄列 2. 实现: react中我们需要两个包来实现 ‘array-move’‘react-sortable-hoc’Installation Use npm $ npm install react-sortable-hoc --save 引入 import { arrayMoveImmutable } from array-move import { SortableContainer, SortableElement, Sort…

Jenkins笔记(一)

个人学习笔记(整理不易,有帮助点个赞) 笔记目录:学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 目录 一:简单了解 二:什么是DevOps 三:安装Jenkins 四&#xff1…

(案例贴2) html+css 倒计时器

欢迎大家使用这个计时器噢 老哥直接附代码咯. timer.html <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…

GitLab--Merge Request 权限管理

场景 团队在日常开发工作中需要进行分支管理&#xff0c;通常使用feature分支进行开发&#xff0c;然后依次合并到dev分支、release分支&#xff0c;整个代码合并过程不仅仅是代码合并还需要对代码进行审核&#xff0c;如果在线下进行审核合并&#xff0c;这样操作无法保留痕迹…

【力扣hot100】刷题笔记Day18

前言 晚上巩固一下今天的回溯题&#xff0c;基础不牢地动山摇&#xff0c;po一张代码随想录总结的 组合补充 77. 组合 - 力扣&#xff08;LeetCode&#xff09; class Solution:def combine(self, n: int, k: int) -> List[List[int]]:path []res []def backtrack(star…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之FlowItem容器组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之FlowItem容器组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、FlowItem组件 子组件 可以包含子组件。 接口 FlowItem() 使用该接口来…

免费音频剪辑

在数字时代&#xff0c;音频剪辑已成为许多职业和爱好者不可或缺的技能。无论是制作播客、教育视频、还是进行广告宣传&#xff0c;高质量的音频剪辑都能为作品增色不少。今天&#xff0c;我要为大家强烈安利一款免费且功能强大的音频剪辑工具&#xff0c;它绝对是你办公桌上不…

命令行启动mongodb服务器的问题及解决方案 -- Unrecognized option: storage.journal

目录 mongodb命令行启动问题 -- Unrecognized option: storage.journal问题日志&#xff1a;问题截图&#xff1a;问题来源&#xff1a;错误原因&#xff1a;解决方式&#xff1a; mongodb命令行启动问题 – Unrecognized option: storage.journal 同样是格式出问题的问题分析和…

《Spring Security 简易速速上手小册》第5章 高级认证技术(2024 最新版)

文章目录 5.1 OAuth2 和 OpenID Connect5.1.1 基础知识详解OAuth2OpenID Connect结合 OAuth2 和 OIDC 5.1.2 重点案例&#xff1a;使用 OAuth2 和 OpenID Connect 实现社交登录案例 Demo 5.1.3 拓展案例 1&#xff1a;访问受保护资源案例 Demo测试访问受保护资源 5.1.4 拓展案例…

MySQL锁机制【重点】

参考链接 【1】https://xiaolincoding.com/mysql/lock/mysql_lock.html 【2】https://learnku.com/articles/39212?order_byvote_count& 重要的锁&#xff1a; 表级锁&#xff08;Table-level locks&#xff09;&#xff1a; 表级锁是对整个表进行加锁&#xff0c;当一个事…

Blazor 向 ECharts 传递 option

目标 将ECharts封装为Blazor组件&#xff0c;然后通过jsRuntime向ECharts传递参数&#xff0c;即设置option。 封装ECharts 步骤&#xff1a; 1. 在index.html中引入echarts.min.js&#xff1b; 2. 创建blazor组件&#xff0c;将ref传递给js用于初始化echarts&#xff1b; …

#stm学习总结 (二十八)硬件随机数实验

28.1 随机数发生器简介 STM32F407 自带了硬件随机数发生器&#xff08;RNG&#xff09;&#xff0c;RNG 处理器是一个以连续模拟噪声为基础的随机数发生器&#xff0c;在主机读数时提供一个 32 位的随机数。 28.1.1 RNG 框图 STM32F407 的随机数发生器&#xff08;RNG&#x…

ffmpeg单张图片生成固定时长的视频

ffmpeg -r 25 -f image2 -loop 1 -i fps_1.jpg -vcodec libx264 -pix_fmt yuv420p -s 1080*1920 -r 25 -t 30 -y fps.mp4这个命令将 fps_1.jpg 图片转换为一个 30 秒长的视频&#xff0c;分辨率为 1920x1080&#xff0c;帧率为 25 帧/秒&#xff0c;并使用 libx264 编码器进行压…

LeetCode -- 79.单词搜索

1. 问题描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水…

Linux系统——Nginx负载均衡模式

目录 一、Nginx优点 二、Nginx配置项——Conf Upstream 模块 三、Nginx负载均衡 1.负载均衡策略 1.1轮询 1.2IP_hash 1.3URL_hash 1.4Least_conn 1.5Weight 1.6Fair 2.Nginx负载均衡配置状态参数 3.什么是会话保持 3.1会话保持有什么作用呢 3.2Nginx会话保持 3…