网络原理 --- 传输层Ⅳ TCP协议中的延迟应答、捎带应答、面向字节流、TCP中的异常处理

news2024/11/20 15:31:17

文章目录

  • 网络原理
  • 传输层TCP协议
    • 7.延迟应答
    • 8.捎带应答
    • 9. 面向字节流
    • 10.TCP中的异常处理
  • 总结


网络原理

介绍TCP/IP协议中每一层里面的核心内容~

  • 应用层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

传输层TCP协议

7.延迟应答

提高传输效率的机制
又是基于流量控制,来引入的提高效率的机制

在这里插入图片描述
实际TCP的延时时间,不一定非是用时间来衡量,也可能是用传输轮次来衡量~
比如下图:
每收到两条数据,返回一次ack

在这里插入图片描述
是让窗口大点的一种方法~
在这里插入图片描述

8.捎带应答

基于延时应答的基础上,引入的

网络通信中,典型的通信模型,是一发一收

TCP中,只要把数据传过去,对方收到之后,就会立即由内核返回一个ACK确认报文
另外,响应数据(fin),则是应用程序里负责传输
ack返回的时机和fin(结束报文段)返回的时机是不同的,因此不能把这两次传输合并起来~
但是上面有个延时应答!

本来ACK是立即就要返回的,但是由于延时应答,稍等一会儿返回~
稍微等一等,正好业务上也要返回这个响应,此时就可以把两个报文合二为一了,可以提高效率~

这个合二为一的操作是内核处理的~ 应用程序是调用socketwrite方法把数据交给内核,内核进行封装,进行发送~

但是这种情况是偶发的~
主要还是看应用程序什么时候返回响应! 如果应用程序返回的太晚,此时就无法合并~

9. 面向字节流

在面向字节流中,存在一个典型的问题,叫做"粘包问题"

TCP(或者其他面向字节流的传输方式),都是有一个 接收缓冲区~

A的应用程序,就需要从接收缓冲区中,读取收到的数据~~
在这里插入图片描述

由于是面向字节流的,A是无法确定,从哪里到哪里,是一个完整的应用层数据报

A就可能把"吃"当作完整响应
也可能把"吃个"当成完整响应

粘包问题:
TCP自身对于应用层数据报是无法做区分的~
UDP面向数据报,是不存在这个问题的~
一个UDP数据报,就是对应一个应用层报文

🥩要想解决粘包问题,就要在应用层协议这里进行区分!
只要定义应用层数据协议的时候,明确包和包之间的"边界",就可以了!!

典型的办法,有两种:

  1. 通过分隔符 : 比如约定用 ; 作为包的结束标记
  2. 通过指定包的长度,比如在数据包开头位置声明长度~

10.TCP中的异常处理

连接异常了怎么办?

  1. 程序崩溃了
  2. 正常关机(通过 开始菜单 这种方式来关闭主机)
  3. 主机掉电
  4. 网线断开
  1. 程序崩溃
    进程异常退出
    操作系统会回收进程的资源,包括释放文件描述符表
    这样的释放操作,就相当于调用了socketclose
    执行close 就会触发 FIN 报文,进一步的开始四次挥手~~
    这种情况和普通的四次挥手其实没啥区别~
  2. 正常关机(通过 开始菜单 这种方式来关闭主机)
    关机的时候,系统会先强制结束所有的用户进程,和上次的那个进程崩溃类似
    系统内核,会进行文件描述符的释放操作,进一步的进行四次挥手
  3. 主机掉电(台式机被拔电源了)
    非常突然,猝不及防的~
  • 掉电的是接收方,发送方不知道对面挂了,继续发数据,此时发的数据,没有ack了,发送方就触发超时重传,重传几次之后,仍然无应答,发送方就尝试重置连接(复位报文段),也会失败,最后只能放弃连接
  • 掉电的是发送方,此时接收方就等着~
    接收方也不是干等,等了一阵之后,就会发送一个💗"心跳包"
    心跳包是周期性触发的,只是一个简单的不携带任何业务数据的包~
    存在的意义就是确认一下对方是否还在!
    如果对方不返回心跳包,说明心跳就遗失,对方挂了💫
    此时也就会放弃连接了~
  1. 网线断开
    情况同主机掉电~
    只不过通信双方的主机都没有问题,
    这两端各自按照上述讲的两种情况分别进行!

在这里插入图片描述
TCPUDP之间的对比:
各自的应用场景不同~

  • TCP在有可靠性要求的场景,用TCP非常广泛
  • UDP对于可靠性要求不高,同时对于传输效率很高的情况会使用UDP (机房内部的传输,不容易丢包,传输效率要求也比较高)

传输层也不是只有这两个协议,还有其他的协议~
像平时玩对实时性要求非常好的游戏,一般既需要保证可靠性,又需要保证效率,此时TCP和UDP都难以胜任了~
比如 KCP等…

在这里插入图片描述
💌常见面试题:
如何使用 UDP 来实现 可靠传输❔

考察的其实是TCP
说说TCP基于在应用层,来实现确认应答,超时重传,引入序列号等保证可靠传输的机制…


总结

在这里插入图片描述

你可以叫我哒哒呀
本篇到此结束
“莫愁千里路,自有到来风。”
我们顶峰相见!

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

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

相关文章

数据在内存中的存储

目录 数据在内存中的存储:: 整型及其浮点型存储方式: 1.数据类型介绍 2.整形在内存中的存储:原码 反码 补码 3.大小端字节序介绍及判断 4.浮点型在内存中的存储 5.两道经典指针选择题 C语言编程训练(牛客网) 1.喝汽水问题 2.字符串逆序 3.打…

Python编程运算符 ——算数运算符

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.运算符 1.在Python运算符中分为 2.算数运算符 3.比较重要的运算符 4…

网络原理——No.1 传输层_TCP的确认应答机制与超时重传

JavaEE传送门JavaEE JavaEE——网络原理_应用层 网络原理——传输层_UDP 目录传输层TCPTCP 的基本特性确认应答机制超时重传传输层 端到端之间的传输, 重点关注的是起点和终点 核心的协议有两个: UDP: 无连接, 不可靠传输,面向数据报, 全双工 TCP: 有链接, 可靠传输, 面向字…

黑猫带你学UFS协议第11篇:什么是逻辑单元(LU)与逻辑块(Sector)

本文依据UFS3.1 JEDEC协议及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,已加入原创维权,禁止私自转载。 文章所在专栏:《黑猫带你学:UFS协议详解》 1 LU简介 我们对与UFS、emmc一类存储芯片,最重要的功能是什么?无非就是存数据和取出数据,也…

神经网络的输入稀疏矩阵,神经网络中的矩阵运算

1、BP神经网络模型各个参数的选取问题 样本变量不需要那么多,因为神经网络的信息存储能力有限,过多的样本会造成一些有用的信息被丢弃。如果样本数量过多,应增加隐层节点数或隐层数目,才能增强学习能力。 一、隐层数 一般认为&am…

牛客前端刷题(九)—— 打包篇

还在担心面试不通过吗?给大家推荐一个超级好用的刷面试题神器:牛客网,里面涵盖了各个领域的面试题库,还有大厂真题哦! 赶快悄悄的努力起来吧,不苒在这里衷心祝愿各位大佬都能顺利通过面试。 面试专栏分享&a…

greenplum 源码解析 FTS辅助进程--ReadMe

简介 在greenplum数据库中master节点有一个专属进程Fault Tolerance Service (FTS: 容错服务),其主要功能是检测所有segment节点的健康信息,如果其检测到segment节点的primary出现异常[硬件故障/宕机],会在第一时间将其对应的mirror提升为新的…

MySql(50)MySQL日志

文章目录MySQL支持的日志日志类型日志的弊端慢查询日志(slow query log)通用查询日志查看当前状态启动日志永久启动临时启动查看日志删除\刷新日志错误日志(error log)删除\刷新日志二进制日志(bin log)查看默认情况日志参数设置查看日志使用日志恢复数据删除二进制日志PURGE M…

vue3 响应式对象的 api ,你全用过了吗?

文章目录Ⅰ. ref、reactive ( 递归监听 )Ⅱ. isRef、isReactive ( 判断 )Ⅲ. toRef 和 toRefs ( 解构 )Ⅳ. toRaw 、 markRaw ( 解除代理)Ⅴ. unref ( 拷贝 )Ⅵ. shallowRef 、shallowReactive( 非递归监听 )Ⅶ. triggerRef (强制更新&#x…

红黑树原理及旋转

红黑树,本质上来说就是一棵二叉查找树 但它在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡 保证了红黑树的查找、插入、删除的时间复杂度最坏为O(log n) 但它是如何保证一棵n个结点的红黑树的高度始终保持在h logn的呢?这就引出了红黑…

相似度_对抗学习:SimCSE: Simple Contrastive Learning of Sentence Embeddings

SimCSE: Simple Contrastive Learning of Sentence Embeddings 这篇论文,我觉得有意思。在创造对抗学习的正负例时,正例直接使用它本身。将同一个句子传递给预先训练好的编码器两次:通过应用两次dropout,我们可以得到两个不同的嵌…

云计算基础:云计算越来越广泛,我们应该如何去学习云计算

随着时代的发展,云计算越来越普及,越大众化,使用的人越来越多,我们应该如何去学习这门技术呢?这篇文章我们就来介绍如何学习我们的云计算。 学前介绍: 学前介绍 学习资料:HedEX Lite、产品文档、笔记、P…

非科班程序员被裁员后反而涨薪了200%,这两个月他都经历了哪些?

今年年初开始,裁员潮一浪接着一浪翻滚而来,让互联网人胆颤心惊,时刻担心下一波裁员是否就要降临到自己身上。 小帅(化名)是一个原本月薪8k,在小外包公司做政府项目的一名普通员工,前不久就被裁员…

数据仓库建模(四):维度表的设计

数据仓库建模(四):维度表的设计一、维度表的整体结构1.1 维度表的结构设计1.2 维度代理键1.3 自然键、超久键和超自然键1.4 下钻与上卷1.5 维度退化1.6 非规范化的扁平维度1.7 多层次维度1.8 维度属性的标识与状态信息1.9 维度表中的空值属性…

趣学算法(2)

14天阅读挑战赛 目录前言一 几类时间复杂度二 兔子数列1.问题分析2.方法13.方法24.方法3最后前言 这篇文章是《趣学算法》的读书笔记,也对数据结构与算法的初步介绍,阅读这篇文章,我会带你改进一个算法。 一 几类时间复杂度 常见的算法时间复…

Vue项目的记录(十三)

1.登录注册静态组件 assets这个文件夹放所有的组件公用的静态资源 在样式当中也可以使用符号,(src目录的别名),要注意的是在前面你加上~ 2.注册业务 这里的验证码,正常来说应该是要后台发送到用户手机上&#xff0c…

拓端tecdat|R语言辅导配对检验分析案例

全文链接:http://tecdat.cn/?p3424 原文出处:拓端数据部落公众号 什么是检验对? 检验对的形式 (x1,x2) 出现在两种情况中: 对同一实体执行两次测量。例如,一项评估新型胰岛素疗效…

C-文件操作实现数据持久化,帮你快速了解文件操作函数

目录 一.了解文件 二.文件的打开和关闭 三.顺序读写文件函数 fputc字符输入函数 fgetc字符输入函数 fputs文本行输出函数 fgets文本行输入函数 fprintf格式化输出函数 fscanf格式化输入函数 fwrite二进制输出函数 fread二进制输入函数 四. 解析上述的流 五.文件的随机…

Redis 主从安装-Centos

Redis 主从安装-Centos 由于机器有限,所以接下来的教程都是在一台虚拟机中进行部署安装. Redis主从工作原理 如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据。master…

计算机网络--传输层

这篇博客博主应该在前天就要完成的,但是博主忙乱了,又堕落几天,希望大家别像我一样最近学习三天打鱼,两个天晒网的。此后博主为了激励自己重头再来,就特意换了个发型,哈哈。回到正题,传输层也是…