【javaEE】网络原理(传输层Part3)

news2024/10/6 8:24:15

努力经营当下,直至未来明朗!

文章目录

  • 前言
  • TCP相关机制
    • 7. 延迟应答
    • 8. 捎带应答
  • TCP补充
    • 【面向字节流】
    • 【TCP中的异常处理】
    • 另(含面试题)
    • TCP小结
  • THINK


前言

一个人最大的痛苦来源于对自己无能的愤怒

Hi,这里还是不想秃头的宝贝儿!要努力不秃头啊!
学习
本文主要介绍的是TCP提高效率的机制:延迟应答、捎带应答,以及TCP面向字节流的特性以及TCP的异常处理。

【回顾TCP】
① 确认应答:保证可靠传输的最核心机制
② 超时重传
③ 连接管理:三次握手(投石问路、发送能力和接收能力、协商参数)、四次挥手
④ 滑动窗口
⑤ 流量控制(通过接收方的处理能力/内核剩余接收缓冲区 来对发送方作出限制)
⑥ 拥塞控制(中间节点)


TCP相关机制

7. 延迟应答

【延迟应答】:提高传输效率的机制

  1. 延迟应答 是基于流量控制来引入的提高效率的机制
  2. 延迟应答:返回ACK的时间稍微晚一点,不是立即返回,此时应用程序就会有时间来消费内核接收缓冲区中的数据,使得接下来ACK返回的窗口略大于立即返回的窗口。
  3. 实际TCP的延时时间不一定非用时间来衡量,也可能是传输轮次来衡量。

8. 捎带应答

  1. 捎带应答是基于延迟应答的基础上引入的
  2. 网络通信中,典型的通信模型是一发一收。
  3. TCP中,只要把数据传输过去,对方收到后就会立即由内核返回一个ACK确认报文;而响应数据则是由应用程序负责传输的。所以,返回ACK和响应这两个操作是不同的时机传输的,就不能够把两次传输合并起来;但是延迟应答就会让ACK延迟返回,会稍微等一会儿,而在等待之后业务如果刚好也要返回响应,此时就可以把ACK与响应两个报文合二为一了(是由内核处理的,应用程序处理的响应也要经过内核,即:应用程序是调用socket的write方法把数据交给内核,内核进行封装,然后发送)。
  4. 补充:SYN-同步报文段; FIN-结束报文段; ACK-确认报文段

TCP补充

【面向字节流】

  1. 面向字节流中存在一个典型问题:“粘包问题
  2. TCP或者其他面向字节流的传输方式都是有一个接收缓冲区的。由于是面向字节流的,所以接收方无法确定从哪开始从哪结束是一个完整的数据报。
  3. 要想解决粘包问题就在应用层协议这里进行区分:只要在定义应用层数据协议的时候,明确包和包之间的“边界”就可以了。
  4. 典型的办法有两种:
    ① 通过分隔符:比如约定使用;作为包的结束标记
    ② 通过指定包的长度:比如在数据报的开头位置声明长度
  5. 缓冲区的作用就是为了提高效率,减少访问I/O的开销
  6. UDP发送的时候也是有缓冲区的,但是不能够向TCP那样进行手动刷新(所以之前其实一直说的是UDP没有发送缓冲区,只有接收缓冲区);接收的时候是有缓冲区的。
  7. 具体代码中如何确定分隔符?(简单了解就行,没时间直接跳过)

在自定义应用层协议中有几个典型的实现:
①XML:分隔符就相当于结束标签
②JSON:分隔符就相当于}
③Protobuffer:里面通过申明长度的方式来确定边界
④HTTP:分隔符和长度两个都会用到

【TCP中的异常处理】

  1. TCP中的连接如果出现异常,怎么办?
    1)程序崩溃
    ① 相当于进程的异常退出。而程序退出(正常or异常)之后操作系统就会回收进程的资源,包括释放文件描述符表,这样的释放操作就相当于调用了对应socket的close;执行close就会触发FIN报文,进一步开始四次挥手。
    ② 所以该情况与普通的四次挥手没啥区别。

2)正常关机(通过开始菜单这种方式来关闭主机)
关机的时候系统会先强制结束所有的用户进程,和上述的进程崩溃类似,系统内核会进行文件描述符表的释放操作,从而进一步进行四次挥手。

3)断电关机(主机掉电)
非常突然,猝不及防。
① 掉电的是接收方,发送方并不知道对面已经挂了,会继续发送数据。
但是此时发送的数据就没有ACK返回,发送方就会触发超时重传;重传了几次之后仍然没有应答,此时就会尝试重置连接(通过复位报文段),但是也会失败;此时就会直接放弃连接
【复位报文段其实就是TCP报头中特殊标志位中的RST,为1就是有效的】
(补充:特殊标志位中:PSH:向对方所要数据,希望对方给个回应; URG:跟紧急指针相关)
② 掉电的是发送方,此时接收方就只能等着。
但是接收方也不是干等,等了一段时间之后就会发送一个“心跳包”,心跳包是周期性触发的,只是一个简单的不携带任何业务数据的包,存在的意义就是确认一下对方是否还在。
如果对方不返回心跳包,说明此时对方已经挂了。

4)网线断开
情况同主机掉电类似,只不过通信双方的主机都正常,这两端各自按照上述两种情况分别进行。

另(含面试题)

  1. 【TCP和UDP之间各自的应用场景对比】:
    ① TCP使用在有可靠性要求的场景中,使用TCP是非常广泛的。
    ② UDP用在对于可靠性要求不高,但是对于传输效率要求比较高的场景中。如机房内部的内网传输:【不容易丢包:带宽比较充裕,且网络结构相对简单】+【传输效率要求也比较高】

  2. 注:传输层并不是只有TCP和UDP两个协议的,还有其他协议:
    像平时玩的LOL等实时性要求较高的游戏,一般既需要保证可靠性又需要保证效率,所以此时就可以使用KCP(但是不详细介绍)
    3.【常见面试题】——经典
    如何使用UDP来实现可靠传输?
    (主要考查的其实是TCP)
    其实就是基于UDP在应用层来实现确认应答、超时重传、引入序列号、滑动窗口(会确认都收到才滑到下一个)等等。(自己补充完善)

TCP小结

  1. 为什么TCP这么复杂?因为要保证可靠性,同时又尽可能的提高性能。
    1)可靠性:

校验和 、序列号(按序到达)、 确认应答、 超时重传、 连接管理(三次握手、四次挥手)、 流量控制、 拥塞控制。

2)提高性能:

滑动窗口 、快速重传 、延迟应答 、捎带应答

3)其他:

定时器(超时重传定时器,保活定时器,TIME_WAIT定时器等)

  1. 基于TCP应用层协议

HTTP、 HTTPS、 SSH 、Telnet 、FTP、 SMTP
当然,也包括你自己写TCP程序时自定义的应用层协议


THINK

  1. TCP提高传输效率:延迟应答、捎带应答
  2. 面向字节流的“粘包问题”:分隔符、包长度
  3. TCP异常处理:程序崩溃、正常关机、主机掉电、网线断开
    4.== 面试题:如何使用UDP来实现可靠传输?==【确认应答、超时重传、滑动窗口、引入序列号等】(不能使用流量和拥塞控制,因为是UDP是直接进行all发送的)

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

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

相关文章

数据结构与算法基础-学习-01-线性表之顺序表-初始化、销毁、清理、获取长度、判断为空、获取元素等实现

一、测试环境 名称值cpu12th Gen Intel Core™ i7-12700H操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数2gcc 版本4.8.5 20150623 二、个人理解 数据结构分为逻辑结构和物理结构(也称为存储结构)。 1、逻辑结构 逻辑结构又可以分为以下…

python学习笔记(09)---(正则表达式)

第七章 内置容器&#xff08;五&#xff09; 8.正则表达式 &#xff08;1&#xff09;正则表达式用于描述字符串的复杂文本规则的代码&#xff0c;一般用于查询匹配 &#xff08;2&#xff09;常见元字符 <1> 作用&#xff1a;表示特殊含义&#xff0c;一般为范围性…

MySQL数据库期末考试试题及参考答案(09)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 一、 填空题 MySQL提供的____命令可以将数据库导出成SQL脚本&#xff0c;以实现数据的备份。mysqldump命令备份多个数据库时&#xff0c;数据库名称之间用____隔开。MySQL中…

Java-1123

Jedis 介绍&#xff1a;Jedis是一款java操作redis数据库的工具&#xff08;类似JDBC&#xff09; 使用步骤&#xff1a; 下载jedis的jar包使用 快速入门 // 1.获取连接 Jedis jedis new Jedis("localhost",6379); // 2.操作 jedis.set("name","z…

c++ 深度拷贝和浅拷贝

一、简介 由于20年转行之后一直用的是halcon 和c# &#xff0c;C就此搁浅&#xff0c;最近开始搞pcl慢慢的又重拾起来&#xff0c;对于深拷贝和浅拷贝我知道是什么原因造成的&#xff0c;也知道如何解决&#xff0c;但是突然被人问得时候又有点蒙蔽&#xff0c;因此做一个简单…

MCE 天然化合物相关库更新

随着现代化合物分离和鉴定技术的不断提高&#xff0c;以及人们对自然界生物多样性的持续研究&#xff0c;越来越多的天然产物被用于新药研究开发。据统计&#xff0c;截至 2013 年&#xff0c;有 547 个天然产物及天然产物衍生物被 FDA 批准上市&#xff0c;占所有 FDA 批准上市…

高通骁龙处理器天梯排行榜2022 骁龙处理器发布时间排行

骁龙处理器天梯图2022最新10月更新榜单 1、高通骁龙8 Gen1 2、高通骁龙8 Gen1 3、高通骁龙888 Plus 4、高通骁龙888 我用的手机就是活动时7.5折抢购的 点击开抢 http://shouji.adiannao.cn/7 1、工艺&#xff1a;搭载最新一代5nm制作工艺&#xff0c;为用户带来最强的处理器性能…

[附源码]Python计算机毕业设计大学生兼职系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

STM32中的独立看门狗和窗口看门狗

独立看门狗和窗口看门狗有什么区别&#xff1f;一、前言二、独立看门狗三、窗口看门狗四、结语一、前言 在早期的MCU中是没有看门狗这种东西的&#xff0c;所以产品就很容易出现死机&#xff0c;跑飞的情况。为了避免这种情况的出现&#xff0c;后期的MCU都集成了看门狗的功能…

CI/CD Jenkins容器化安装部署

环境准备 docker安装 jenkins镜像安装 CI/CD CI:持续集成 CD:连续交付 环境准备 下载前推荐先看下Jenkins硬件和软件要求部分 Jenkins官方文档 Jenkins下载 虚拟机 docker 对配置的要求 CentOS安装可跳转 VMware安装CentOS CentOS 7.8 // 查看CentOS版本命令 cat /etc…

牛客网语法篇练习循环控制(一)

1.2023年就要来到了&#xff0c;KiKi要对他的n位好朋友说n遍”Happy new year!Good luck!”的祝福语。 n int(input()) for i in range(n):print(Happy new year!Good luck!) 2.任意输入一个正整数N&#xff0c;统计1~N之间奇数的个数和偶数的个数&#xff0c;并输出。 num …

【网页设计】基于HTML在线商城购物项目设计与实现-----电脑商城6页带视频 带报告3000字

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 在线商城购物 | 水果商城 | 商城系统建设 | 多平台移动商城 | H5微商城购物商城项目 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#…

java开发者工具IDEA自定义设置主题/字体/字号大小

IDEA自定义设置主题 第一步&#xff1a;点击工具栏上的“File”选项。 第二步&#xff1a;选择“Settings…”选项。 第三步&#xff1a;点击“Appearance & Behavior > Appearance”选项。 第四步&#xff1a;点击右侧"Theme"下拉框&#xff0c;选择自己喜…

动态爬虫管理平台构建与实现_kaic

目 录 第1章 绪论 1.1背景与意义 1.2主题网络爬虫的国内外研究现状 1.2.1主题辨别算法及平台构建 1.2.2主题爬虫系统 1.3本文的研究内容 第二章 主题网络爬虫的体系结构 2.1组成模块 2.1.1基本组成 2.1.2基本流程 2.2主题页面的分布特性 2.2.1 Hub/Authority特性 2.2.2 Linkag…

一篇文章带你搞懂前端Cookie

文章目录一. 前言(一些废话)二. Cookie1. 为什么会有Cookie2. Cookie的特性3. 浏览器Cookie4. 跨站和跨域三. Cookie操作1. 获取Cookie2. 设置Cookie3. 修改Cookie4. 删除Cookie四. Cookie属性1. Cookie属性Domain2. Cookie属性path3. Cookie属性expires4. Cookie属性max-age5.…

大数据_数据中台_数据分层

目录 分层总览 ODS:操作数据层 DIM:维度数据层 DWD:明细数据层 DWS:汇总数据层 ADS:数据应用层 CDM:公共数据层 数据层级调用原则 分层总览 ODS:操作数据层 ODS(Operate Data Store&#xff09;,ODS层数据是数据仓库的第一层数据&#xff0c;是业务数据库的原始数据的复…

Oracle Primavera Unifier uDesigner 资产管理器(Asset Manager )

目录 前言 特点 优势 维护管理 独立或集成 事务管理 资产组合管理 投资组合管理能力 可持续性和能源管理 单一集成设施和资产生命周期管理 移动应用 前言 Oracle Primavera Unifier 为组织提供设施管理的行业最佳实践解决方案。从设计、构建、运行和维护&#xff0…

【深入理解Kotlin协程】Google的工程师们是这样理解Flow的?

Question&#xff1a;why there is a Flow in kotlin? 问这个问题就好比在问为什么那里会有一座山存在&#xff0c;嗯&#xff0c;这貌似是一个哲学问题。当然&#xff0c;对于kotlin中的Flow的理解可能不会上升到这么高的哲学层次&#xff0c;对于Flow相关的Api掌握并使用它…

JavaSE笔记——多态

文章目录前言一、向上转型回顾1.忘掉对象类型二、转机1.方法调用绑定2.产生正确的行为3.可扩展性三、构造器和多态1.构造器调用顺序2.构造器内部多态方法的行为四、协变返回类型总结前言 本文是学习Java编程思想记录的笔记&#xff0c;主要内容介绍在 Java 中多态的概念。 多…

Servlet API(HttpSerrvlet+HttpServletRequest+HttpServletResponse)

目录 &#x1f432; 1. HttpServlet &#x1f432; 2. HttpServletRequest HTTP请求 &#x1f984; 2.1 打印请求信息(创建 ShowRequest 类) &#x1f984; 2.2 获取 GET 请求中的参数(创建 GetParameter 类) &#x1f984; 2.3 获取 POST 请求中的参数(创建 PostParame…