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

【JavaWeb】传输层协议——UDP + TCP

目录

UDP协议

UDP协议结构

UDP的特点

TCP协议

TCP协议结构

TCP的特点

TCP的十个核心机制

确认应答

超时重传

连接管理

滑动窗口

流量控制

阻塞控制

延迟应答

捎带应答

粘包问题

异常处理


UDP协议

UDP协议结构

源端口:存储的是发送方的端口号。

目的端口:存储的是接收方的端口号。

UDP长度:存储的是UDP报文的长度。

                   UDP报文 = UDP报头 + UDP载荷

                   如果传输的数据超过64KB,那么有两个解决方案:

                        ①在应用层中把数据拆分一下

                        ②使用TCP协议进行传输

校验和:检验传输的报文是否是正确的,如果不正确直接丢弃数据

              传输过程中可能数据会发生变化,校验和存储的是对于应用层数据经过一系列                        运算后得到的16位的数据。当接收方收到数据后,以同样的的运算方法算一下报文                的数据,算出来的结果与检验和结果相同就是没有发生变化,否则就是出错了,                    丢弃数据。比较知名的算法有:①CRC ②MD5 ③SHA1


UDP的特点

无连接

知道对方的端口号和IP就可以直接传输,不用连接。

不可靠

如果数据由于故障没有发送到对方,UDP协议不会返回提示给应用层。

面向数据报

应用层交给UDP的数据,UDP直接打包成数据报,不会拆分。

全双工

一个通信通道,同一时间内,既可以发送也可以接收数据。(因为通信通道里有8条网线)

缓冲区

没有发送缓冲区,只有接收缓冲区。

发送数据的时候直接交给下一层,不会等待。

接收缓冲区则不能保证接收的数据是按照顺序的,同时数据存不下之后,新发来的数据就会被丢掉。

大小受限

由于结构的限制,传输的整个数据的大小不能超过64KB。


TCP协议

TCP协议结构

源端口号: 存储的发送发的端口号。

目的端口号:存储的接收方的端口号。

首部长度:存储的是TCP报头的长度。

                TCP报文 = TCP报头(首部) + TCP载荷

                报头中  选项  之前的是固定长度 20 字节

                首部长度虽然是 4 位,最大的表示数字就是 2^4 = 16 但是单位却是  4字节  也就                    是首部长度最大可以是 16 * 4字节 = 64 字节

选项:存储的是对TCP报文的一些属性的解释说明(可有可无)

           首部长度 * 4字节 - 20字节 = 选项大小     如果首部长度为 5,则没有选项。  

保留:保留的六位是为了以后升级使用的。以后如果新加什么内容,就可以在这里加,而且             这样未升级的设备也可以兼容

检验和:检验的是整个报文的数据。与UDP同理。

其他的结构将会在核心机制中讲解。

TCP的特点

有连接

客户端和服务器二者之间先要建立一个联系才能够相互通信。

可靠

这是TCP最大的特点,发送的数据是可靠的。主要通过 确认应答和超时重传 来保证的。

面向字节流

和之前的文件读写一样(通过字节流),所传输的数据都是转换成了字节流。

全双工

缓冲区

在下面的机制中有所体现。

大小不受限

由于结构的原因,TCP传输的数据没有限制


TCP的十个核心机制

这里只是介绍十个比较重要的机制,TCP的机制远不止这么几个。


确认应答

主机A给主机B发送了个消息,主机B给主机A返回一个应答报文(ACK),这样主机A就知道消息一定发过去了。

通常情况下,主机A会发很多条消息,而B要回应相对的消息。在这种情况下就可能会出现A发送的消息到B这里顺序变了。这样回复的就乱了。

为了解决这种情况,TCP将每个字节都进行了编号——序列号。如果一段报文有100个字节长,假设从 1 开始编号,A就在  序号 中只存 1 ,B收到后,返回的应答报文里的  确认序号 只存 101 (表示从序号100之前的报文都收到了,可以发后面新的了)

另外如果是应答报文,报文中的 ACK 就变成 1 ,表示该报文为应答报文。0 就不是应答报文。

TCP之所以是可靠传输,最主要靠的就是这个机制。


超时重传

网络传输中偶尔会出现丢包的情况。这里的丢包是指:①发送的数据丢了  ②返回的应答报文丢了

TCP判断数据丢失的规定是,从发送报文后开始计时,超出一个 时间阈值 还是没有收到ACK,就判定是丢包了。

丢了之后TCP的抢救措施是重新发一下数据。

不过,如果是返回的应答报文超时了,那么接收方不就会收到相同的数据吗?为此TCP解决方案是:使用缓冲区进行去重和排序。每一个Socket对象都有一个缓冲区(在操作系统内核中的存储空间),当接收方收到数据之后,放到类似于一个 具有优先级队列 功能的缓冲区进行排列和去重(排列的依据就是序号)。 

确认应答是在传输顺利下的可靠传输,那么超时重传则是在传输不顺利情况下的可靠传输。


连接管理

连接:主机A保存着主机B的IP和端口号,主机B保存着主机A的IP和端口号,这就建立了连接

           保存这个信息的空间也叫做连接。当保存的信息没了,连接就断开了。

建立连接的过程被称为 三次握手 ,断开连接的过程称为 四次挥手 。

三次握手

三次握手本质上是通信双方的四次交互。双方都要向对方发送一个连接的请求,各自收到对方的请求后返回应答请求,其中有一个请求和返回应答请求可以合并成一次交互,所以才叫 三次 握手。

这一次合并必须要合并,因为它效率会有所提升,资源开销更小。

用到下面两个标识:

SYN:请求连接的标识。

ACK:ACK自然就是响应连接而返回的标识了。

三次握手就像上网课的时候,老师对同学说:声音和屏幕正常吗?班长回答:正常。老师可以听到声音吗?老师:可以。  这样才开始正式上课。

三次握手的意义

1. 建立通信双方的联系。

2. 确保双方的发送和接收的消息的能力正常。

3. 握手过程中协商一些重要参数。

四次挥手

通信双方分别向对方发送一个结束连接的请求,各自在给对方会一个应答请求。这四次交互无法像三次握手一样合并其中。原因在下图解释。

用到下面两个标识:

FIN:通知对方,自己要关闭连接的标识。

ACK

上图中的TIME_WAIT 是一个比较重要状态,因为三次握手和四次挥手中同样可能会出现丢包情况。当上面的客户端发送完最后一个ACK后,如果丢包了,那么在服务器看来自己有可能是自己的FIN没有发过去者是ACK丢了。那么这时候服务器又会发送一次FIN。此时由于客户端的TCP处于TIME_WAIT状态,所以就可以继续发送ACK。


滑动窗口

上述过程中都是发一个数据,收一个ACK,收到ACK之后再发新的数据。这样确保了数据传输的可靠性,但是效率缺降低了。为了提高效率,每次发送数据的时候都是发送一些数据(大小是一个窗口)。

上述利用滑动窗口来传输数据,出现丢包了分成两种情况解决。

1. ACK丢了

上述图中的比如 确认序号为101 的ACK丢了,但是后续的 201 ACK传过去了,也就包含了 201 之前的报文都收到的信息,所以不会有影响

2. 数据报文丢了

上述图第一个窗口中比如 序号为201 的报文丢了,如果没丢此时返回的确认序号应该是301。但是丢了确认序号还是返回的201。剩下一个窗口内返回的ACK的序号也都是201。多收到几次201后,主机A就会发现问题,不对,应该是丢包了,此时就会重传201这个报文。这种重传方式叫“快速重传”。


流量控制

这是改变上面滑动窗口大小的机制之一。

窗口越大越好,这样再同一个时间可以等更多的ACK,但过大窗口短时间会消耗大量系统资源,而且接收方能否处理过来也还是个未知数。为了判断接收方的处理能力,每次返回一下 缓冲区剩余空间的大小 就可以判断了。如果缓冲区比较大大,那么下次的窗口就大一些,反之亦然

窗口大小:存储缓冲区剩余空间。从TCP结构图中可知,它只有 16 位,最多可以 2^16 = 65536 / 1024 = 64 KB。只有这么一点空间显然是不够的。

选项:这里面有一个 窗口扩展因子  在这里面写个2,意味着 64KB << 2 = 256KB. 此时就可以存最多256KB的值了。


阻塞控制

这是改变上面滑动窗口的另一个机制。

数据传输的过程中可能会有很多条选择的路径,这些路径由路由器和交换机等构成。每条路的传输的速率也大不相同。

流量控制从接收方能力得出窗口大小,阻塞控制从传输过程的速率得出窗口大小。最终窗口大小取二者中较小的值。 


延迟应答

延迟应答是在滑动窗口的基础上实现的。

通过滑动窗口收到一波数据后,存到缓冲区之中后,不立刻返回ACK,而是让接收方处理一波缓冲区里的数据,这样剩余的空间就会大一些,返回的窗口大小就会大一点。


捎带应答

捎带应答是在延时应答的基础上实现的。

主机A给B发送一个请求后,B应该立刻返回一个ACK,然后再返回请求处理后的结果(ACK是操作系统内核发送,结果是B的程序发送的)。这两个返回原本不可能一起发送,但是有了延时应答后就可以把ACK和处理结果一起返回。


粘包问题

由于TCP是面向字节流,收到数据后放到缓冲区后就无法分清楚哪些字节是一条完整的数据。这样的问题被称为粘包问题。解决方案由两种。

①最开始的地方写好数据报的长度。这样读的时候先读一下长度,然后再循环读长度次。

②约定好分隔符。当读到分隔符之后停止一次的读取。


异常处理

这里的异常是指传输过程中出现的不可抗力。比如停电。

主要分为两大类:

一:①进程崩溃 ②主机正常关机

进程奔溃也就是进程关闭了,正常关机是也是先关闭进程。进程没了对应的PCB也就没了,对应的文件描述符表也就释放了。这样就会触发socket中的close,进程会继续完成四次挥手。与正常断开没有区别。

二:①主机停电 ②网线断了

当接收方停电后,发送方会一直发送数据,但是一直收不到接收方返回的ACK。多次重传但是没有用,此时发送方就准备和接收方重连了(TCP结构中的RST)。重连显然也会失败。那么最后就单方面宣布断开连接了。

当发送方停电后,接收方完全不知道是数据还没过来还是上面其他原因。所以接收方会周期性的给发送方发送一个消息,确认对方是否正常工作。(这种机制被称为心跳包)


有什么错误评论区指出。希望可以帮到你。

相关文章:

【JavaWeb】传输层协议——UDP + TCP

目录 UDP协议 UDP协议结构 UDP的特点 TCP协议 TCP协议结构 TCP的特点 TCP的十个核心机制 确认应答 超时重传 连接管理 滑动窗口 流量控制 阻塞控制 延迟应答 捎带应答 粘包问题 异常处理 UDP协议 UDP协议结构 源端口&#xff1a;存储的是发送方的端口号。 目的…...

C++ 中是用来修饰:内置类型变量、自定义对象、成员函数、返回值、函数参数

const 是 constant 的缩写&#xff0c;本意是不变的&#xff0c;不易改变的意思。在 C 中是用来修饰内置类型变量&#xff0c;自定义对象&#xff0c;成员函数&#xff0c;返回值&#xff0c;函数参数。 一. const修饰 普通类型的变量 const int a 7; int b a; // 正确 …...

av 146 002

61. 一个新的敏捷项目经理正试图确定团队该如何执行一个发布计划的进度。哪种工具可以更深入地了解团队的进展? A. 发布计划系统 B. 产品路线图。 C. 看板。 D. 燃尽图 62. 你的项目发起人找到你&#xff0c;让你知道他正在考虑给你项目中的一位高级工程师颁发1000美元的现…...

小红书用户画像 | 小红书数据平台

小红书的用户画像是小红书品牌营销的必备技能&#xff0c;也是小红书推广种草的一个重要前提。通过对小红书用户画像进行分析&#xff0c;对品牌进行精准营销&#xff0c;实现更高的流量转化。 2022小红书粉丝人群画像 千瓜数据在2022年发布的千瓜活跃用户画像趋势报告中分析了…...

【STM32笔记】低功耗模式下GPIO、外设、时钟省电配置避坑

【STM32笔记】低功耗模式下GPIO、外设、时钟省电配置避坑 前文&#xff1a; blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置&#xff08;ADC唤醒无法使用、低功耗模式无法烧录解决方案&#xff09; blog.csdn.net/weixin_534033…...

Linux内存分区(swap)

目录 1、使用物理分区创建内存交换分区 2、使用文件创建内存交换文件 当硬件的设备资源充足的话&#xff0c;那么swap是不会被我们的系统所使用到的&#xff0c;所以swap会被利用到的时刻通常就是物理内存不足的情况 我们知道CPU所读取的数据都来自于内存&#xff0c;那么当…...

第六章——抽样分布

文章目录1、统计量的定义2、常用的统计量3、经验分布函数4、正态总体常用统计量的分布4.1、卡方分布4.1.1、卡方分布的定义4.1.2、卡方分布的性质4.2、t分布4.2.1、t分布的定义4.2.2、t分布的性质4.3、F分布4.3.1、F分布的定义4.3.2、F分布的性质5、正态总体的样本均值与样本方…...

蓝桥云课-声网编程赛(声网编程竞赛7月专场)题解

比赛题目快速链接&#xff1a;https://www.lanqiao.cn/contests/lqENT02/challenges/ 让时钟转起来&#xff08;考点&#xff1a;css&#xff1a;transform&#xff09; // index.js function main() {// 题解前理解一个东西&#xff1a;// 时针每过一小时&#xff0c;转30 原…...

Java高手速成 | Java web 实训之投票系统

01、投票系统的案例需求 在本篇中,我们将制作一个投票系统,让学生给自己喜爱的老师投票。该系统由1个界面组成,系统运行,出现投票界面,如图所示: ▍显示效果 在这个界面中,标题为:“欢迎给教师投票”;在界面上有一个表格,显示了各位教师的编号、姓名、得票数;其中…...

排序的基本概念

按数据存储介质&#xff1a;内部排序和外部排序按比较器个数&#xff1a;串行排序和并行排序按主要操作&#xff1a;比较排序和基数排序插入排序&#xff1a;基本思想&#xff1a;每步将一个待排序的对象&#xff0c;按其关键码大小&#xff0c;插入到前面已经排好序的一组对象…...

面试笔试资料--Java

这里写自定义目录标题1.同步和异步有何异同&#xff1f;在什么情况下分别使用他们&#xff1f;举例说明1.同步和异步有何异同&#xff1f;在什么情况下分别使用他们&#xff1f;举例说明 1.1概念 Java中交互方式分为同步和异步两种&#xff1a;   同步交互&#xff1a;指发送…...

基于TC377的MACL-ADC General配置解读

目录标题一、MACL-ADC General1.Config Variant与AdcConfigSet2. AdcGeneral3.AdcPublishedInformation二、最终对应达芬奇生成内容一、MACL-ADC General 1.Config Variant与AdcConfigSet Config Variant &#xff1a;变体配置&#xff0c;默认选择VariantPostBuild就好了&…...

error: src refspec master does not match any.处理方案

问题描述 在使用git bash指令将项目上传到github时&#xff0c;总是遇到一些错误无法解决。 下面是我遇到的一个问题 error: src refspec master does not match any. error: failed to push some refs to XXXX.git 原因分析&#xff1a; 错误&#xff1a;SRC ReFSPEC主控器不…...

防火墙有关iptables的知识点

基本概念 什么是防火墙 在计算中&#xff0c;防火墙是基于预定安全规则来监视和控制传入和传出网络流量的网络安全系统。该计算机流入流出的所有网络通信均要经过此防火墙。防火墙对流经它的网络通信进行扫描&#xff0c;这样能够过滤掉一些攻击&#xff0c;以免其在目标计算机…...

路肩石水渠机在施工公路项目中工艺特点的匹配

新建公路路肩项目在目前公路项目中的技术手段和实现方式,大多数依靠机械设备来机械来进行,还有一部分通过人工传统的预制作业和安装模式来进行,两种工艺特点的对比来说对于补充完善建设手段和效果实现有很重要的意义. 其中采用了机械设备进行一次成型制作的过程,按照设计需求匹…...

JS 动态爱心(HTML+CSS+JS)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

钉钉配置事件订阅(Python)

钉钉配置事件订阅 0.需求分析 需要实现钉钉企业通讯录同步至企业微信通讯录&#xff0c;这就需要用到钉钉的事件与回调 1.配置应用 登陆开放平台 https://open-dev.dingtalk.com/去企业内部开发里面&#xff0c;先创建个应用&#xff0c;后面都借用这个应用来调接口 创建完…...

Linux-Udev机制

一:Udev概述 udev 是一个用户空间的设备管理器,用于为事件设置处理程序。作为守护进程, udev 接收的事件主要由 linux 内核生成,这些事件是外部设备产生的物理事件。总之, udev 探测外设和热插拔,将设备控制权传递给内核,例如加载内核模块或设备固件。udev 是一个用户空…...

ERP是什么?中小商户有必要用吗?秦丝、金蝶、管家婆哪家强?

ERP系统刚开始传入中国的时候&#xff0c;基本上只有超大型或大型企业有条件实施&#xff0c;不过最近几年随着小微企业、中小商户的信息化需求不断增长&#xff0c;ERP软件已慢慢被普遍使用。但是仍然有不少中小商户&#xff0c;还没搞清楚ERP到底是什么&#xff0c;看到大家都…...

pytorch离线安装

windows下离线安装pytorch&#xff0c;很多内网机&#xff0c;无法连接外网&#xff0c;只能下载whl文件进行离线安装下载pytorch&#xff0c;地址https://download.pytorch.org/whl/torch_stable.html我是windows&#xff0c;Python37&#xff0c;没有gpu&#xff0c;所以选择…...

数据结构-算法的时间复杂度(1.1)

目录 1. 算法效率 2. 时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3 举例说明&#xff1a; 写在最后&#xff1a; 1. 算法效率 我们该如何判断一个算法的好坏&#xff1f; 衡量一个算法的好坏&#xff0c;是从时间和空间两个维度比较的&#xff0c; 而今天…...

Cygwin安装与Mingw

共同点&#xff1a;window下编译环境 区别&#xff1a;cygwin(gnu windows)模拟Linux编译环境&#xff0c; mingw模拟window编译环境&#xff0c;生成.exe可执行文件 目录 Cygwin安装 一、官网下载 二、双击安装 三、选择安装路径后&#xff0c;到连接方式如图 四、添加连…...

教育舆情监测方案有哪些,TOOM讲解教育舆情的应对与处理?

教育舆情方案是针对教育领域的舆情事件或问题而制定的应对方案。其主要目的是通过有效的信息收集、分析、处理和传播&#xff0c;帮助教育机构或相关组织及时掌握和应对公众舆论的发展趋势&#xff0c;维护良好的舆情形象和声誉&#xff0c;教育舆情监测方案有哪些&#xff0c;…...

c语言操作文件

1、文件缓冲区 文件缓冲区的目的&#xff1a;提高访问效率 提高磁盘使用寿命 刷新就是将当前缓冲区数据全部提交。 不刷新时&#xff0c;程序在崩溃时缓冲区内容无法输出&#xff08;有些情形会带来错误&#xff09; 文件缓冲区的四种刷新方式 行刷新&#xff08;遇到换行符…...

【C语言】初识指针

目录 一、指针是什么 二、指针和指针类型 三、野指针 四、指针运算 五、指针和数组 六、二级指针 七、指针数组 一、指针是什么 指针就是内存地址&#xff0c;指针变量是用来存放内存地址的变量&#xff0c;在同一CPU构架下&#xff0c;不同类型的指针变量所占用的存储单元长度…...

FFMPEG自学一 音视频解封装

一、音视频包含哪些数据对于一个mp4文件我们可以通过音视频分析软件打开查看内部信息。从两图可以看出mp4文件一般包含 音频流 视频流等。对于上面的字段大致分析如下Format编码方式AVC现在大部分视频都是这种编码方式&#xff0c;即H264。CodecId编码器idavc1H264封装有2种格式…...

HoloLens 2 丨打包丨MRTK丨Unity丨新手教学

HoloLens 2打包流程制作前言开发工具介绍Visual Studio 2019MRTK插件或示例程序下载打包流程介绍Unity操作修改Visual Studio修改Hololens 修改Hololens 密码忘记总结前言 提示&#xff1a;今日功能介绍 使用 MRTK制作hololens 2的打包流程制作的新手教学。 开发工具介绍 这…...

AcWing语法基础课笔记 第四章 C++中的数组

第四章 C中的数组 程序 逻辑 数据&#xff0c;数组是存储数据的强而有力的手段。 ——闫学灿 一维数组 数组的定义 数组的定义方式和变量类似。 数组的初始化 在main函数内部&#xff0c;未初始化的数组中的元素是随机的。 访问数组元素 通过下标访问数…...

UTF小结

运行测试 编辑测试 运行模式&#xff1a;程序集Platform平台选择 Any Platforms编辑模式&#xff1a;程序集Platform平台选择 Editor 特性 Test、UnityTest特性&#xff1a;测试方法需要添加Test或UnityTest特性&#xff0c;测试方法是公有的SetUp、TearDown特性&#xff1a…...

(考研湖科大教书匠计算机网络)第四章网络层-第六节3:开放最短路径优先OSPF的基本工作原理

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;OSPF概述&#xff08;1&#xff09;概述&#xff08;2&#xff09;细节阐述A&#xff1a;链路状态和代价B&#xff1a;问候分组和邻居表C&#xff…...

批批发发网网站站建建设设/市场调研报告模板范文

何凯明&#xff08;Kaiming He&#xff09;是 ResNet 作者之一、Facebook AI 实验室研究科学家。最近&#xff0c;他的最新研究成果Mask R-CNN公布&#xff0c;这是一个概念上简单&#xff0c;灵活&#xff0c;而且通用的对象实例分割框架&#xff0c;在 COCO 的实例分割&#…...

北京网站设计公司哪儿济南兴田德润简介/南京seo排名扣费

2019独角兽企业重金招聘Python工程师标准>>> 今天查JS的一些框架&#xff0c;无意进入了一个网站http://www.w3cschool.cc/。浏览了一下之后&#xff0c;发现真是。。棒极了&#xff01;&#xff01;这个网站提供了多种语言和框架的入门教程&#xff0c;内容很丰富&…...

国外网站发展建设/优化师

/***************************************************************************** #define | enum(enumerator)* 声明&#xff1a;* 今天突然在Linux内核看到枚举和宏&#xff0c;感觉是一样的功能&#xff0c;于是找了一下他们* 之间差异。** …...

专做医药中间体的网站/青岛新闻最新今日头条

最近有客户想对数据库的用户权限做限制&#xff0c;需要用到copy的功能&#xff0c;不能确定其需要的权限&#xff0c;测试了一下&#xff1a; highgo# \c highgo testc highgo> select user;current_user --------------testc (1 row)highgo> copy testcopyto to /hgd…...

购物网站asp源码/营销策划与运营团队

如何区分垃圾 上面说到的“引用计数”法&#xff0c;通过统计控制生成对象和删除对象时的引用数来判断。垃圾回收程序收集计数为0的对象即可。但是这种方法无法解决循环引用。所以&#xff0c;后来实现的垃圾判断算法中&#xff0c;都是从程序运行的根节点出发&#xff0c;遍历…...

网站域名登录/百度网首页官网

Form.errors 访问errors属性以获取错误消息的字典&#xff1a; >>> f.errors >{sender&#xff1a;[输入有效的电子邮件地址。]&#xff0c;subject&#xff1a;[此字段为必填项.]。 在这个字典中&#xff0c;键是字段名称&#xff0c;值是表示错误消息的Unicod…...