【计算机基础知识4】网络通信协议:TCP、UDP、WebSockets

目录

一、TCP(传输控制协议)

1. TCP的特点

2. TCP的连接建立和终止

3. TCP的可靠性机制

4. TCP的流量控制

二、UDP(用户数据报协议)

1. UDP的特点

2. UDP的使用场景

三、WebSockets

1. WebSockets协议的特点

2. WebSockets协议实现

3. WebSockets注意事项


一、TCP(传输控制协议)

TCP是一种面向连接的传输协议,它实现了可靠的数据传输。了解TCP的特点、连接建立和终止的过程、可靠性机制和流量控制对于前端开发人员来说非常重要。

1. TCP的特点

TCP是一种字节流协议,它确保了数据的可靠传输。其主要特点包括:

(1)面向连接:在发送数据之前,需要先建立连接,确保通信双方能够正确地发送和接收数据。

(2)可靠传输:TCP通过握手、确认和重传等机制,确保数据的完整性和正确性。

(3)面向字节流:TCP将数据拆分成若干个数据段,并在接收端重新组合成原始数据流。

(4)全双工通信:TCP支持双向通信,即客户端和服务器之间可以同时发送和接收数据。

2. TCP的连接建立和终止

TCP的连接建立过程称为三次握手,连接终止过程称为四次挥手。

(1)三次握手

客户端向服务器发送SYN报文,包含客户端的SYN序列号(x)。

服务器收到SYN报文后,回复SYN+ACK报文,包含服务器的SYN序列号(y)和确认序列号(x+1)。

客户端收到SYN+ACK报文后,发送ACK报文,确认序列号为y+1。此时,连接建立成功。

(2)四次挥手

客户端向服务器发送FIN+ACK报文,表示客户端即将关闭连接。

服务器收到FIN+ACK报文后,回复ACK报文,确认序列号为x+1。

服务器向客户端发送FIN+ACK报文,表示服务器即将关闭连接。

客户端收到FIN+ACK报文后,发送ACK报文,确认序列号为y+1。此时,连接终止。

3. TCP的可靠性机制

TCP通过以下可靠性机制确保数据传输的正确性:

(1)滑动窗口机制:通过调整窗口大小,控制数据的发送和接收速度。

(2)确认和重传:接收端回复确认(ACK)报文,表示已成功接收数据。若在一定时间内未收到确认,发送端将重发数据。

(3)流量控制:TCP使用滑动窗口机制进行流量控制,避免接收端因处理能力不足而丢失数据。

4. TCP的流量控制

TCP通过滑动窗口机制实现流量控制。窗口大小限制了发送端可以发送的数据量,接收端根据处理能力通知发送端调整窗口大小,以确保接收端能够及时接收和处理数据。

TCP的拥塞控制是通过调整发送端的窗口大小来避免网络拥塞。在慢开始阶段,窗口大小逐渐增加,直到发生拥塞或达到最大窗口大小。一旦发生拥塞,窗口大小将减小,然后进入拥塞避免阶段。在拥塞避免阶段,窗口大小以指数方式增加,直到再次达到最大窗口大小。如果在此过程中再次发生拥塞,窗口大小将立即减小一半,然后继续进入慢开始阶段。这种拥塞控制机制可以动态地调整窗口大小,以避免网络拥塞并提高网络的利用率。

TCP的流量控制和拥塞控制机制可以确保数据的可靠传输,避免网络拥塞和数据丢失。这些机制的实现对于前端开发人员来说非常重要,因为它们可以提高应用程序的性能和稳定性。

二、UDP(用户数据报协议)

UDP是一种面向无连接的传输协议,它提供了简单、不可靠的数据传输服务。以下是对UDP特点和使用场景的介绍。

1. UDP的特点

UDP具有以下特点:

(1)无连接:在发送数据之前,无需建立连接,可以直接发送数据。

(2)不可靠传输:UDP不提供确认和重传等可靠性机制,因此可能会出现数据丢失或乱序的情况。

(3)简单传输:UDP的头部开销较小,只包含源端口、目的端口、长度和校验和等字段。

(4)面向数据报:UDP将数据拆分成若干个数据报,并在接收端重新组合成原始数据。

2. UDP的使用场景

与 TCP 相比,UDP 的开销较小,发送数据的效率较高,因此在一些特定场景下使用 UDP 是非常合适的。以下是 UDP 的主要使用场景:

(1)实时通信:对于实时性要求较高的应用,如音视频通信、在线游戏等,使用UDP更为合适。因为UDP的传输延迟较低,能够满足实时通信的需求。

(2)简单服务:对于一些简单服务,如DNS协议、SNMP协议等,使用UDP可以降低实现的复杂度。

(3)广播和多播通信:UDP支持广播和多播通信,适用于向多个节点发送相同数据的场景。

三、WebSockets

WebSockets是一种实现了双向通信的协议,允许浏览器与服务器之间进行实时通信。以下是对WebSockets协议的介绍。

在传统的HTTP协议中,浏览器和服务器之间的通信是单向的,即浏览器发送请求到服务器,服务器响应请求并返回数据到浏览器。这种通信方式是同步的,且在每个请求-响应周期中都需要建立新的连接。而WebSockets协议则提供了一种异步的、双向的通信方式,使得浏览器和服务器之间可以建立一个持久的连接,并且可以在连接打开后任意时间点进行数据的发送和接收。

WebSockets协议是基于TCP协议的,因此它也具有TCP协议的一些特点,如面向字节流、可靠传输等。但是,与TCP不同的是,WebSockets提供了一种更加高级的接口,使得开发人员可以更加方便地使用它来进行实时通信。

WebSockets协议的实现需要浏览器和服务器都支持该协议。在浏览器端,WebSockets可以通过JavaScript来实现;在服务器端,不同的编程语言有不同的实现方式,如Java、Python、Node.js等。

1. WebSockets协议的特点

WebSockets具有以下特点:

(1)实现了双向通信:浏览器和服务器可以同时发送和接收数据。

(2)实时通信:WebSockets支持实时通信,可以用于实时交互应用,如在线游戏、实时聊天等。

(3)跨域通信:WebSockets可以跨越多个域名进行通信,无需使用CORS等跨域技术。

2. WebSockets协议实现

(1)建立连接:浏览器向服务器发送WebSocket连接请求,服务器接受请求并建立持久连接。

(2)发送和接收数据:在连接建立后,浏览器和服务器都可以随时发送和接收数据。数据是以帧为单位进行传输的,包括文本帧和二进制帧。

(3)关闭连接:当浏览器或服务器想要关闭连接时,可以发送关闭帧来关闭连接。

WebSockets协议的实现细节比较复杂,这里只是简单地介绍了它的基本概念和实现过程。在实际应用中,开发人员需要根据具体的需求来使用WebSockets,例如实现实时聊天、在线游戏等应用。

3. WebSockets注意事项

在使用WebSockets时,需要注意以下几点:

(1)安全问题:WebSockets协议虽然提供了双向通信的能力,但是它也存在一些安全问题,如跨站脚本攻击(XSS)等。因此,在使用WebSockets时需要采取一些安全措施,如使用HTTPS协议进行数据传输、对数据进行过滤和校验等。

(2)兼容性问题:虽然大多数现代浏览器都支持WebSockets协议,但是仍然存在一些老旧的浏览器不支持该协议。因此,在实际应用中需要考虑浏览器的兼容性问题。

(3)性能问题:虽然WebSockets协议可以实现实时的通信,但是它也存在一些性能问题,如网络拥塞、延迟等。因此,在使用WebSockets时需要考虑网络环境和应用场景,合理地使用WebSockets。

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

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

相关文章

长安链BaaS服务平台调研

目录 一、菜单功能二、其他说明2.1、服务平台的部署方式2.2、链本身2.3、建链流程2.4、支持连接已部署的链2.5、链治理投票2.6、支持动态节点操作2.7、支持应用 长安链ChainMaker管理平台文档地址:https://docs.chainmaker.org.cn 一、菜单功能 菜单子菜单/功能点…

强大的JTAG边界扫描(1):基本原理介绍

文章目录 1. 什么是边界扫描?2. JTAG硬件接口3. 边界扫描相关的软硬件4. 学习资料5. 总结 我是怎么了解到边界扫描的呢? 这就要从我淘到一块FPGA板卡的事情说起了。 前段时间我在某二手平台上淘了一块FPGA板子,它长这样: 板子的…

【广州华锐互动】元宇宙技术如何赋能传统工业企业?

随着科技的飞速发展,我们正处于工业革命4.0的时代,数字化、网络化和智能化正在深刻地改变着我们的生活和工作方式。在这个变革的大潮中,工业元宇宙平台应运而生,为企业带来了前所未有的机遇和挑战。 广州华锐互动开发的工业元宇宙…

vite搭建vue3项目

参考视频 1.使用npm搭建vite项目,会自动搭建vue3项目 npm create vitelatest yarn create vite2.手动搭建vue3项目 创建一个项目名称的文件夹执行命令:npm init -y 快速的创建一个默认的包信息安装vite: npm i vite -D -D开发环境的依赖 安装vue,现在默认是vue3.…

nodejs下载指定版本

1.搜索nodejs打开官网nodejs官网(除了去官网下载之外还可以使用nvm下载) 2.点击downloads 3.往下滑点击Previous Releases(以前的版本) 4.找到你想下载的版本点开(此处可能没你想要的具体版本,没关系找到大版本号相同的点开就行了…

【PowerQuery】Excel 的自动刷新功能-最低一分钟刷新

在Excel集成了PowerQuery之后,它提供了数据的手动刷新功能之外,也提供了数据的自动刷新功能。需要注意的是,PowerQuery提供的自动刷新功能是针对连接的,也就是说在PowerQuery自动刷新功能不是全局刷新功能,而是针对连接本身提供。接下来我们来看一下如何实现PowerQuery连接…

快速实现抖音上下滑动,你不知道的ViewPager2用法,信息量巨大,建议收藏点赞。老tier~

万能ViewPager2适配器–SmartViewPager2Adapter 特点功能 完全脱离xml,所有效果只需要通过api调用 具体功能:1. 两句代码实现抖音列表效果2. 无感且丝滑,动态从头部或者底部加载数据3. 设置上下加载监听,再达到预加载limit的时…

Python之面向对象(一)

目录 面向对象为什么要面向对象?要素 定义一些特性内存空间实例的创建与初始化创建实例方法__new__初始化实例方法__init__ 类的继承多态新式类与经典类 面向对象 为什么要面向对象? 方便版本更新迭代,程序结构清晰明了 要素 类&#xff…

Java(三)逻辑控制(if....else,循环语句)与方法

逻辑控制(if....else,循环语句)与方法 四、逻辑控制1.if...else(常用)1.1表达格式(三种) 2.switch...case(用的少)2.1表达式 3.while(常用)3.1语法格式3.2关键字beak:3.3关键字 continue: 4.for…

【web开发】6、Django(1)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、Django是什么?二、使用步骤1.安装Django2.创建项目3.创建app4.快速上手 数据库操作1.安装第三方模块2.自己创建数据库3.DJango链接数据库4.DJango操…

vue 部署到本机IIS 部署 SPA 应用

安装 URL Rewrite Works With: IIS 7, IIS 7.5, IIS 8, IIS 8.5, IIS 10 URL Rewrite : The Official Microsoft IIS Site 目前电脑IIS是6版本的,以下的方法不太合适操作。目前用Nginx部署,够用了。 nginx配置参考: uni-app 前面项目&am…

2023年09月编程语言流行度排名

点击查看最新编程语言流行度排名(每月更新) 2023年09月编程语言流行度排名 编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的 一门语言教程被搜索的次数越多,大家就会认为该语言越受欢迎。这是一个领先指标。原始数据来自…

无需麻烦验证,文字验证码一键通过

前言 文字验证码,简单易用,安全可靠!不需要麻烦的图形识别。这种验证方式不仅方便快捷,而且能有效防止恶意攻击和机器人访问。无需担心复杂操作,只需几秒钟就能完成验证过程。保护您的个人信息和数据安全,…

QML与C++的交互操作

QML旨在通过C 代码轻松扩展。Qt QML模块中的类使QML对象能够从C 加载和操作,QML引擎与Qt元对象系统集成的本质使得C 功能可以直接从QML调用。这允许开发混合应用程序,这些应用程序是通过混合使用QML,JavaScript和C 代码实现的。除了从QML访问…

『SpringBoot 源码分析』run() 方法执行流程:(2)刷新应用上下文-准备阶段

『SpringBoot 源码分析』run() 方法执行流程:(2)刷新应用上下文-准备阶段 基于 2.2.9.RELEASE问题:当方法进行了注释标记之后,springboot 又是怎么注入到容器中并创建类呢? 首先创建测试主程序 package …

SpringBoot2.0(Spring读取配置文件常用方法,打war包在Tomcat中启动)

目录 一,SpringBoot中读取配置文件的常用方法1.1,使用Value读取1.2,使用ConfigurationProperties1.3,使用Environment1.4,自定义配置文件读取 二,SpringBoot部署war项目到tomcat9和启动原理 一,…

Day_13 > 指针进阶(2)

目录 1.函数指针数组 2.指向函数指针数组的指针 3.回调函数 qsort()函数 代码示例 void* 4.结束 今天我们在进阶指针的基础上,学习进阶指针的第二部分 1.函数指针数组 首先我们回顾一下指针数组 char* arr[5]://字符指针数组 - 数组 - 存放的是字符指针 in…

vagrant 虚拟机扩容磁盘

vagrant 虚拟机扩容磁盘 修改配置安装插件存储扩容 修改配置 参考博客:https://blog.csdn.net/marina_1/article/details/122238721 vagrant 版本 PS D:\vagrant\workplace\node2> vagrant --version Vagrant 2.3.7修改vagrant虚拟机配置文件Vagrantfile,添加磁…

【100天精通Python】Day56:Python 数据分析_Pandas数据清洗和处理(删除填充插值,数据类型转换,去重,连接与合并)

目录 数据清洗和处理 1.处理缺失值 1.1 删除缺失值: 1.2 填充缺失值: 1.3 插值: 2 数据类型转换 2.1 数据类型转换 2.2 日期和时间的转换: 2.3 分类数据的转换: 2.4 自定义数据类型的转换: 3 数…

【多线程】Timer任务定时器实现与盲等原子性问题的解决

目录 一、定时器 二、标准库中的Timer 三、代码实现 四、死锁 一、定时器 代码中的定时器通常是在一定的时间执行对应的代码逻辑 二、标准库中的Timer public static void main(String[] args){Timer timer new Timer();timer.schedule(new TimerTask() {Overridepublic…