当前位置: 首页 > news >正文

网络知识介绍

一、TCP

传输控制协议,Transmission Control Protocol
面向广域网的通信协议,跨域多个网络通信时,为两个通信端点之间提供一条具有如下特点的通信方式:
基于流、面向连接、可靠通信方式、网络状况不佳时尽量降低系统由于重传带来的带宽开销、不考虑中间网段和节点。

三次握手 : 建立连接
1)客户端发送SYN(SEQ=x)报文给服务端,进入SYN_SENT状态。
2)服务端收到SYN,回应一个SYN(SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态;
3)客户端收到服务端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态;
SYN:同步序列编号(Synchronize Sequence Numbers),TCP/IP建立连接时使用的握手信号。
ACK:确认字符(Acknowlegement character),接收端发给发送端的一种传输类控制字符。

四次挥手:终止连接
1)某个应用进程首先调用Close,称该端执行“主动关闭”。该端TCP发送一个FIN分节,表示数据发送完毕。
2)接收到这个FIN的对端执行“被动关闭”,这个FIN由TCP确认。
3)一段时间后,接收到文件结束符的应用进程将调用Close关闭它的套接字。它的TCP也发送一个FIN。/
4)接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。
通常由客户端执行主动关闭,但是某些协议例如HTTP/1.0由服务端执行主动关闭。

协议规定:
1)数据分片:发送端对数据进行分片,接收端进行重组,由TCP确定分片大小并控制分片和重组;
2)到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认;
3)超时重发:发送发在发送分片时启动超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片;
4)滑动窗口:TCP连接每一方的接收缓冲空间大小都固定,接收端只允许另一端发送接收端缓冲区所能接纳的数据,TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出;
5)失序处理:作为IP数据报来传输的TCP分片到达时可能会失序,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层;
6)重复处理:作为IP数据报来传输的TCP分片会发生重复,TCP的接收端必须丢弃重复的数据;
7)数据校验:TCP将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验和有差错,TCP将丢弃这个分片,并不确认收到此报文段,导致对端超时并重发。
在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。

粘包/半包问题
发送端连续给对端发送两个及以上的数据包,对端在一次收取中可能收到的数据包大于1个,可能是几个包加上某个包的部分,或者就是几个完整的包在一起,这个叫粘包。
当然,也可能收取到的只是一个包的一部分,这个叫半包。
如何解决?
1)固定包长的数据包。比如规定每个协议包大小为64字节,每次收满64字节就取出解析,如果不够,就先存起来。这种格式简单但灵活性差。如果包内容不足指定字节数,剩余空间需要填充特殊信息,如\0;包内容超过指定字节数,又得分包分片,需要额外处理逻辑。
2)以指定字符(串)为包的结束标志。 这种协议包较常见,即字节流中遇到特殊符号值时就认为到了一个包的末尾。例如:FTP协议、发邮件的SMTP协议,一个命令或者一段数据后加上"\r\n"(即CRLF)表示一个包的结束。不足之处是如果协议数据包内容部分需要使用包结束标志字符,就需要对这些字符做转码或者转义操作,避免误解析。
3)包头+包体格式。 包头是固定大小的,且包头中必须含有一个字段来说明包体大小。如果是bodySize,对端先收取包头大小字节,如果不够先缓存直到收够为止,然后解析包头中的bodySize字段,根据包体大小来收取包体大小字节;如果是packageSize,则表示整包大小,需要用packageSize减去包头大小,就能算出包体的大小。
解包处理
在这里插入图片描述

二、UDP

用户数据报协议,User Datagram Protocol
一种无需建立连接就可以发送封装的IP数据报的方法。

丢包问题 不考虑IP层分片丢失,CRC校验包不完整
1)接收端处理时间过长 调用recv方法接收到数据后,处理数据花了一些时间,处理完后再次调用recv,在这两次调用间隔里,发过来的包可能丢失。修改接收端,将包接收后存入一个缓冲区,然后迅速返回继续recv。
2)ARP缓存过期 ARP缓存时间约10分钟,如果缓存列表没有对方MAC地址或缓存过期,会发送请求获取MAC地址,未获取地址之前,用户发送的数据包会被内核缓存到arp_queue这个队列,默认最多缓存3个包,多余的数据包会被丢弃。
3)缓冲区过小或文件过大 如果报文很大,而缓冲区过小,则无法容纳该报文,那么报文就会丢失。增大缓冲区。
4)缓冲区满 如果socket缓冲区满了,应用未及时处理缓冲区中的包,那么后续的包会被内核丢弃,造成丢包。通过增大缓冲区来缓解丢包,但是如果服务已经过载,简单增大缓冲去并不能解决问题,反而会造成请求全部超时,服务不可用。
5)发送的包巨大 即使send方法会做大包切割成小包发送,但是包太大也不行。巨大的包需要切割为小包再逐个send。
6)发包频率太快 连续发包不sleep。虽然有时可以通过设置接收缓冲解决,但是最好还是sleep一下。
7)局域网内不丢包,公网丢包 切割小包并sleep发送,如果流量过大可能也不灵。
支持一对一、一对多、多对一、多对多交互通信。

包无序问题 在应用层实现如下功能:
1)发送:包的分片、包的确认、包的重发;
2)接收:包的调序、包的序号确认;

利用UDP实现了可靠数据传输的开源:
1)RUDP:可靠用户数据报协议,reliable UDP。提供一组数据服务质量增强机制,如拥塞控制的改进、重发机制及淡化服务器算法等,在不干扰协议的实时特性的同时,允许TCP方式下的流控制行为。
2)RTP:实时传输协议,Real-time Transport Protocol。为数据提供了具有实时特性的端对端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。如果底层网络提供组播方式,RTP可以使用该组播表传输数据到多个目的地。
3)UDT 基于UDP的数据传输协议,UDP-based Data Transfer Protocol。一种互联网数据传输协议,主要目的是支持高速广域网上的海量数据传输,而互联网上的标准数据传输协议TCP在高带宽长距离网络上性能很差。UDT引入新的拥塞控制和数据可靠性控制机制,是面向连接的双向的应用层协议,同时支持可靠的数据流传输和部分可靠的数据报传输。也可以应用在点到点技术(P2P)、防火墙穿透、多媒体数据传输等等。

三、KCP

官方仓库
快速可靠协议,A Fast and Reliable ARQ Protocol
比TCP浪费10%-20%带宽的代价,换取平均延迟降低30%-40%,且最大延迟降低3倍的传输效果。纯算法实现,不负责底层协议的收发,需要使用者自己定义下层数据包的发送方式,以callback方式提供给KCP,连时钟都需要外部传递进来,内部不会有任何一次系统调用。

TCP是为流量设计(每秒内可以传输多少KB数据),KCP为流速设计(单个数据包从一端发送到一端需要多少时间)。

TCPKCP对比
RTO翻倍不翻倍提高传输速度
全部重传选择性重传只重传真正丢失的数据包
-快速重传不用等超时,直接重传
延迟ACK非延迟ACK可调节是否延迟发送
UNAACK+UNA-
-非退让流控开着BT都能流畅传输

两种ARQ响应模型:UNA(此编号前所有包已收到);ACK(该编号包已收到)。

四、HTTP

超文本传输协议,Hypertext Transfer Protocol
简单的请求-响应协议,运行在TCP之上,指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出,而消息内容则具有类似MIME的格式。每个请求和响应都是独立的,服务器不会主动推送消息给客户端。

HTTP基于B/S架构进行通信,其服务器实现程序有httpd、nginx等,客户端实现程序主要是web浏览器,客户端命令行工具有elink、curl等。

请求报文格式:
请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体
应答报文格式:
状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体

HTTP响应码查看

五、WebSocket

在单个TCP连接上进行全双工通信的协议,允许服务器主动向客户端推送数据。
WebSocket通过HTTP/1.1协议的101状态码握手,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

特性:
1)较少的控制开销 相对于HTTP请求每次都要携带完整的头部信息,此项开销显著减少
2)更强的实时性 相对于HTTP请求需要客户端发起服务器才能响应,延迟明显更少
3)保持连接状态 需要先创建连接,使其成为一种有状态的协议,之后通信可以省略部分状态信息,而HTTP请求可能需要每次都携带状态信息,如:身份认证
4)更好的二进制支持 定义了二进制帧,更轻松处理二进制内容
5)可以支持扩展 用户可以扩展协议,实现部分自定义的子协议,如:部分浏览器支持压缩等
6)更好的压缩效果 相对HTTP压缩,WebSocket在适当扩展支持下,可以沿用之前内容的上下文,传递类似数据时,显著提高压缩率

六、RPC

远程过程调用,Remote Procedure Call
进程间通信(IPC)是在多任务操作系统或联网的计算机之间运行的程序和进程所用的通信技术,有两种类型的进程间通信:
1)LPC(本地过程调用)
2)RPC(远程过程调用)

通过IPC和RPC,程序能利用其他程序或计算机处理的进程。客户机执行自己的任务,但靠服务器提供后端文件服务。RPC为客户机提供向后端服务器申请服务的通信机制。

RPC应用场景:
1)分布式操作系统的进程间通讯
2)构造分布式计算的软件环境
3)远程数据库服务
4)分布式应用程序设计
5)分布式程序的调试

相关文章:

网络知识介绍

一、TCP 传输控制协议,Transmission Control Protocol。 面向广域网的通信协议,跨域多个网络通信时,为两个通信端点之间提供一条具有如下特点的通信方式: 基于流、面向连接、可靠通信方式、网络状况不佳时尽量降低系统由于重传带…...

MapStruct设置全局的ComponentModel

在mapStruct上边,如果我们要切换成非默认的组件模式,常常要在Mapper注释中添加componentModel "spring",如果类太多的了的话,非常麻烦,有没有更好的方式呢,有的,可以在pom中添加一个…...

LinearAlgebraMIT_6_ColumnSpaceAndNullSpace

这节课的两个重点是column space列空间和null space零空间。 x.1 pre-multiply/left multiply and post-multiply/right multiply 对于pre-multiply/left multiply左乘和post-multiply/right multiply右乘,如果用英文的pre-和post-是比较容易理解的, A…...

出版物经营许可办理 出版物许可地址变更 出版物零售延期

一、出版物零售单位设立所需材料 1、申请书 2、营业执照 3、租赁合同 4、主要负责人身 份证 5、出版物经营许可申请表 二、办理出版物经营许可证所要符合的条件 1、有确定的企业名称和经营范围; 2、有出版物业务的经营场地; 3、有出版物业务的组织机构和发行人员。 三、…...

【LeetCode每日一题】——807.保持城市天际线

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 矩阵 二【题目难度】 中等 三【题目编号】 1572.矩阵对角线元素的和 四【题目描述】 给你一…...

JavaScript--Date(日期)对象

介绍和说明 创建一个Date对象并获取当前日期和时间: 使用new Date()语句可以创建一个表示当前日期和时间的Date对象。它将使用客户端设备上的当前日期和时间。例如:const currentDate new Date(); 获取特定日期的年、月、日、小时、分钟、秒&#xff1…...

一文讲清多线程与多线程同步

1 多线程 1.1 线程的概念 十多年前,主流观点主张在可能的情况下优先选择多进程而非多线程,如今,多线程编程已经成为编程领域的事实标准。多线程技术在很大程度上改善了程序的性能和响应能力,使其能够更加高效地利用系统资源&…...

《Java-SE-第二十六章》之线程池

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页:KC老衲爱尼姑的博客主页 博主的github,平常所写代码皆在于此 共勉:talk is cheap, show me the code 作者是爪哇岛的新手,水平很有限&…...

【数据库】将excel数据导入mysql数据库

环境:Windows10 mysql8以上 将你要导入的excel表另存为txt格式 打开txt格式文件,删除表头行并另存为并更改编码方式(由于与数据库的编码不同,会导致导入报错) 通过命令行登录数据库 winr cmd进入 进入装mysql的目录位…...

无涯教程-Lua - repeat...until 语句函数

与 for 和 while 循环(它们在循环顶部测试循环条件)不同,Lua编程中的 repeat ... until 循环语言在循环的底部检查其条件。 repeat ... until 循环与while循环相似,不同之处在于,保证do ... while循环至少执行一次。 repeat...until loop - …...

环形链表 LeetCode热题100

题目 给你一个链表的头节点 head ,判断链表中是否有环。 思路 快慢指针。开始快指针在慢指针前面,当快指针等于慢指针时说明有环,如果快指针指向null时说明无环。 代码 /*** Definition for singly-linked list.* struct ListNode {* …...

使用python将每组两行数据合并一行

1、使用场景 将有规律的每组(一组2行)的单数行和双数行合并为一行,以空格分割。 比如使用pssh批量得出的结果,想让ip行和结果行合并为一行(前提如上所述) [rootk8s-master1 tmp]# pssh -h iplist -i hostname [1] 18:12:42 [SU…...

14-1_Qt 5.9 C++开发指南_网络编程及主机信息查询_HostInfo

Qt 网络模块提供了用于编写 TCP/IP 客户端和服务器端程序的各种类,如用于 TCP 通信的QTcpSocket 和 QTcpServer,用于 UDP 通信的 QUdpSocket,还有用于实现 HTTP、FTP 等普通网络协议的高级类如 QNetworkRequest,QNetworkReply 和Q…...

【iOS】通知原理

我们可以通过看通知的实现机制来了解通知中心是怎么实现对观察者的引用的。由于苹果对Foundation源码是不开源的,我们具体就参考一下GNUStep的源码实现。GNUStep的源码地址为:GNUStep源码GitHub下载地址, 具体源码可以进行查看。 通知的主要流程 通知全…...

创建邮件服务器(小微企业)

这里写自定义目录标题 目的硬件选型:软件选型:coremail (商业版本)postfixumail免费开源版本新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适…...

android app控制ros机器人四(调整界面布局)

半吊子改安卓,记录页面布局调整: 在ros-mobile基础上顶端增加一行,用于显示app名称和logo图像;修改标签页。 添加文字简单,但是替换图标长知识了,开始只是简单的把mipmap各个文件夹下的图片进行替换&…...

稍微深度踩坑haystack + whoosh + jieba

说到django的全文检索,网上基本推荐的都是 haystack whoosh jieba 的方案。 由于我的需求对搜索时间敏感度较低,但是要求不能有数据的错漏。 但是没有调试的情况下,搜索质量真的很差,搞得我都想直接用Like搜索数据库算了。 但是…...

微信小程序(van-tabs) 去除横向滚动条样式(附加源码解决方案+报错图)

问题描述 今天第一次接触vant组件库。 ant官网地址适用于Vue3 支持Vue2、Vue3、微信小程序等 我在使用van-tabs组件时遇到了一个问题,如下图所示: 从图片上可以看到有个灰色的横向滚动条,一开始领导给我说这个问题,我反反复复都…...

激光切割机所发出的辐射是否会对人体产生危害呢

激光切割设备所发出的激光作为一种特殊的能量光源,在一定程度上是存在辐射的。由于光纤激光器的功率通常大于半导体激光器,因此其辐射安全性也受到我们的关注。那么这种辐射的危害究竟有多大呢? 第一级:在正常操作下,不会发出对人…...

Redis 高可用:主从复制、哨兵模式、集群模式

文章目录 一、redis高可用性概述二、主从复制2.1 主从复制2.2 数据同步的方式2.2.1 全量数据同步2.2.2 增量数据同步 2.3 实现原理2.3.1 服务器 RUN ID2.3.2 复制偏移量 offset2.3.3 环形缓冲区 三、哨兵模式3.1 原理3.2 配置3.3 流程3.4 使用3.5 缺点 四、cluster集群4.1 原理…...

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

【JavaEE】-- HTTP

1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

Map相关知识

数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

安卓基础(aar)

重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑

精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...