网络原理——No.4 传输层_TCP协议中的延迟应答, 捎带应答, 面向字节流与TCP的异常处理

news2024/12/29 10:33:37
JavaEE传送门

JavaEE

网络原理——No.2 传输层_TCP的连接管理

网络原理——No.3 传输层_TCP的滑动窗口, 流量控制与拥塞控制


目录

  • 延迟应答
  • 捎带应答
  • 面向字节流
    • 粘包问题
  • TCP 中的异常处理(连接异常)
  • TCP 和 UDP 的应用场景


延迟应答

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

比如: 原缓冲区

1kb 数据来到了我们缓冲区里

实际 TCP 的延时时间, 不一定非是用时间来衡量, 也可能是用传输轮次来衡量

不同的系统里面, 延时的方式可能是不一样的


捎带应答

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

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

TCP 中, 只要把数据传过去, 对方收到之后, 就会立即由内核返回一个 ack 确认报文, 另外, 响应数据, 则是应用程序里负责传输.

由于这俩操作是不同的时机传输的, 因此不能把这两次传输合并起来, 但是上面有一个延时应答,

本来 ack 是立即就要返回的, 但是由于延时应答, ack 稍等一会返回

稍微一等, 正好, 业务上也要返回这个响应, 此时就可以把两个报文合二为一了.


面向字节流

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

我们来看这样一个例子: TCP (或者其他面向字节流的传输方式), 都是有一个接收缓冲区

小Gujiu 的应用程序, 就需要从接收缓冲区中,读取收到的数据.

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

就可能把 “不玩” 当做完整响应, 也可能把 “不玩还是” 当成完整响应.

# 注意 #

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

粘包问题

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

典型的办法, 有两种:

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

自定义应用层协议, 有几个典型的实现:

  1. xml; 分隔符就相当于 结束标签
  2. json; 分隔符就相当于 }
  3. protobuffer; 里面通过声明长度的方式来确定边界的.
  4. http; 分隔符和长度两个都会用到.

TCP 中的异常处理(连接异常)

  1. 程序崩溃了(进程异常退出)

    操作系统会回收进程的资源. 包括释放文件描述符表. 这样的释放操作, 就相当于调用了对应 socket.close

    执行 close 就会触发 fin 报文, 进一步开始四次挥手 (这种情况和普通的四次挥手其实没啥区别)

  2. 正常关机 (通过 开始菜单 这种方式关闭主机)

    关机的时候, 系统会先强制结束所有的用户进程. 和上述的程序崩溃类似.

    系统内核, 会进行文件描述符的释放操作, 进一步进行四次挥手.

  3. 主机掉电 (断电关机)

    • 掉电的是接收方, 发送方不知道. 继续发送数据, 此时发的数据没有 ack 了, 发送方触发超时重传.

      重传几次之后, 仍然无应答, 就会尝试重置连接, (复位报文段) , 也会失败, 只能放弃连接.

    • 掉电的是发送方, 此时接收方就等着. 接收方等待一阵后, 就会发送一个 “心跳包”. 心跳包是周期性触发的. 只是一个简单的不携带任何数据的包,存在的意义就是确认一下对方是否存在.

      如果对方不返回心跳包, 说明心跳遗失, 此时也就会放弃连接了.

  4. 网线断开

    情况通主机掉电, 只不过通信双方的主机都是好着的.

    客户端和服务器各自按照上述 (主机掉电) 的两种情况分别进行.


TCP 和 UDP 的应用场景

TCP 有可靠性需求的场景, 用到 TCP 非常广泛.

UDP 对于可靠性要求不高, 同时对于传输效率要求很高的情况.

比如: 机房内部的内网传输

  • 机房内布带宽比较充裕, 网络结构更简单, 不容易丢包.
  • 机房内布往往数据之间, 要传输的数据量是很大的, 传输效率要求比较高.

小知识:

传输层也不是只有这两个协议, 还有其他协议.

像 LOL, DOTA , 吃鸡 ,CSGO. 对于实时性要求非常高的游戏, 一般既需要保证可靠性, 有需要保证效率, TCPUDP 都难以胜任, KCP 协议可以胜任.


🌷(( ◞•̀д•́)◞⚔◟(•̀д•́◟ ))🌷

以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!
在这里插入图片描述
加粗样式

这里是Gujiu吖!!感谢你看到这里🌬
祝今天的你也
开心满怀,笑容常在。

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

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

相关文章

Appinventor——蓝牙app(蓝牙遥控器、串口助手、温湿度显示、切换界面蓝牙依旧保持连接)

App Inventor由谷歌实验室开发,移交麻省理工学院,是一款图形化编程环境,不需要复杂的变成语言,采用搭积木的方式编程,只需将组件拖入即可,简直就是不爱编程党的超级福音 本文搭建了一个蓝牙app&#xff0c…

【CSS】CSS基础认知【CSS基础知识详解】

🌸大家好,我是花无缺,一枚热爱生活的新时代青年,感谢你的阅读🥰~ 👨‍💻个人主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专…

女朋友说她累了之后依然在线,于是20行代码写了个小工具康康发生了什么

近发现女朋友一到晚上总是很忙的样子, 每晚匆匆忙忙道过晚安就说自己累了去睡觉。 是我哪里做的不对吗… 睡就睡了,可是,QQ头像却会偶尔亮起来, 我非常担心,是不是账号被盗了呢? 然后,就想帮…

Django全家桶

Django框架从入门到高级 (一)Django入门 Web应用 详细地址见:https://blog.csdn.net/DiligentGG/article/details/126606099?spm1001.2014.3001.5501 Web框架本质 web框架本质上可以看成是一个功能强大的socket服务端,用户的…

Android专有GitHook完结篇,发布到npm

系列文章目录 Android打造专有hook,让不规范的代码扼杀在萌芽之中 Android打造专有hook第二篇,走进规范第一步 Android打造专有Hook第三篇,实战全量代码规范检查 Android打造专有Hook第四篇,实战增量代码规范检查 Hello啊各位…

【NLP】词向量

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

阿里巴巴面试题- - -多线程并发篇(三十)

前言:七月末八月初的时候,秋招正式打响,公司会放出大量的全职和实习岗位。为了帮助秋招的小伙伴们,学长这里整理了一系列的秋招面试题给大家,所以小伙伴们不用太过焦虑,相信你们一定能超常发挥,收到心仪公司的Offer~~ 内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elast…

窥一斑而知全豹,从五大厂商看MCU国产化的机遇和挑战

👆👆👆 #电巢直播10月26日(周三)扫码参与 前言 近年来,MCU在各领域的应用大幅度增加。2021年全球MCU的总出货量仍旧增长12%,使去年全球MCU的交付量达到了309亿片的历史新高。根据IC Insights…

工业控制系统安全评估流程系统评定与分类

综述 随着计算机和网络技术的发展,特别是信息化与工业化## 综述 随着计算机和网络技术的发展,特别是信息化与工业化深度融合以及物联网的快速发展,工业控制 系统产品越来越多地采用通用协议、通用硬件和通用软件,网络威胁正在由传…

Linux文件属性与权限

目录 前言 文件权限类 文件属性 rwx 作用文件和目录的不同解释 chmod 改变权限 1)基本语法 2)经验技巧 3)案例实操 chown 改变所有者 1)基本语法 2)选项说明 3)实操案例 chgrp 改变所属组 …

康为世纪科创板上市破发:跌幅超10% 公司市值41亿

雷递网 雷建平 10月25日江苏康为世纪生物科技股份有限公司(简称:“康为世纪”,股票代码为“688426”)今日在科创板上市。康为世纪此次发行价为48.98元,发行2329万股,募资总额为11.4亿元。康为世纪开盘价为4…

【单片机毕业设计】【mcuclub-jj-048】基于单片机的水表的设计

最近设计了一个项目基于单片机的水表系统,与大家分享一下: 一、基本介绍 项目名:水表 项目编号:mcuclub-jj-048 单片机类型:STC89C52 具体功能: 1、通过继电器控制水泵,将水抽出经过流速传感器…

Redis实战篇一 (短信登录)

Redis企业实战(黑马点评)项目整体架构项目部署后端部署前端部署短信登陆基于Session实现登录集群的Session共享问题基于Redis实现共享session登录解决状态登录刷新的问题——登录拦截器的优化本期学习路线短信登陆: Redis的共享session应用 商户查询缓存…

jar包突然过大解决方法,解决ffmpeg剪辑视频导致jar过大

jar包突然过大解决方法 缘由: ​ 项目中要需要用到视频文件,为了方便用户使用,那么页面中就需要增加视频剪辑的相关功能,让用户上传视频后能够自定义的进行剪辑,对自己的视频做出相应的更改 结果: ​ 打jar…

Vue复刻华为官网 (二)

文章目录1 推荐信息1.1 思路1.2 代码1.3 知识补充1.4 效果图2 宣传海报2.1 思路2.2 代码2.3 效果图3 新闻与活动3.1 思路3.2 代码3.3 效果图1 推荐信息 1.1 思路 看了这个gif后,可以清楚的看到产生了三个动画效果:图片"拉近","…

js 实现页面隐藏、关闭、刷新给出对应的提示

我们在做项目的时候经常会遇到一些需求,比如在某些页面当点击浏览器刷新 或者关闭的时候会有对应的提示,是否离开或者重新加载此网站。比如csdn写文章的时候就有这个弹窗,这功能就是用onbeforeunload实现的。 注意:如果你加载下面…

学会用Linux用户管理命令

目录 useradd 添加新用户 1)基本语法 2)案例实操 passwd 设置用户密码 1)基本语法 id 查看用户是否存在 1)基本语法 2)案例实操 cat /etc/passwd 查看创建了哪些用户 1)案例实操 su 切换用户 1…

Linux基本工具(上)

目录 粘滞位:t yum yum install yum list ​编辑 yum list | grep 软件名 yum search 软件名 软件卸载:yum remove rz sz表示下载: Linux开发工具: vim编辑器: vim的几种模式: 粘滞位&#xff1a…

蛇形矩阵求解

题目: 题解思考: 这个题目我有两种解题方法: 1)利用数组,数组的下标。 2)利用等差数列的规律(这个可能比较难理解),行和列的递增规律。 注意输出格式的处理和多组输入…

三分钟带你手撕带头双向循环链表

数据结构——带头双向循环链表 🏖️专题:数据结构 🙈作者:暴躁小程序猿 ⛺简介:双非大二小菜鸟一枚,欢迎各位大佬指点~ 文章目录数据结构——带头双向循环链表前言一、什么是双向链表?二、带头…